Browse Source

插入分部后,自动弹出“选择分部”窗口。

zhangweicheng 4 years ago
parent
commit
69b44c3b04

+ 3 - 3
public/web/common_util.js

@@ -96,7 +96,7 @@ function deletePropNames(object, namesArr) {
 function sortTreeChildren(lists) {//树结构排序
     let IDMap ={},nextMap = {}, firstNode = null,newList=[];
     for(let l of lists){
-        if(l.children&&l.children.length > 0) l.children = sortChildren(l.children);//递规排序
+        if(l.children&&l.children.length > 0) l.children = sortTreeChildren(l.children);//递规排序
         IDMap[l.ID] = l;
         if(l.NextSiblingID!=-1) nextMap[l.NextSiblingID] = l;
     }
@@ -129,11 +129,11 @@ function sortTreeChildren(lists) {//树结构排序
     }
 } 
 
-function setTreeChildern(children,list,parentMap){//按顺序设置树节点
+function setTreeChildren(children,list,parentMap){//按顺序设置树节点
     for(let c of children){
       list.push(c);
       if(parentMap[c.ID]){
-        getChildern(parentMap[c.ID],list,parentMap)
+        setTreeChildren(parentMap[c.ID],list,parentMap)
       }
     }
   }

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

@@ -2732,6 +2732,7 @@
               </button>
           </div>
           <div class="modal-body" style="height: 450px;padding: 0px">
+            <input type="hidden" id = "selectFBFor">
               <div class="ovf-hidden full-h" id="selectFBSheet" style="height: 100%;"></div>
           </div>
           <div class="modal-footer">

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

@@ -216,18 +216,18 @@ ProjectController = {
         if (!project || !sheetController) { return null; }
         this.addSpecialBill(project, sheetController,null, project.mainTree.selected.nextSibling,true,billType.DXFY);
     },
-    addFB:function(project, sheetController,node) {//添加分部
+    addFB:function(project, sheetController,node,ext) {//添加分部
         if (!project || !sheetController) { return null; }
         let selected =node|| project.mainTree.selected;
         if(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//选中的是分部分项,则插入做为最后一个子项
-            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB);
+            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB,ext);
         }
         if(selected.parent){
-            return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FB);
+            return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FB,ext);
         }
 
     },
