Przeglądaj źródła

测试qa,线上无法生成调差清单js bug

laiguoran 4 lat temu
rodzic
commit
d29d6778bd
3 zmienionych plików z 304 dodań i 2 usunięć
  1. 302 0
      app/public/js/CalcEval.js
  2. 1 1
      app/view/material/list.ejs
  3. 1 1
      config/web.js

+ 302 - 0
app/public/js/CalcEval.js

@@ -0,0 +1,302 @@
+Number.prototype.toFixed = function(j) {
+    var h = this + "";
+    if (!j) {
+        j = 0
+    }
+    if (h.indexOf(".") == -1) {
+        h += "."
+    }
+    h += new Array(j + 1).join("0");
+    if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (j + 1) + "})?)\\d*$").test(h)) {
+        var h = "0" + RegExp.$2
+            , g = RegExp.$1
+            , e = RegExp.$3.length
+            , c = true;
+        if (e == j + 2) {
+            e = h.match(/\d/g);
+            if (parseInt(e[e.length - 1]) > 4) {
+                for (var f = e.length - 2; f >= 0; f--) {
+                    e[f] = parseInt(e[f]) + 1;
+                    if (e[f] == 10) {
+                        e[f] = 0;
+                        c = f != 1
+                    } else {
+                        break
+                    }
+                }
+            }
+            h = e.join("").replace(new RegExp("(\\d+)(\\d{" + j + "})\\d$"), "$1.$2")
+        }
+        if (c) {
+            h = h.substr(1)
+        }
+        return (g + h).replace(/\.$/, "")
+    }
+    return this + ""
+}
+;
+var CalcEvalMin = function() {};
+CalcEvalMin.prototype.eval = function(str) {
+    var isRetStr = str.match(new RegExp(/^".+"$/g)) != null;
+    if (isRetStr == true) {
+        str = str.replace(/^"|"$/g, "")
+    }
+    var bracketsList = this.matchOutBrackets(str);
+    for (var i = 0; i < bracketsList.length; i++) {
+        var newCalc = bracketsList[i];
+        var calcStr = this.eval(newCalc.str.replace(/^\(|\)$/g, ""));
+        str = str.replace(newCalc.str, calcStr)
+    }
+    var errorObj = new Array();
+    while (1) {
+        var multObj = this.matchExp(str, "/");
+        if (multObj == null) {
+            break
+        }
+        var v = this.executeDivi(multObj.firstValue, multObj.secondValue);
+        if (v == "NaN") {
+            var t = "T" + new Date().getTime();
+            errorObj.push({
+                Name: t,
+                Exp: multObj.str
+            });
+            str = str.replace(multObj.str, t)
+        } else {
+            str = str.replace(multObj.str, v)
+        }
+    }
+    while (1) {
+        var multObj = this.matchExp(str, "*");
+        if (multObj == null) {
+            break
+        }
+        var v = this.executeMult(multObj.firstValue, multObj.secondValue);
+        if (v == "NaN") {
+            var t = "T" + new Date().getTime();
+            errorObj.push({
+                Name: t,
+                Exp: multObj.str
+            });
+            str = str.replace(multObj.str, t)
+        } else {
+            str = str.replace(multObj.str, v)
+        }
+    }
+    while (1) {
+        var multObj = this.matchExp(str, "+");
+        if (multObj == null) {
+            break
+        }
+        var v = this.executeAddi(multObj.firstValue, multObj.secondValue);
+        if (v == "NaN" || isNaN(v)) {
+            var t = "T" + new Date().getTime();
+            errorObj.push({
+                Name: t,
+                Exp: multObj.str
+            });
+            str = str.replace(multObj.str, t)
+        } else {
+            str = str.replace(multObj.str, v)
+        }
+    }
+    while (1) {
+        var multObj = this.matchExp(str, "-");
+        if (multObj == null) {
+            break
+        }
+        var v = this.executeSubt(multObj.firstValue, multObj.secondValue);
+        if (v == "NaN") {
+            var t = "T" + new Date().getTime();
+            errorObj.push({
+                Name: t,
+                Exp: multObj.str
+            });
+            str = str.replace(multObj.str, t)
+        } else {
+            str = str.replace(multObj.str, v)
+        }
+    }
+    for (var i = errorObj.length - 1; i >= 0; i--) {
+        var ex = errorObj[i];
+        str = str.replace(ex.Name, ex.Exp)
+    }
+    while (1) {
+        var multObj = str.match(/\d*={2,3}\d*/g);
+        if (multObj == null) {
+            break
+        }
+        var v = eval(multObj[0]);
+        str = str.replace(multObj[0], v)
+    }
+    if (isRetStr == true) {
+        try {
+            return eval('"' + str + '"')
+        } catch (e) {}
+        try {
+            return eval(str)
+        } catch (e) {}
+        return str
+    }
+    if (str.match(/(^true$)|(^false$)/g)) {
+        return str === "true"
+    }
+    if (!isNaN(Number(str))) {
+        return Number(str)
+    }
+    try {
+        return eval(str)
+    } catch (e) {}
+    return str
+}
+;
+CalcEvalMin.prototype.matchOutBrackets = function(f) {
+    var h = new Array();
+    if (f == null) {
+        return h
+    }
+    if (typeof f != "string") {
+        f = f + ""
+    }
+    var d = f.split("");
+    var a = 0;
+    var g = false;
+    var b = -1;
+    for (var c = 0; c < d.length; c++) {
+        if (d[c] == "(") {
+            a++;
+            g = true;
+            if (b == -1) {
+                b = c
+            }
+        }
+        if (d[c] == ")") {
+            a--
+        }
+        if (g == true && a == 0) {
+            var e = new Object();
+            e.str = f.substring(b, c + 1);
+            e.firstIndex = b;
+            e.lastIndex = c + 1;
+            h.push(e);
+            b = -1;
+            g = false;
+            a = 0
+        }
+    }
+    return h
+}
+;
+CalcEvalMin.prototype.matchExp = function(l, f) {
+    var j = null;
+    if (l == null) {
+        return retList
+    }
+    if (typeof l != "string") {
+        l = l + ""
+    }
+    var k = l.split("");
+    var c = 0;
+    var b = 0;
+    var g = "";
+    var e = "";
+    var a = "";
+    var d = false;
+    for (var h = 0; h <= k.length; h++) {
+        if (k[h] == "+" || k[h] == "-" || k[h] == "*" || k[h] == "/" || k[h] == "%" || h == k.length) {
+            if (a == "" && k[h] == "-") {
+                a += k[h];
+                continue
+            }
+            if (d == true) {
+                e = a;
+                b = h;
+                j = new Object();
+                j.firstIndex = c;
+                j.secondIndex = b;
+                j.str = l.substring(c, b);
+                j.firstValue = Number(g);
+                j.secondValue = Number(e);
+                break
+            }
+            if (k[h] == null) {
+                break
+            }
+            if (k[h] == f) {
+                d = true;
+                g = a;
+                a = ""
+            } else {
+                a = "";
+                c = -1
+            }
+        } else {
+            a += k[h];
+            if (c == -1) {
+                c = h
+            }
+        }
+    }
+    return j
+}
+;
+CalcEvalMin.prototype.executeMult = function(d, b) {
+    var a = 0
+        , f = d.toString()
+        , c = b.toString();
+    try {
+        a += f.split(".")[1].length
+    } catch (g) {}
+    try {
+        a += c.split(".")[1].length
+    } catch (g) {}
+    return Number(f.replace(".", "")) * Number(c.replace(".", "")) / Math.pow(10, a)
+}
+;
+CalcEvalMin.prototype.executeDivi = function(arg1, arg2) {
+    var t1 = 0, t2 = 0, r1, r2;
+    try {
+        t1 = arg1.toString().split(".")[1].length
+    } catch (e) {}
+    try {
+        t2 = arg2.toString().split(".")[1].length
+    } catch (e) {}
+    with (Math) {
+        r1 = Number(arg1.toString().replace(".", ""));
+        r2 = Number(arg2.toString().replace(".", ""));
+        return this.executeMult(r1 / r2, pow(10, t2 - t1))
+    }
+}
+;
+CalcEvalMin.prototype.executeAddi = function(arg1, arg2) {
+    var r1, r2, m;
+    try {
+        r1 = arg1.toString().split(".")[1].length
+    } catch (e) {
+        r1 = 0
+    }
+    try {
+        r2 = arg2.toString().split(".")[1].length
+    } catch (e) {
+        r2 = 0
+    }
+    m = Math.pow(10, Math.max(r1, r2));
+    return (this.eval(arg1 + "*" + m) + this.eval(arg2 + "*" + m)) / m
+}
+;
+CalcEvalMin.prototype.executeSubt = function(arg1, arg2) {
+    var r1, r2, m, n;
+    try {
+        r1 = arg1.toString().split(".")[1].length
+    } catch (e) {
+        r1 = 0
+    }
+    try {
+        r2 = arg2.toString().split(".")[1].length
+    } catch (e) {
+        r2 = 0
+    }
+    m = Math.pow(10, Math.max(r1, r2));
+    n = (r1 >= r2) ? r1 : r2;
+    return ((this.eval(arg1 + "*" + m) - this.eval(arg2 + "*" + m)) / m).toFixed(n)
+}
+;

+ 1 - 1
app/view/material/list.ejs

@@ -59,7 +59,7 @@
             <!--右侧菜单-->
             <!--右侧菜单-->
             <ul class="nav flex-column right-nav">
             <ul class="nav flex-column right-nav">
                 <li class="nav-item">
                 <li class="nav-item">
-                    <a class="nav-link active" content="#material-tab" href="javascript: void(0);">清单工料含量</a>
+                    <a class="nav-link active" content="#material-tab" href="javascript: void(0);">清单工料含量2</a>
                 </li>
                 </li>
             </ul>
             </ul>
         </div>
         </div>

+ 1 - 1
config/web.js

@@ -563,7 +563,7 @@ const JsFiles = {
                     '/public/js/material_list.js',
                     '/public/js/material_list.js',
                     '/public/js/shares/cs_tools.js',
                     '/public/js/shares/cs_tools.js',
                     '/public/js/material_audit.js',
                     '/public/js/material_audit.js',
-                    '/public/js/calcEval.min.js',
+                    '/public/js/CalcEval.js',
                 ],
                 ],
                 mergeFile: 'material_list',
                 mergeFile: 'material_list',
             },
             },