Jelajahi Sumber

税前造价计算排序造成循环递归问题

zhongzewei 6 tahun lalu
induk
melakukan
c59d681cc3

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

@@ -71,7 +71,8 @@ let cbTools = {
         return rst;
     },
     //根据公式获取相关的节点
-    getNodesByExp: function (exp, formulaNodesArr) {
+    getNodesByExp: function (node, formulaNodesArr) {
+        let exp = node.data.calcBase;
         let rst = [], ids = [];
         if(this.isUnDef(exp) || exp === ''){
             return rst;
@@ -95,7 +96,7 @@ let cbTools = {
                 findChildNodes.push(charge);
             }
             //
-            let childrenNodes = calcTools.getChildrenFormulaNodes(formulaNodesArr, findChildNodes);
+            let childrenNodes = calcTools.getChildrenFormulaNodes(node, formulaNodesArr, findChildNodes);
             for(let cNode of childrenNodes){
                 ids.push(cNode.data.ID);
             }
@@ -338,7 +339,7 @@ let cbTools = {
                 for (let node of nodes){
                     if (orderArr.includes(node)) continue;    // 已排过序的节点则跳过
                     if (node.data.calcBase){
-                        let subNodes = cbTools.getNodesByExp(node.data.calcBase, nodesArr);
+                        let subNodes = cbTools.getNodesByExp(node, nodesArr);
                         recursionNode(subNodes);
                     };
                     if (nodesArr.includes(node) && !orderArr.includes(node)) orderArr.push(node);

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

@@ -168,14 +168,14 @@ let calcTools = {
 
         return flagsArr.includes(flag);
     },
-    getChildrenFormulaNodes: function (allFormulaNodesArr, parentNodes){       // 获取结点parentNodes下有公式的子结点
+    getChildrenFormulaNodes: function (self, 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){
+                    if (cur == pn && node != self){
                         nodes.push(node);
                         break;
                     }