瀏覽代碼

getNodesByExp

zhongzewei 7 年之前
父節點
當前提交
c76a25b267
共有 1 個文件被更改,包括 39 次插入0 次删除
  1. 39 0
      web/building_saas/main/js/models/calc_base.js

+ 39 - 0
web/building_saas/main/js/models/calc_base.js

@@ -62,6 +62,45 @@ let cbTools = {
         }
         return rst;
     },
+    //根据公式获取相关的节点
+    getNodesByExp: function (exp) {
+        let rst = [], ids = [];
+        if(this.isUnDef(exp) || exp === ''){
+            return rst;
+        }
+        //获取表达式中的基数和行引用
+        let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getRArr(cbParser.getFArr(exp)));
+        for(let i = 0, len = figureF.length; i < len; i++){
+            let figure = figureF[i];
+            if(figure.type === 'base' && cbTools.isDef(calcBase.baseFigures[figure.value])){
+                let bill = calcBase.baseFigures[figure.value]['fixedBill']['bill'];
+                if(this.isDef(bill) && ids.indexOf(bill.ID) === -1){
+                    let node = getNodeByID(bill.ID);
+                    if(this.isDef(node)){
+                        ids.push(node.data.ID);
+                        rst.push(node);
+                    }
+                }
+            }
+            else if(figure.type === 'row'){
+                let node = this.getBillByRow(calcBase.project.mainTree.items, figure.value - 1);
+                if(this.isDef(node) && ids.indexOf(node.data.ID) === -1){
+                    ids.push(node.data.ID);
+                    rst.push(node);
+                }
+            }
+        }
+        return rst;
+        function getNodeByID(ID){
+            let items = calcBase.project.mainTree.items;
+            for(let i = 0, len = items.length; i < len; i++){
+                if(items[i]['data']['ID'] === ID){
+                    return items[i];
+                }
+            }
+            return null;
+        }
+    },
     //需要用到计算基数的时候,先找出所有的固定清单,避免每个基数都要去遍历寻找清单
     setFixedBills: function (project, billsObj, fixedFlag) {
         let bills = project.Bills.datas;