Selaa lähdekoodia

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

zhongzewei 7 vuotta sitten
vanhempi
commit
bb83d2a654

+ 13 - 0
public/web/tree_sheet/tree_sheet_controller.js

@@ -54,6 +54,19 @@ var TREE_SHEET_CONTROLLER = {
                 }
             }
         };
+        controller.prototype.deleteNode = function (node,next) {
+            var that = this;
+            if (node){
+                var row = node.serialNo();
+                if (this.tree.delete(node)) {
+                    TREE_SHEET_HELPER.massOperationSheet(this.sheet, function () {
+                        that.sheet.deleteRows(row,1);
+                        next?that.setTreeSelected(that.tree.items[row]):"";
+                    });
+                }
+            }
+
+        };
         controller.prototype.upLevel = function () {
             var that = this;
             if (this.tree.selected) {

+ 12 - 1
web/building_saas/glj/js/project_glj.js

@@ -229,6 +229,7 @@ function init() {
             // 赋值
             jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
             jsonData= filterProjectGLJ(jsonData);
+            jsonData = sortProjectGLJ(jsonData);
             mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData;
             mixRatioMap = data.mixRatioMap !== undefined ? data.mixRatioMap : mixRatioMap;
             host = data.constData.hostname !== undefined ? data.constData.hostname : '';
@@ -341,7 +342,9 @@ function successTrigger(field, info) {
             break;
     }
     // 重新加载数据到缓存
-    projectObj.project.projectGLJ.loadData();
+    projectObj.project.projectGLJ.loadData(function () {
+        projectObj.project.projectGLJ.loadCacheData();
+    });
 
     // 更新定额工料机
     gljOprObj.refreshView();
@@ -387,3 +390,11 @@ function filterProjectGLJ(jsonData) {
     return jsonData;
 }
 
+function sortProjectGLJ(jsonData) {
+    if (jsonData.length > 0){
+        jsonData = _.sortByAll(jsonData,[function (item) {
+            return item.unit_price.type+"";
+        },'code']);
+    }
+    return jsonData
+}

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

@@ -356,10 +356,11 @@ ProjectGLJSpread.prototype.compositionCalculate = function(row) {
                 continue;
             }
             let rowConsumption = consumption[index] === undefined ? 0 : consumption[index];
+            let decimal = getDecimal("glj.unitPrice");
             // 计算价格
-            let rowMarketPrice = (marketPrice * rowConsumption).toDecimal(2);
+            let rowMarketPrice = (marketPrice * rowConsumption).toDecimal(decimal);
             parentMarketPrice[active] = parentMarketPrice[active] === undefined ?
-                rowMarketPrice : (parentMarketPrice[active] + rowMarketPrice).toDecimal(2);
+                rowMarketPrice : (parentMarketPrice[active] + rowMarketPrice).toDecimal(decimal);
 
         }
 

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

@@ -163,7 +163,7 @@
                                               </p>
                                               <p>
                                                   <label class="title">子目生成方式:</label>
-                                                  <select id="child-display-format">
+                                                  <select id="child-display-format" disabled="disabled">
                                                       <option value="1" selected="selected">编号+定额名称</option>
                                                       <option value="2">序号+定额名称</option>
                                                   </select>

+ 7 - 0
web/building_saas/main/js/controllers/project_controller.js

@@ -14,6 +14,13 @@ ProjectController = {
             sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
         });
     },