-    addFXParent:async function(node){
+    addFXParent:async function(node,ext){
         let datas = [];
         //let parent = node.parent.parent;
         let newBills = {
@@ -236,6 +236,8 @@ ProjectController = {
             'type':billType.FB,
             'projectID':node.data.projectID
         }
+        if(ext) gljUtil.setProperty(newBills,ext);
+        
         if(node.preSibling){//有前兄弟 在当前分项和前兄弟中间新增一行“分部”空行,空行作为分项的父项,原父项变为空行的前兄弟。
             let changeParent = false;
             newBills.ParentID = node.parent.parent?node.parent.parent.getID():-1;
@@ -268,7 +270,6 @@ ProjectController = {
     addFX:function(project, sheetController) {//添加分项
         if (!project || !sheetController) { return null; }
         let selected = project.mainTree.selected;
-        console.log(selected);
         if(selected.data.type==billType.FB||(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING)){//选中的是分部或者是分部分项工程,则插入做为最后一个子项
             return this.addSpecialBill(project, sheetController,selected, null,true,billType.FX);
         }
@@ -278,14 +279,14 @@ ProjectController = {
             }
         }
     },
-    addSpecialBill(project,sheetController,parent,nextSibling,isUserAdd,type){
+    addSpecialBill(project,sheetController,parent,nextSibling,isUserAdd,type,ext){
         let newSource = null, newNode = null;
         let b_nexID = nextSibling==null?-1:nextSibling.source.getID();//主树和清单树,对应的树节点ID不一样
         let m_nexID = nextSibling==null?-1:nextSibling.getID();
         let b_parent = parent==null?-1:parent.source.getID();
         let m_parent = parent==null?-1:parent.getID();
 
-        newSource = project.Bills.insertSpecialBill(b_parent, b_nexID,isUserAdd,type);
+        newSource = project.Bills.insertSpecialBill(b_parent, b_nexID,isUserAdd,type,ext);
         newNode = project.mainTree.insert(m_parent,m_nexID, newSource.data.ID);
         if (newNode) {
             newNode.source = newSource;

+ 2 - 1
web/building_saas/main/js/models/bills.js

@@ -157,7 +157,7 @@ var Bills = {
             }
             return updateData;
         };
-        bills.prototype.insertSpecialBill=function(parentId, nextSiblingId,isUserAdd,type){
+        bills.prototype.insertSpecialBill=function(parentId, nextSiblingId,isUserAdd,type,ext){
             var insertData = this.tree.getInsertData(parentId, nextSiblingId, true);
             var that = this, newData = null;
             insertData.forEach(function (data) {
@@ -167,6 +167,7 @@ var Bills = {
                     }
                     data.data.type = type;
                     newData = data.data;
+                    if(ext) gljUtil.setProperty(newData,ext);
                 }
             });
             this.project.pushNow('insertBills', [this.getSourceType(), this.project.projCounter()],

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

@@ -630,6 +630,7 @@ let MainTreeCol = {
         let isFBNode = node.sourceType == ModuleNames.bills&&node.data.type == billType.FB;
         if(isFBNode){
            let CELL =sheetCommonObj.getCusButtonCellType(()=>{
+            $("#selectFBFor").val("replace");   
             $('#selectFBDiv').modal('show');
             })
             cell.cellType(CELL); 

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

@@ -113,7 +113,7 @@ $(document).ready(function () {
     });
     $("#audiCompareID").change(async function(){
         //compareID 保存在建设项目上,为方便使用,获取后挂在projectInfo上
-        let updateData = {type:ModuleNames.project,isInfo:true,data:{'ID' : projectObj.project.property.rootProjectID,compareID:parseInt(this.value)}};//,'property.locateSetting':outstd
+        let updateData = {type:ModuleNames.project,isInfo:true,data:{'ID' : projectObj.project.property.rootProjectID,compareID:parseInt(this.value)}};
         $.bootstrapLoading.start();
         await projectObj.project.syncUpdateNodesAndRefresh([updateData]);
         compareObject.showDatas();

+ 4 - 2
web/building_saas/main/js/views/project_view.js

@@ -1342,6 +1342,7 @@ var projectObj = {
                         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){
                              //添加成分项的父亲
@@ -1349,8 +1350,9 @@ var projectObj = {
                         }else{//正常添加分部
                             ProjectController.addFB(project, controller);
                             projectObj.selectColAndFocus(project.mainTree.selected);
-                        }
-                       
+                        } */
+                        $("#selectFBFor").val("add");   
+                        $('#selectFBDiv').modal('show');
                     },
                     visible: function(key, opt){
                         if(project.mainTree.selected){

+ 80 - 17
web/building_saas/main/js/views/select_FB_view.js

@@ -40,15 +40,61 @@ let selectFBObject = {
     showData:function(){
         let me = selectFBObject;
         billsGuidance.initBillsLibs(()=>{
-            if(me.datas.length==0){
-                for(let r of billsGuidance.bills.tree.roots){
-                    selectFBObject.setDatas(r);
-                }
+            let parentIDs = [];
+            let node = me.getSelectedNode();
+            if(node) parentIDs = me.getAllParentIDs(node);
+            this.datas = [];
+            for(let r of billsGuidance.bills.tree.roots){
+                selectFBObject.setDatas(r,parentIDs);
             }
             sheetCommonObj.showTreeData(me.spread.getSheet(0), me.setting, me.datas);
+            let row = me.getSelectedRow(node);
+            me.spread.getSheet(0).setSelection(row,0,1,1);
+            me.spread.getSheet(0).showRow(row, GC.Spread.Sheets.VerticalPosition.center);
         });
     },
-    setDatas:function(node){
+
+    getSelectedRow:function(node){
+        let row = 0;//要选中的行;   
+        if(node){
+            return _.findIndex(this.datas,{'ID':node.data.ID}) 
+        }
+        return row;
+    },
+
+    getSelectedNode:function(){
+        let node = null;
+        if($("#selectFBFor").val() == "replace") return node;
+      //如果是添加分部,则应选中对应的节点
+        /*1.当前定位在“分项”,则弹出“选择分部”窗口,并且默认定位在:根据分项编号的前9位查找清单规则中的父项。如果查找不到父项,则默认定位在第一行。 */
+        let selected = projectObj.project.mainTree.selected;
+        if(selected.data.type==billType.FX || selected.data.type==billType.BX){
+            let code = selected.data.code;
+            if(code.length === 12){
+                let matchCode =  code.substring(0,9);
+                for(let i of billsGuidance.bills.tree.items){
+                    if (i.data.code == matchCode) return i.parent;
+                } 
+            } 
+        }
+        return node;
+    },
+    getAllParentIDs:function(node){
+        let list = [];
+        getID(node,list);
+        return list;
+        function getID(node,l){
+            if(node.parent){
+                l.push(node.parent.data.ID); 
+                getID(node.parent,l)
+            }
+        }
+
+
+    },
+
+
+    setDatas:function(node,parentIDs){
         if(node.children.length > 0){//过滤叶子节点
             let nodeData = node.data;
             let d = {
@@ -58,9 +104,10 @@ let selectFBObject = {
                 name:nodeData.name,
                 unit:nodeData.unit
             }
+            if(parentIDs.includes(d.ID)) d.collapsed = false
             this.datas.push(d);
             for(let c of node.children){
-                this.setDatas(c)
+                this.setDatas(c,parentIDs)
             }
         }
     }
@@ -74,16 +121,32 @@ $(function () {
     $("#selectFBConfirm").click(async ()=>{
         let data = selectFBObject.getSelectedData();
         if(!data) return;
-        let selected = projectObj.project.mainTree.selected;
-        let datas = [{
-            type:'bills',
-            data:{
-                ID:selected.data.ID,
-                name:data.name,
-                code:data.code,
-                unit:data.unit
-            }
-          }]
-          await projectObj.project.syncUpdateNodesAndRefresh(datas);
+        let project = projectObj.project;
+        let controller =  projectObj.mainController;
+        let selected = project.mainTree.selected;
+        if($("#selectFBFor").val() == "replace"){
+            let datas = [{
+                type:'bills',
+                data:{
+                    ID:selected.data.ID,
+                    name:data.name,
+                    code:data.code,
+                    unit:data.unit
+                }
+              }]
+              await project.syncUpdateNodesAndRefresh(datas);
+        }else{
+            let ext = {name:data.name,code:data.code};
+            if(selected.data.type==billType.FX || selected.data.type==billType.BX){
+                //添加成分项的父亲
+                ProjectController.addFXParent(selected,ext);   
+           }else{//正常添加分部
+               ProjectController.addFB(project, controller,null,ext);
+               projectObj.selectColAndFocus(project.mainTree.selected);
+           }
+        } 
+
+ 
+     
     })
 })