chenshilong 6 rokov pred
rodič
commit
39d2a673be

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

@@ -114,6 +114,7 @@ ProjectController = {
             newNode.data = newSource.data;
 
             this.syncDisplayNewNode(sheetController, newNode);
+            return newNode;
         }
         function getSubType(node){
             for(let sub of node.children){
@@ -135,10 +136,10 @@ ProjectController = {
         if (!project || !sheetController) { return null; }
         let selected = project.mainTree.selected;
         if(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//选中的是分部分项,则插入做为最后一个子项
-            this.addSpecialBill(project, sheetController,selected, null,true,billType.FB);
+            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB);
         }
         if(selected.parent){
-            this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FB);
+            return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FB);
         }
 
     },
@@ -147,11 +148,11 @@ ProjectController = {
         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)){//选中的是分部或者是分部分项工程,则插入做为最后一个子项
-            this.addSpecialBill(project, sheetController,selected, null,true,billType.FX);
+            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FX);
         }
         if(selected.parent){
             if(selected.data.type==billType.FX||selected.data.type==billType.BX){
-                this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FX);
+                return this.addSpecialBill(project, sheetController,selected.parent, selected.nextSibling,true,billType.FX);
             }
         }
     },
@@ -169,6 +170,7 @@ ProjectController = {
             newNode.sourceType = project.Bills.getSourceType();
             newNode.data = newSource.data;
             this.syncDisplayNewNode(sheetController, newNode);
+            return newNode;
         }
     },
 

+ 21 - 2
web/building_saas/main/js/models/calc_program.js

@@ -112,8 +112,20 @@ let calcTools = {
             treeNode.source.children &&
             treeNode.source.children.length === 0;
     },
