| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 'use strict';
- /**
- *
- *
- * @author Zhong
- * @date 2019/11/1
- * @version
- */
- ((factory) => {
- if (typeof module !== 'undefined') {
- module.exports = factory();
- } else {
- window.BILLS_UTIL = factory();
- }
- })(() => {
- // 清单模板各清单重设ID时,重新转换清单基数的ID引用(清单模板基数中使用@x标识行号)
- function parseCalcBase(calcBase, uuidMapping) {
- const orgIDRefs = [...new Set(calcBase.match(/@\d+/g))];
- orgIDRefs.forEach(orgRef => {
- const orgID = orgRef.match(/\d+/)[0];
- const newID = uuidMapping[orgID] || null;
- // ID匹配不上则不转换这个引用
- if (!newID) {
- return;
- }
- const replaceStr = `@${newID}`;
- calcBase = calcBase.replace(new RegExp(`${orgRef}\\b`, 'g'), replaceStr);
- });
- 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, isIDRef = false) {
- const idMapping = {};
- idMapping['-1'] = -1;
- // 建立新ID-旧ID映射
- billsList.forEach(bills => idMapping[bills.ID] = idFactory());
- const reg = /@\d+/;
- billsList.forEach(function (bills) {
- 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;
- 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);
- }
- }
- });
- }
- return {
- parseCalcBase,
- resetTreeData
- };
- });
|