Browse Source

引用“税前工程造价”基数,多次计算出现跳变问题。

chenshilong 6 years ago
parent
commit
1f3b04e702

+ 27 - 2
web/building_saas/main/js/models/calc_base.js

@@ -71,11 +71,36 @@ let cbTools = {
         return rst;
     },
     //根据公式获取相关的节点
-    getNodesByExp: function (exp) {
+    getNodesByExp: function (exp, formulaNodesArr) {
         let rst = [], ids = [];
         if(this.isUnDef(exp) || exp === ''){
             return rst;
         }
+        if(exp.includes('{税前工程造价}')){
+            let findChildNodes = [];
+            let subEngingeering = this.findBill(fixedFlag.SUB_ENGINERRING) ? this.getNodeByID(this.findBill(fixedFlag.SUB_ENGINERRING).ID) : null,
+                measure = this.findBill(fixedFlag.MEASURE) ? this.getNodeByID(this.findBill(fixedFlag.MEASURE).ID) : null,
+                other = this.findBill(fixedFlag.OTHER) ? this.getNodeByID(this.findBill(fixedFlag.OTHER).ID) : null,
+                charge = this.findBill(fixedFlag.CHARGE) ? this.getNodeByID(this.findBill(fixedFlag.CHARGE).ID) : null;
+            if(subEngingeering){
+                findChildNodes.push(subEngingeering);
+            }
+            if(measure){
+                findChildNodes.push(measure);
+            }
+            if(other){
+                findChildNodes.push(other);
+            }
+            if(charge){
+                findChildNodes.push(charge);
+            }
+            //
+            let childrenNodes = calcTools.getChildrenFormulaNodes(formulaNodesArr, findChildNodes);
+            for(let cNode of childrenNodes){
+                ids.push(cNode.data.ID);
+            }
+            rst = rst.concat(childrenNodes);
+        }
         //获取表达式中的基数和行引用
         let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(exp)));
         for(let i = 0, len = figureF.length; i < len; i++){
@@ -309,7 +334,7 @@ let cbTools = {
                 for (let node of nodes){
                     if (orderArr.includes(node)) continue;    // 已排过序的节点则跳过
                     if (node.data.calcBase){
-                        let subNodes = cbTools.getNodesByExp(node.data.calcBase);
+                        let subNodes = cbTools.getNodesByExp(node.data.calcBase, nodesArr);
                         recursionNode(subNodes);
                     };
                     if (nodesArr.includes(node) && !orderArr.includes(node)) orderArr.push(node);

+ 17 - 2
web/building_saas/main/js/models/calc_program.js

@@ -168,6 +168,22 @@ let calcTools = {
 
         return flagsArr.includes(flag);
     },
+    getChildrenFormulaNodes: function (allFormulaNodesArr, parentNodes){       // 获取结点parentNodes下有公式的子结点
+        let nodes = [];
+        for (let pn of parentNodes){
+            for (let node of allFormulaNodesArr){
+                let cur = node;
+                while (cur.parent) {
+                    cur = cur.parent;
+                    if (cur == pn){
+                        nodes.push(node);
+                        break;
+                    }
+                };
+            };
+        };
+        return nodes;
+    },
     getGLJList: function (treeNode, needOneBill) {
         delete treeNode.data.gljList;
         if (this.isRationCategory(treeNode)) {
@@ -1933,8 +1949,7 @@ class CalcProgram {
     calcFormulaNodes(changedArr, tender){
         let me = this;
         let formulaNodes = cbTools.getFormulaNodes(true);
-        for(let n of formulaNodes){
-        }
+
         if (formulaNodes.length == 0) return;
         for (let formulaNode of formulaNodes){
             formulaNode.data.userCalcBase = formulaNode.data.calcBase;    // 这句不该出现,projectObj.project.calcBase中要改进。