Browse Source

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

Chenshilong 8 years ago
parent
commit
38162bb4a7

+ 1 - 1
config/config.js

@@ -19,7 +19,7 @@ module.exports = {
             },
             },
             "server": {
             "server": {
                  "socketOptions": {
                  "socketOptions": {
-                 "connectTimeoutMS": 10000
+                 "connectTimeoutMS": 20000
                 }
                 }
             }
             }
         }
         }

+ 7 - 10
config/db/db_manager.js

@@ -49,16 +49,13 @@ module.exports = {
     connect:function () {
     connect:function () {
         var config = require("../config.js");
         var config = require("../config.js");
         var dbURL = 'mongodb://' + config.current.server + ":" + config.current.port + '/scConstruct';
         var dbURL = 'mongodb://' + config.current.server + ":" + config.current.port + '/scConstruct';
-
-        var db = mg.connect(dbURL, config.options, function(err) {
-            if (err) {
-                console.log('Could not connect to MongoDB!');
-                console.log(err);
-            }
-        });
-        mg.connection.on('error', function(err) {
-            console.log('MongoDB connection error:', err);
+        mg.connect(dbURL, config.options);
+        var db = mg.connection;
+        db.on("error",function (err) {
+            console.log('Could not connect to MongoDB!');
+            console.log(err);
             process.exit(-1);
             process.exit(-1);
-        });
+        })
+        return mg;
     }
     }
 };
 };

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

@@ -62,7 +62,7 @@
                     <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench"></i> 工具</a>
                     <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench"></i> 工具</a>
                     <div class="dropdown-menu">
                     <div class="dropdown-menu">
                         <a class="dropdown-item" href="#">定额库编辑器</a>
                         <a class="dropdown-item" href="#">定额库编辑器</a>
-                        <a class="dropdown-item" href="#">工料机库编辑器</a>
+                        <a class="dropdown-item" href="/complementaryGlj">工料机库编辑器</a>
                     </div>
                     </div>
                 </li>
                 </li>
                 <li class="nav-item dropdown">
                 <li class="nav-item dropdown">
@@ -157,7 +157,7 @@
                                   </li>
                                   </li>
                               </ul>
                               </ul>
                               <!-- Tab panes -->
                               <!-- Tab panes -->
-                              <div class="tab-content">
+                              <div class="tab-content" id="tabCon">
                                   <div class="tab-pane active" id="gl" role="tabpanel">
                                   <div class="tab-pane active" id="gl" role="tabpanel">
                                       <div class="main-data-bottom ovf-hidden" id="subSpread" style="display: none">
                                       <div class="main-data-bottom ovf-hidden" id="subSpread" style="display: none">
                                       </div>
                                       </div>

+ 6 - 0
web/building_saas/main/js/models/bills.js

@@ -149,6 +149,12 @@ var Bills = {
                     data.data.code = stdBillsData.code;
                     data.data.code = stdBillsData.code;
                     data.data.name = stdBillsData.name;
                     data.data.name = stdBillsData.name;
                     data.data.unit = stdBillsData.unit;
                     data.data.unit = stdBillsData.unit;
+                    //zhong 特征及内容
+                    data.data.jobContent = stdBillsData.jobContent;
+                    data.data.itemCharacter = stdBillsData.itemCharacter;
+                    data.data.jobContentText = stdBillsData.jobContentText;
+                    data.data.itemCharacterText = stdBillsData.itemCharacterText;
+                    //zhong
                     newData = data.data;
                     newData = data.data;
                 }
                 }
             });
             });

+ 81 - 30
web/building_saas/main/js/views/character_content_view.js

@@ -29,8 +29,13 @@ let contentOprObj = {
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
     },
     },
     //将从清单库中添加的清单,把标准清单的工作内容转化成清单的工作内容
     //将从清单库中添加的清单,把标准清单的工作内容转化成清单的工作内容
