|
@@ -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 : [];
|
|
@@ -719,12 +719,20 @@ let analyzer = {
|
|
|
return arrBase ? arrBase : [];
|
|
|
},
|
|
|
|
|
|
- getFID: function (FName, calcTemplate) { // F3、F22 → 4、99
|
|
|
+ getID: function (FName, calcTemplate) { // F13 → 4
|
|
|
let idx = FName.slice(1) - 1;
|
|
|
let id = calcTemplate.calcItems[idx] ? calcTemplate.calcItems[idx].ID : null;
|
|
|
return id;
|
|
|
},
|
|
|
- getFItem: function (FName, calcTemplate){ // F3 → calcItems[2] → {Object}
|
|
|
+ getFName: function (atID, calcTemplate) { // @3 → F7
|
|
|
+ for (var i = 0; i < calcTemplate.calcItems.length; i++) {
|
|
|
+ if (calcTemplate.calcItems[i].ID == atID.slice(1)) {
|
|
|
+ return 'F'+ (i + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+ getItem: function (FName, calcTemplate){ // F3 → calcItems[2] → {Object}
|
|
|
let idx = FName.slice(1) - 1;
|
|
|
return calcTemplate.calcItems[idx];
|
|
|
},
|
|
@@ -797,32 +805,46 @@ let analyzer = {
|
|
|
|
|
|
return true; // 表达式合法
|
|
|
},
|
|
|
- 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.getFID(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;
|
|
|
+ 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);
|
|
|
};
|
|
|
-
|
|
|
- let me = analyzer;
|
|
|
- let expr = me.standard(dispExpr);
|
|
|
- return refLineToID(expr, 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;
|
|
|
+ },
|
|
|
+ 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);
|
|
|
+ };
|
|
|
+ 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;
|
|
@@ -1053,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')
|
|
@@ -1083,7 +1104,8 @@ class CalcProgram {
|
|
|
|
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
|
let item = template.calcItems[i];
|
|
|
- item.expression = analyzer.getExpression(item.dispExpr, template);
|
|
|
+ // item.expression = analyzer.getExpression(item.dispExpr, template);
|
|
|
+ item.dispExpr = analyzer.getDispExpr(item.expression, template);
|
|
|
template.compiledCalcItems[item.ID] = item;
|
|
|
template.compiledCalcItems[item.ID + "_idx"] = i;
|
|
|
}
|
|
@@ -1103,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){
|