Parcourir la source

多多克隆异步问题。

chenshilong il y a 4 ans
Parent
commit
ec582cc639

+ 6 - 1
web/building_saas/main/js/controllers/block_controller.js

@@ -301,7 +301,7 @@ let BlockController = {
      * @param selected
      * @param position next/pre/sub
      */
-    confirmPaste:function (blockData,selected,position) {
+    confirmPaste:function (blockData,selected,position,callback) {
         let me = this;
         let project = projectObj.project;
         let Bills = project.Bills;
@@ -375,6 +375,11 @@ let BlockController = {
              //主材设备工料机插入主树
              project.ration_glj.addToMainTree(result.ration_gljs);
              //更新计算程序模板,并进行重新计算
+             if(callback){
+                callback(rationNodes,calcNodes);
+                return;
+            }
+
              project.calcProgram.calcNodesAndSave(calcNodes,async function () {
                  installationFeeObj.calcInstallationFee();
                  await OVER_HEIGHT.reCalcOverHeightFee();

+ 29 - 24
web/building_saas/main/js/views/block_lib.js

@@ -588,30 +588,35 @@ var blockLibObj = {
         $("#div_cloneOptions").modal({show: true});
     },
     oneToOneClone: function (projectNode, block, options) {
-        let canClone = true;
-        if (options.checkCode)
-            canClone = canClone && (projectNode.data.code.substr(0, 9) == block.data.code.substr(0, 9));
-        if (options.checkName)
-            canClone = canClone && (projectNode.data.name == block.data.name);
-        if (options.checkUnit)
-            canClone = canClone && (projectNode.data.unit == block.data.unit);
-        if (!canClone) return;
-        
-        if (options.overwriteRations)
-            projectObj.project.Bills.deleteChildren(projectNode);
-        /*  这里封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
-            但这里结构要作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
-            该操作前提:当前块文件的全部数据已从后台取到前台。  */
-        let vBlock_WC = {
-            compilationID: block.data.compilationID,
-            copyTime: block.data.copyTime,
-            firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
-            isFBFX: block.data.isFBFX,
-            zeroQuantity: options.zeroQuantity,
-            datas: block.data.children       // rations
-        };
-        vBlock_WC = JSON.parse(JSON.stringify(vBlock_WC));
-        BlockController.confirmPaste(vBlock_WC, projectNode, 'sub');
+        return new Promise(function (resolve, reject) {        
+            let canClone = true;
+            if (options.checkCode)
+                canClone = canClone && (projectNode.data.code.substr(0, 9) == block.data.code.substr(0, 9));
+            if (options.checkName)
+                canClone = canClone && (projectNode.data.name == block.data.name);
+            if (options.checkUnit)
+                canClone = canClone && (projectNode.data.unit == block.data.unit);
+            if (!canClone) return resolve([[], []]);
+            
+            if (options.overwriteRations)
+                projectObj.project.Bills.deleteChildren(projectNode);
+            /*  这里封装成伟城的块文件格式,可直接使用伟城的“粘贴块”接口。
+                但这里结构要作出调整:忽略叶子清单层,直接从定额开始(跟粘贴块有区别),始终强制在叶子清单下插入定额。
+                该操作前提:当前块文件的全部数据已从后台取到前台。  */
+            let vBlock_WC = {
+                compilationID: block.data.compilationID,
+                copyTime: block.data.copyTime,
+                firstNodeType: 1,           // 强制改成1 (因为是从清单下的定额开始。清单自身的还是保留,暂不使用使用)。
+                isFBFX: block.data.isFBFX,
+                zeroQuantity: options.zeroQuantity,
+                datas: block.data.children       // rations
+            };
+            vBlock_WC = JSON.parse(JSON.stringify(vBlock_WC));
+            BlockController.confirmPaste(vBlock_WC, projectNode, 'sub',function(r, c){
+                resolve([r, c])
+            });
+        })
+
     },
     checkShow: async function () {   // 这里需要处理异步:模板库装载完再弹出位置选择窗。
         if (!$("#kmbk").is(":visible")){  // 如果还没显示

+ 21 - 5
web/building_saas/main/js/views/project_view.js

@@ -3457,7 +3457,7 @@ $(function () {
         $("#div_createBlocks").modal("hide");
     });
 
-    $("#btn_block_clone_ok").click(function () {
+    $("#btn_block_clone_ok").click(async function () {
         let projectNode = projectObj.project.mainTree.selected;
         let block = blockLibObj.mainTree.selected;
         let options = {};
@@ -3466,16 +3466,20 @@ $(function () {
         if ($('#clone_option_unit').prop("checked")) options.checkUnit = true;
         if ($('#clone_option_zeroQuantity').prop("checked")) options.zeroQuantity = true;
         if ($('#clone_option_cover').prop("checked")) options.overwriteRations = true;
-
+        
+        let nodes = [];
+        let calcNodes = [];
         switch (blockLibObj.cloneType) {
             case 1:
-                blockLibObj.oneToOneClone(projectNode, block, options);
+                nodes = await blockLibObj.oneToOneClone(projectNode, block, options);
+                calcNodes = calcNodes.concat(nodes[1]);
                 break;
             case 2:
                 let bills = calcTools.getLeafBills(projectNode);
                 for (let bill of bills){
                     calcTools.forceSelect(bill);
-                    blockLibObj.oneToOneClone(bill, block, options);
+                    nodes = await blockLibObj.oneToOneClone(bill, block, options);
+                    calcNodes = calcNodes.concat(nodes[1]);
                 };
                 break;
             case 3:
@@ -3484,11 +3488,23 @@ $(function () {
                 for (let mtmBill of mtmBills){
                     for (let mtmBlock of mtmBlocks){
                         calcTools.forceSelect(mtmBill);
-                        blockLibObj.oneToOneClone(mtmBill, mtmBlock, options);
+                        nodes = await blockLibObj.oneToOneClone(mtmBill, mtmBlock, options);
+                        calcNodes = calcNodes.concat(nodes[1]);
                     };
                 };
                 break;
         }
+        if(calcNodes.length > 0){
+            // projectObj.project.calcProgram.calcNodesAndSave(calcNodes, function () {
+            //     installationFeeObj.calcInstallationFee();
+            // });
+
+            projectObj.project.calcProgram.calcNodesAndSave(calcNodes, async function () {
+                installationFeeObj.calcInstallationFee();
+                await OVER_HEIGHT.reCalcOverHeightFee();
+                await itemIncreaseFeeObj.calcItemIncreaseFeeByNodes(nodes[0]);
+            });
+        }
     });