فهرست منبع

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhongzewei 7 سال پیش
والد
کامیت
20a662d933

+ 54 - 43
web/building_saas/main/js/models/calc_program.js

@@ -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){

+ 1 - 3
web/building_saas/main/js/views/calc_base_view.js

@@ -281,9 +281,7 @@ let calcBaseView = {
                 if (calcItem.dispExpr != expr){
                     if (analyzer.isLegal(expr, calcItem.ID, template)){
                         let cp = projectObj.project.calcProgram;
-                        let lc = 0;
-                        if (calcItem.labourCoeID)
-                            lc = cp.compiledLabourCoes[calcItem.labourCoeID].coe.toString();
+                        let lc = cp.getLabourCoe(calcItem);
                         calcItem.dispExpr = expr;
                         calcItem.dispExprUser = analyzer.getDispExprUser(expr, lc);
                         calcItem.expression = analyzer.getExpression(expr, template);

+ 5 - 6
web/building_saas/main/js/views/calc_program_manage.js

@@ -116,15 +116,14 @@ let calcProgramManage = {
         }
     },
     onEnterCell: function (sender, args) {
-/*        let t = calcProgramManage.getSelectionInfo().template;
+        let t = calcProgramManage.getSelectionInfo().template;
         let c = calcProgramManage.getSelectionInfo().calcItem;
+        let lc = projectObj.project.calcProgram.getLabourCoe(c);
         c.dispExpr = analyzer.getDispExpr(c.expression, t);
-        let lc = 0;
-        if (c.labourCoeID) lc = projectObj.project.calcProgram.compiledLabourCoes[c.labourCoeID].coe.toString();
+        c.dispExprUser = analyzer.getDispExprUser(c.dispExpr, lc);
         c.compiledExpr = analyzer.getCompiledExpr(c.expression, lc);
-
-        let e = c.dispExpr + '  ' + c.expression + '  ' + c.compiledExpr;
-        projectObj.testDisplay('', e);*/
+        let e = c.expression + ' ' + c.dispExpr + ' ' + c.dispExprUser + ' ' + c.compiledExpr;
+        projectObj.testDisplay('', e);
     },
     saveCalcItem: function (data,callback) {//data
         let me = this;