-    buildJobContent: function () {
-
+    buildJobContent: function (jobs) {
+        let jobContent = [];
+        for(let i = 0, len = jobs.length; i < len; i++){
+            let newJob = {serialNo: i + 1, content: jobs[i].content, isChecked: true};//从清单库添加过来的默认输出
+            jobContent.push(newJob);
+        }
+        return jobContent;
     },
     },
     //显示在jobSpread的数据
     //显示在jobSpread的数据
     showContentData: function (sheet, setting, datas) {
     showContentData: function (sheet, setting, datas) {
@@ -196,15 +201,10 @@ let contentOprObj = {
             selector: '#jobSpread',
             selector: '#jobSpread',
             build: function($triggerElement, e){
             build: function($triggerElement, e){
                 //控制允许右键菜单在哪个位置出现
                 //控制允许右键菜单在哪个位置出现
-                let clientX = e.originalEvent.clientX,
-                 clientY = e.originalEvent.clientY;
-                 let sheet = me.workBook.getSheet(0);
-                 let offset = $("#jobSpread").offset(),
-                 x = clientX - offset.left,
-                 y = clientY - offset.top;
-                 let target = sheet.hitTest(x, y);
+                let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
+                let sheet = me.workBook.getSheet(0);
                 if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                 if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
-                    let insertDis = false, delDis = false, upDis = false, downDis = false;
+                    let insertDis = pageCCOprObj.isBillsType() ? false : true, delDis = false, upDis = false, downDis = false;
                     if(typeof target.row !== 'undefined'){
                     if(typeof target.row !== 'undefined'){
                         //控制按钮是否可用
                         //控制按钮是否可用
                         sheet.setActiveCell(target.row, target.col);
                         sheet.setActiveCell(target.row, target.col);
@@ -214,11 +214,18 @@ let contentOprObj = {
                             upDis = true;
                             upDis = true;
                         }
                         }
                         else{//有数据
                         else{//有数据
-                            if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                            if(typeof target.col === 'undefined'){//定位不在表格内
                                 downDis = true;
                                 downDis = true;
-                            }
-                            if(target.row === 0){//定位在第一行,不可上移
                                 upDis = true;
                                 upDis = true;
+                                delDis = true;
+                            }
+                            else{//定位在表格内
+                                if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                                    downDis = true;
+                                }
+                                if(target.row === 0){//定位在第一行,不可上移
+                                    upDis = true;
+                                }
                             }
                             }
                         }
                         }
                     }
                     }
@@ -230,7 +237,7 @@ let contentOprObj = {
                     return {
                     return {
                         callback: function(){},
                         callback: function(){},
                         items: {
                         items: {
-                            "insert": {name: "插入", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
+                            "insert": {name: "添加", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
                                 //插入空行
                                 //插入空行
                                 me.addRow(sheet);
                                 me.addRow(sheet);
                             }},
                             }},
@@ -283,6 +290,20 @@ let characterOprObj = {
         sheet.bind(EVENTS.ClipboardPasting, me.onClipboardPasting);
         sheet.bind(EVENTS.ClipboardPasting, me.onClipboardPasting);
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
     },
     },
+    //将从清单库中添加的清单,把标准清单的项目特征转化成清单的项目特征
+    buildItemCharactet: function (items) {//从清单库过来的默认不输出
+        let itemCharacter = [];
+        for(let i = 0, len = items.length; i < len; i++){
+            let newItem = {serialNo: i + 1, character: items[i].content, eigenvalue: [], isChecked: false};
+            let eigenvalues = items[i].itemValue;
+            for(let j = 0, len = eigenvalues.length; j < len; j++){
+                let newValue = {value: eigenvalues[j].value, isSelected: false};
+                newItem.eigenvalue.push(newValue);
+            }
+            itemCharacter.push(newItem);
+        }
+        return itemCharacter;
+    },
     //显示在itemSpread的数据
     //显示在itemSpread的数据
     showCharacterData: function (sheet, setting, datas) {
     showCharacterData: function (sheet, setting, datas) {
         let me = characterOprObj;
         let me = characterOprObj;
@@ -414,6 +435,7 @@ let characterOprObj = {
         let me = characterOprObj;
         let me = characterOprObj;
         me.unsetSelected(item);
         me.unsetSelected(item);
         me.setSelected(item, value);
         me.setSelected(item, value);
+
     },
     },
     insertValue: function (item, value) {
     insertValue: function (item, value) {
         let me = characterOprObj;
         let me = characterOprObj;
@@ -434,14 +456,16 @@ let characterOprObj = {
                     break;
                     break;
                 }
                 }
             }
             }
-            //不存在,新增进eigenvalue
+            //不存在,新增进eigenvalue,自动打勾输出
             if(!isExist){
             if(!isExist){
                 //更新selected
                 //更新selected
                 me.insertValue(item, value);
                 me.insertValue(item, value);
+                item.isChecked = true;
             }
             }
-            //存在,选择特征值
+            //存在,选择特征值,自动打勾输出
             else{
             else{
                 me.changeSelected(item, value);
                 me.changeSelected(item, value);
+                item.isChecked = true;
             }
             }
         }
         }
     },
     },
