Переглянути джерело

定额工料机树节点添加、删除

zhangweicheng 7 роки тому
батько
коміт
0a76639057

+ 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) {

+ 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; }
 

+ 72 - 13
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) {
@@ -298,7 +343,13 @@ var ration_glj = {
                     if(recode.subList&&recode.subList.length>0){
                         initShow = true;
                     }
-                    node?"":me.refreshTreeNodeIfNeeded(recode);//如果不是在造价书页面直接编辑,则不用刷新
+                    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();
@@ -479,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) {
@@ -513,10 +565,17 @@ var ration_glj = {
             projectObj.mainController.refreshTreeNode([node]);
         };
         ration_glj.prototype.refreshTreeNodeIfNeeded=function (data) {
-            if((data.type == gljType.MAIN_MATERIAL||data.type==gljType.EQUIPMENT)&&projectInfoObj.projectInfo.property.displaySetting.disPlayMainMateria==true){
+            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);
     }

+ 13 - 0
web/building_saas/main/js/views/glj_view.js

@@ -956,6 +956,7 @@ var gljOprObj = {
                     project.ration_glj.datas = project.ration_glj.datas.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();
@@ -1305,4 +1306,16 @@ function sortRationGLJ(list) {
         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;
 }

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

@@ -596,6 +596,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);
     }