|
@@ -194,7 +194,7 @@ let calcTools = {
|
|
|
let ns = fieldName.split(".");
|
|
|
if (ns.length != 2)
|
|
|
return 0
|
|
|
- else if (treeNode.data.feesIndex[ns[0]] && treeNode.data.feesIndex[ns[0]][ns[1]])
|
|
|
+ else if (treeNode.data.feesIndex && treeNode.data.feesIndex[ns[0]] && treeNode.data.feesIndex[ns[0]][ns[1]])
|
|
|
return parseFloat(treeNode.data.feesIndex[ns[0]][ns[1]])
|
|
|
else
|
|
|
return 0;
|
|
@@ -708,7 +708,7 @@ let analyzer = {
|
|
|
let arrF = expr.match(pattF);
|
|
|
return arrF ? arrF : [];
|
|
|
},
|
|
|
- getAtIDArr: function (expr) {
|
|
|
+ getAtIDArr: function (expr) { // ['@1','@2']
|
|
|
let patt = new RegExp(/@\d+/gi);
|
|
|
let arr = expr.match(patt);
|
|
|
return arr ? arr : [];
|
|
@@ -805,50 +805,46 @@ let analyzer = {
|
|
|
|
|
|
return true; // 表达式合法
|
|
|
},
|
|
|
- getDispExpr: function (expression, calcTemplate) {
|
|
|
- function refIDToLine(expr, template) {
|
|
|
- let rst = expr;
|
|
|
- let IDArr = analyzer.getAtIDArr(rst);
|
|
|
- let fArr = [];
|
|
|
- for (let atID of IDArr){
|
|
|
- let FN = analyzer.getFName(atID, template);
|
|
|
- fArr.push(FN);
|
|
|
- };
|
|
|
- for (let i = 0; i < IDArr.length; i++) {
|
|
|
- let patt = new RegExp(IDArr[i]);
|
|
|
- let val = fArr[i];
|
|
|
- rst = rst.replace(patt, val);
|
|
|
- };
|
|
|
- return rst;
|
|
|
+ refIDToLines: function (expression, template) { // @2、@3 → F7、F8
|
|
|
+ let rst = expression;
|
|
|
+ let atIDArr = analyzer.getAtIDArr(rst);
|
|
|
+ let fArr = [];
|
|
|
+ for (let atID of atIDArr) {
|
|
|
+ let FN = analyzer.getFName(atID, template);
|
|
|
+ fArr.push(FN);
|
|
|
};
|
|
|
- return refIDToLine(expression, calcTemplate);
|
|
|
+ for (let i = 0; i < atIDArr.length; i++) {
|
|
|
+ let patt = new RegExp(atIDArr[i]);
|
|
|
+ let val = fArr[i];
|
|
|
+ rst = rst.replace(patt, val);
|
|
|
+ };
|
|
|
+ return rst;
|
|
|
},
|
|
|
- getExpression: function (dispExpr, calcTemplate) {
|
|
|
- function refLineToID(expr, template) {
|
|
|
- let rst = expr;
|
|
|
- let fArr = me.getFArr(rst);
|
|
|
- let IDArr = [];
|
|
|
- for (let F of fArr){
|
|
|
- let ID = me.getID(F, template);
|
|
|
- IDArr.push(ID);
|
|
|
- };
|
|
|
- for (let i = 0; i < fArr.length; i++) {
|
|
|
- let patt = new RegExp(fArr[i]);
|
|
|
- let val = `@${IDArr[i]}`;
|
|
|
- rst = rst.replace(patt, val);
|
|
|
- };
|
|
|
- return rst;
|
|
|
+ refLineToIDs: function (dispExpr, template) { // F7、F8 → @2、@3
|
|
|
+ let rst = analyzer.standard(dispExpr);
|
|
|
+ let fArr = me.getFArr(rst);
|
|
|
+ let IDArr = [];
|
|
|
+ for (let F of fArr) {
|
|
|
+ let ID = me.getID(F, template);
|
|
|
+ IDArr.push(ID);
|
|
|
};
|
|
|
-
|
|
|
- let me = analyzer;
|
|
|
- let expr = me.standard(dispExpr);
|
|
|
- return refLineToID(expr, calcTemplate);
|
|
|
+ for (let i = 0; i < fArr.length; i++) {
|
|
|
+ let patt = new RegExp(fArr[i]);
|
|
|
+ let val = `@${IDArr[i]}`;
|
|
|
+ rst = rst.replace(patt, val);
|
|
|
+ };
|
|
|
+ return rst;
|
|
|
+ },
|
|
|
+ getDispExpr: function (expression, calcTemplate) {
|
|
|
+ return analyzer.refIDToLines(expression, calcTemplate);
|
|
|
+ },
|
|
|
+ getExpression: function (dispExpr, calcTemplate) {
|
|
|
+ return analyzer.refLineToIDs(dispExpr, calcTemplate);
|
|
|
},
|
|
|
getDispExprUser: function (dispExpr, labourCoe) { // labourCoe 是 str 类型
|
|
|
- let me = analyzer;
|
|
|
- let expr = me.standard(dispExpr);
|
|
|
- expr = expr.replace(/L/g, labourCoe);
|
|
|
- return expr;
|
|
|
+ let rst = analyzer.standard(dispExpr);
|
|
|
+ rst = rst.replace(/L/g, labourCoe);
|
|
|
+ return rst;
|
|
|
},
|
|
|
getCompiledExpr: function (expression, labourCoe) { // labourCoe 是 str 类型
|
|
|
let me = analyzer;
|
|
@@ -1079,8 +1075,7 @@ class CalcProgram {
|
|
|
for (let idx of template.compiledSeq) {
|
|
|
let item = template.calcItems[idx];
|
|
|
|
|
|
- let lc = 0;
|
|
|
- if (item.labourCoeID) lc = me.compiledLabourCoes[item.labourCoeID].coe.toString();
|
|
|
+ let lc = me.getLabourCoe(item);
|
|
|
// 用于界面显示。disExpr是公式模板,不允许修改:人工系数占位符被修改后变成数值,第二次无法正确替换。
|
|
|
item.dispExprUser = analyzer.getDispExprUser(item.dispExpr, lc);
|
|
|
if (item.expression == 'HJ')
|
|
@@ -1130,6 +1125,22 @@ class CalcProgram {
|
|
|
}
|
|
|
};
|
|
|
};
|
|
|
+
|
|
|
+ refreshTemplate(template){
|
|
|
+ let me = this;
|
|
|
+ for (let item of template){
|
|
|
+ item.dispExpr = analyzer.getDispExpr(item.expression, template);
|
|
|
+ item.dispExprUser = analyzer.getDispExprUser(item.dispExpr, me.getLabourCoe(item));
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ getLabourCoe(calcItem){
|
|
|
+ let me = this;
|
|
|
+ let lc = 0;
|
|
|
+ if (calcItem.labourCoeID)
|
|
|
+ lc = me.compiledLabourCoes[calcItem.labourCoeID].coe.toString();
|
|
|
+ return lc;
|
|
|
+ };
|
|
|
|
|
|
// 存储、刷新零散的多个结点。
|
|
|
saveNodes(treeNodes, callback){
|