Bläddra i källkod

造价书右键,自定义批量插入定额

vian 5 år sedan
förälder
incheckning
5a1d793112

+ 7 - 2
modules/main/facade/ration_facade.js

@@ -174,12 +174,17 @@ async function createNewMaterialRation(std,quantityDecimal,projectID){
 }
 
 async function addMultiRation(datas,compilation) {
-    let rst = [];
+    /* let rst = [];
     for(let data of datas){
         let r = await addNewRation(data,compilation);
         rst.push(r);
     }
-    return rst;
+    return rst; */
+    const task = [];
+    for (const data of datas) {
+        task.push(addNewRation(data, compilation));
+    }
+    return await Promise.all(task);
 }
 
 async function getSameSectionRations(data,userId,compilationId){

+ 34 - 52
web/building_saas/main/js/models/ration.js

@@ -461,7 +461,7 @@ var Ration = {
                 }
             })
         };
-        ration.prototype.addMultiRation = function (items, callback) {
+        ration.prototype.addMultiRation = async function (items) {
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
             let engineering = projectObj.project.projectInfo.property.engineering;
@@ -511,57 +511,39 @@ var Ration = {
                     }
                     newDatas.push({itemQuery: items[i].itemQuery, newData: newData, defaultLibID: rationLibObj.getDefaultStdRationLibID(), calQuantity: calQuantity, brUpdate: brUpdate, needInstall: needInstall})
                 }
-                let showLoding = true;
-                $.bootstrapLoading.start();
-                //保证由于异步的关系loading界面被隐藏,比如清单指引插入清单定额时,endUpdate中提前隐藏了loading
-                let interval =setInterval(function () {
-                    if(!$.bootstrapLoading.isLoading()&& showLoding){
-                        $.bootstrapLoading.start();
-                        clearInterval(interval);
-                    }
-                    else{
-                        clearInterval(interval);
-                    }
-                }, 100);
-                CommonAjax.post("/ration/addMultiRation",{projectID:me.project.ID(),newDatas: newDatas},function (rstData) {
-                    let newNodes = [];
-                    //更新缓存
-                    for(let data of rstData){
-                        me.datas.push(data.ration);
-                        me.addSubListOfRation(data,false);
-                        //插入树节点
-                        newSource = data.ration;
-                        newNode = project.mainTree.insert(billItemID, nextID, newSource.ID);
-                        newNodes.push(newNode);
-                        newNode.source = newSource;
-                        newNode.sourceType = project.Ration.getSourceType();
-                        newNode.data = newSource;
-                        ProjectController.syncDisplayNewNode(sheetController, newNode);
-                        nextID = project.mainTree.selected.getNextSiblingID();
-                    }
-                    project.projectGLJ.calcQuantity();
-                    for(let data of rstData){
-                        project.ration_glj.addToMainTree(data.ration_gljs);
-                    }
-                    projectObj.mainController.refreshTreeNode(newNodes, false);
-                    if(project.Bills.isFBFX(newNodes[0])) { //判断是否属于分部分项工程 ,是的话才需要做计取安装费计算
-                        project.installation_fee.calcInstallationFee(function (isChange,rations) {
-                            if(isChange){
-                                rations = rations.concat(newNodes);
-                                project.calcProgram.calcNodesAndSave(rations);
-                            }else {
-                                project.calcProgram.calcNodesAndSave(newNodes);
-                            }
-                        });
-                    }else {
-                        project.calcProgram.calcNodesAndSave(newNodes);
-                    }
-                    if(callback){
-                        callback();
-                    }
-                    showLoding = false;
-                    $.bootstrapLoading.end();
-                })
+                const rstData = await ajaxPost('/ration/addMultiRation', { projectID: me.project.ID(), newDatas });
+                let newNodes = [];
+                //更新缓存
+                for(let data of rstData){
+                    me.datas.push(data.ration);
+                    me.addSubListOfRation(data,false);
+                    //插入树节点
+                    newSource = data.ration;
+                    newNode = project.mainTree.insert(billItemID, nextID, newSource.ID);
+                    newNodes.push(newNode);
+                    newNode.source = newSource;
+                    newNode.sourceType = project.Ration.getSourceType();
+                    newNode.data = newSource;
+                    ProjectController.syncDisplayNewNode(sheetController, newNode);
+                    nextID = project.mainTree.selected.getNextSiblingID();
+                }
+                project.projectGLJ.calcQuantity();
+                for(let data of rstData){
+                    project.ration_glj.addToMainTree(data.ration_gljs);
+                }
+                projectObj.mainController.refreshTreeNode(newNodes, false);
+                if(project.Bills.isFBFX(newNodes[0])) { //判断是否属于分部分项工程 ,是的话才需要做计取安装费计算
+                    project.installation_fee.calcInstallationFee(function (isChange,rations) {
+                        if(isChange){
+                            rations = rations.concat(newNodes);
+                            project.calcProgram.calcNodesAndSave(rations);
+                        }else {
+                            project.calcProgram.calcNodesAndSave(newNodes);
+                        }
+                    });
+                }else {
+                    project.calcProgram.calcNodesAndSave(newNodes);
+                }
             }
         };
         ration.prototype.insertVolumePrice = function(type){

+ 12 - 3
web/building_saas/main/js/views/billsElf.js

@@ -732,11 +732,20 @@ const BillsElf = (function() {
     }
     //插入定额
     //@return {void}
-    function insertRations(addRationDatas){
+    async function insertRations(addRationDatas){
         if(addRationDatas.length > 0){
-            projectObj.project.Ration.addMultiRation(addRationDatas, function () {
+            try {
+                $.bootstrapLoading.start();
+                await projectObj.project.Ration.addMultiRation(addRationDatas);
                 projectObj.setActiveCell('quantity', true);
-            });
+            } catch (err) {
+                console.log(err);
+                if (!$('hintBox_form').is(':visible')) {
+                    alert(err);
+                }
+            } finally {
+                $.bootstrapLoading.end();
+            }
         }
     }
     //各监听事件

+ 30 - 20
web/building_saas/main/js/views/project_view.js

@@ -1164,9 +1164,9 @@ var projectObj = {
       return true
     },
     // 注册自定义插入清单数量
-    registerFlexibleInsertBillMenu: function (insertBillsName) {
+    registerFlexibleInsertBillMenu: function (name) {
         const project = projectObj.project;
-        const insertBillsHtml = `<span>${insertBillsName}&nbsp;&nbsp;<input id='insert-bills-number' class="menu-input" type="text" value="1" onfocus="this.select()">&nbsp;&nbsp;行</span>`;
+        const insertBillsHtml = `<span>${name}&nbsp;&nbsp;<input id='insert-bills-number' class="menu-input" type="text" value="1" onfocus="this.select()">&nbsp;&nbsp;行</span>`;
         return sheetCommonObj.registerInputContextMenuItem('insertBills', insertBillsHtml, 'fa-sign-in', async function () {
             if (project.mainTree.selected.data.type == billType.DXFY) {
                 if (project.mainTree.selected.data.calcBase && project.mainTree.selected.data.calcBase != "") {
@@ -1194,6 +1194,33 @@ var projectObj = {
             }
         });
     },
+    // 注册自定义插入定额数量
+    registerFlexibleInsertRatoinMenu: function () {
+        const project = projectObj.project;
+        const insertRationHtml = `<span>插入定额&nbsp;&nbsp;<input id='insert-ration-number' class="menu-input" type="text" value="1" onfocus="this.select()">&nbsp;&nbsp;行</span>`;
+        return sheetCommonObj.registerInputContextMenuItem('insertRation', insertRationHtml, 'fa-sign-in', async function () {
+            try {
+                const number = +$('#insert-ration-number').val();
+                if (!number) {
+                    return;
+                }
+                $.bootstrapLoading.start();
+                const newData = [];
+                for (let i = 0; i < number; i++) {
+                    newData.push({ itemQuery: null, rationType: rationType.ration });
+                }
+                await project.Ration.addMultiRation(newData);
+                projectObj.setActiveCell('quantity', true);
+            } catch (err) {
+                console.log(err);
+                if (!$('hintBox_form').is(':visible')) {
+                    alert(err);
+                }
+            } finally {
+                $.bootstrapLoading.end();
+            }
+        });
+    },
     loadMainSpreadContextMenu: function () {
         var project = this.project, spread = this.mainSpread, controller = this.mainController;
         let insertBillsName = project.projectInfo.property && project.projectInfo.property.valuationType == commonConstants.ValuationType.BUDGET?"插入项目节":"插入清单";//右键“插入清单”改文字为“插入项目节”,工程量清单中保持不变。
@@ -1309,16 +1336,6 @@ var projectObj = {
                         }
                         return true;
                     },
-                    /* callback: function (key, opt) {
-                        if (project.mainTree.selected.data.type == billType.DXFY) {
-                            if (project.mainTree.selected.data.calcBase && project.mainTree.selected.data.calcBase != "") {
-                                alert("当前有基数计算,不能插入子项。");
-                                return;
-                            }
-                        }
-                        ProjectController.addBills(project, controller);
-                        projectObj.selectColAndFocus(project.mainTree.selected);
-                    }, */
                     visible: function (key, opt) {
                         if (project.mainTree.selected) {
                             return project.Bills.isFBFX(project.mainTree.selected) == true ? false : true;
@@ -1329,6 +1346,7 @@ var projectObj = {
                 },
                 "spr1": '--------',
                 "insertRation": {
+                    type: projectObj.registerFlexibleInsertRatoinMenu(),
                     name: "插入定额",
                     icon: 'fa-sign-in',
                     disabled: function () {
@@ -1340,14 +1358,6 @@ var projectObj = {
                         // 工具栏要加按钮,且不能隐藏。菜单可以隐藏,两者又必须统一,所以启用新规则。怕以后又要改回来,所以保留。 CSL, 2018-01-02
                         return !project.Ration.canAdd(project.mainTree.selected);
                     },
-                    callback: function (key, opt) {
-                        project.Ration.addNewRation(null, rationType.ration, projectObj.selectColAndFocus, false);
-                        // ProjectController.addRation(project, controller, rationType.ration);
-                    }/*,
-                    visible: function(key, opt){
-                        var selected = project.mainTree.selected;
-                        return canInsertRationNode(selected);
-                    }*/
                 },
                 "insertGLJ": {
                     name: "插入工料机",