浏览代码

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

chenshilong 7 年之前
父节点
当前提交
09d215b303

+ 1 - 1
modules/glj/models/unit_price_file_model.js

@@ -120,7 +120,7 @@ class UnitPriceFileModel extends BaseModel {
             return result;
         }
 
-        let condition = {project_id: {$in: idList}};
+        let condition = {project_id: {$in: idList},deleteInfo:null};
         result = await this.findDataByCondition(condition, null, false);
 
         return result;

+ 1 - 1
modules/pm/controllers/pm_controller.js

@@ -234,7 +234,7 @@ module.exports = {
 
     getGCDatas: async function(request, response) {
         let userID = request.session.sessionUser.ssoId;
-        let compilatoinId = req.session.sessionCompilation._id;
+        let compilatoinId = request.session.sessionCompilation._id;
         let rst = [];
         let _projs = Object.create(null), _engs = Object.create(null), prefix = 'ID_';
         try{

+ 2 - 2
web/building_saas/complementary_glj_lib/js/glj.js

@@ -147,8 +147,7 @@ let repositoryGljObj = {
             }
             sheetOpr.cleanData(me.workBook.getSheet(0), me.setting, -1);
             sheetOpr.showData(me.workBook.getSheet(0), me.setting, cacheSection, me.distTypeTree);
-            sheetCommonObj.setStaticCombo(me.workBook.getActiveSheet(), 0, 5, cacheSection.length, me.distTypeTree.comboDatas, false, 'text');
-            sheetCommonObj.setDynamicCombo(me.workBook.getActiveSheet(), cacheSection.length, 5, me.workBook.getActiveSheet().getRowCount() - cacheSection.length, me.distTypeTree.comboDatas, false, 'text');
+            sheetCommonObj.setDynamicCombo(me.workBook.getActiveSheet(), 0, 5, me.workBook.getActiveSheet().getRowCount(), me.distTypeTree.comboDatas, false, 'text');
 
             cacheSection = null;
         }
@@ -165,6 +164,7 @@ let repositoryGljObj = {
         me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.SelectionChanged, me.onSelectionChanged);
         me.workBook.bind(GC.Spread.Sheets.Events.ButtonClicked, me.onButtonClicked);//复选框点击事件
     },
+
     getCurrentComponent: function (gljComponent) {
         let me = repositoryGljObj, rst = [];
         for(let i = 0; i < gljComponent.length; i++){

+ 10 - 2
web/building_saas/glj/js/project_glj_spread.js

@@ -60,7 +60,7 @@ ProjectGLJSpread.prototype.init = function () {
             ,width:60
         },
         {name: '供货方式', field: 'supply', visible: true, cellType: selectBox,width:80},
-        {name: '甲供数量', field: 'supply_quantity', visible: true,width:100},
+        {name: '甲供数量', field: 'supply_quantity',validator:'number', visible: true,width:100},
         {name: '交货方式', field: 'delivery', visible: true,width:90},
         {name: '送达地点', field: 'delivery_address', visible: true,width:100},
         {
@@ -106,6 +106,7 @@ ProjectGLJSpread.prototype.init = function () {
     this.sheetObj.setStyle(-1, basePriceColumn, rightStyleSetting);
     this.sheetObj.setStyle(-1, adjustPriceColumn, rightStyleSetting);
     this.sheetObj.setStyle(-1, marketPriceColumn, rightStyleSetting);
+    this.sheetObj.setStyle(-1, supplyColumn, rightStyleSetting);
 
     // 设置可编辑列
     this.sheetObj.setColumnEditable(marketPriceColumn);
@@ -175,7 +176,7 @@ ProjectGLJSpread.prototype.updateProjectGLJField = function(info, callback) {
     // 校验数据
     let value = info.newValue;
     if (!projectGLJSheet.checkData(column, value)) {
-        alert('数据格式错误,请重新输入!');
+        alert('输入的数据类型不对,请重新输入!');
         activeSheet.setValue(row, column, info.oldValue);
         return false;
     }
@@ -204,6 +205,9 @@ ProjectGLJSpread.prototype.updateProjectGLJField = function(info, callback) {
         value = this.supplyType.indexOf(value);
         extend.supply_quantity = this.getSupplyQuantity(value, activeSheet, info);
     }
+    if(field === 'supply_quantity'){//修改数量需做4舍5入
+        value= value.toDecimal(getDecimal('glj.quantity'));
+    }
 
     extend = Object.keys(extend).length > 0 ?  JSON.stringify(extend) : '';
     $.ajax({
@@ -229,6 +233,9 @@ ProjectGLJSpread.prototype.updateProjectGLJField = function(info, callback) {
                 if (parentMarketPrice !== null) {
                     info.parentMarketPrice = parentMarketPrice;
                 }
+                if(field !== 'supply'){ //供货方式需做转换才能直接设置值, 这里设置值是为了早点更新数据,等getdata返回数据再刷新的话会有比较大的延时
+                    activeSheet.setValue(row, column, value);
+                }
                 callback(field, info);
             }
         }
@@ -466,6 +473,7 @@ ProjectGLJSpread.prototype.getSupplyQuantity = function(supplyType, activeSheet,
     let quantity = activeSheet.getValue(info.row, quantityColumn);
     // 自行采购和甲定乙供则把甲供数量设置为0,其余情况则设置为当前总消耗量
     let supplyQuantity = supplyType === 0 || supplyType === 3 ? 0 : quantity;
+    supplyQuantity = parseFloat(supplyQuantity);
 
     return supplyQuantity;
 };

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

@@ -179,7 +179,7 @@
                                               </p>
                                               <p style="text-align: center">
                                                   <button class="btn btn-primary btn-sm" type="button" id="use-to-current">应用到选中清单</button>
-                                                  <button class="btn btn-primary btn-sm" type="button">应用到所有清单</button>
+                                                  <button class="btn btn-primary btn-sm" type="button" id="use-to-all">应用到所有清单</button>
                                               </p>
                                           </div>
                                       </div>

+ 2 - 7
web/building_saas/main/js/models/calc_base.js

@@ -52,7 +52,7 @@ let cbTools = {
         return this.isDef(v) && !isNaN(v) && v !== Infinity;
     },
     isFlag: function (v) {
-        return this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
+        return this.isDef(v) && this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
     },
     returnV: function (v, r) {
         if(this.isDef(v)){
@@ -500,11 +500,6 @@ let cbAnalyzer = {
             return null;
         }
         return null;
-    },
-
-    isCN: function(v){
-        let regex = /[\u4e00-\u9fa5]/g;
-        return (regex.test(v));
     }
 };
 
@@ -612,5 +607,5 @@ let calcBase = {
         catch (err){
             alert(err);
         }
-    },
+    }
 };

+ 1 - 1
web/building_saas/main/js/models/project_glj.js

@@ -184,7 +184,7 @@ ProjectGLJ.prototype.updateBasePriceFromRG=function(recode,updateField,newval){
     }
 }
 ProjectGLJ.prototype.refreshTreeNodePriceIfNeed = function (data) {
-    if((data.unit_price.type = gljType.MAIN_MATERIAL||data.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial==true){
+    if((data.unit_price.type = gljType.MAIN_MATERIAL||data.unit_price.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial==true){
         var nodes = _.filter(projectObj.project.mainTree.items,function (tem) {
             if(tem.sourceType==ModuleNames.ration_glj&&tem.data.projectGLJID ==data.id){
                 tem.data.marketUnitFee = data.unit_price.market_price;

+ 24 - 11
web/building_saas/main/js/models/ration_glj.js

@@ -175,7 +175,8 @@ var ration_glj = {
             return glj_list[glj_index].rationID;
         };
         ration_glj.prototype.refreshAfterDelete=function(data){
-            var glj_list = projectObj.project.ration_glj.datas;
+            var me = projectObj.project.ration_glj;
+            var glj_list = me.datas;
             var oldData = _.remove(glj_list,data.query);
             _.remove(gljOprObj.sheetData,data.query);
             gljOprObj.showRationGLJSheetData();
@@ -193,9 +194,7 @@ var ration_glj = {
             projectObj.mainController.refreshTreeNode([rationNode]);
             for(let o of oldData){
                 if(this.needShowToTree(o)){
-                    let node = _.find(projectObj.project.mainTree.items,function (n) {//找到对应的树节点
-                        return n.sourceType==ModuleNames.ration_glj &&n.data.ID==o.ID;
-                    });
+                    let node = me.findTreeNodeByID(o.ID);  //找到对应的树节点
                     projectObj.mainController.deleteNode(node,next);
                 }
             }
@@ -410,7 +409,10 @@ var ration_glj = {
           var allGLJ=gljOprObj.AllRecode;
             GLJSelection.sort();
           _.forEach(GLJSelection,function (g) {
-              var glj=_.find(allGLJ,{'code':g});
+              var glj=_.find(allGLJ,function (item) {
+                var i_key = gljOprObj.getIndex(item,['code','name','specs','unit','gljType']);
+                return i_key ==g;
+              });
               var ration_glj ={
                   projectID:ration.projectID,
                   GLJID:glj.ID,
@@ -446,8 +448,11 @@ var ration_glj = {
         };
         ration_glj.prototype.replaceGLJ=function (selectCode,oldData,callback) {
             var allGLJ=gljOprObj.AllRecode;
-            var glj=_.find(allGLJ,{'code':selectCode});
-            if(selectCode==oldData.code){
+            var glj=_.find(allGLJ,function (item) {
+                var i_key = gljOprObj.getIndex(item,['code','name','specs','unit','gljType']);
+                return i_key ==selectCode;
+            });
+            if(selectCode==gljOprObj.getIndex(oldData,['code','name','specs','unit','type'])){
                 return callback(null);
             }
             if(oldData.createType!='replace'){
@@ -479,8 +484,11 @@ var ration_glj = {
 
         ration_glj.prototype.mReplaceGLJ=function (selectCode,oldData,callback) {
             var allGLJ=gljOprObj.AllRecode;
-            var glj=_.find(allGLJ,{'code':selectCode});
-            if(selectCode==oldData.code){
+            var glj=_.find(allGLJ,function (item) {
+                var i_key = gljOprObj.getIndex(item,['code','name','specs','unit','gljType']);
+                return i_key ==selectCode;
+            });
+            if(selectCode== gljOprObj.getIndex(oldData,['code','name','specs','unit','type'])){
                 return callback(null);
             }
             var query={
@@ -570,12 +578,17 @@ var ration_glj = {
                 gljOprObj.refreshTreeNode({"type":ModuleNames.ration_glj,"ID":data.ID});
             }
         };
-
         ration_glj.prototype.needShowToTree=function(data){
-            if((data.type == gljType.MAIN_MATERIAL||data.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMateria==true){
+            if((data.type == gljType.MAIN_MATERIAL||data.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial==true){
                 return true
             }
             return false
+        };
+        ration_glj.prototype.findTreeNodeByID = function (ID) {
+            let node = _.find(projectObj.project.mainTree.items,function (n) {//找到对应的树节点
+                return n.sourceType==ModuleNames.ration_glj &&n.data.ID==ID;
+            });
+            return node;
         }
         return new ration_glj(project);
     }

+ 55 - 13
web/building_saas/main/js/views/character_content_view.js

@@ -741,14 +741,23 @@ let pageCCOprObj = {
         };
         CommonAjax.post(url, postData, function (rstData) {
             //更新节点数据
-            let selectedNode = projectObj.mainController.tree.selected;
-            selectedNode.data[updateObj.field] = updateObj.updateArr;
-            selectedNode.data[txtObj.field] = txtObj.text;
-            me.showData(oprObj.workBook.getSheet(0), oprObj.setting, oprObj.currentCache);//刷新特征及内容Spread
             if(updateCol){
-                let activeCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
-                projectObj.mainSpread.getActiveSheet().setValue(activeCell.row, updateCol, txtObj.text + ''); //刷新输出显示
-                projectObj.mainSpread.getActiveSheet().autoFitRow(activeCell.row);
+                if (!oprObj.hasOwnProperty("getID")) {
+                    // 已当前选中行更新数据
+                    let selectedNode = projectObj.mainController.tree.selected;
+                    selectedNode.data[updateObj.field] = updateObj.updateArr;
+                    selectedNode.data[txtObj.field] = txtObj.text;
+                    me.showData(oprObj.workBook.getSheet(0), oprObj.setting, oprObj.currentCache);//刷新特征及内容Spread
+
+                    let activeCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
+                    projectObj.mainSpread.getActiveSheet().setValue(activeCell.row, updateCol, txtObj.text + ''); //刷新输出显示
+                    projectObj.mainSpread.getActiveSheet().autoFitRow(activeCell.row);
+                } else {
+                    // 以节点更新数据
+                    const row = oprObj.getID() - 1;
+                    projectObj.mainSpread.getActiveSheet().setValue(row, updateCol, txtObj.text + ''); //刷新输出显示
+                    projectObj.mainSpread.getActiveSheet().autoFitRow(row);
+                }
             }
         });
     },
@@ -769,6 +778,8 @@ let pageCCOprObj = {
         if (itemCharacter === undefined || itemCharacter.length <= 0 || itemJob === undefined || itemJob.length <= 0) {
             return;
         }
+        // 保存的条件数据
+        const findSet = { ID: node.data.ID, projectID: node.data.projectID };
 
         let characterArray = [];
         for (const tmp of itemCharacter) {
@@ -809,6 +820,7 @@ let pageCCOprObj = {
 
         // 组合数据
         let content = '';
+        let defaultContentInfo = {};
         switch (setting.addContent) {
             case "1":
                 // 项目特征+工作内容
@@ -837,6 +849,19 @@ let pageCCOprObj = {
                 const rationChapter = this.getRationChapter(node, setting);
                 contentArray.push.apply(contentArray, rationChapter);
                 break;
+            case "":
+                // 无
+                const jobContent = jobArray.join("\r\n");
+                const characterContent = characterArray.join("\r\n");
+                let nodeNameList = node.data.name.split("\n");
+                const nameContent = nodeNameList[0] !== undefined ? nodeNameList[0] : '';
+                // 存入对象,生成数据时用
+                defaultContentInfo = {
+                    jobContent,
+                    characterContent,
+                    nameContent
+                };
+                break;
         }
         // 显示格式
         switch (setting.displayFormat) {
@@ -857,27 +882,44 @@ let pageCCOprObj = {
         let saveObj = {};
         switch (setting.position) {
             case "1":
-                // 添加到项目特征列
                 saveObj = {field: 'itemCharacterText', text: content};
                 // 更新到数据库
-                pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet,
-                    {field: 'itemCharacter', updateArr: itemCharacter}, saveObj, characterOprObj);
+                pageCCOprObj.updateCharacterContent(findSet, {field: 'itemCharacter', updateArr: itemCharacter},
+                    saveObj, node);
                 break;
             case "2":
                 // 添加到清单名称列
                 const column = this.mainActiveCell.col !== undefined ? this.mainActiveCell.col : -1;
                 let colSetting = projectObj.mainController.setting.cols[column];
                 if (colSetting !== undefined) {
+                    content = node.data.name + "\r\n" + content;
                     projectObj.project.Bills.updateField(node.source, 'name', content, true);
-                    projectObj.mainController.refreshTreeNode([node]);
+                    projectObj.mainController.refreshTreeNode([node], false);
                 }
                 break;
             case "3":
                 // 添加到工作内容列
                 saveObj =  {field: 'jobContentText', text: content};
                 // 更新到数据库
-                pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet,
-                    {field: 'jobContent', updateArr: itemJob}, saveObj, contentOprObj);
+                pageCCOprObj.updateCharacterContent(findSet, {field: 'jobContent', updateArr: itemJob},
+                    saveObj, node);
+                break;
+            case "4":
+                // 分别添加到对应列
+                if (Object.keys(defaultContentInfo).length <= 0) {
+                    return;
+                }
+                // 名称
+                projectObj.project.Bills.updateField(node.source, 'name', defaultContentInfo.nameContent, true);
+                projectObj.mainController.refreshTreeNode([node], false);
+                // 特征
+                saveObj = {field: 'itemCharacterText', text: defaultContentInfo.characterContent};
+                pageCCOprObj.updateCharacterContent(findSet, {field: 'itemCharacter', updateArr: itemCharacter},
+                    saveObj, node);
+                // 内容
+                saveObj = {field: 'jobContentText', text: defaultContentInfo.jobContent};
+                pageCCOprObj.updateCharacterContent(findSet, {field: 'jobContent', updateArr: itemJob},
+                    saveObj, node);
                 break;
         }
 

+ 61 - 18
web/building_saas/main/js/views/glj_view.js

@@ -22,7 +22,7 @@ var gljOprObj = {
         header: [
             {headerName: "编码", headerWidth: 100, dataCode: "code", dataType: "String", formatter: "@"},
             {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"},
-            {headerName: "规格型号", headerWidth: 120, dataCode: "specs", dataType: "String", hAlign: "left"},
+            {headerName: "规格型号", headerWidth: 90, dataCode: "specs", dataType: "String", hAlign: "left"},
             {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"},
             {headerName: "类型", headerWidth: 45, dataCode: "shortName", dataType: "String", hAlign: "center"},
             {headerName: "定额消耗", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},    // dataType: "Number", formatter: "0.00"
@@ -792,6 +792,7 @@ var gljOprObj = {
             isValidate = me.checkingActualValue(recode,newval)
         }
         if(isValidate){
+            newval = scMathUtil.roundTo(newval,-2);
             projectObj.project.ration_ass.updateActualValue(me.assSheetData,args.row,newval)
         }else {
             newval = recode.actualValue;
@@ -856,7 +857,7 @@ var gljOprObj = {
         }else {
             me.gljLibSheetData=me[val];
         }
-        if($('#actionType').val()!='add'){
+        if($('#actionType').val()=='replace'||$('#actionType').val()=='m_replace'){
             me.filterLibGLJByType();
         }
         if(me.gljCurTypeId==undefined){
@@ -878,29 +879,37 @@ var gljOprObj = {
         }
     },
     addGLJsSelection:function (args,newVal) {
+         var con_key = this.getIndex(this.gljLibSheetData[args.row],['code','name','specs','unit','gljType'])
         if(newVal==1){
-            this.GLJSelection.push(this.gljLibSheetData[args.row].code);
+            this.GLJSelection.push(con_key);
             this.gljLibSheetData[args.row].select=1;
         }else if(newVal==0){
-            _.pull(this.GLJSelection,this.gljLibSheetData[args.row].code);
+            _.pull(this.GLJSelection,con_key);
             this.gljLibSheetData[args.row].select=0;
         }
     },
     replaceGLJSelection:function (args,newVal) {
+        var me =this;
         var oldSelection=this.GLJSelection[0];
         if(newVal==0){
             args.sheet.getCell(args.row, args.col).value(1);
             return;
         }
-        this.GLJSelection=[this.gljLibSheetData[args.row].code];
+        this.GLJSelection=[me.getIndex(this.gljLibSheetData[args.row],['code','name','specs','unit','gljType'])];
         this.gljLibSheetData[args.row].select=1;
-        var oindex = _.findIndex(this.gljLibSheetData,{'code':oldSelection});
+        var oindex = _.findIndex(this.gljLibSheetData,function (item) {
+            var i_key = me.getIndex(item,['code','name','specs','unit','gljType']);
+            return oldSelection==i_key;
+        });
         if(oindex!=-1){
             args.sheet.getCell(oindex, args.col).value(0);
             this.gljLibSheetData[oindex].select=0;
         }else {
-            var oldData = _.find(gljOprObj.AllRecode,{'code':oldSelection})
-            oldData.select=0;
+            var oldData = _.find(gljOprObj.AllRecode,function (item) {
+                var i_key = me.getIndex(item,['code','name','specs','unit','gljType']);
+                return oldSelection==i_key;
+            });
+            oldData?oldData.select=0:"";
         }
     },
     filterLibGLJByType:function () {
@@ -941,11 +950,20 @@ var gljOprObj = {
         });
         return distTypeTree;
     },
+    doInsertGLJ:function () {
+        var selected = projectObj.project.mainTree.selected;
+        var project= projectObj.project;
+        console.log(gljOprObj.GLJSelection);
+    },
     doAddGLJ:function () {
         var selected = projectObj.project.mainTree.selected;
         var project= projectObj.project;
         gljOprObj.GLJSelection= _.filter(gljOprObj.GLJSelection,function (n) {
-            return _.find(gljOprObj.sheetData,{'code':n})?false:true;
+            var rg = _.find(gljOprObj.sheetData,function (item) {
+                var i_key = gljOprObj.getIndex(item,['code','name','specs','unit','type']);
+                 return n==i_key
+            })
+            return rg?false:true;
         })
         if(gljOprObj.GLJSelection.length>0&&selected&&selected.sourceType==ModuleNames.ration){
             $("#glj_tree_div").modal('hide');
@@ -979,11 +997,22 @@ var gljOprObj = {
                 //result.adjustState;
                 var data =result.data;
                 var index = _.findIndex(gljOprObj.sheetData,{'ID':data.ID});
+                var nodes = [selected];
                 gljOprObj.sheetData[index]=data;
                 gljOprObj.showRationGLJSheetData();
+                if(project.ration_glj.needShowToTree(data)){//当替换的是主材或设备时,刷新对应的树节点
+                    var  node =  project.ration_glj.findTreeNodeByID(data.ID);
+                    if(node){
+                        project.ration_glj.transferToNodeData(data);
+                        node.source = data;
+                        node.data = data;
+                    }
+                    node?nodes.push(node):"";
+                }
+                //project.ration_glj.addToMainTree(data);
                 project.projectGLJ.loadData();
                 selected.data.adjustState=result.adjustState;
-                projectObj.mainController.refreshTreeNode([selected]);
+                projectObj.mainController.refreshTreeNode(nodes);
             }
             $.bootstrapLoading.end();
         })
@@ -998,15 +1027,21 @@ var gljOprObj = {
             var data=result.data;
             var stateList= result.stateList;
             var n_index = me.getIndex(data.query,['code','name','specs','unit','type']);
+            var nodes=[];
             _.forEach(project.ration_glj.datas,function (t) {
                 var t_index =me.getIndex(t,['code','name','specs','unit','type']);
                 if(n_index==t_index){
                     me.updateProperty(t,data.doc);
+                    if(project.ration_glj.needShowToTree(t)){//如果是造价书中的树节点,则也须刷新
+                        project.ration_glj.transferToNodeData(t);
+                        var node = project.ration_glj.findTreeNodeByID(t.ID);
+                        nodes.push(node);
+                    }
                 }
             })
             me.showRationGLJSheetData();
             project.projectGLJ.loadData();
-            me.refreshStateAfterMreplace(stateList);
+            me.refreshStateAfterMreplace(stateList,nodes);
             $.bootstrapLoading.end();
         })
     },
@@ -1015,7 +1050,7 @@ var gljOprObj = {
             obj[key] = n;
         });
     },
-    refreshStateAfterMreplace:function (stateList) {
+    refreshStateAfterMreplace:function (stateList,gljNodes) {
         var nodes=[];
         _.forEach(stateList,function (s) {
           var node = _.find(projectObj.project.mainTree.items,function (n) {
@@ -1026,6 +1061,7 @@ var gljOprObj = {
               nodes.push(node);
           }
         });
+        gljNodes.length>0?nodes = nodes.concat(gljNodes):"";
         projectObj.mainController.refreshTreeNode(nodes);
     },
     refreshView:function () {
@@ -1180,16 +1216,21 @@ $(function(){
         }
         gljOprObj.gljLibSheetData =gljOprObj.AllRecode;
         var selected=null;
-        if($('#actionType').val()=='add',$('#actionType').val()=='insert'){
+        if($('#actionType').val()=='add'||$('#actionType').val()=='insert'){
             gljOprObj.GLJSelection=[];
         }else {
              selected=gljOprObj.sheetData[gljContextMenu.selectedRow];
-            gljOprObj.GLJSelection=[selected.code];
+             var connect_key = gljOprObj.getIndex(selected,['code','name','specs','unit','type'])
+            gljOprObj.GLJSelection=[connect_key];
             gljOprObj.filterLibGLJByType();
         }
 
         if(selected!=null){
-            var r = _.find(gljOprObj.gljLibSheetData,{'code':selected.code});
+            var s_key = gljOprObj.getIndex(selected,['code','name','specs','unit','gljType']);
+            var r = _.find(gljOprObj.gljLibSheetData,function (item) {
+                var item_key = gljOprObj.getIndex(item,['code','name','specs','unit','type']);
+                return s_key == item_key;
+            });
             r?r.select=1:"";
         }
         gljOprObj.showLibGLJSheetData();
@@ -1211,11 +1252,13 @@ $(function(){
         if(gljOprObj.GLJSelection.length<1){
             return;
         }
-        if($('#actionType').val()=='add'){
+        if($('#actionType').val()=='insert'){  //造价书页面中插入定额类型的工料机
+            gljOprObj.doInsertGLJ();
+        }else if($('#actionType').val()=='add'){ //添加工料机
             gljOprObj.doAddGLJ();
-        }else if($('#actionType').val()=='replace'){
+        }else if($('#actionType').val()=='replace'){//替换工料机
             gljOprObj.doReplaceGLJ();
-        }else if($('#actionType').val()=='m_replace'){
+        }else if($('#actionType').val()=='m_replace'){//批量替换工料机
             gljOprObj.doMReplaceGLJ();
         }
     })

+ 2 - 2
web/building_saas/main/js/views/project_property_basicInfo.js

@@ -265,12 +265,12 @@ let basicInfoView = {
             if(datas[i].hasOwnProperty('items')){
                 let collapsed = false;
                 if(init){
-                    datas[i].collapsed=true;
+                    datas[i].collapsed=false;
                     collapsed = true;
                 }else {
                     collapsed = datas[i].collapsed == undefined ? true : datas[i].collapsed;
                 }
-                sheet.getRange(i+1, -1, datas[i].items.length, -1).visible(!collapsed);
+                //sheet.getRange(i+1, -1, datas[i].items.length, -1).visible(!collapsed);
             }
         }
     },

+ 11 - 6
web/building_saas/main/js/views/project_property_projFeature.js

@@ -48,10 +48,10 @@ let projFeatureView = {
     },
 
     setCombo: function (sheet, row, items) {
-        let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
-        combo.items(items);
-        combo.editable(false);
-        sheet.getCell(row, 1).cellType(combo);
+        let dynamicCombo = sheetCommonObj.getDynamicCombo();
+        dynamicCombo.items(items);
+        dynamicCombo.editable(false);
+        sheet.getCell(row, 1).cellType(dynamicCombo);
     },
 
     getComboItemsByRow: function (row) {
@@ -91,6 +91,7 @@ let projFeatureView = {
         let sheet = workBook.getActiveSheet();
         sheet.bind(_events.EditStarting, this.onEditStarting);
         sheet.bind(_events.EditEnded, this.onEditEnded);
+        sheet.bind(_events.EnterCell, this.onEnterCell);
         sheet.bind(_events.ClipboardPasting, this.onClipboardPasting);
         sheet.bind(_events.ClipboardPasted, this.onClipboardPasted);
     },
@@ -142,6 +143,10 @@ let projFeatureView = {
         }
     },
 
+    onEnterCell: function (sender, args) {
+        args.sheet.repaint();
+    },
+
     onClipboardPasting: function (sender, args) {
         let me = projFeatureView;
         if(me.setting.locked.cols.indexOf(args.cellRange.col) !== -1){
@@ -260,12 +265,12 @@ let projFeatureView = {
             if(datas[i].hasOwnProperty('items')){
                 let collapsed = false;
                 if(init){
-                    datas[i].collapsed=true;
+                    datas[i].collapsed=false;
                     collapsed = true;
                 }else {
                     collapsed = datas[i].collapsed == undefined ? true : datas[i].collapsed;
                 }
-                sheet.getRange(i+1, -1, datas[i].items.length, -1).visible(!collapsed);
+                //sheet.getRange(i+1, -1, datas[i].items.length, -1).visible(!collapsed);
             }
         }
     },

+ 50 - 20
web/building_saas/main/js/views/sub_view.js

@@ -120,24 +120,7 @@ $("#use-to-current").click(function() {
     if (isSaving) {
         return false;
     }
-    // 添加位置
-    const position = $("#add-position").val();
-    // 添加内容
-    const addContent = $("#add-content").val();
-    // 显示格式
-    const displayFormat = $("#display-format").val();
-    // 特征生成方式
-    const characterFormat = $("#character-format").val();
-
-    // 序号格式
-    const serialType = $("#serial-type").val();
-    const setting = {
-        serialType,
-        characterFormat,
-        addContent,
-        position,
-        displayFormat,
-    };
+    const setting = getAddRuleSetting();
     isSaving = true;
     const self = $(this);
     self.attr('disabled', 'disabled');
@@ -149,24 +132,43 @@ $("#use-to-current").click(function() {
         self.removeAttr('disabled');
     }, 1000);
 });
+// 应用到所有的清单
+$("#use-to-all").click(function() {
+    let treeNode = projectObj.mainController.tree;
+    const setting = getAddRuleSetting();
+    if (treeNode.items === undefined || treeNode.items.length <= 0) {
+        return false;
+    }
+    for (const item of treeNode.items) {
+        if (item.data.jobContent === undefined || item.data.jobContent.length <= 0 ||
+        item.data.itemCharacter === undefined || item.data.itemCharacter.length <= 0) {
+            continue;
+        }
+        pageCCOprObj.setCharacterBySetting(item, setting);
+    }
+});
+
 // 添加位置选择
 $("#add-position").change(function() {
     const selected = $(this).children(":selected").val();
     const addContentEle = $("#add-content");
     const displayFormatEle = $("#display-format");
+    const characterFormatEle = $("#character-format");
     switch (selected) {
         case '4':
             // 分别添加到对应列
             // 当“添加位置”是“分别添加到对应列”,则“添加内容”恢复默认“无”,且灰显;“显示格式”恢复默认“换行分隔”,且灰显。
             addContentEle.val('');
             addContentEle.attr('disabled', 'disabled');
-            displayFormatEle.val(2);
+            displayFormatEle.val(1);
             displayFormatEle.attr('disabled', 'disabled');
-            console.log('hello');
+            characterFormatEle.val(2);
+            characterFormatEle.attr('disabled', 'disabled');
             break;
         default:
             addContentEle.removeAttr('disabled');
             displayFormatEle.removeAttr('disabled');
+            characterFormatEle.removeAttr('disabled');
             break;
     }
 });
@@ -209,6 +211,34 @@ $("#child-display-format").change(function() {
     }
 });
 
+/**
+ * 获取添加规则的设置
+ *
+ * @return {Object} - 返回设置内容
+ */
+function getAddRuleSetting() {
+    // 添加位置
+    const position = $("#add-position").val();
+    // 添加内容
+    const addContent = $("#add-content").val();
+    // 显示格式
+    const displayFormat = $("#display-format").val();
+    // 特征生成方式
+    const characterFormat = $("#character-format").val();
+
+    // 序号格式
+    const serialType = $("#serial-type").val();
+    const setting = {
+        serialType,
+        characterFormat,
+        addContent,
+        position,
+        displayFormat,
+    };
+
+    return setting;
+}
+
 function activeSubSheetIs(idx){
     let rst = subSpread.getActiveSheetIndex() == idx;
     return rst;