@@ -457,9 +481,9 @@ let characterOprObj = {
             let newCharacter = {character: '', eigenvalue: [newValue], isChecked: false, serialNo: preObj? preObj.serialNo + 1 : 1};
             let newCharacter = {character: '', eigenvalue: [newValue], isChecked: false, serialNo: preObj? preObj.serialNo + 1 : 1};
             me.currentCache.push(newCharacter);
             me.currentCache.push(newCharacter);
         }
         }
-        else if(character && value){
+        else if(character && value){//有了特征值自动打勾输出
             let newValue = {value: value, isSelected: true};
             let newValue = {value: value, isSelected: true};
-            let newCharacter = {character:character , eigenvalue: [newValue], isChecked: false, serialNo: preObj? preObj.serialNo + 1 : 1};
+            let newCharacter = {character:character , eigenvalue: [newValue], isChecked: true, serialNo: preObj? preObj.serialNo + 1 : 1};
             me.currentCache.push(newCharacter);
             me.currentCache.push(newCharacter);
         }
         }
     },
     },
@@ -539,7 +563,6 @@ let characterOprObj = {
         }
         }
         let isChecked = args.sheet.getValue(args.row, args.col);
         let isChecked = args.sheet.getValue(args.row, args.col);
         if(me.currentCache.length > args.row){
         if(me.currentCache.length > args.row){
-            me.refreshColData = true;
             me.currentCache[args.row].isChecked = isChecked;
             me.currentCache[args.row].isChecked = isChecked;
             me.save();
             me.save();
         }
         }
