Browse Source

计算基数百分号计算

zhongzewei 7 years ago
parent
commit
b9f556bb62

+ 24 - 4
web/building_saas/main/js/models/calc_base.js

@@ -523,7 +523,7 @@ let cbAnalyzer = {
     },
     //输入合法性
     inputLegal: function (exp) {
-        let ilegalRex = /[^0-9,\u4e00-\u9fa5,\+,\-,\/,\*,\(,\),.,{,},F]/g;
+        let ilegalRex = /[^0-9,\u4e00-\u9fa5,\+,\-,\/,\*,\(,\),.,{,},F,%]/g;
         return !ilegalRex.test(exp);
     },
     //基数合法性、存在性
@@ -622,8 +622,10 @@ let cbAnalyzer = {
         let ilegalRex = /[\+,\-,\*,\/]{2}/g;
         let rex2 = /[{]{2}/g;
         let rex3 = /[}]{2}/g;
-        let rex4 = /[F]{2}/g
-        return !ilegalRex.test(exp) && !rex2.test(exp) && !rex3.test(exp) && !rex4.test(exp);
+        let rex4 = /[F]{2}/g;
+        let rex5 = /[.]{2}/g;
+        let rex6 = /[%]{2}/g;
+        return !ilegalRex.test(exp) && !rex2.test(exp) && !rex3.test(exp) && !rex4.test(exp) && !rex5.test(exp) && !rex6.test(exp);
     },
     //
     legalExp: function (node) {
@@ -719,6 +721,21 @@ let cbParser = {
         }
         return rst;
     },
+    //表达式中的百分数转换成小数
+    percentToNum: function (exp) {
+        let rex = /\d+(\.\d+)?%/g;
+        let percents = exp.match(rex);
+        let numRex = /\d+(\.\d+)?/g;
+        if(cbTools.isDef(percents)){
+            for(let i = 0, len = percents.length; i < len; i++){
+                let percentNum = percents[i].match(numRex);
+                if(cbTools.isDef(percentNum) && percentNum.length === 1){
+                    exp = exp.replace(new RegExp(percents[i], 'g'), percentNum[0]/100);
+                }
+            }
+        }
+        return exp;
+    },
     //将行引用转换成ID引用
     toIDExpr: function (exp) {
         let exps = [];
@@ -878,7 +895,10 @@ let calcBase = {
             //输入式转换表达式
             let compileExp = $CBP.toCompileExpr(exp);
             //计算
-            let calcBaseValue = eval(compileExp);
+            console.log(compileExp);
+            let calcExp = $CBP.percentToNum(compileExp);
+            console.log(calcExp);
+            let calcBaseValue = eval(calcExp);
             if(!cbTools.isNum(calcBaseValue)){
                 throw '表达式不正确';
             }

+ 5 - 2
web/building_saas/main/js/views/calc_base_view.js

@@ -132,7 +132,8 @@ let calcBaseView = {
         let me = calcBaseView;
         //输入框显示原本的
         if(me.isDef(node.data.calcBase)){
-            me.inputExpr.val(node.data.calcBase);
+            console.log('enter');
+            me.inputExpr.val(cbParser.toFExpr(node.data.calcBase));
         }
         me.buildSheet();
         let baseObj = projectObj.project.calcBase.getBaseByClass(node);
@@ -151,7 +152,9 @@ let calcBaseView = {
         let rex2 = /[{]{2}/g;
         let rex3 = /[}]{2}/g;
         let rex4 = /[F]{2}/g;
-        return !rex.test(v) && !rex2.test(v) && !rex3.test(v) && !rex4.test(v);
+        let rex5 = /[.]{2}/g;
+        let rex6 = /[%]{2}/g;
+        return !rex.test(v) && !rex2.test(v) && !rex3.test(v) && !rex4.test(v) && !rex5.test(v) && !rex6.test(v);
     },
 
     //运算符点击显示到运算窗口