-    isbigBill: function(treeNode){
-        return this.isBill(treeNode) && treeNode.data.type == 1;
+    isBill_DXFY: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == billType.DXFY;
+    },
+    isBill_FB: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == billType.FB;
+    },
+    isBill_FX: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == billType.FX;
+    },
+    isBill_BILL: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == billType.BILL;
+    },
+    isBill_BX: function(treeNode){
+        return this.isBill(treeNode) && treeNode.data.type == billType.BX;
     },
     isNullBill: function (treeNode) {
         return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (!treeNode.data.calcBase);
@@ -137,6 +149,13 @@ let calcTools = {
     isGljRation: function (treeNode) {
         return this.isRationCategory(treeNode) && treeNode.data.type === rationType.gljRation;
     },
+    isSameTypeNode: function (node1, node2) {
+        if (node1.parent && node2.parent && (node1.parent === node2.parent) && (node1.sourceType === node1.sourceType)
+            && (node1.data && node2.data && node1.data.type === node2.data.type)){
+            return true;
+        }
+        return false;
+    },
     isInheritFrom: function (treeNode, flagsArr){
         let cur = treeNode;
         while (cur.parent) {

+ 13 - 6
web/building_saas/main/js/models/ration.js

@@ -551,10 +551,10 @@ var Ration = {
             let selected = project.mainTree.selected, newSource = null, newNode = null,pre=null,br=null;
             let billItemID = null,serialNo=1,nextID=null;
             let needInstall = false;
-            if (selected === null) { return; }
+            if (selected === null) { return null; }
             if (selected.sourceType === project.Bills.getSourceType() && selected.depth() > 0) {
                 if(selected.data.type === billType.FB){
-                    return;
+                    return null;
                 }
                 else if (selected.source.children.length > 0) {
                     alert('当前清单已有清单子项,不能套用定额。');
@@ -574,7 +574,8 @@ var Ration = {
                 pre = selected.source;
             };
             if(billItemID){
-                let newData =  me.getTempRationData(me.getNewRationID(), billItemID, serialNo, rationType);
+                let newID = me.getNewRationID();
+                let newData =  me.getTempRationData(newID, billItemID, serialNo, rationType);
                 let calQuantity =  isEmpty===true?false:optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS, 'rationQuanACToBillsQuan');
                 let brUpdate = [];
                 //更新兄弟节点的序列号
@@ -590,6 +591,9 @@ var Ration = {
                     needInstall = project.Bills.isFBFX(billsNode);//在分部分项插入的定额才需要定额安装增加费
                 }
                 $.bootstrapLoading.start();
+                newNode = project.mainTree.insert(billItemID, nextID, newID);
+                newNode.sourceType = project.Ration.getSourceType();
+                newNode.data = newData;
                 CommonAjax.post("/ration/addNewRation",{itemQuery:itemQuery,newData:newData,firstLibID: rationLibObj.getFirstStdRationLibID(),calQuantity:calQuantity,brUpdate:brUpdate,needInstall:needInstall},function (data) {
                     //更新缓存
                     me.datas.push(data.ration);
@@ -599,12 +603,12 @@ var Ration = {
 
                     //插入树节点
                     newSource = data.ration;
-                    newNode = project.mainTree.insert(billItemID, nextID, newSource.ID);
+                    // newNode = project.mainTree.insert(billItemID, nextID, newSource.ID);  上移到post方法外部。批量粘贴时,先插入空行,前端等不了,先生成树结点,效果同清单处理方式。
                     newNode.source = newSource;
-                    newNode.sourceType = project.Ration.getSourceType();
+                    // newNode.sourceType = project.Ration.getSourceType();
                     newNode.data = newSource;
                     project.projectGLJ.loadData(function () {
-                        ProjectController.syncDisplayNewNode(sheetController, newNode);
+                        // ProjectController.syncDisplayNewNode(sheetController, newNode);
                         project.ration_glj.addToMainTree(data.ration_gljs);
                         projectObj.mainController.refreshTreeNode([newNode], false);
                         project.calcProgram.calcAndSave(newNode,function () {
@@ -620,7 +624,10 @@ var Ration = {
                         $.bootstrapLoading.end();
                     });
                 })
+                ProjectController.syncDisplayNewNode(sheetController, newNode);
+                return newNode;
             }
+            else return null;
 
         };
         ration.prototype.deleteSubListOfRation = function(ration){

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

@@ -100,7 +100,7 @@ let MainTreeCol = {
             return node.data.subType != 201 && node.data.subType != 4 && node.data.subType != 5
         },
         commonUnitFee: function (node) {
-            return !(calcTools.isLeafBill(node) && !calcTools.isbigBill(node) && !calcTools.isCalcBaseBill(node) && !calcTools.isInheritFrom(node, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]));
+            return !(calcTools.isLeafBill(node) && !calcTools.isBill_DXFY(node) && !calcTools.isCalcBaseBill(node) && !calcTools.isInheritFrom(node, [fixedFlag.SUB_ENGINERRING, fixedFlag.MEASURE]));
         },
         //根据节点、父节点类型判断是否可用计算基数
         calcBaseType: function (node) {

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

@@ -564,6 +564,119 @@ var projectObj = {
             }
         }
     },
+    onClipboardPasting: function (sender, info){
+        info.cancel = true;
+
+        let rIdx = info.sheet.getActiveRowIndex();
+        let node = projectObj.project.mainTree.items[rIdx];
+        if (!node.parent){
+            hintBox.infoBox('系统提示','大项费用不允许粘贴!', 1);
+            return false;
+        };
+
+        let colName = projectObj.project.projSetting.main_tree_col.cols[info.cellRange.col].data.field;
+        if (colName == 'code'){
+            function getNodeType(node) {
+                let t = null;
+                if (calcTools.isRationItem(node))
+                    t = 1
+                else if (calcTools.isBill(node)){
+                    if (calcTools.isBill_FB(node))
+                        t = 2
+                    else if (calcTools.isBill_FX(node) || calcTools.isBill_BX(node))
+                        t = 3
+                    else if (calcTools.isBill_BILL(node))
+                        t = 4;
+                };
+                return t;
+            };
+            function getPasteTextArr() {
+                let copyText = info.pasteData.text.trim();
+                let arr = copyText.split('\r\n');
+                return arr;
+            };
+            function getPasteNodes(count, nodeType) {
+                let nodesArr = [];
+                let curNode = null;
+                for (let i = rIdx; i < rIdx + count; i++) {
+                    curNode = projectObj.project.mainTree.items[i];
+                    if (curNode && calcTools.isSameTypeNode(curNode, node)){
+                        nodesArr.push(curNode);
+                    }
+                    else{
+                        curNode = projectObj.project.mainTree.items[i - 1];
+                        break;
+                    }
+                };
+
+                if (nodesArr.length < count){
+                    if (projectObj.project.mainTree.selected != curNode)
+                        projectObj.project.mainTree.selected = curNode;
+
+                    let add = count - nodesArr.length;
+                    for (let i = 0; i < add; i++) {
+                        switch (nodeType) {
+                            case 1:
+                                curNode = projectObj.project.Ration.addNewRation(null,rationType.ration,null,true);
+                                break;
+                            case 2:
+                                curNode = ProjectController.addFB(projectObj.project, projectObj.mainController);
+                                break;
+                            case 3:
+                                curNode = ProjectController.addFX(projectObj.project, projectObj.mainController);
+                                break;
+                            case 4:
+                                curNode = ProjectController.addBills(projectObj.project, projectObj.mainController);
+                                break;
+                        }
+
+                        if (!curNode){
+                            hintBox.infoBox('系统提示','插入新结点出错,粘贴失败!', 1);
+                            return nodesArr;
+                        }
+                        else{
+                            nodesArr.push(curNode);
+                            if (projectObj.project.mainTree.selected != curNode)
+                                projectObj.project.mainTree.selected = curNode;
+                        }
+                    }
+                };
+
+                return nodesArr;
+            };
+            function doPaste(texts, nodes, nodeType) {
+                if (nodeType == 1){
+                    let updateRationCodes = [];
+                    for (let i = 0; i < texts.length; i++) {
+                        let ptNode = nodes[i];
+                        let ptText = texts[i];
+                        updateRationCodes.push({'node':ptNode, value:ptText});
+                    }
+                    projectObj.project.Ration.updateRationCodes(updateRationCodes);
+                }
+                else {
+                    for (let i = 0; i < texts.length; i++) {
+                        let ptNode = nodes[i];
+                        let ptText = texts[i];
+                        if (!(ptNode.data && ptNode.data.code && ptNode.data.code.sameText(ptText))){
+                            projectObj.updateCode(ptNode, ptText);
+                        };
+                    }
+                }
+                projectObj.mainController.refreshTreeNode(nodes);
+            };
+
+            let tagType = getNodeType(node);
+            if (!tagType){
+                hintBox.infoBox('系统提示', '该树结点类型不支持从项目编码列粘贴!', 1);
+                return false;
+            };
+
+            let textArr = getPasteTextArr();
+            let pasteNodes = getPasteNodes(textArr.length, tagType);
+            doPaste(textArr, pasteNodes, tagType);
+        };
+    },
     mainSpreadEditEnded: function (sender, info) {
         console.log('enterEDEnd');
         let project = projectObj.project;
@@ -728,6 +841,7 @@ var projectObj = {
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, that.onCellDoubleClick);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, that.onColumnWidthChanged);
+                that.mainSpread.bind(GC.Spread.Sheets.Events.ClipboardPasting, that.onClipboardPasting);
 
                 //let loadOtherStartTime = +new Date();
                 if(!projectReadOnly){