|
@@ -50,14 +50,8 @@ let cbTools = {
|
|
|
return null;
|
|
|
},
|
|
|
//通过ID获取节点
|
|
|
- getNodeByID: function (items, ID) {
|
|
|
- ID = parseInt(ID);
|
|
|
- for(let i = 0, len = items.length; i < len; i++){
|
|
|
- if(items[i]['data']['ID'] === ID){
|
|
|
- return items[i];
|
|
|
- }
|
|
|
- }
|
|
|
- return null;
|
|
|
+ getNodeByID: function (ID) {
|
|
|
+ return this.isDef(calcBase.project.mainTree.nodes['id_' + ID]) ? calcBase.project.mainTree.nodes['id_' + ID] : null;
|
|
|
},
|
|
|
//获取该节点所有父节点
|
|
|
getParents: function (node) {
|
|
@@ -88,21 +82,21 @@ let cbTools = {
|
|
|
return rst;
|
|
|
}
|
|
|
//获取表达式中的基数和行引用
|
|
|
- let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getXNum(cbParser.getFArr(exp)));
|
|
|
+ let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(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);
|
|
|
+ let node = this.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);
|
|
|
+ else if(figure.type === 'id'){
|
|
|
+ let node = this.getNodeByID(figure.value);
|
|
|
if(this.isDef(node) && ids.indexOf(node.data.ID) === -1){
|
|
|
ids.push(node.data.ID);
|
|
|
rst.push(node);
|
|
@@ -110,15 +104,6 @@ let cbTools = {
|
|
|
}
|
|
|
}
|
|
|
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) {
|
|
@@ -243,7 +228,7 @@ let cbTools = {
|
|
|
block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
|
|
|
}
|
|
|
else if(bases[i]['type'] === 'id'){
|
|
|
- let node = cbTools.getNodeByID(calcBase.project.mainTree.items, bases[i]['value']);
|
|
|
+ let node = cbTools.getNodeByID(bases[i]['value']);
|
|
|
if(cbTools.isDef(node)){
|
|
|
block.push(node.data.ID);
|
|
|
}
|
|
@@ -254,7 +239,7 @@ let cbTools = {
|
|
|
function getBase(node){
|
|
|
if(node && node.children.length === 0){
|
|
|
if(cbTools.isDef(node.data.calcBase) && node.data.calcBase !== ''){
|
|
|
- let figureF = cbParser.getFigureF(cbParser.getFigure(node.data.calcBase), cbParser.getXNum(cbParser.getFIDArr(node.data.calcBase)));
|
|
|
+ let figureF = cbParser.getFigureF(cbParser.getFigure(node.data.calcBase), cbParser.getUID(cbParser.getFIDArr(node.data.calcBase)));
|
|
|
tempBases = tempBases.concat(figureF);
|
|
|
}
|
|
|
}
|
|
@@ -265,10 +250,10 @@ let cbTools = {
|
|
|
}
|
|
|
}
|
|
|
function getBill(ID){
|
|
|
- for(let i = 0, len = calcBase.project.mainTree.items.length; i < len; i++){
|
|
|
- if(calcBase.project.mainTree.items[i].data.ID === ID && calcBase.project.mainTree.items[i].sourceType === calcBase.project.Bills.getSourceType()){
|
|
|
- return calcBase.project.mainTree.items[i];
|
|
|
- }
|
|
|
+ let nodes = calcBase.project.mainTree.nodes;
|
|
|
+ let node = nodes['id_' + ID];
|
|
|
+ if(cbTools.isDef(node) && node.sourceType === calcBase.project.Bills.getSourceType()){
|
|
|
+ return node;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
@@ -591,7 +576,7 @@ let cbAnalyzer = {
|
|
|
}
|
|
|
//用于判断的起始清单ID
|
|
|
let sIDs = cbTools.getNodeIDs(Array.from(new Set([cbTools.getBaseBill(node)].concat(cbTools.getParents(node)))));
|
|
|
- let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getXNum(cbParser.getFIDArr(exp)));
|
|
|
+ let figureF = cbParser.getFigureF(cbParser.getFigure(exp), cbParser.getUID(cbParser.getFIDArr(exp)));
|
|
|
for(let i = 0, len = figureF.length; i < len; i++){
|
|
|
let figure = figureF[i];
|
|
|
let bill = null;
|
|
@@ -599,7 +584,7 @@ let cbAnalyzer = {
|
|
|
bill = baseFigures[figure.value]['fixedBill']['bill'];
|
|
|
}
|
|
|
else if(figure.type === 'id'){
|
|
|
- let node = cbTools.getNodeByID(calcBase.project.mainTree.items, figure.value);
|
|
|
+ let node = cbTools.getNodeByID(figure.value);
|
|
|
bill = cbTools.isDef(node) ? node.data : null;
|
|
|
}
|
|
|
if(cbTools.isDef(bill) && checkStack(getRefStack([bill.ID]), sIDs)){
|
|
@@ -687,9 +672,19 @@ let cbParser = {
|
|
|
let rArr = Array.from(new Set(tempArr));
|
|
|
return rArr;
|
|
|
},
|
|
|
+ //获取uuid
|
|
|
+ getUID: function (arr) {
|
|
|
+ let rRex = /[\d,a-z,A-Z,-]{36}/g;
|
|
|
+ let tempArr = [];
|
|
|
+ for(let i = 0, len = arr.length; i < len; i++){
|
|
|
+ tempArr = tempArr.concat(arr[i].match(rRex));
|
|
|
+ }
|
|
|
+ let rArr = Array.from(new Set(tempArr));
|
|
|
+ return rArr;
|
|
|
+ },
|
|
|
//获取ID引用
|
|
|
getFIDArr: function (exp) {
|
|
|
- let fidRex = /@\d+/g;
|
|
|
+ let fidRex = /@[\d,a-z,A-Z,-]{36}/g;
|
|
|
let fidArr = exp.match(fidRex);
|
|
|
return cbTools.isDef(fidArr) ? fidArr : [];
|
|
|
},
|
|
@@ -781,7 +776,7 @@ let cbParser = {
|
|
|
//获得ID引用
|
|
|
let fidArr = this.getFIDArr(exp);
|
|
|
for(let i = 0, len = fidArr.length; i < len; i++){
|
|
|
- let id = this.getXNum([fidArr[i]]);
|
|
|
+ let id = this.getUID([fidArr[i]]);
|
|
|
if(id.length === 1){
|
|
|
let row = cbTools.getRowByID(calcBase.project.mainTree.items, id[0]);
|
|
|
if(cbTools.isUnDef(row)){
|
|
@@ -840,9 +835,9 @@ let cbCalctor = {
|
|
|
},
|
|
|
//ID引用
|
|
|
ref: function (fExp) {
|
|
|
- let ID = cbParser.getXNum([fExp]);
|
|
|
+ let ID = cbParser.getUID([fExp]);
|
|
|
if(ID.length === 1){
|
|
|
- let node = cbTools.getNodeByID(calcBase.project.mainTree.items, parseInt(ID[0]));
|
|
|
+ let node = cbTools.getNodeByID(ID[0]);
|
|
|
return cbTools.isDef(node) &&
|
|
|
cbTools.isDef(node.data.feesIndex) &&
|
|
|
cbTools.isDef(node.data.feesIndex.common) &&
|