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