Bläddra i källkod

删除节点撤销

zhongzewei 6 år sedan
förälder
incheckning
90e6275679

+ 57 - 11
web/building_saas/main/js/controllers/block_controller.js

@@ -54,6 +54,28 @@ let BlockController = {
         }
         return false;
     },
+    // 恢复删除节点有效性
+    recoverBlockDisabled: function () {
+        if (projectReadOnly) {
+            return true;
+        }
+        const recycle = getLocalCache('project_recycle');
+        if (!recycle) {
+            return true;
+        }
+        const recycleObj = JSON.parse(recycle);
+        const firstData = recycleObj.datas.length ? recycleObj.datas[0] : null;
+        if (!firstData || firstData.projectID !== projectObj.project.ID()) {
+            return true;
+        }
+        const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
+        const parent = projectObj.project.mainTree.findNode(parentID);
+        // parentID为-1时,为大项费用
+        if (parentID !== -1 && !parent) {
+            return true;
+        }
+        return false;
+    },
     haveCalcBase : function (node) {
         if(node.data.calcBase ==null||node.data.calcBase ==undefined|| node.data.calcBase == ""){
             return false;
@@ -77,10 +99,9 @@ let BlockController = {
         }
         return null;
     },
-
-    copyBlock:function (selection) {
+    extractBlockData: function (selection) {
         let startTime = +new Date();
-        let blockOjb = {
+        let blockObj = {
             compilationID:projectObj.project.projectInfo.compilation,
             datas:[]
         };
@@ -95,21 +116,30 @@ let BlockController = {
             }
         }
         if(firstNode.sourceType == projectObj.project.Bills.getSourceType()){
-            blockOjb.firstNodeType = firstNode.data.type;
+            // 特殊处理大项费用,因为DXFY在billType中为1,与blockType中的RATION冲突了
+            blockObj.firstNodeType = firstNode.data.type === billType.DXFY ? blockType.DXFY : firstNode.data.type;
         }else if(firstNode.sourceType == projectObj.project.Ration.getSourceType()){
-            blockOjb.firstNodeType = blockType.RATION;
+            blockObj.firstNodeType = blockType.RATION;
         }
-        blockOjb.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
+        blockObj.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
         let ration_glj_Map = _.groupBy(projectObj.project.ration_glj.datas, 'rationID');
         for(let cNode of copyNodes){
-            blockOjb.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
+            blockObj.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
         }
         let getDataTime = +new Date();
         console.log(`复制所用时间——${getDataTime - startTime}`);
-        blockOjb.copyTime = +new Date();//设置复制时间,可以用来做过期处理
-        setLocalCache('project_block',JSON.stringify(blockOjb));
+        blockObj.copyTime = +new Date();//设置复制时间,可以用来做过期处理
         let endTime = +new Date();
         console.log(`复制所用时间——${endTime - startTime}`);
+        return blockObj;
+    },
+    copyBlock:function (selection) {
+        const block = this.extractBlockData(selection);
+        setLocalCache('project_block', JSON.stringify(block));
+    },
+    recycleBlock: function (selection) {
+        const block = this.extractBlockData(selection);
+        setLocalCache('project_recycle', JSON.stringify(block));
     },
     getNodeDatas : function (node,ration_glj_Map) {
         let data = node.data;
@@ -147,7 +177,21 @@ let BlockController = {
         this.confirmPaste(blockData,selected,position);
         //do paste
     },
-
+    // 恢复删除节点
+    recoverBlock: function () {
+        const recycle = JSON.parse(getLocalCache('project_recycle'));
+        const firstData = recycle.datas[0];
+        const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
+        // 恢复到父节点最末子项
+        if (parentID !== -1) {
+            const parent = projectObj.project.mainTree.findNode(parentID);
+            this.confirmPaste(recycle, parent, 'sub');
+        } else {
+            // 恢复到最末根节点后项
+            const lastRoot = projectObj.project.mainTree.roots[projectObj.project.mainTree.roots.length - 1];
+            this.confirmPaste(recycle, lastRoot, 'next');
+        }
+    },
     initOptionDiv:function (selected,blockData) {
         let Bills = projectObj.project.Bills;
         if( blockData.firstNodeType == blockType.RATION){//如果剪切板中是复制的定额块
@@ -344,7 +388,9 @@ let BlockController = {
         let sels = projectObj.mainController.sheet.getSelections();
         //设置选中并更新下方显示
         projectObj.mainController.setTreeSelected(firstNode);
-        projectObj.mainController.sheet.setSelection(firstNode.serialNo(), sels[0].col, 1, 1);
+        const serialNo = firstNode.serialNo();
+        projectObj.mainController.sheet.setSelection(serialNo, sels[0].col, 1, 1);
+        projectObj.mainController.sheet.showRow(serialNo, GC.Spread.Sheets.VerticalPosition.center);
         let bottomNodes = [];
         for (let node of newNodes){
             if ((!node.children) || (node.children && node.children.length == 0)){

+ 4 - 0
web/building_saas/main/js/models/bills.js

@@ -710,6 +710,8 @@ var Bills = {
             let includeRootNode=false;
             let parentNodes = [];
             let selection = projectObj.mainSpread.getActiveSheet().getSelections()[0];
+            console.log(`selection`);
+            console.log(selection);
             for(let i =0;i<selection.rowCount;i++){
                 let tem_node = controller.tree.items[selection.row+i];
                 //被行引用的清单(大项费用)不可删除
@@ -771,6 +773,8 @@ var Bills = {
             updateData.user_id = userID;
             $.bootstrapLoading.start();
             CommonAjax.post("/bills/multiDelete", updateData, function () {
+                // 回收删除节点
+                BlockController.recycleBlock(selection);
                 let quantity_detail_datas = project.quantity_detail.datas;
                 let ration_datas = project.Ration.datas;
                 let nodes = controller.tree.nodes;

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

@@ -351,7 +351,8 @@ const blockType ={
     FB:2,//分部
     FX:3,//分项
     BILL:4,//清单
-    BX:5//补项
+    BX:5,//补项
+    DXFY:6//大项费用
 };
 
 const filterType = {

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

@@ -1501,6 +1501,16 @@ var projectObj = {
                         BlockController.pasteBlock(project.mainTree.selected);
                     }
                 },
+                "recoverDeletedNodes": {
+                    name: '恢复删除节点',
+                    icon: 'fa-undo',
+                    disabled: function (){
+                        return BlockController.recoverBlockDisabled();
+                    },
+                    callback: function () {
+                        BlockController.recoverBlock();
+                    }
+                },
                 "editEngineer": {
                     name: '编辑工程内容',
                     icon: 'fa-edit',