Browse Source

feat: 优化“插入分部”功能,新增“插入子分部”功能。

zhangweicheng 3 years atrás
parent
commit
781968684c

+ 4 - 2
public/web/id_tree.js

@@ -604,8 +604,10 @@ var idTree = {
             if (newID != -1) {
                 data.push({type: 'new', data: this.getDataTemplate(newID, parent ? parent.getID() : this.setting.rootId, nextSibling ? nextSibling.getID() : this.setting.rootId)});
 
-                if (nextSibling && nextSibling.preSibling) {
-                    tools.addUpdateDataForNextSibling(data, nextSibling.preSibling, newID);
+                if (nextSibling) {
+                    if( nextSibling.preSibling){
+                        tools.addUpdateDataForNextSibling(data, nextSibling.preSibling, newID);
+                    }  
                 } else if (parent && parent.children.length !== 0) {
                     tools.addUpdateDataForNextSibling(data, parent.lastChild(), newID);
                 } else if (!parent && this.roots.length !== 0) {

+ 2 - 4
public/web/tree_sheet/tree_sheet_helper.js

@@ -119,10 +119,8 @@ var TREE_SHEET_HELPER = {
                 let nodeStyle = projectObj.getNodeColorStyle(sheet, node);
                 if(node.data.bgColour){
                     nodeStyle.backColor = node.data.bgColour;
-                }
-                if(nodeStyle){
-                    sheet.setStyle(iRow, -1, nodeStyle);
-                }
+                }      
+                sheet.setStyle(iRow, -1, nodeStyle||{});  
             }
             setting.cols.forEach(function (colSetting, iCol) {
 

+ 23 - 6
web/building_saas/main/js/controllers/project_controller.js

@@ -230,7 +230,7 @@ ProjectController = {
         }
 
     },
-    addFXParent:async function(node,ext){
+    addFBToBeParent:async function(node,ext,parentBrother= false){
         let datas = [];
         //let parent = node.parent.parent;
         let newBills = {
@@ -241,15 +241,21 @@ ProjectController = {
         }
         if(ext) gljUtil.setProperty(newBills,ext);
         
-        if(node.preSibling){//有前兄弟 在当前分项和前兄弟中间新增一行“分部”空行,空行作为分项的父项,原父项变为空行的前兄弟。
+        if(node.preSibling || parentBrother === true){//有前兄弟,或者强制插入为父项的兄弟 在当前分项和前兄弟中间新增一行“分部”空行,空行作为分项的父项,原父项变为空行的前兄弟。
             let changeParent = false;
             newBills.ParentID = node.parent.parent?node.parent.parent.getID():-1;
             newBills.NextSiblingID = node.parent.data.NextSiblingID;
             datas.push({type:ModuleNames.bills,data:newBills,action:"add",preSiblingID:node.parent.data.ID});
             datas.push({type:ModuleNames.bills,data:{'ID':node.parent.getID(),'NextSiblingID':newBills.ID}})
             for(let c of node.parent.children){
-                if(c.data.ID == node.data.ID) changeParent = true
-                if(changeParent) datas.push({type:ModuleNames.bills,data:{'ID':c.getID(),'ParentID':newBills.ID}})
+                if(c.data.ID == node.data.ID) changeParent = true;
+                let type = ModuleNames.bills;
+                let parentField = 'ParentID';
+                if(node.sourceType===projectObj.project.Ration.getSourceType()){
+                    type = ModuleNames.ration;
+                    parentField =  'billsItemID';
+                }
+                if(changeParent) datas.push({type,data:{'ID':c.getID(),[parentField]:newBills.ID}});
             }
 
         }else{//没有前兄弟,在当前分项和父项中间新增一行“分部”空行,空行作为分项的父项,原父项变为空行的父项。当前分项/补项的所有兄弟都跟着移动。
@@ -257,15 +263,26 @@ ProjectController = {
             newBills.NextSiblingID = -1;
             datas.push({type:ModuleNames.bills,data:newBills,action:"add"});
             for(let c of node.parent.children){
-                datas.push({type:ModuleNames.bills,data:{'ID':c.getID(),'ParentID':newBills.ID}})
+                let type = ModuleNames.bills;
+                let parentField = 'ParentID';
+                if(node.sourceType===projectObj.project.Ration.getSourceType()){
+                    type = ModuleNames.ration;
+                    parentField =  'billsItemID';
+                }
+                datas.push({type,data:{'ID':c.getID(),[parentField]:newBills.ID}})
             }
         }
         if(datas.length > 0){
+            
+            projectObj.project.mainTree.selected = null;
              let nodes = await projectObj.project.syncUpdateNodesAndRefresh(datas);
              //重新计算
             cbTools.refreshFormulaNodes();
             projectObj.project.calcProgram.calcNodesAndSave(nodes);
-            projectObj.mainController.setTreeSelected(projectObj.project.mainTree.getNodeByID(newBills.ID));
+            const newSelected = projectObj.project.mainTree.getNodeByID(newBills.ID);
+            projectObj.mainController.setTreeSelected(newSelected);
+            projectObj.selectColAndFocus(newSelected);
+           
         }
 
     },

+ 4 - 2
web/building_saas/main/js/models/project.js

@@ -590,10 +590,12 @@ var PROJECT = {
                                 temObj = temNode.data;
                                 if(gljUtil.isDef(d.data.quantity))reclacQuantity = true;
                                 refreshNode.push(temNode);
-                                if(d.data.ParentID){//更新了父节点-相当于删了再添加
+                                let parentID = d.data.ParentID;
+                                if(d.type == ModuleNames.ration && d.data.billsItemID) parentID = d.data.billsItemID;
+                                if(parentID){//更新了父节点-相当于删了再添加
                                     //changeParentIDMap[temNode.data.ParentID] = true;
                                    deleteNode.push(temNode);
-                                   this.updateParentNode(temNode,d.data.ParentID,addNodeDatas);
+                                   this.updateParentNode(temNode,parentID,addNodeDatas);
                                 } 
 
                             }

+ 49 - 30
web/building_saas/main/js/views/project_view.js

@@ -1332,42 +1332,42 @@ var projectObj = {
                             return true;
                         }
                         let selected = project.mainTree.selected;
-                        if(projectObj.project.isBillsLocked()== false&&selected&&selected.sourceType==project.Bills.getSourceType()){
-                            if(selected.data.type==billType.FB){
-                                return false;
-                            }
-                            if(selected.data.type==billType.DXFY) return false; 
-
-                            if(selected.data.type==billType.FX ||  selected.data.type==billType.BX){// 当前定位在分项(包括补项),
-                                if(selected.preSibling){//判断分项有无前兄弟?
-                                    //有,则判断父项的类型是什么,是分部,右键有效显示,点击则按②执行。
-                                   return selected.parent.data.type!==billType.FB
+                        if(projectObj.project.isBillsLocked()== false&&selected){
+                            if(selected.sourceType==project.Bills.getSourceType()){
+                                if(selected.data.type==billType.FB){
+                                    return false;
                                 }
-                                return false;// 无,右键有效显示,
-                            }
-
-                            if(isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//焦点行是分部分项工程
-                                if(selected.children.length>0){
-                                    return selected.children[0].data.type==billType.FX ||selected.children[0].data.type==billType.BX;//焦点行是分部分项工程,且子项是分项或补项
-                                }else {
-                                    return false
+                                if(selected.data.type==billType.DXFY) return false; 
+    
+                                if(selected.data.type==billType.FX ||  selected.data.type==billType.BX){// 当前定位在分项(包括补项),
+                                    if(selected.preSibling){//判断分项有无前兄弟?
+                                        //有,则判断父项的类型是什么,是分部,右键有效显示,点击则按②执行。
+                                       return selected.parent.data.type!==billType.FB
+                                    }
+                                    return false;// 无,右键有效显示,
                                 }
+    
+                                if(isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//焦点行是分部分项工程
+                                    if(selected.children.length>0){
+                                        return selected.children[0].data.type==billType.FX ||selected.children[0].data.type==billType.BX;//焦点行是分部分项工程,且子项是分项或补项
+                                    }else {
+                                        return false
+                                    }
+                                }
+                            }
+                            if(selected.sourceType==project.Ration.getSourceType()){
+                               return false;
                             }
+                           
                         }
-                        return true;//除了清单,其它类型都只读
+                        return true;
                     },
                     callback: function (key, opt) {
-                        /* 2020-12-28 插入前先弹窗选择
-                        let selected = project.mainTree.selected;
-                        if(selected.data.type==billType.FX || selected.data.type==billType.BX){
-                             //添加成分项的父亲
-                             ProjectController.addFXParent(selected);
-                        }else{//正常添加分部
-                            ProjectController.addFB(project, controller);
-                            projectObj.selectColAndFocus(project.mainTree.selected);
-                        } */
-                        $("#selectFBFor").val("add");
-                        $('#selectFBDiv').modal('show');
+                     
+                       /*  $("#selectFBFor").val("add");
+                        $('#selectFBDiv').modal('show'); */
+                        //2021-09-09  插入空分部
+                        selectFBObject.insertFB({})
                     },
                     visible: function(key, opt){
                         return true;
@@ -1436,6 +1436,25 @@ var projectObj = {
                         }
                     }
                 },
+                "sub1": '--------',
+                "insertSubFB": {
+                    name: "插入子分部",
+                    icon: 'fa-sign-in',
+                    disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
+                        let selected = project.mainTree.selected;
+                        return selected.sourceType==project.Ration.getSourceType();
+                    },
+                    callback: function (key, opt) {
+                     
+                        /*  $("#selectFBFor").val("add");
+                         $('#selectFBDiv').modal('show'); */
+                         
+                         selectFBObject.insertSubFB();
+                     },
+                },
                 "spr1": '--------',
                 "insertRation": {
                     type: projectObj.registerFlexibleInsertRatoinMenu(), // 插入定额

+ 36 - 5
web/building_saas/main/js/views/select_FB_view.js

@@ -1,3 +1,5 @@
+
+
 let selectFBObject = { 
     spread:null,
     datas:[],
@@ -140,6 +142,35 @@ let selectFBObject = {
                 this.setDatas(c,parentIDs)
             }
         }
+    },
+    insertFB:function(data){
+        let project = projectObj.project;
+        let controller =  projectObj.mainController;
+        let selected = project.mainTree.selected;
+        if(selected.data.type==billType.FX || selected.data.type==billType.BX ||selected.sourceType==project.Ration.getSourceType()){
+            //添加成分项/定额的父亲
+            ProjectController.addFBToBeParent(selected,data,selected.sourceType==project.Ration.getSourceType());   
+       }else{//正常添加分部
+           ProjectController.addFB(project, controller,null,data);
+           projectObj.selectColAndFocus(project.mainTree.selected);
+       }
+    },
+    insertSubFB:function(){
+        let project = projectObj.project;
+        let controller =  projectObj.mainController;
+        let selected = project.mainTree.selected;
+        if(selected){
+           if(selected.children && selected.children.length > 0){
+            let firstNode = selected.children[0];
+            if(firstNode.sourceType==project.Ration.getSourceType()){
+                //插入为定额的父项
+                ProjectController.addFBToBeParent(firstNode,{});
+            }else if(selected.data.type==billType.FB){
+                //插入为第一个子节点
+                ProjectController.addSpecialBill(project, controller,selected, firstNode,true,billType.FB,{});
+            }
+           }
+        }
     }
 }
 $(function () {
@@ -153,7 +184,6 @@ $(function () {
         let data = selectFBObject.getSelectedData();
         if(!data) return;
         let project = projectObj.project;
-        let controller =  projectObj.mainController;
         let selected = project.mainTree.selected;
         if($("#selectFBFor").val() == "replace"){
             let datas = [{
@@ -167,14 +197,15 @@ $(function () {
               }]
               await project.syncUpdateNodesAndRefresh(datas);
         }else{
-            let ext = {name:data.name,code:data.code};
+          /*   let ext = {name:data.name,code:data.code};
             if(selected.data.type==billType.FX || selected.data.type==billType.BX){
                 //添加成分项的父亲
-                ProjectController.addFXParent(selected,ext);   
+                ProjectController.addFBToBeParent(selected,ext);   
            }else{//正常添加分部
-               ProjectController.addFB(project, controller,null,ext);
+               ProjectController.addFB(project, projectObj.mainController,null,ext);
                projectObj.selectColAndFocus(project.mainTree.selected);
-           }
+           } */
+           selectFBObject.insertFB( {name:data.name,code:data.code})
         }