+    syncDisplayNewRationGljNode:function (sc,newNode) {
+        TREE_SHEET_HELPER.massOperationSheet(sc.sheet, function () {
+            sc.sheet.addRows(newNode.serialNo(), 1);
+            TREE_SHEET_HELPER.refreshTreeNodeData(sc.setting, sc.sheet, [newNode], false);
+            sc.sheet.showRow(newNode.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+        });
+    },
     addBills: function (project, sheetController, std) {
         if (!project || !sheetController) { return null; }
 

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

@@ -34,7 +34,7 @@ const gljType = {
     COMMERCIAL_MORTAR: 206,
     // ==============材料类型=================
     // ==============机械类型=================
-    // 普通机械
+    // 机械台班
     GENERAL_MACHINE: 301,
     // 机械组成物
     MACHINE_COMPOSITION: 302,

+ 16 - 0
web/building_saas/main/js/models/project_glj.js

@@ -140,6 +140,7 @@ ProjectGLJ.prototype.loadCacheData = function() {
     }
     jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
     jsonData=filterProjectGLJ(jsonData);
+    jsonData = sortProjectGLJ(jsonData);
     projectGLJSheet.setData(jsonData);
     projectGLJSpread.specialColumn(jsonData);
 };
@@ -170,6 +171,8 @@ ProjectGLJ.prototype.updateBasePriceFromRG=function(recode,updateField,newval){
             me.refreshProjectGLJPrice(data);
             me.refreshRationGLJPrice(glj);
             gljOprObj.showRationGLJSheetData();
+            me.refreshTreeNodePriceIfNeed(glj);
+            
             $.bootstrapLoading.end();
         }
         $.bootstrapLoading.start();
@@ -180,6 +183,18 @@ ProjectGLJ.prototype.updateBasePriceFromRG=function(recode,updateField,newval){
         gljOprObj.showRationGLJSheetData();
     }
 }
+ProjectGLJ.prototype.refreshTreeNodePriceIfNeed = function (data) {
+    if((data.unit_price.type = gljType.MAIN_MATERIAL||data.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMateria==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;
+                return true;
+            }
+        })
+        projectObj.mainController.refreshTreeNode(nodes);
+
+    }
+}
 
 ProjectGLJ.prototype.refreshRationGLJPrice=function (glj) {
     for(let ration_glj of gljOprObj.sheetData){
@@ -209,6 +224,7 @@ ProjectGLJ.prototype.refreshProjectGLJPrice=function(data){
                 glj.unit_price.market_price = d.market_price;
                 this.setAdjustPrice(glj);
                 this.refreshRationGLJPrice(glj);
+                this.refreshTreeNodePriceIfNeed(glj);
             }
         }
     }

+ 86 - 16
web/building_saas/main/js/models/ration_glj.js

