瀏覽代碼

fix: 安徽接口,导入多个单位工程,清单基数处理问题

vian 5 年之前
父節點
當前提交
d32a3b1730
共有 2 個文件被更改,包括 25 次插入6 次删除
  1. 24 5
      public/billsUtil.js
  2. 1 1
      web/building_saas/standard_interface/import/base.js

+ 24 - 5
public/billsUtil.js

@@ -15,7 +15,7 @@
         window.BILLS_UTIL = factory();
     }
 })(() => {
-    // 清单模板各清单重设ID时,重新转换清单基数的ID引用
+    // 清单模板各清单重设ID时,重新转换清单基数的ID引用(清单模板基数中使用@x标识行号)
     function parseCalcBase(calcBase, uuidMapping) {
         const orgIDRefs = [...new Set(calcBase.match(/@\d+/g))];
         orgIDRefs.forEach(orgRef => {
@@ -31,12 +31,24 @@
         return calcBase;
     }
 
+    // 重新转换清单基数的ID引用(@xxx标识的是ID)
+    function parseIDRefCalcBase(calcBase, uuidMapping) {
+        let rst = calcBase;
+        Object
+            .entries(uuidMapping)
+            .forEach(([orgID, newID]) => {
+                rst = rst.replace(orgID, newID);
+            });
+        return rst;
+    }
+
     /*
      * @param {Array}billsList (完整的清单树结构数据)
      * @param {Function}idFactory 生成ID的方法
+     * @param {boolean}isIDRef 清单的计算基数,是否可能使用了ID引用(区分模板清单的行引用)
      * @return {void}
      * */
-    function resetTreeData(billsList, idFactory) {
+    function resetTreeData(billsList, idFactory, isIDRef = false) {
         const idMapping = {};
         idMapping['-1'] = -1;
         // 建立新ID-旧ID映射
@@ -46,9 +58,16 @@
             bills.ID = idMapping[bills.ID] ? idMapping[bills.ID] : -1;
             bills.ParentID = idMapping[bills.ParentID] ? idMapping[bills.ParentID] : -1;
             bills.NextSiblingID = idMapping[bills.NextSiblingID] ? idMapping[bills.NextSiblingID] : -1;
-            const needToParseCalcBase = bills.calcBase && reg.test(bills.calcBase);
-            if (needToParseCalcBase) {
-                bills.calcBase = parseCalcBase(bills.calcBase, idMapping);
+            if (isIDRef) {
+                const IDRefReg = /@/;
+                if (bills.calcBase && IDRefReg.test(bills.calcBase)) {
+                    bills.calcBase = parseIDRefCalcBase(bills.calcBase, idMapping);
+                }
+            } else {
+                const needToParseCalcBase = bills.calcBase && reg.test(bills.calcBase);
+                if (needToParseCalcBase) {
+                    bills.calcBase = parseCalcBase(bills.calcBase, idMapping);
+                }
             }
         });
     }

+ 1 - 1
web/building_saas/standard_interface/import/base.js

@@ -375,7 +375,7 @@ const INTERFACE_EXPORT_BASE = (() => {
       };
       delete tender.feature;
       const tenderDataBills = _.cloneDeep(templateData.bills);
-      BILLS_UTIL.resetTreeData(tenderDataBills, uuid.v1);
+      BILLS_UTIL.resetTreeData(tenderDataBills, uuid.v1, true);
       tender.bills = handleBills(tender.bills, tenderDataBills, tender.ID,); // 必须要拷贝一份,否则多单位工程情况下,前单位工程的清单数据会被后单位工程的覆盖
       // 给暂估材料和评标材料设置项目数据
       const setGLJRefFunc = glj => {