Explorar o código

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

chenshilong %!s(int64=7) %!d(string=hai) anos
pai
achega
d1daee26c2

+ 8 - 8
config/gulpConfig.js

@@ -17,6 +17,7 @@ module.exports = {
     common_css:[
         'lib/bootstrap/css/bootstrap.min.css',
         'web/building_saas/css/main.css',
+        'web/building_saas/css/custom.css',
         'lib/font-awesome/font-awesome.min.css'
     ],
     login_jspaths:[
@@ -25,7 +26,7 @@ module.exports = {
     ],
     pm_css:[
         'lib/ztree/css/zTreeStyle.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css'
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     pm_jspaths:[
         'public/web/date_util.js',
@@ -38,8 +39,7 @@ module.exports = {
     main_css:[
         'lib/ztree/css/zTreeStyle.css',
         'lib/jquery-ui/jquery-ui.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css',
-        'lib/spreadjs/views/gc.spread.views.dataview.10.0.0.css',
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'lib/jquery-contextmenu/jquery.contextMenu.css'
     ],
     main_jspaths:[
@@ -139,7 +139,7 @@ module.exports = {
     compleGlj_css: [
         'lib/jquery-contextmenu/jquery.contextMenu.css',
         'lib/ztree/css/zTreeStyle.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css'
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleGlj_jspaths: [
         'public/web/common_ajax.js',
@@ -160,7 +160,7 @@ module.exports = {
     ],
     compleRation_ration_css: [
         'lib/jquery-contextmenu/jquery.contextMenu.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css'
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleRation_ration_jspaths:[
         'web/building_saas/complementary_ration_lib/js/global.js',
@@ -187,7 +187,7 @@ module.exports = {
         'web/building_saas/complementary_ration_lib/js/ration_installation.js.js'
     ],
     compleRation_glj_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css'
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleRation_glj_jspaths: [
         'web/building_saas/complementary_ration_lib/js/global.js',
@@ -201,7 +201,7 @@ module.exports = {
         'public/web/storageUtil.js'
     ],
     compleRation_coe_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css'
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleRation_coe_jspaths: [
         'web/building_saas/complementary_ration_lib/js/global.js',
@@ -215,7 +215,7 @@ module.exports = {
         'web/building_saas/complementary_ration_lib/js/coe.js'
     ],
     compleRation_inst_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css',
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'lib/jquery-contextmenu/jquery.contextMenu.css'
     ],
     compleRation_inst_jspaths: [

+ 863 - 0
lib/spreadjs/sheets/css/gc.spread.sheets.sc.css

@@ -0,0 +1,863 @@
+/*-----common css start-----*/
+.gc-theme-version {
+    position: absolute;
+    z-index: 2013;
+}
+.gc-grayArea {
+    background-color: #f1f1f1;
+}
+.gc-corner-hover {
+    background-color: #f1f1f1;
+}
+.gc-corner-selected {
+    background-color: #f1f1f1;
+}
+.gc-corner-normal {
+    background-color: #f1f1f1;
+}
+.gc-corner-triangle-normal {
+    background-color: #c6c6c6;
+    background-image: -webkit-linear-gradient(top, #c6c6c6, #c6c6c6); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #c6c6c6, #c6c6c6); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #c6c6c6, #c6c6c6); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #c6c6c6, #c6c6c6); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #c6c6c6, #c6c6c6); /* Standard syntax; must be last */
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+}
+.gc-corner-triangle-hover {
+    background-color: #9e9e9e;
+    background-image: -webkit-linear-gradient(top, #9e9e9e, #9e9e9e); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #9e9e9e, #9e9e9e); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #9e9e9e, #9e9e9e); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #9e9e9e, #9e9e9e); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #9e9e9e, #9e9e9e); /* Standard syntax; must be last */
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+}
+.gc-corner-triangle-selected {
+    background-color: #217346;
+    background-image: -webkit-linear-gradient(top, #217346, #217346); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #217346, #217346); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #217346, #217346); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #217346, #217346); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #2577c2, #2577c2); /* Standard syntax; must be last */ /*左上三角色*/
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+}
+.gc-columnHeader-normal {
+    color: #262626;
+    background-image: none;
+    background-color: #f1f1f1;
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-bottom-color: #ababab !important;
+}
+/*列头悬停*/
+.gc-columnHeader-hover {
+    color: #262626;
+    background-image: none;
+    background-color: #ababab;
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-bottom-color: #ababab !important;
+}
+/*选中列*/
+.gc-columnHeader-selected {
+    color: #2577c2;
+    background-image: none;
+    background-color: #ababab;
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-bottom-color: #ababab !important;
+}
+/*焦点列头字体*/
+.gc-columnHeader-highlight {
+    color: #2577c2;
+    background-image: none;
+    background-color: #d4d4d4;
+    border-style:solid;
+    border-left-color: #dbdbdb !important;
+    border-right-color: #b7b7b7 !important;
+    border-bottom-color: #ababab !important;
+}
+.gc-rowHeader-normal {
+    color: #262626;
+    background-color: #f1f1f1;
+    background-image: none;
+    border-style:solid;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+    border-right-color: #ababab !important;
+}
+/*行头悬停色*/
+.gc-rowHeader-hover {
+    color: #262626;
+    background-color: #ababab;
+    background-image: none;
+    border-style:solid;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+    border-right-color: #ababab !important;
+}
+/*选中行*/
+.gc-rowHeader-selected {
+    color: #2577c2;
+    background-color: #ababab;
+    background-image: none;
+    border-style:solid;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+    border-right-color: #ababab !important;
+}
+.gc-rowHeader-highlight {
+    color: #2577c2;
+    background-color: #d4d4d4;
+    background-image: none;
+    border-style:solid;
+    border-top-color: #dbdbdb !important;
+    border-bottom-color: #b7b7b7 !important;
+    border-right-color: #ababab !important;
+}
+.gc-horizontal-scrollbar {
+    box-sizing:content-box;
+    background: #f1f1f1;
+    border-top: 1px solid #ababab;
+    height: 18px;
+    padding: 4px 0px 5px 0px;
+    margin: 0;
+}
+.gc-vertical-scrollbar {
+    box-sizing:content-box;
+    background: #f1f1f1;
+    border-left: 1px solid #ababab;
+    width: 18px;
+    padding: 0px 5px 0px 4px;
+    margin: 0;
+}
+.gc-footer-corner {
+    background-color: #f1f1f1;
+}
+/*选择框*/
+.gc-selection {
+    background-color: rgba(20, 20, 20, 0.2);
+    border-color: #ababab;
+    color: rgba(240,240,240,0.7);
+}
+.gc-drag-indicator {
+    border-color: #217346;
+}
+.gc-gridlineColor {
+    border-color: #d4d4d4;
+}
+.gc-group {
+    background-color:#f1f1f1;
+    color: #ababab;
+}
+.gc-group-box {
+    background-color:#f1f1f1;
+    color: #606060;
+    border-color: #828790;
+}
+
+.gc-tabStripNewTab-highlight {
+    border-color: #5e5e5e;
+}
+.gc-tabStripNewTab-hover {
+    border-color: #439467;
+}
+.gc-tabStripBackground {
+    background-image: -webkit-linear-gradient(top, #f1f1f1, #f1f1f1); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #f1f1f1, #f1f1f1); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #f1f1f1, #f1f1f1); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #f1f1f1, #f1f1f1); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #f1f1f1, #f1f1f1); /* Standard syntax; must be last */
+    background-color: #f1f1f1;
+    border-color: #ababab;
+}
+.gc-tabStripResizeBarInner {
+    color: #5e5e5e;
+}
+.gc-navMoreButton-highlight {
+    border-color: #5e5e5e;
+}
+.gc-navMoreButton-hover {
+    border-color: #439467;
+}
+.gc-navButton-hover {
+    border-color: #439467;
+}
+.gc-navButton-highlight {
+    border-color: #005a2b;
+}
+.gc-navButton-normal {
+    border-color: #ababab;
+}
+.gc-tab-normal {
+    color: #444444;
+    background-image: none;
+    background-color: transparent;
+    border-style: solid;
+    border-left-color: #ababab;
+    border-bottom-color: #217346;
+}
+.gc-tab-hover {
+    color: #252627;
+    background-image: none;
+    background-color: transparent;
+    border-style: solid;
+    border-left-color: #ababab;
+    border-bottom-color: #217346;
+}
+.gc-tab-active {
+    color: #217346;
+    background-image: none;
+    background-color: white;
+    border-style: solid;
+    border-left-color: #ababab;
+    border-bottom-color: #217346;
+}
+
+.gc-rowHeaderFill {
+    background-color: #e4ecf7;
+}
+.gc-colHeaderFill {
+    background-image: -webkit-linear-gradient(top, #F6FAFB 12.5%, #D2DBEB); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #F6FAFB 12.5%, #D2DBEB); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #F6FAFB 12.5%, #D2DBEB); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #F6FAFB 12.5%, #D2DBEB); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #F6FAFB 12.5%, #D2DBEB); /* Standard syntax; must be last */
+    background-color: #D2DBEB;
+}
+
+.gc-gradientButton {
+    background-color: #DDDDDD; /* fallback color if gradients are not supported */
+    background-image: -webkit-linear-gradient(top, #F6FAFB, #D2DBEB); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #F6FAFB, #D2DBEB); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #F6FAFB, #D2DBEB); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #F6FAFB, #D2DBEB); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #F6FAFB, #D2DBEB); /* Standard syntax; must be last */
+}
+
+.gc-sheetTabEditor::-ms-clear {
+    display: none;
+}
+
+
+.gc-layout-table {
+    font-size:12px;
+    width:100%;
+    height:100%;
+    font-family:Lucida Grande, Lucida Sans, Arial, sans-serif;
+}
+
+.gc-layout-table-first-column {
+    width:21px;
+    border-right:1px solid #CCC;
+    text-align:right;
+    padding-top:7px;
+}
+
+.gc-layout-table-last-column {
+    width:18px;
+}
+
+.gc-filter-sort-desc-container {
+    border-bottom:1px solid #CCC;
+}
+
+.gc-filter-item-wrapper {
+}
+
+
+.gc-filter-dialog-style {
+    background:#fcfdfd;
+    font-family:Lucida Grande, Lucida Sans, Arial, sans-serif;
+    font-size:12px;
+    border:1px solid #a7abb0;
+}
+
+.gc-search-outer-div {
+    border: none;
+    margin:4px 0px 0px 4px;
+    background-color: white;
+    background-image: none;
+    color:#1e395b;
+    font-weight:normal;
+}
+
+div.gc-search-outer-div input::-ms-clear{
+    display:none;
+}
+
+#gc-filterSearch {
+    width:165px;
+    height:21px;
+    border:1px solid #ababab;
+    margin-left:7px;
+    margin-top:4px;
+    margin-bottom: 0px;
+    padding: 0;
+    font-size: 1em;
+    background-color:white;
+    color:black;
+    float:none;
+}
+#gc-filterSearch:hover,
+#gc-filterSearch:active{
+    background-color:white;
+}
+
+.gc-check-uncheck-all {
+    float:left;
+    width:16px;
+    height:16px;
+    display:inline-block;
+}
+.gc-filter-check-outerDiv .gc-check-image,
+.gc-fill-type-item .gc-check-image {
+    background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAGxJREFUOE+ljsENgDAMAzsaQ3QMxP4/wAhXwTKhEY9TlZOdtK1b/4WVFaysYGUFKxMWdY/hA5T3+x0+BjJYJmOJBoF+87UMYhAwzFBaBnFwYZ1j/kKFltIycHLqMrHyhEvSMrCygpUVrJyntwPdKU02VXQw7gAAAABJRU5ErkJggg==);
+}
+.gc-filter-check-outerDiv .gc-uncheck-image,
+.gc-fill-type-item .gc-uncheck-image {
+    background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAIJJREFUOE+lkssNgDAMQzsCw3UMxEocGKWDQSLVUj5GJeLwhPyI0x7a9qP/gsoKVFagskIUm3ALp3GKZvX63/q0QIcAlqAMXMcFIQ6z7DouTGLptawkMVmeDJi8BFsGQ0jzUcRyvEla4oLAhvVrveu4IOAdxJOwZPkOylBZgcrv9PYAV9tkcyJlS4sAAAAASUVORK5CYII=);
+}
+.gc-check-image,
+.gc-uncheck-image {
+    background-position:center;
+}
+
+.gc-filter-check-outerDiv {
+    height:18px;
+    margin-top:4px;
+}
+
+a.gc-filter-check-style {
+    color:#1e395b;
+    text-shadow:none;
+}
+
+a.gc-filter-check {
+    text-decoration: none;
+}
+
+a.gc-filter-check:hover {
+    text-decoration:underline;
+}
+#gc-sortASC:hover,
+#gc-sortASC:active {
+    border-color: #e3e3e3;
+    outline: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+.gc-filter-sort {
+    border:1px solid transparent;
+    font-weight:normal;
+    color:#222222;
+}
+
+.gc-filter-hover {
+    border-radius: 0px;
+    outline:none;
+}
+
+.gc-filter-item {
+    position: relative;
+    cursor: default;
+    font-weight:normal;
+    border-style: solid;
+    border-color: transparent;
+}
+
+.gc-filter-item-container {
+    border:1px solid #a7abb0;
+    border-radius:3px;
+    margin:4px 0px 4px 4px;
+    overflow:hidden;
+}
+
+.gc-filter-item-input {
+    float: left;
+    clear: left;
+}
+
+.gc-filter-item-text {
+    font-family: Lucida Grande,Lucida Sans,Arial,sans-serif;
+    font-size: 12px;
+    margin: 2px;
+    white-space:nowrap;
+    word-wrap:normal;
+    float: left;
+    clear: right;
+}
+
+.gc-filter-button {
+    width:90px;
+    height:27px;
+    margin:2px 1px 5px;
+}
+
+.gc-filter-button-disable {
+    opacity:.35;
+    background-image:none;
+}
+
+#gc-filterOK {
+    margin-left:13px;
+    margin-bottom:5px;
+    float:left;
+}
+#gc-filterCancel {
+    margin-bottom:5px;
+    float:left;
+}
+
+.gc-filter-button-default {
+    border:1px solid #acacac;
+    border-radius: 0;
+    background-image: -webkit-linear-gradient(top, #f0f0f0, #e5e5e5); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #f0f0f0, #e5e5e5); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #f0f0f0, #e5e5e5); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #f0f0f0, #e5e5e5); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #f0f0f0, #e5e5e5); /* Standard syntax; must be last */
+    font-weight:normal;
+    color: black;
+}
+
+.gc-filter-button-hover {
+    border:1px solid #7eb4ea;
+    border-radius: 0;
+    background-color: #d3f0e0;
+    background-image: -webkit-linear-gradient(top, #ecf4fc, #dcecfc); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #ecf4fc, #dcecfc); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #ecf4fc, #dcecfc); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #ecf4fc, #dcecfc); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #ecf4fc, #dcecfc); /* Standard syntax; must be last */
+    color: black;
+    font-weight:normal;
+    text-shadow:none;
+    cursor:pointer;
+}
+
+.gc-filter-button-active {
+    border:1px solid #569de5;
+    border-radius: 0;
+    background-color: #ffe475;
+    background-image: -webkit-linear-gradient(top, #daecfc, #c4e0fc); /* For Chrome and Safari */
+    background-image:    -moz-linear-gradient(top, #daecfc, #c4e0fc); /* For old Fx (3.6 to 15) */
+    background-image:     -ms-linear-gradient(top, #daecfc, #c4e0fc); /* For pre-releases of IE 10*/
+    background-image:      -o-linear-gradient(top, #daecfc, #c4e0fc); /* For old Opera (11.1 to 12.0) */
+    background-image:         linear-gradient(to bottom, #daecfc, #c4e0fc); /* Standard syntax; must be last */
+    font-weight:normal;
+    color: black;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+.gc-filter-item-hover {
+    border:1px solid transparent;
+    background-color: #d3f0e0;
+    background-image: none;
+    color:#1d5987;
+    font-weight:normal;
+    text-shadow:none;
+}
+
+.gc-smartMenu-item-default {
+    border:1px solid transparent;
+    background-color: white;
+    background-image: none;
+    font-weight:normal;
+    color:#1e395b;
+    border-radius:0;
+}
+
+.gc-smartMenu-item-hover {
+    border:1px solid #86bfa0;
+    background-color: #d3f0e0;
+    background-image: none;
+    color:#1d5987;
+    font-weight:normal;
+    text-shadow:none;
+}
+
+.gc-smart-tag-default {
+    border:1px solid #ababab;
+    background: white;
+    color:#1e395b;
+    font-weight:normal;
+    border-radius:0;
+}
+
+.gc-smart-tag-hover {
+    border:1px solid #9fd5b7;
+    background-color: white;
+    background-image: none;
+    color:#1d5987;
+    font-weight:normal;
+    text-shadow:none;
+}
+
+.gc-smart-tag-active {
+    border:1px solid #9fd5b7;
+    background-color:#9fd5b7;
+    background-image: none;
+    font-weight:normal;
+    color:#262626;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+
+.gc-menu-item-input {
+    width:16px;
+    height:16px;
+    margin:1px;
+    float:left;
+    display:inline-block;
+}
+.gc-menu-item-text {
+    font-size:12px;
+    font-weight:normal;
+    display:inline-block;
+    float:left;
+    padding-top:2px;
+    font-family:Arial;
+}
+.gc-fill-menu-container {
+    box-shadow:rgba(0,0,0,0.4) 1px 2px 5px;
+    cursor:default;
+}
+
+.gc-toolstrip-default {
+    background: white;
+    border:1px solid #c6c6c6;
+}
+.gc-toolstrip-button-style:active,
+.gc-toolstrip-button-style {
+    color: black;
+    background:white;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+.gc-tab-tip-span{
+    background:#D6E6F9;
+    color:black;
+    border:1px solid #D6E6F9;
+    font-weight:normal;
+}
+
+.gc-spread-toolTip {
+    border: 1px solid #bebebe;
+    border-radius: 0px;
+    background-color: white;    background-image: none;
+    font-weight: normal;
+    color: #217346;
+}
+
+.gc-no-user-select {
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -o-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+/*-----common css end-----*/
+
+/*-----formula textbox start-----*/
+/* function autocomplete */
+.gcsj-func-ac-popup {
+    margin: 0;
+    padding: 0;
+    background: #fff;
+    border: 1px solid rgba(0,0,0,0.2);
+    font-family: arial,sans-serif;
+    font-size: 12px;
+    line-height: 22px;
+    position: absolute;
+    width: 300px;
+    z-index: 2001;
+
+    -webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+    -moz-box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
+}
+
+.gcsj-func-ac-row {
+    margin: 0;
+    cursor: default;
+    padding: 2px 10px;
+    color: #666666;
+}
+
+.gcsj-func-ac-row-name {
+    color: #222;
+    font-size: 13px;
+    font-family: inconsolata,monospace,arial,sans,sans-serif;
+    margin: -2px 0;
+}
+
+.gcsj-func-ac-row-description {
+    color: #666;
+    display: none;
+    font-size: 11px;
+    margin: -2px 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.gcsj-ac-row-active {
+    background-color: #f5f5f5;
+    color: #000;
+    border-top: 1px solid #ebebeb;
+    border-bottom: 1px solid #ebebeb;
+    padding: 1px 10px
+}
+
+.gcsj-ac-row-active .gcsj-func-ac-row-description {
+    display:block;
+}
+
+/*  function help */
+.gcsj-func-help-popup {
+    background-color:#fff;
+    border: 1px solid rgba(0,0,0,0.2);
+    color: #222;
+    font-size: 11px;
+    word-wrap: break-word;
+    position: absolute;
+    width: 320px;
+    z-index: 2001;
+
+    -webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);
+    -moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);
+    box-shadow:0 2px 4px rgba(0,0,0,0.2);
+}
+
+.gcsj-func-help-title {
+    background-color: #f5f5f5;
+    color: #222;
+    font-size: 13px;
+    padding: 1px 0 1px 10px;
+}
+
+.gcsj-func-help-body {
+    border-top: 1px solid #ebebeb;
+    font-family: arial, sans-serif;
+    overflow: hidden;
+}
+
+.gcsj-func-help-content {
+    padding-bottom: 2px;
+}
+
+.gcsj-func-help-section {
+    padding: 5px 10px;
+}
+
+.gcsj-func-help-section-title {
+    font-size: 11px;
+    color: #666;
+}
+
+.gcsj-func-help-section-content {
+    font-size: 11px;
+}
+
+.gcsj-func-help-formula {
+    font-family: inconsolata,monospace,arial,sans,sans-serif;
+    padding: 1px 0;
+}
+
+.gcsj-func-help-formula-name {
+}
+
+.gcsj-func-help-paramter {
+    padding-left:1px;
+}
+
+.gcsj-func-help-paramter-paren {
+}
+
+.gcsj-func-help-paramter-active {
+    background-color: #feb;
+}
+
+/* color text */
+.gcsj-func-color-content {
+    white-space: pre-wrap;
+}
+/*-----formula textbox end-----*/
+
+/*-----floatingobject start-----*/
+.gc-floatingobject-selected{
+    border:1px solid #939393;
+}
+
+.gc-floatingobject-unselected{
+    background-color: transparent;
+    border:1px solid transparent;
+}
+
+.gc-floatingobject-container{
+    position: absolute;
+    overflow: hidden;
+    box-sizing:content-box;
+}
+
+.gc-floatingobject-background-cover{
+    -webkit-background-size: cover; /* For WebKit*/
+    -moz-background-size: cover;    /* Mozilla*/
+    -o-background-size: cover;      /* Opera*/
+    background-size: cover;         /* Generic*/
+}
+
+.gc-floatingobject-moving-container{
+    position: absolute;
+    overflow: hidden;
+}
+
+.gc-floatingobject-moving-div{
+    position: absolute;
+    border:1px solid black;
+}
+.gc-floatingobject-resize-indicator {
+    box-sizing:content-box;
+}
+
+.gc-floatingobject-resize-indicator-select{
+    background-color:white;
+    border-radius:2px;
+    -moz-border-radius:1px;
+    border:1px solid #939393;
+    z-index:100;
+}
+
+.gc-floatingobject-resize-indicator-unSelect{
+    display: none;
+}
+
+.gc-floatingobject-absolute{
+    position: absolute;
+}
+
+.gc-floatingobject-content-container {
+    box-sizing:content-box;
+}
+/*-----floatingobject end-----*/
+
+/*-----scrollbar start-----*/
+/*scrollbar*/
+.gc-scroll-container{
+    background-color: #d9d9d9;
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+.gc-scroll-corner-all {
+    border-radius: 2px;
+}
+.gc-scroll-arrow{
+    background-color: white;
+    border-style:solid;
+    border-color: #ababab;
+    background-image: none;
+    border-radius: 0;
+}
+
+.gc-scroll-arrow .gc-scroll-arrowUp{
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAClJREFUKFNjGEmgvLz8P5RJHABpgGGoEH6ArIEojdg0wDBUyShAAAYGAHSXJkH1wN/VAAAAAElFTkSuQmCC);
+
+}
+.gc-scroll-arrowUp {
+    background-position: center;
+}
+
+.gc-scroll-arrow .gc-scroll-arrowDown {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAACRJREFUKFNjGAVYQHl5+X9cGKoEOyBZAwyQrAEGSNYwpAEDAwBvhSZBmzrLGgAAAABJRU5ErkJggg==);
+}
+.gc-scroll-arrowDown {
+    background-position: center;
+}
+
+.gc-scroll-arrow .gc-scroll-arrowLeft{
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAADBJREFUKFNjGMKgvLz8P5RJHABpIEkTTAPRmpA1EK0JBMjSBAJkaQIBsjQNNGBgAABe7iZBxoz5vwAAAABJRU5ErkJggg==);
+}
+.gc-scroll-arrowLeft {
+    background-position: center;
+}
+
+.gc-scroll-arrow .gc-scroll-arrowRight{
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAC5JREFUKFNjGIKgvLz8P5RJPABpIlkjTBNJGpE1Ea2RZA0gQLIGECBZw2ACDAwAhS4mQZAuqGcAAAAASUVORK5CYII=);
+}
+.gc-scroll-arrowRight {
+    background-position: center;
+}
+
+.gc-scroll-bar .gc-scrollbar-vertical {
+    background-image: none;
+    background-repeat: no-repeat;
+}
+.gc-scrollbar-vertical {
+    background-position: center;
+}
+
+.gc-scroll-bar .gc-scrollbar-horizontal {
+    text-indent: 0;
+    background-image: none;
+    background-repeat: no-repeat;
+}
+.gc-scrollbar-horizontal {
+    background-position: center;
+}
+
+.gc-scrollbar-wrapper {
+    background-color: transparent;
+}
+
+.gc-scroll-bar {
+    border-style:solid;
+    border-color:#ababab;
+    background:  white;
+    -moz-border-radius: 0px;
+    -webkit-border-radius: 0px;
+    border-radius: 0px;
+}
+.gc-scroll-arrow-hover {
+    border-style:solid;
+    border-color:#777777;
+    background: white;
+}
+.gc-scrollbar-stateHover {
+    border-style:solid;
+    border-color:#777777;
+    background: white;
+}
+
+.gc-scroll-arrow:active,
+.gc-scroll-bar:active,
+.gc-scrollbar-stateActive {
+    border-style:solid;
+    border-color:#777777;
+    background: #e1e1e1;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+/*-----scrollbar end-----*/
+

+ 11 - 10
modules/pm/models/project_model.js

@@ -49,15 +49,16 @@ ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, cal
                 'compilation': compilation,
                 'deleteInfo': null
             }, {'userID': userId, 'compilation': compilation, 'deleteInfo.deleted': {'$in': [null, false]}}]
-        }, '-_id');
-        for (let i = 0, len = projects.length; i < len; i++) {
-            let proj = projects[i];
-            let engineeringCost = await BillsModel.find({
-                projectID: proj.ID,
-                'flags.flag': fixedFlag.ENGINEERINGCOST,
-                'fees.totalFee': {$exists: true}
-            });
-            proj._doc.engineeringCost = engineeringCost.length > 0 ? engineeringCost[0].fees[0].totalFee : 0;
+        }, '-_id -property');
+        let projIDs= [];
+        let projIndex = {};
+        for(let proj of projects){
+            projIDs.push(proj.ID);
+            projIndex[proj.ID] = proj;
+        }
+        let bills = await BillsModel.find({projectID: {$in : projIDs}, 'flags.flag': fixedFlag.ENGINEERINGCOST, 'fees.totalFee': {$exists: true}}, 'projectID fees');
+        for(let bill of bills){
+            projIndex[bill.projectID]._doc.engineeringCost = bill.fees[0].totalFee;
         }
         callback(0, '', projects);
     }
@@ -394,7 +395,7 @@ ProjectsDAO.prototype.getProject = function (key, callback) {
 };
 
 ProjectsDAO.prototype.getProjectsByIds = async function (userId, compilationId, ids) {
-    return await Projects.find({userID: userId, compilation: compilationId, ID: {$in: ids}});
+    return await Projects.find({userID: userId, compilation: compilationId, ID: {$in: ids}}, '-_id -property');
 };
 
 ProjectsDAO.prototype.getGCFiles = async function (fileType, userID) {

+ 3 - 1
public/web/tree_sheet/tree_sheet_helper.js

@@ -310,8 +310,10 @@ var TREE_SHEET_HELPER = {
             if (!node || node.children.length === 0) { return; }
             let centerX = hitinfo.cellRect.x + offset + node.depth() * indent + node.depth() * levelIndent + indent / 2;
             let centerY = (hitinfo.cellRect.y + offset + (hitinfo.cellRect.y + offset + hitinfo.cellRect.height)) / 2;
-
+            console.log(hitinfo.x);
             if (hitinfo.x > centerX - halfBoxLength && hitinfo.x < centerX + halfBoxLength && hitinfo.y > centerY - halfBoxLength && hitinfo.y < centerY + halfBoxLength) {
+                console.log(centerX - halfBoxLength);
+                console.log(centerX + halfBoxLength);
                 node.setExpanded(!node.expanded);
                 TREE_SHEET_HELPER.massOperationSheet(hitinfo.sheet, function () {
                     let iCount = node.posterityCount(), i, child;

+ 1 - 1
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -13,7 +13,7 @@
     <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
     <!--zTree-->
   	<link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <!--endinject-->
     <style type="text/css">
         .modal-lg{max-width: 1000px}

+ 1 - 1
web/building_saas/complementary_ration_lib/html/anzhuang.html

@@ -8,7 +8,7 @@
     <title>定额库编辑器</title>
     <!--inject:css-->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css">

+ 1 - 1
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -11,7 +11,7 @@
     <link rel="stylesheet" href="/web/building_saas/css/main.css" type="text/css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css" type="text/css">
     <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <!--endinject-->
 </head>
 <body>

+ 1 - 1
web/building_saas/complementary_ration_lib/html/fuzhu.html

@@ -10,7 +10,7 @@
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <!--endinject-->
 </head>
 

+ 1 - 1
web/building_saas/complementary_ration_lib/html/gongliao.html

@@ -10,7 +10,7 @@
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <!--zTree-->
   	<link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
     <!--endinject-->

+ 31 - 0
web/building_saas/css/custom.css

@@ -0,0 +1,31 @@
+
+.text-green{
+    color: #172a30
+}
+label.title{
+    display: inline-block;
+    width: 100px;
+}
+.modal-feeRate {max-width: 550px}
+
+
+div.resize{
+    height: 4px;
+    background: #f7f7f9;
+    width: 100%;
+    cursor: s-resize;
+}
+/*.zlfb-check{
+    margin-left: 20px;
+}*/
+legend.legend{
+    display:block;
+    width:auto;
+    font-size:0.9rem;
+    top:-15px;
+    background: white;
+}
+
+.toolsbar_feeRate {
+    border-bottom: 1px solid #ccc
+}

+ 6 - 0
web/building_saas/css/main.css

@@ -353,3 +353,9 @@ body {
 .custom-file-input:lang(zh) ~ .custom-file-label::after {
     content: "浏览";
 }
+div.resize{
+    height: 4px;
+    background: #f7f7f9;
+    width: 100%;
+    cursor: s-resize;
+}

+ 2 - 1
web/building_saas/main/html/main.html

@@ -9,12 +9,13 @@
     <!-- inject:css -->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/web/building_saas/css/custom.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <!--zTree-->
     <link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
     <!--SpreadJs-->
     <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <link rel="stylesheet" href="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.css">
     <!-- jquery.contextmenu -->
     <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">

+ 15 - 10
web/building_saas/main/js/models/project_glj.js

@@ -589,15 +589,17 @@ ProjectGLJ.prototype.setAdjustPrice = function (glj) {
     }
 }
 
-ProjectGLJ.prototype.getAdjustPrice = function (glj) {
+ProjectGLJ.prototype.getAdjustPrice = function (glj,isRadio) {
     GLJTypeConst = this.datas.constData.GLJTypeConst !== undefined ? JSON.parse(this.datas.constData.GLJTypeConst) : GLJTypeConst;
     let decimal = getDecimal("glj.unitPrice");
     let quantity_decimal = getDecimal("glj.quantity");
+    let process_decimal = getDecimal("process");
+    let  tem_decimal = isRadio==true?process_decimal:decimal;
     if (glj.unit_price.type == GLJTypeConst.LABOUR || glj.unit_price.type == GLJTypeConst.MACHINE_LABOUR) {//人工、机上人工,调整价根据定额价*调整系数计算得出。
         let labour = projectObj.project.calcProgram.compiledLabourCoes[glj.adjCoe];
         //let labour=1;
         let coe = labour && labour.coe ? labour.coe : 1;
-        return scMathUtil.roundTo(parseFloat(coe * scMathUtil.roundForObj(glj.unit_price.base_price,decimal)), -decimal);
+        return scMathUtil.roundTo(parseFloat(coe * scMathUtil.roundForObj(glj.unit_price.base_price,tem_decimal)), -tem_decimal);
     } else if (notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班,调整价根据组成物计算得出。
         let p =0;
         for(let ratio of glj.ratio_data){
@@ -610,8 +612,8 @@ ProjectGLJ.prototype.getAdjustPrice = function (glj) {
            })
             if(tem){
                 let priceData={};
-                gljOprObj.setGLJPrice(priceData,tem);
-                p+=scMathUtil.roundForObj(priceData.adjustPrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),decimal);
+                gljOprObj.setGLJPrice(priceData,tem,true);
+                p+=scMathUtil.roundForObj(priceData.adjustPrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),process_decimal);
             }
         }
         return scMathUtil.roundForObj(p,decimal);
@@ -620,9 +622,10 @@ ProjectGLJ.prototype.getAdjustPrice = function (glj) {
     }
 };
 
-ProjectGLJ.prototype.getBasePrice = function(glj){
+ProjectGLJ.prototype.getBasePrice = function(glj,isRadio){
     let price_decimal = getDecimal("glj.unitPrice");
     let quantity_decimal = getDecimal("glj.quantity");
+    let process_decimal = getDecimal("process");
     if (notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
         let p =0;
         for(let ratio of glj.ratio_data){
@@ -635,13 +638,14 @@ ProjectGLJ.prototype.getBasePrice = function(glj){
             });
             if(tem){
                 let priceData={};
-                gljOprObj.setGLJPrice(priceData,tem);
-                p+=scMathUtil.roundForObj(priceData.basePrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),price_decimal);
+                gljOprObj.setGLJPrice(priceData,tem,true);
+                p+=scMathUtil.roundForObj(priceData.basePrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),process_decimal);
             }
         }
         return scMathUtil.roundForObj(p,price_decimal);
     }else {
-        return scMathUtil.roundForObj(glj.unit_price.base_price,price_decimal);
+        let tem_decimal = isRadio==true?process_decimal:price_decimal;
+        return scMathUtil.roundForObj(glj.unit_price.base_price,tem_decimal);
     }
 };
 
@@ -649,7 +653,7 @@ ProjectGLJ.prototype.getBasePrice = function(glj){
 ProjectGLJ.prototype.getMarketPrice = function (glj,isRadio) {
     let price_decimal = getDecimal("glj.unitPrice");
     let quantity_decimal = getDecimal("glj.quantity");
-    let process_decimal = isRadio==true?price_decimal:getDecimal("process");
+    let process_decimal = getDecimal("process");
     if (notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
         let p =0;
         for(let ratio of glj.ratio_data){
@@ -668,7 +672,8 @@ ProjectGLJ.prototype.getMarketPrice = function (glj,isRadio) {
         }
         return scMathUtil.roundForObj(p,price_decimal);
     }else {
-        return scMathUtil.roundForObj(glj.unit_price.market_price,price_decimal);
+        let tem_decimal = isRadio==true?process_decimal:price_decimal;
+        return scMathUtil.roundForObj(glj.unit_price.market_price,tem_decimal);
     }
 }
 

+ 1 - 1
web/building_saas/main/js/views/main_tree_col.js

@@ -42,7 +42,7 @@ let MainTreeCol = {
             }
         },
         code: function (node) {
-            if(node.sourceType === projectObj.project.Ration.getSourceType() && isDef(node.data.code) && isDef(node.data.from) && node.data.from === 'cpt'){
+            if(node.sourceType === projectObj.project.Ration.getSourceType() && node.data.type === rationType.ration && isDef(node.data.code) && isDef(node.data.from) && node.data.from === 'cpt'){
                 return '补' +  node.data.code.replace(new RegExp('补'), '');
             }
             else {

+ 10 - 2
web/building_saas/main/js/views/project_property_indicativeInfo.js

@@ -114,8 +114,8 @@ let indicativeInfoObj = {
         let dxfy = Object.create(null);
         let engCostFee = this.fee(this.getFixedBill(fixedFlag.ENGINEERINGCOST), this.feeType.common);
         let commonFee = this.fee(node, this.feeType.common);
-        let buildingArea = projFeatureView.getFeature('projFeature', 'buildingArea');
-        let areaNum = !buildingArea.value || buildingArea.value == '' || isNaN(buildingArea.value) ? 0 : buildingArea.value;
+        let buildingArea = projFeatureView.getFeature('buildingArea');
+        let areaNum = !buildingArea || buildingArea == '' || isNaN(buildingArea) ? 0 : buildingArea;
         dxfy.name = node.data.name;
         dxfy.price = commonFee ? parseFloat(commonFee).toDecimal(decimalObj.bills.totalPrice) : 0;
         dxfy.rate = engCostFee == 0 || this.isEngieeringCost(node) ? '' : parseFloat(dxfy.price/engCostFee*100).toDecimal(2);
@@ -163,6 +163,14 @@ let indicativeInfoObj = {
 };
 
 $(document).ready(function () {
+    $('#tab_poj-settings-indicativeInfo').on('shown.bs.tab', function(){
+        if(indicativeInfoObj.workBook){
+            indicativeInfoObj.workBook.destroy();
+            indicativeInfoObj.workBook = null;
+        }
+        indicativeInfoObj.buildSheet();
+        indicativeInfoObj.showData(indicativeInfoObj.getIndicativeInfo());
+    });
     $('#poj-set').on('shown.bs.modal', function () {
         indicativeInfoObj.buildSheet();
         indicativeInfoObj.showData(indicativeInfoObj.getIndicativeInfo());

+ 4 - 8
web/building_saas/main/js/views/project_property_projFeature.js

@@ -188,14 +188,10 @@ let projFeatureView = {
         }
     },
 
-    getFeature: function (featureType, eigenKey) {
-        for(let feature of this.orgDatas){
-            if(feature.key === featureType){
-                for(let eigen of feature.items){
-                    if(eigen.key === eigenKey){
-                        return eigen;
-                    }
-                }
+    getFeature: function (featureKey) {
+        for(let feature of this.datas){
+            if(feature.key === featureKey){
+                return feature.value;
             }
         }
         return null;

+ 4 - 0
web/building_saas/main/js/views/std_bills_lib.js

@@ -165,6 +165,10 @@ var billsLibObj = {
         CommonAjax.post('/stdBillsEditor/getBills', {userId: userID, billsLibId: stdBillsLibID}, function (datas) {
             stdBills = datas;
             stdBillsTree.loadDatas(stdBills);
+            //第一层默认收起
+            for(let root of stdBillsTree.roots){
+                root.setExpanded(false);
+            }
             stdBillsTreeController.showTreeData();
             billsLibObj.setTagForHint(datas);
             showBillsRela(stdBillsTree.firstNode());

+ 6 - 0
web/building_saas/main/js/views/std_ration_lib.js

@@ -50,6 +50,10 @@ var rationLibObj = {
             that.tree = rationChapterTree;
             var rationChapterTreeController = TREE_SHEET_CONTROLLER.createNew(rationChapterTree, that.rationChapterSpread.getActiveSheet(), that.rationChapterTreeSetting);
             rationChapterTree.loadDatas(datas);
+            //第一层默认收起
+            for(let root of that.tree.roots){
+                root.setExpanded(false);
+            }
             rationChapterTreeController.showTreeData();
 
             rationChapterTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
@@ -71,6 +75,8 @@ var rationLibObj = {
     },
     //双击隐藏显示
     onChapterSpreadCellDoubleClick: function (sender, args) {
+        console.log(args);
+        console.log(sender);
         let me = rationLibObj;
         let node = me.tree.items[args.row];
         if (!node || node.children.length === 0)

+ 2 - 2
web/building_saas/pm/html/project-management-Recycle.html

@@ -36,7 +36,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">除 <i class="fa fa-cubes"></i> 建设项目</h5>
+                <h5 class="modal-title">彻底删除 <i class="fa fa-cubes"></i> 建设项目</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -87,7 +87,7 @@
                 </button>
             </div>
             <div class="modal-body modal-fixed-height">
-                <p>勾选需要恢复的文件,点“确定”按钮,确认从回收站中恢复。</p>
+                <p>勾选需要彻底删除的文件,点“确定”按钮,确认从回收站中删除。</p>
                 <table class="table table-hover table-sm mb-5">
                     <thead><tr><th>名称</th><th>删除时间</th><th>勾选</th></tr></thead>
                     <tbody>

+ 1 - 1
web/building_saas/pm/html/project-management.html

@@ -10,7 +10,7 @@
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css">
     <!--zTree-->
     <link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
     <!-- endinject -->

+ 39 - 176
web/building_saas/pm/js/pm_gc.js

@@ -5,160 +5,6 @@ let gcTree = null;
 let decDate = null;//恢复后的名称后缀(时间+恢复)
 //恢复路径t = tender, e = engineering, p = project
 const recPath = {t: 'T', t_e: 'T_E', t_e_p: 'T_E_P', e: 'E', e_p: 'E_P', p: 'P'};
-let gcTreeSetting = {
-    tree: {
-        id: 'ID',
-        pid: 'ParentID',
-        nid: 'NextSiblingID',
-        btnColumn: 1,
-        nullId: -1
-    },
-    columns: [
-        {
-            head: '',
-            data: '',
-            width: '40',
-            event: {}
-        },
-        {
-            head: '工程列表',
-            data: 'name',
-            width: '50%',
-            event: {
-                getText: function (html, node, text) {
-                    let className = '';
-                    switch (node.data.projType) {
-                        case projectType.folder:
-                            className = "fa fa-folder-open-o";
-                            break;
-                        case projectType.tender:
-                            className = "fa fa-sticky-note-o";
-                            break;
-                        case projectType.project:
-                            className = "fa fa-cubes";
-                            break;
-                        case projectType.engineering:
-                            className = "fa fa-cube";
-                            break;
-                    }
-                    let icon = '<i class ="tree-icon '+ className +'"></i>';
-                    html.push(icon, '&nbsp;', text);
-                },
-                getIcon: function (html, node) {
-                    if (node.data.projType === projectType.tender) {
-                        html.push('<span class="poj-icon">└</span>');
-                    }
-                }
-            }
-        },
-        {
-            head: '删除日期',
-            data: 'deleteDateTime',
-            width: '10%',
-            event: {
-                getText: function (html, node, text) {
-                    if (node.data.projType === projectType.tender) {
-                        if(deleted(node)){
-                            let localDateTime = new Date(node.data.deleteInfo.deleteDateTime).toLocaleDateString();
-                            html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
-                        }
-                        else{
-                            html.push('');
-                        }
-                    }
-                }
-            }
-        },
-        {
-            head: '创建日期',
-            data: 'createDateTime',
-            width: '10%',
-            event: {
-                getText: function (html, node, text) {
-                    if (node.data.projType === projectType.tender) {
-                        if(deleted(node)){
-                            let localDateTime = new Date(text).toLocaleDateString();
-                            html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
-                        }
-                        else{
-                            html.push('');
-                        }
-                    }
-                }
-            }
-        },
-        {
-            head: '恢复',
-            data: 'recovery',
-            width: '10%',
-            event: {
-                getText: function (html, node, text) {
-                    if(node.data.projType === projectType.project && deleted(node)){
-                        html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
-                    }
-                    else if(node.data.projType === projectType.engineering && deleted(node)){
-                        html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
-                    }
-                    else if(node.data.projType === projectType.tender && deleted(node)){
-                        html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
-                    }
-                    else {
-                        html.push('');
-                    }
-                },
-                tdBindEvent: function(td, node){
-                    $('a:eq(0)' ,td).bind('click', function () {
-                        let tenderNodes = m_getTenders(node);
-                        $('#rePoj .modal-header').empty();
-                        $('p', '#rePoj .modal-body').remove();
-                        $('#rePoj .modal-header').html(v_getTitle(node));
-                        $('#rePoj .modal-body').html(v_getMoBody(node, tenderNodes));
-                    });
-                }
-            }
-        },
-        {
-            head: '单价文件',
-            data: 'unitPriceFiles',
-            width: '10%',
-            event: {
-                getText: function (html, node, text) {
-                    if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){
-                        html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#reFile">恢复</a>');
-                    }
-                },
-                tdBindEvent: function (td, node) {
-                    $('a:eq(0)', td).bind('click', function () {
-                        let unitPriceFiles = node.data.unitPriceFiles;
-                        $('#reFile h5').text('恢复单价文件');
-                        $('tr', '#reFile tbody').remove();
-                        $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles));
-                    });
-                }
-            }
-        },
-        {
-            head: '费率文件',
-            data: 'feeRateFiles',
-            width: '10%',
-            event: {
-                getText: function (html, node, text) {
-                    if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
-                        html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#reFile">恢复</a>');
-                    }
-                },
-                tdBindEvent: function (td, node) {
-                    $('a:eq(0)', td).bind('click', function () {
-                        let feeRateFiles = node.data.feeRateFiles;
-                       $('#reFile h5').text('恢复费率文件');
-                        $('tr', '#reFile tbody').remove();
-                        $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles));
-                    });
-                }
-            }
-        }
-    ]
-};
 const gcTreeObj = {
     tree: null,
     workBook: null,
@@ -181,10 +27,10 @@ const gcTreeObj = {
             {name: '费率文件', dataCode: 'feeRateFile', width: 100, vAlign: 'center', hAlign: 'left'},
             {name: '费率文件-清除', dataCode: 'feeRateFile_delete', width: 100, vAlign: 'center', hAlign: 'left'}
         ],
-        //选中行颜
+        //恢复和彻底删除字体
         style: {
-            defalutBackColor: 'White',
-            selectedColor: '#BBFFFF'
+            recForeColor: '#007bff',
+            delForeColor: '#dc3545'
         },
         options: {
             tabStripVisible:  false,
@@ -273,11 +119,11 @@ const gcTreeObj = {
         me.tree.selected = node;
         //恢复底色
         if(oldSel){
-            me.setSelStyle(oldSel, me.setting.style.defalutBackColor);
+            me.setSelStyle(oldSel, projTreeObj.setting.style.defalutBackColor);
         }
         //设置选中行底色
         if(newSel){
-            me.setSelStyle(newSel, me.setting.style.selectedColor);
+            me.setSelStyle(newSel, projTreeObj.setting.style.selectedColor);
         }
         $(".tools-btn > a").not(".disabled").addClass("disabled");
         $("#add-engineering-btn").addClass("disabled");
@@ -344,7 +190,7 @@ const gcTreeObj = {
     deleteUnitPrc: function (node) {
         let unitPriceFiles = node.data.unitPriceFiles;
         let tenders = m_getTenders(node);
-        $('#delFile h5').text('除单价文件');
+        $('#delFile h5').text('彻底删除单价文件');
         $('tr', '#delFile tbody').remove();
         $('#delFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles, tenders, 'delete'));
         $('#delFile').modal('show');
@@ -352,7 +198,7 @@ const gcTreeObj = {
     deleteFeeRate: function (node) {
         let feeRateFiles = node.data.feeRateFiles;
         let tenders = m_getTenders(node);
-        $('#delFile h5').text('除费率文件');
+        $('#delFile h5').text('彻底删除费率文件');
         $('tr', '#delFile tbody').remove();
         $('#delFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles, tenders, 'delete'));
         $('#delFile').modal('show');
@@ -488,16 +334,19 @@ const gcTreeObj = {
             GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
         };
         TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
-            return {
-                x: x,
-                y: y,
-                row: context.row,
-                col: context.col,
-                cellStyle: cellStyle,
-                cellRect: cellRect,
-                sheetArea: context.sheetArea,
-                isReservedLocation: true
-            };
+            let info = {x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: context.sheetArea};
+            let node = tree.items[info.row];
+            let offset = -1;
+            let centerX = info.cellRect.x + offset + node.depth() * indent + node.depth() * levelIndent + indent / 2;
+            let text = context.sheet.getText(info.row, info.col);
+            let value = context.sheet.getValue(info.row, info.col);
+            let acStyle = context.sheet.getActualStyle(info.row, info.col),
+                zoom = context.sheet.zoom();
+            let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: context.sheet, row: info.row, col: info.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport});
+            if(info.x > centerX + halfBoxLength && info.x < centerX + halfBoxLength + imgWidth + indent/2+3 + textLength){
+                info.isReservedLocation = true;
+            }
+            return info;
         };
         TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
             let offset = -1;
@@ -616,7 +465,7 @@ const gcTreeObj = {
         }
         else if(dataCode === 'delete'){
             if(deleted(node)){
-                value = '除';
+                value = '彻底删除';
             }
         }
         else if(dataCode === 'unitPriceFile'){
@@ -626,7 +475,7 @@ const gcTreeObj = {
         }
         else if(dataCode === 'unitPriceFile_delete'){
             if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){
-                value = '除';
+                value = '彻底删除';
             }
         }
         else if(dataCode === 'feeRateFile'){
@@ -636,7 +485,7 @@ const gcTreeObj = {
         }
         else if(dataCode === 'feeRateFile_delete'){
             if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
-                value = '除';
+                value = '彻底删除';
             }
         }
         else {
@@ -659,6 +508,16 @@ const gcTreeObj = {
                         sheet.getCell(i, j).cellType(me.getBaseCell());
                     }
                     let dataCode = headers[j].dataCode;
+                    if(dataCode === 'recovery' || dataCode === 'unitPriceFile' || dataCode === 'feeRateFile'){
+                        let style = new GC.Spread.Sheets.Style();
+                        style.foreColor = me.setting.style.recForeColor;
+                        sheet.setStyle(-1, j, style);
+                    }
+                    else if(dataCode === 'delete' || dataCode === 'unitPriceFile_delete' || dataCode === 'feeRateFile_delete'){
+                        let style = new GC.Spread.Sheets.Style();
+                        style.foreColor = me.setting.style.delForeColor;
+                        sheet.setStyle(-1, j, style);
+                    }
                     me.setCellValue({row: i, col: j}, nodes[i]);
                 }
             }
@@ -701,6 +560,10 @@ $(document).ready(function () {
         $('.slide-sidebar').removeClass('open');
         $('.slide-sidebar').css('width', '0');
         gc_init();
+        if(projTreeObj.workBook){
+            projTreeObj.workBook.destroy();
+            projTreeObj.workBook = null;
+        }
         projTreeObj.tree = null;
     });
     e_recFiles($('#reFileBtn'));
@@ -728,7 +591,7 @@ function gc_init(){
 //项目恢复模态框标题
 function v_getTitle(type, node){
     let html = '';
-    html += type === 'recovery' ? '<h5 class="modal-title">恢复 ' : '<h5 class="modal-title">除 ';
+    html += type === 'recovery' ? '<h5 class="modal-title">恢复 ' : '<h5 class="modal-title">彻底删除 ';
     if(node.data.projType === projectType.project){
         html += '<i class="fa fa-cubes"></i>建设项目</h5>';
     }
@@ -1150,7 +1013,7 @@ function e_delFiles(btn){
         }
         //此操作造成了建设项目的文件为空,则清除建设项目
         if(fileWillEmpty(selected, delIds, type)){
-            delDatas.push({updateType: 'Project', ID: selected.data.ID});
+            //delDatas.push({updateType: 'Project', ID: selected.data.ID});
         }
         if(delDatas.length > 0){
             //backend

+ 7 - 2
web/building_saas/pm/js/pm_newMain.js

@@ -107,6 +107,7 @@ const projTreeObj = {
                 allowResizeRows: true,
                 allowResizeColumns: true
             };
+            sheet.setColumnCount(headers.length);
             sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader);
             for(let i = 0, len = headers.length; i < len; i++){
                 sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);
@@ -552,7 +553,7 @@ const projTreeObj = {
                 //建设项目,侧滑汇总
                 if(node.data.projType === projectType.project && withingClickArea()){
                     setDataToSideBar();
-                    $(".slide-sidebar").animate({width:"800"}).addClass("open");
+                    $(".slide-sidebar").animate({width:"450"}).addClass("open");
                     $('body').unbind('click');
                     setTimeout(function () {
                         $("body").bind('click', function (event) {
@@ -743,7 +744,7 @@ const projTreeObj = {
         let node = this.tree.addNodeData(data, parent, next);
         this.addRow(node);
         let newSel = this.workBook.getSheet(0).getSelections()[0];
-        this.initSelection(newSel, {row:preNode.serialNo(),rowCount:1},this.workBook.getActiveSheet());//这里不能直接用this.preSelection,因为如果插入的记录在preSelection的前面时,之前old选中行已经变了,改不了old行的颜色
+        this.initSelection(newSel,  preNode ? {row:preNode.serialNo(),rowCount:1} : null,this.workBook.getActiveSheet());//这里不能直接用this.preSelection,因为如果插入的记录在preSelection的前面时,之前old选中行已经变了,改不了old行的颜色
         return node;
     },
     addRow: function (node) {
@@ -821,6 +822,10 @@ const projTreeObj = {
 $(document).ready(function() {
     init();
     $('#tab_pm_all').on('show.bs.tab', function () {
+        if(gcTreeObj.workBook){
+            gcTreeObj.workBook.destroy();
+            gcTreeObj.workBook = null;
+        }
         gcTreeObj.tree = null;
         init();
     });