@@ -86,34 +86,36 @@ var ration_glj = {
 
         // 提交数据后返回数据处理
         ration_glj.prototype.doAfterUpdate = function(err, data){
+            var me = this;
             if(!err){
                 if(data.updateTpye=='ut_update'){
-                    this.refreshAfterUpdate(data);
+                    me.refreshAfterUpdate(data);
                 }else if(data.updateTpye=='ut_delete'){
-                    this.refreshAfterDelete(data);
+                    me.refreshAfterDelete(data);
                 } else {
-                    this.refreshAfterSave(data);
+                    me.refreshAfterSave(data);
                 }
-                projectObj.project.projectGLJ.loadData();
             }
+            projectObj.project.projectGLJ.loadData();
         };
         ration_glj.prototype.refreshAfterSave=function(data){
+            let me = projectObj.project.ration_glj;
             let neRecodes=[];
             if(data){
                // neRecodes=data.newRecords;//原来是显示和缓存分开的,后来发现会导致数据不一致的问题所以改成统一的了,这里也只是会作为显示。
                 neRecodes = data.showDatas;
                 gljOprObj.sheetData=neRecodes;
             }
-            if(projectObj.project.ration_glj.datas&&Array.isArray(projectObj.project.ration_glj.datas)){
+            if(me.datas&&Array.isArray(me.datas)){
                 if(data){
-                    projectObj.project.ration_glj.datas = projectObj.project.ration_glj.datas.concat(neRecodes);
+                    me.datas = me.datas.concat(neRecodes);
                 }
             }else {
-                projectObj.project.ration_glj.datas = neRecodes;
+                me.datas = neRecodes;
             }
             gljOprObj.showRationGLJSheetData(true);
             //add to mainTree;
-
+            me.addToMainTree(neRecodes);
             let node = project.mainTree.selected;
             project.calcProgram.calculate(node);
             project.calcProgram.saveNode(node);
@@ -121,6 +123,33 @@ var ration_glj = {
                 calcProgramObj.showData(node, false);
             };
         };
+        ration_glj.prototype.addToMainTree = function (datas) {
+            datas = sortRationGLJ(datas);
+            for(let data of datas){
+                if(this.needShowToTree(data)){
+                    this.transferToNodeData(data);
+                    let parentNode = _.find(projectObj.project.mainTree.items,function (n) {//找父节点
+                        return n.sourceType==ModuleNames.ration &&n.data.ID==data.rationID;
+                    });
+                    if(parentNode){
+                        let nextNodeID=null;
+                        if(parentNode.children.length>0){
+                            for(let br of parentNode.children){
+                                if(compareRationGLJ(data,br.data)){//如果有兄弟节点则找到添加位置。
+                                    nextNodeID = br.getID();
+                                }
+                            }
+                        }
+                        nextNodeID = nextNodeID?nextNodeID:parentNode.tree.rootID();
+                        let newNode = projectObj.project.mainTree.insert(parentNode.getID(),nextNodeID);
+                        newNode.source = data;
+                        newNode.sourceType = this.getSourceType();
+                        newNode.data = data;
+                        ProjectController.syncDisplayNewRationGljNode(projectObj.mainController,newNode);
+                    }
+                }
+            }
+        };
         ration_glj.prototype.refreshAfterUpdate=function(data){
             var me = this;
             if(data.quantityRefresh){
@@ -147,13 +176,29 @@ var ration_glj = {
         };
         ration_glj.prototype.refreshAfterDelete=function(data){
             var glj_list = projectObj.project.ration_glj.datas;
-            _.remove(glj_list,data.query);
+            var oldData = _.remove(glj_list,data.query);
             _.remove(gljOprObj.sheetData,data.query);
             gljOprObj.showRationGLJSheetData();
             projectObj.project.projectGLJ.loadData();
+            var rationNode = null;
+            var next = null;
             var selected = projectObj.project.mainTree.selected;
-            selected.data.adjustState=data.adjustState;
-            projectObj.mainController.refreshTreeNode([selected]);
+            if(selected.sourceType==ModuleNames.ration){ //如果选中的是定额,说明是右键删除工料机操作,如果选中的是定额工料机,则说明是在造价书主界面中点击了删除按钮
+                rationNode= selected;
+            }else if(selected.sourceType==ModuleNames.ration_glj){
+                rationNode = selected.parent;
+                next = true;
+            }
+            rationNode.data.adjustState=data.adjustState;
+            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;
+                    });
+                    projectObj.mainController.deleteNode(node,next);
+                }
+            }
         };
         // CSL,2017.05.09
         ration_glj.prototype.modifyQuantity = function (data, newQuantity) {
@@ -286,20 +331,25 @@ var ration_glj = {
             var callback=function (data) {
                 let initShow = false;//是否需要表格初始化显示
                 if(updateField=='customQuantity'){
-                    console.log(data);
                     me.refreshAfterQuantityUpdate(data,node);
                 }else {
                     var doc = data.doc;
                     for(var key in doc){
                         recode[key] = doc[key];
                     }
-                    console.log(data);
                     if(data.hasOwnProperty('adjustState')){//更新定额调整状态
                         me.updateRationAdjustState(data.adjustState,recode.rationID,node);
                     }
                     if(recode.subList&&recode.subList.length>0){
                         initShow = true;
                     }
+                    if(node){//如果不是在造价书页面直接编辑,则不用刷新
+                        if(updateField=="type"&&!(newval == gljType.MAIN_MATERIAL||newval==gljType.EQUIPMENT)){//如果改变类型后不是主材或设备,则在造价书树中移除
+                            projectObj.mainController.deleteNode(node,true);
+                        }else {
+                            me.refreshTreeNodeIfNeeded(recode);
+                        }
+                    }
                 }
                 if(initShow==false){//不需要初始化,只需耍新当前显示就可以了
                     gljOprObj.showRationGLJSheetData();
@@ -343,7 +393,7 @@ var ration_glj = {
             })
             if(node){
                 node.data.adjustState=adjustState;
-                nodes.push(node)
+                nodes.push(node);
             }
             if(rnode){
                 nodes.push(rnode);
@@ -382,7 +432,7 @@ var ration_glj = {
               }
               if(glj.hasOwnProperty("compilationId")){
                   ration_glj.from="cpt";
-                  if(glj.code.indexOf('-')!=-1){//这条工料机是用户通过修改称、规格、型号等保存到补充工料机库的
+                  if(glj.code.indexOf('-')!=-1){//这条工料机是用户通过修改称、规格、型号等保存到补充工料机库的
                       ration_glj.original_code = glj.code.split('-')[0];//取-前的编号作为原始编号
                   }
               }
@@ -480,6 +530,7 @@ var ration_glj = {
            var gljList = _.filter(this.datas,function (n) {
               return n.rationID == rationID&&(n.type==gljType.MAIN_MATERIAL||n.type==gljType.EQUIPMENT)
            });
+           gljList = sortRationGLJ(gljList);
            return gljOprObj.combineWithProjectGlj(gljList);
         };
         ration_glj.prototype.transferToNodeData = function (data) {
@@ -493,7 +544,13 @@ var ration_glj = {
                 return;
             }
             if(fieldName=="marketUnitFee"){
-
+                var decimal =getDecimal("glj.unitPrice");
+                var newval = number_util.checkNumberValue(value,decimal);
+                if(newval){
+                    fieldName="marketPrice";
+                    projectObj.project.projectGLJ.updatePriceFromRG(node.data,fieldName,newval);
+                    return;
+                }
             }else {
                 if(value!==undefined&&value!==null){
                     if(fieldName=="subType"){
@@ -507,6 +564,19 @@ var ration_glj = {
            // node.data.subType = value;
             projectObj.mainController.refreshTreeNode([node]);
         };
+        ration_glj.prototype.refreshTreeNodeIfNeeded=function (data) {
+            if(this.needShowToTree(data)){
+                this.transferToNodeData(data);
+                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){
+                return true
+            }
+            return false
+        }
         return new ration_glj(project);
     }
 };

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

@@ -753,20 +753,23 @@ let pageCCOprObj = {
         });
     },
     /**
-     * 根据配置转换清单项目特征
+     * 根据配置设置清单项目特征
      *
      * @param {Object} node - 选中的node节点
      * @param {Object} setting - 设置
      * @return {void}
      */
-    buildCharacterBySetting: function(node, setting) {
+    setCharacterBySetting: function(node, setting) {
         let contentArray = [];
         // 特征部分
         const itemCharacter = node.data.itemCharacter;
+        // 内容数据
+        const itemJob = node.data.jobContent;
 
-        if (itemCharacter === undefined || itemCharacter.length <= 0) {
+        if (itemCharacter === undefined || itemCharacter.length <= 0 || itemJob === undefined || itemJob.length <= 0) {
             return;
         }
+
         let characterArray = [];
         for (const tmp of itemCharacter) {
             if (tmp.eigenvalue === undefined || tmp.eigenvalue.length <= 0) {
@@ -797,10 +800,6 @@ let pageCCOprObj = {
         }
 
         // 内容部分
-        const itemJob = node.data.jobContent;
-        if (itemJob === undefined || itemJob.length <= 0) {
-            return;
-        }
         let jobArray = [];
         for (const tmp of itemJob) {
             // 匹配设置的序号格式
@@ -827,21 +826,23 @@ let pageCCOprObj = {
                 break;
             case "3":
                 // 项目特征
-                contentArray.push(characterArray);
+                contentArray.push.apply(contentArray, characterArray);
                 break;
             case "4":
                 // 工作内容
-                contentArray.push(jobArray);
+                contentArray.push.apply(contentArray, jobArray);
                 break;
             case "5":
                 // 定额子目
+                const rationChapter = this.getRationChapter(node, setting);
+                contentArray.push.apply(contentArray, rationChapter);
                 break;
         }
         // 显示格式
         switch (setting.displayFormat) {
             case "1":
                 // 换行分隔
-                content = contentArray.join('\r\n');
+                content = contentArray.join("\r\n");
                 break;
             case "2":
                 // 逗号分隔
@@ -853,18 +854,30 @@ let pageCCOprObj = {
                 break;
         }
         // 添加到对应位置
+        let saveObj = {};
         switch (setting.position) {
             case "1":
                 // 添加到项目特征列
-                node.data.itemCharacterText = content;
+                saveObj = {field: 'itemCharacterText', text: content};
+                // 更新到数据库
+                pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet,
+                    {field: 'itemCharacter', updateArr: itemCharacter}, saveObj, characterOprObj);
                 break;
             case "2":
                 // 添加到清单名称列
-                node.data.name = content;
+                const column = this.mainActiveCell.col !== undefined ? this.mainActiveCell.col : -1;
+                let colSetting = projectObj.mainController.setting.cols[column];
+                if (colSetting !== undefined) {
+                    projectObj.project.Bills.updateField(node.source, 'name', content, true);
+                    projectObj.mainController.refreshTreeNode([node]);
+                }
                 break;
             case "3":
                 // 添加到工作内容列
-                node.data.jobContentText = content;
+                saveObj =  {field: 'jobContentText', text: content};
+                // 更新到数据库
+                pageCCOprObj.updateCharacterContent(pageCCOprObj.currentFindSet,
+                    {field: 'jobContent', updateArr: itemJob}, saveObj, contentOprObj);
                 break;
         }
 
@@ -895,4 +908,29 @@ let pageCCOprObj = {
         }
         return serialNo;
     },
+    /**
+     * 查找选中的树节点中定额子目数据
+     *
+     * @param {Object} selectNode - 选中的节点
+     * @param {Object} setting - 设置
+     * @return {Array} - 返回定额子目数组
+     */
+    getRationChapter: function(selectNode, setting) {
+        let result = [];
+        if (selectNode.children === undefined || selectNode.children.length <= 0) {
+            return result;
+        }
+        // 查找对应的定额数据
+        let count = 1;
+        for (const tmp of selectNode.children) {
+            if (tmp.sourceType !== 'ration') {
+                continue;
+            }
+            const serialNo = this.formatSerialNumber(setting.serialType, count.toString());
+            result.push(serialNo + tmp.data.code + ':' + tmp.data.name);
+            count++;
+        }
+
+        return result;
+    },
 }

+ 27 - 4
web/building_saas/main/js/views/glj_view.js

@@ -559,7 +559,7 @@ var gljOprObj = {
         this.sheet.setRowCount(0);
         //console.log(+new Date())
         //this.sheet.getRange(0,-1,this.sheet.getRowCount(),-1).visible(true); //这个方法导致加载缓慢
-        this.sheetData=_.sortBy(this.sheetData,'type');
+        this.sheetData=sortRationGLJ(this.sheetData);
         this.sumQuantity();//计算总消耗量
         this.addMixRatioToShow();//显示组成物信息
         this.initRationTree(init);
@@ -751,7 +751,7 @@ var gljOprObj = {
         var newval;
         if(updateField=='marketPrice'||updateField=='customQuantity'||updateField=='basePrice'){
             if(args.editingText==null){
-                newval="";
+                updateField=='marketPrice'||updateField=='customQuantity'?newval=0:newval="";
             }else {
                 var decimal = updateField=='customQuantity'?getDecimal("glj.quantity"):getDecimal("glj.unitPrice");
                 newval = number_util.checkNumberValue(args.editingText,decimal);
@@ -954,8 +954,9 @@ var gljOprObj = {
                     selected.data.adjustState=result.adjustState;
                     //project.ration_glj.datas = project.ration_glj.datas.concat(result.newRecodes);//显示和缓存统一,这样的话就不用更新两个位置了
                     project.ration_glj.datas = project.ration_glj.datas.concat(result.showData);
-                    gljOprObj.sheetData = gljOprObj.sheetData.concat(result.showData)
+                    gljOprObj.sheetData = gljOprObj.sheetData.concat(result.showData);
                     gljOprObj.showRationGLJSheetData();
+                    project.ration_glj.addToMainTree(result.showData);
                     project.projectGLJ.loadData();
                     projectObj.mainController.refreshTreeNode([selected]);
                     $.bootstrapLoading.end();
@@ -1053,7 +1054,6 @@ var gljOprObj = {
             nodes.push(node);
         }
     }
-
     projectObj.mainController.refreshTreeNode(nodes);
 
     },
@@ -1162,7 +1162,11 @@ var gljOprObj = {
             }
         };
         return new TreeNodeCellType()
+    },
+    marketPriceReadOnly:function(node){
+        return node.data.type==gljType.CONCRETE||node.data.type==gljType.MORTAR||node.data.type==gljType.MIX_RATIO||node.data.type==gljType.GENERAL_MACHINE||node.data.isEstimate==1
     }
+
 }
 
 $(function(){
@@ -1295,4 +1299,23 @@ function getFormatter(decimal) {
         pre += "0"
     }
     return pre;
+}
+
+function sortRationGLJ(list) {
+    list= _.sortByAll(list,[function (item) {
+        return item.type+"";
+    },"code"])
+    return list;
+}
+
+function compareRationGLJ(a,b) {
+    if((a.type+"")<(b.type+"")){
+        return true
+    }
+    if((a.type+"")==(b.type+"")){
+        if (a.code<b.code){
+            return true
+        }
+    }
+    return false;
 }

+ 3 - 0
web/building_saas/main/js/views/main_tree_col.js

@@ -116,6 +116,9 @@ let MainTreeCol = {
         },
         forQuantity:function (node) {
             return MainTreeCol.readOnly.glj(node)||MainTreeCol.readOnly.billsParent(node)
+        },
+        forMarketPrice:function (node) {
+            return MainTreeCol.readOnly.bills(node)||(MainTreeCol.readOnly.ration(node)&&node.data.type == rationType.ration)||gljOprObj.marketPriceReadOnly(node);
         }
     },
     cellType: {

+ 8 - 1
web/building_saas/main/js/views/project_view.js

@@ -353,6 +353,12 @@ var projectObj = {
         // 检查输入类型等
         let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
         projectObj.updateCellValue(node, value, colSetting);
+
+        // 自动行高
+        const autoHeight = project.property.displaySetting.autoHeight;
+        if (autoHeight) {
+            this.mainSpread.getActiveSheet().autoFitRow(info.row);
+        }
     },
     mainSpreadRangeChanged: function (sender, info) {
         let project = projectObj.project, setting = projectObj.mainController.setting;
@@ -425,7 +431,6 @@ var projectObj = {
                     if (col.data.field === 'name' || col.data.field === 'itemCharacterText' ||
                         col.data.field === 'jobContentText' || col.data.field === 'adjustState') {
                         if (!autoHeight) {
-                            col.data.autoFitRow();
                             col.showHint = true;
                         } else {
                             col.showHint = false;
@@ -608,6 +613,8 @@ $('#delete').click(function () {
         } else if (selected.sourceType === project.Ration.getSourceType()) {
             project.Ration.delete(selected.source);
             controller.delete();
+        }else if(selected.sourceType==ModuleNames.ration_glj){
+            project.ration_glj.updataOrdelete(selected.source);
         };
         projectObj.converseCalculateBills(parent);
     }

+ 26 - 4
web/building_saas/main/js/views/sub_view.js

@@ -135,9 +135,7 @@ $("#use-to-current").click(function() {
         displayFormat,
     };
     let selectedNode = projectObj.mainController.tree.selected;
-    pageCCOprObj.buildCharacterBySetting(selectedNode, setting);
-    // console.log(changeNode);
-    projectObj.mainController.refreshTreeNode([selectedNode], false);
+    pageCCOprObj.setCharacterBySetting(selectedNode, setting);
 });
 // 添加位置选择
 $("#add-position").change(function() {
@@ -150,7 +148,7 @@ $("#add-position").change(function() {
             // 当“添加位置”是“分别添加到对应列”,则“添加内容”恢复默认“无”,且灰显;“显示格式”恢复默认“换行分隔”,且灰显。
             addContentEle.val('');
             addContentEle.attr('disabled', 'disabled');
-            displayFormatEle.val(1);
+            displayFormatEle.val(2);
             displayFormatEle.attr('disabled', 'disabled');
             console.log('hello');
             break;
@@ -160,6 +158,30 @@ $("#add-position").change(function() {
             break;
     }
 });
+// 添加内容选择
+$("#add-content").change(function() {
+    const selected = $(this).children(":selected").val();
+    const characterFormatEle = $("#character-format");
+    const childDisplayFormatEle = $("#child-display-format");
+
+    switch (selected) {
+        case '4':
+            // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。
+            characterFormatEle.attr('disabled', 'disabled');
+            characterFormatEle.val(2);
+            break;
+        case '5':
+            // 当“添加内容”是“定额子目”或“工作内容”,则“特征生成方式”灰显,不需选择;否则有效可选。
+            characterFormatEle.attr('disabled', 'disabled');
+            characterFormatEle.val(2);
+            // 当“添加内容”是“定额子目”,则“子目生成方式”有效可选;否则灰显,不需选择。
+            childDisplayFormatEle.removeAttr('disabled');
+            break;
+        default:
+            childDisplayFormatEle.attr('disabled', 'disabled');
+            break;
+    }
+});
 
 // 子目生成方式选择事件
 $("#child-display-format").change(function() {