@@ -554,15 +577,10 @@ let characterOprObj = {
             selector: '#itemSpread',
             selector: '#itemSpread',
             build: function($triggerElement, e){
             build: function($triggerElement, e){
                 //控制允许右键菜单在哪个位置出现
                 //控制允许右键菜单在哪个位置出现
-                let clientX = e.originalEvent.clientX,
-                    clientY = e.originalEvent.clientY;
+                let target = SheetDataHelper.safeRightClickSelection($triggerElement, e, me.workBook);
                 let sheet = me.workBook.getSheet(0);
                 let sheet = me.workBook.getSheet(0);
-                let offset = $("#itemSpread").offset(),
-                    x = clientX - offset.left,
-                    y = clientY - offset.top;
-                let target = sheet.hitTest(x, y);
                 if(target.hitTestType === 3){//在表格内 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                 if(target.hitTestType === 3){//在表格内 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
-                    let insertDis = false, delDis = false, upDis = false, downDis = false;
+                    let insertDis = pageCCOprObj.isBillsType() ? false : true, delDis = false, upDis = false, downDis = false;
                     if(typeof target.row !== 'undefined'){
                     if(typeof target.row !== 'undefined'){
                         //控制按钮是否可用
                         //控制按钮是否可用
                         sheet.setActiveCell(target.row, target.col);
                         sheet.setActiveCell(target.row, target.col);
@@ -572,11 +590,18 @@ let characterOprObj = {
                             upDis = true;
                             upDis = true;
                         }
                         }
                         else{//有数据
                         else{//有数据
-                            if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                            if(typeof target.col === 'undefined'){//定位在表格外
                                 downDis = true;
                                 downDis = true;
-                            }
-                            if(target.row === 0){//定位在第一行,不可上移
                                 upDis = true;
                                 upDis = true;
+                                delDis = true;
+                            }
+                            else{
+                                if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                                    downDis = true;
+                                }
+                                if(target.row === 0){//定位在第一行,不可上移
+                                    upDis = true;
+                                }
                             }
                             }
                         }
                         }
                     }
                     }
@@ -588,7 +613,7 @@ let characterOprObj = {
                     return {
                     return {
                         callback: function(){},
                         callback: function(){},
                         items: {
                         items: {
-                            "insert": {name: "插入", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
+                            "insert": {name: "添加", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
                                 me.addRow(sheet);
                                 me.addRow(sheet);
                             }},
                             }},
                             "delete": {name: "删除", disabled: delDis, icon: "fa-remove", callback: function (key, opt) {
                             "delete": {name: "删除", disabled: delDis, icon: "fa-remove", callback: function (key, opt) {
@@ -614,6 +639,30 @@ let characterOprObj = {
 let pageCCOprObj = {
 let pageCCOprObj = {
     currentFindSet: null,
     currentFindSet: null,
     mainActiveCell: null,//mainSpread焦点单元格
     mainActiveCell: null,//mainSpread焦点单元格
+    //获得造价书当前焦点行的类型:清单、定额
+    isBillsType: function () {
+        let rst = false;
+        let selectedNode = projectObj.mainController.tree.selected;
+        if(selectedNode && selectedNode.sourceType === projectObj.project.Bills.getSourceType()){//为清单
+            rst = true
+        }
+        return rst;
+
+    },
+    setItemContentNode: function (node, jobs, items) {
+        let theCont = contentOprObj, theCha = characterOprObj,
+            jobContent, itemCharacter, contentTxt, characterTxt;
+        jobContent = theCont.buildJobContent(jobs);
+        itemCharacter = theCha.buildItemCharactet(items);
+        contentTxt = theCont.getColData(jobContent);
+        characterTxt = theCha.getColData(itemCharacter);
+        node.data.jobContent = jobContent;
+        node.data.itemCharacter = itemCharacter;
+        node.data.jobContentText = contentTxt ? contentTxt : '';
+        node.data.itemCharacterText = characterTxt ? characterTxt : '';
+
+
+    },
     //设置特征及内容currentCache
     //设置特征及内容currentCache
     setCacheAndShow: function (node) {
     setCacheAndShow: function (node) {
         let theCont = contentOprObj, theCha = characterOprObj;
         let theCont = contentOprObj, theCha = characterOprObj;
@@ -665,6 +714,8 @@ let pageCCOprObj = {
     },
     },
     clearData: function () {
     clearData: function () {
         let theCon = contentOprObj, theCha = characterOprObj;
         let theCon = contentOprObj, theCha = characterOprObj;
+        theCon.workBook.getSheet(0).setRowCount(0);
+        theCha.workBook.getSheet(0).setRowCount(0);
         sheetCommonObj.cleanSheet(theCon.workBook.getSheet(0), theCon.setting, -1);
         sheetCommonObj.cleanSheet(theCon.workBook.getSheet(0), theCon.setting, -1);
         sheetCommonObj.cleanSheet(theCha.workBook.getSheet(0), theCha.setting, -1);
         sheetCommonObj.cleanSheet(theCha.workBook.getSheet(0), theCha.setting, -1);
     },
     },

+ 5 - 2
web/building_saas/main/js/views/std_bills_lib.js

@@ -63,7 +63,7 @@ var billsLibObj = {
         var getBillsJobs = function (node) {
         var getBillsJobs = function (node) {
             var jobs = [], i, jobData = null;
             var jobs = [], i, jobData = null;
             if (stdBillsJobData && node && node.data.jobs) {
             if (stdBillsJobData && node && node.data.jobs) {
-                for (i = 0; i < node.data.jobs.length - 1; i++) {
+                for (i = 0; i < node.data.jobs.length; i++) {
                     jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
                     jobData = findData(node.data.jobs[i], 'id', stdBillsJobData);
                     if (jobData) {
                     if (jobData) {
                         jobs.push(jobData);
                         jobs.push(jobData);
@@ -75,7 +75,7 @@ var billsLibObj = {
         var getBillsFeatures = function (node) {
         var getBillsFeatures = function (node) {
             var features = [], i, featureData = null;
             var features = [], i, featureData = null;
             if (stdBillsFeatureData && node && node.data.items) {
             if (stdBillsFeatureData && node && node.data.items) {
-                for (i = 0; i < node.data.items.length - 1; i++) {
+                for (i = 0; i < node.data.items.length; i++) {
                     featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
                     featureData = findData(node.data.items[i], 'id', stdBillsFeatureData);
                     if (featureData) {
                     if (featureData) {
                         features.push(featureData);
                         features.push(featureData);
@@ -131,6 +131,8 @@ var billsLibObj = {
             stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
             stdBillsTreeController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, showBillsRela);
             that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
             that.stdBillsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (sender, args) {
                 if (stdBillsTree.items[args.row].children.length === 0) {
                 if (stdBillsTree.items[args.row].children.length === 0) {
+                    //特征及内容转化
+                    pageCCOprObj.setItemContentNode(stdBillsTree.items[args.row], getBillsJobs(stdBillsTree.items[args.row]), getBillsFeatures(stdBillsTree.items[args.row]));
                     ProjectController.addBills(projectObj.project, projectObj.mainController, stdBillsTree.items[args.row]);
                     ProjectController.addBills(projectObj.project, projectObj.mainController, stdBillsTree.items[args.row]);
                 }
                 }
             });
             });
@@ -304,6 +306,7 @@ var billsLibObj = {
 };
 };
 
 
 $('#stdBillsTab').bind('click', function () {
 $('#stdBillsTab').bind('click', function () {
+    refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题
     $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-q").height() - 202);
     $(".main-data-side-q").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-q").height() - 202);
     var select = $('#stdBillsLibSelect');
     var select = $('#stdBillsLibSelect');
     billsLibObj.refreshBillsSpread();
     billsLibObj.refreshBillsSpread();

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

@@ -188,6 +188,7 @@ var rationLibObj = {
     }
     }
 };
 };
 $('#stdRationTab').bind('click', function () {
 $('#stdRationTab').bind('click', function () {
+    refreshSubSpread();//subSpread、jobSpread、itemSpread显示问题
     var select = $('#stdRationLibSelect');
     var select = $('#stdRationLibSelect');
     $(".main-data-side-d").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-d").height() - 202);
     $(".main-data-side-d").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-d").height() - 202);
     rationLibObj.refreshSpread();
     rationLibObj.refreshSpread();

+ 23 - 8
web/building_saas/main/js/views/sub_view.js

@@ -8,11 +8,9 @@ contentOprObj.buildSheet($("#jobSpread")[0]);
 characterOprObj.buildSheet($("#itemSpread")[0]);
 characterOprObj.buildSheet($("#itemSpread")[0]);
 $("#tzjnrCon").hide();
 $("#tzjnrCon").hide();
 $("#subSpread").show();
 $("#subSpread").show();
-
 var subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 7);
 var subSpread = sheetCommonObj.createSpread($("#subSpread")[0], 7);
 subSpread.getSheet(4).name('JSCX');
 subSpread.getSheet(4).name('JSCX');
 
 
-
 pageCCOprObj.active = false;
 pageCCOprObj.active = false;
 
 
 // 工料机
 // 工料机
@@ -38,6 +36,7 @@ $("#linkGLJ").click(function(){
     $("#tzjnrCon").hide();//控制显示subSpread,隐藏特征及内容spread
     $("#tzjnrCon").hide();//控制显示subSpread,隐藏特征及内容spread
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(0);
     subSpread.setActiveSheetIndex(0);
     $.contextMenu( 'destroy', "#subSpread" );
     $.contextMenu( 'destroy', "#subSpread" );
     gljContextMenu.loadGLJSpreadContextMenu();
     gljContextMenu.loadGLJSpreadContextMenu();
@@ -49,16 +48,17 @@ $("#linkFZDE").click(function(){
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(1);
     subSpread.setActiveSheetIndex(1);
     $.contextMenu( 'destroy', "#subSpread" );
     $.contextMenu( 'destroy', "#subSpread" );
     // for test
     // for test
   //  subSpread.getActiveSheet().setValue(0, 0, "辅助定额");
   //  subSpread.getActiveSheet().setValue(0, 0, "辅助定额");
 });
 });
-
 $("#linkFZTJ").click(function(){
 $("#linkFZTJ").click(function(){
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(2);
     subSpread.setActiveSheetIndex(2);
     $.contextMenu( 'destroy', "#subSpread" );
     $.contextMenu( 'destroy', "#subSpread" );
     // for test
     // for test
@@ -69,6 +69,7 @@ $("#linkGCLMX").click(function(){
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(3);
     subSpread.setActiveSheetIndex(3);
     $.contextMenu( 'destroy', "#subSpread" );
     $.contextMenu( 'destroy', "#subSpread" );
     gljContextMenu.loadQuantityDetailMenu();
     gljContextMenu.loadQuantityDetailMenu();
@@ -80,6 +81,7 @@ $("#linkJSCX").click(function(){        // 计算程序
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(4);
     subSpread.setActiveSheetIndex(4);
     calcProgramObj.initSheet(subSpread.getSheet(4));
     calcProgramObj.initSheet(subSpread.getSheet(4));
     let sel = projectObj.mainController.tree.selected;
     let sel = projectObj.mainController.tree.selected;
@@ -95,6 +97,7 @@ $("#linkFXSM").click(function(){
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(5);
     subSpread.setActiveSheetIndex(5);
     // for test
     // for test
     subSpread.getActiveSheet().setValue(0, 0, "分项说明");
     subSpread.getActiveSheet().setValue(0, 0, "分项说明");
@@ -104,6 +107,7 @@ $("#linkDESM").click(function(){
     $("#tzjnrCon").hide();
     $("#tzjnrCon").hide();
     $("#subSpread").show();
     $("#subSpread").show();
     pageCCOprObj.active = false;
     pageCCOprObj.active = false;
+    refreshSubSpread();
     subSpread.setActiveSheetIndex(6);
     subSpread.setActiveSheetIndex(6);
     // for test
     // for test
     subSpread.getActiveSheet().setValue(0, 0, "定额说明");
     subSpread.getActiveSheet().setValue(0, 0, "定额说明");
@@ -114,16 +118,27 @@ $("#linkTZJNR").click(function () {
     $("#subSpread").hide();
     $("#subSpread").hide();
     $("#tzjnrCon").show();
     $("#tzjnrCon").show();
     pageCCOprObj.active = true;
     pageCCOprObj.active = true;
+    refreshSubSpread();
     let selectedNode = projectObj.mainController.tree.selected;
     let selectedNode = projectObj.mainController.tree.selected;
     pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
     pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
-   // if(selectedNode && selectedNode.sourceType === projectObj.project.Bills.getSourceType()){
+    if(selectedNode && selectedNode.sourceType === projectObj.project.Bills.getSourceType()){
         pageCCOprObj.setCacheAndShow(selectedNode);
         pageCCOprObj.setCacheAndShow(selectedNode);
-   // }
-    //else{
-       // pageCCOprObj.clearData();
-    //}
+    }
+    else{
+        pageCCOprObj.clearData();
+    }
 });
 });
 function SubActiveSheetNameIs(sheetName){
 function SubActiveSheetNameIs(sheetName){
     let rst = subSpread.getActiveSheet().name() == sheetName;
     let rst = subSpread.getActiveSheet().name() == sheetName;
     return rst;
     return rst;
+}
+//弹出清单规则或定额库后导致subSpread和特征及内容spread显示出问题
+function refreshSubSpread(){
+    if(pageCCOprObj.active){
+        contentOprObj.workBook.refresh();
+        characterOprObj.workBook.refresh();
+    }
+    else{
+        subSpread.refresh();
+    }
 }
 }