|
@@ -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;
|