|
@@ -51,6 +51,9 @@ let cbTools = {
|
|
|
isNum: function (v) {
|
|
|
return this.isDef(v) && !isNaN(v) && v !== Infinity;
|
|
|
},
|
|
|
+ isFlag: function (v) {
|
|
|
+ return this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
|
|
|
+ },
|
|
|
returnV: function (v, r) {
|
|
|
if(this.isDef(v)){
|
|
|
return v;
|
|
@@ -72,12 +75,25 @@ let cbTools = {
|
|
|
if(this.isDef(bills[i].flagsIndex.fixed)){
|
|
|
for(let flag in fixedFlag){
|
|
|
if(fixedFlag[flag] === bills[i].flagsIndex.fixed.flag){
|
|
|
- billsObj[fixedFlag[flag]] = bills[i];
|
|
|
+ billsObj[fixedFlag[flag]] = Object.create(null);
|
|
|
+ billsObj[fixedFlag[flag]]['base'] = Object.create(null);
|
|
|
+ billsObj[fixedFlag[flag]]['bill'] = bills[i];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
+ //清单基数设置所属固定清单属性
|
|
|
+ setBaseBills: function (baseFigure, fixedBills) {
|
|
|
+ for(let i in baseFigure){
|
|
|
+ let calcBase = baseFigure[i];
|
|
|
+ calcBase.fixedBill = null;
|
|
|
+ if(cbTools.isDef(fixedBills[calcBase.fixedFlag])){
|
|
|
+ fixedBills[calcBase.fixedFlag]['base'][i] = calcBase;
|
|
|
+ calcBase.fixedBill = fixedBills[calcBase.fixedFlag];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
//生成清单基数计算分类模板
|
|
|
setBaseFigureClass: function (baseFigures, mapObj) {
|
|
|
mapObj['CONSTRUCTION_ORGANIZATION'] = Object.create(null);
|
|
@@ -87,68 +103,169 @@ let cbTools = {
|
|
|
mapObj['OTHERS'] = Object.create(null);
|
|
|
let filter = ['CSXMF', 'ZZCSXMF', 'ZZCSXMDEJJZJGCF', 'ZZCSXMDEJJRGF', 'ZZCSXMDEJJCLF', 'ZZCSXMDEJJJXF', 'QTXMF', 'GF', 'SJ'];
|
|
|
for(let figure in baseFigures){
|
|
|
- if(filter.indexOf(baseFigures[figure]) === -1){
|
|
|
+ if(filter.indexOf(baseFigures[figure]['base']) === -1){
|
|
|
mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure];
|
|
|
}
|
|
|
- if(baseFigures[figure] !== 'QTXMF'){
|
|
|
+ if(baseFigures[figure]['base'] !== 'QTXMF'){
|
|
|
mapObj['OTHER'][figure] = baseFigures[figure];
|
|
|
}
|
|
|
- if(baseFigures[figure] !== 'GF'){
|
|
|
+ if(baseFigures[figure]['base'] !== 'GF'){
|
|
|
mapObj['CHARGE'][figure] = baseFigures[figure];
|
|
|
}
|
|
|
- if(baseFigures[figure] !== 'SJ'){
|
|
|
+ if(baseFigures[figure]['base'] !== 'SJ'){
|
|
|
mapObj['TAX'][figure] = baseFigures[figure];
|
|
|
}
|
|
|
mapObj['OTHERS'][figure] = baseFigures[figure];
|
|
|
}
|
|
|
+ },
|
|
|
+ getFigure: function (node) {
|
|
|
+ let calcBase = projectObj.project.calcBase;
|
|
|
+ let parent = node.parent;
|
|
|
+ if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
|
|
|
+ || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
|
|
|
+ //node.data.baseFigureClass = null;
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
|
|
|
+ //node.data.baseFigureClass = 'CONSTRUCTION_ORGANIZATION';
|
|
|
+ return calcBase.baseFigureClass.CONSTRUCTION_ORGANIZATION;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
|
|
|
+ //node.data.baseFigureClass = 'OTHER';
|
|
|
+ return calcBase.baseFigureClass.OTHER;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
|
|
|
+ //node.data.baseFigureClass = 'CHARGE';
|
|
|
+ return calcBase.baseFigureClass.CHARGE;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
|
|
|
+ //node.data.baseFigureClass = 'TAX';
|
|
|
+ return calcBase.baseFigureClass.TAX;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(!parent){
|
|
|
+ //node.data.baseFigureClass = 'OTHERS';
|
|
|
+ return calcBase.baseFigureClass.OTHERS;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return this.getFigure(parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getBaseBill: function (node) {
|
|
|
+ let calcBase = projectObj.project.calcBase;
|
|
|
+ let parent = node.parent;
|
|
|
+ if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
|
|
|
+ || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(!parent){
|
|
|
+ return node;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return this.getBaseBill(parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取清单(有基数计算)引用了的其他清单,(循环引用栈中的一块)
|
|
|
+ getStackBlock: function (billID) {
|
|
|
+ let tempBases = [], block = [];//存引用的清单ID
|
|
|
+ let node = getBill(billID);
|
|
|
+ if(!node){
|
|
|
+ return tempBases;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ getBase(node);
|
|
|
+ let bases = Array.from(new Set(tempBases));
|
|
|
+ for(let i = 0, len = bases.length; i < len; i++){
|
|
|
+ if(cbTools.isDef(calcBase.baseFigures[bases[i]])){
|
|
|
+ block.push(calcBase.baseFigures[bases[i]]['fixedBill']['bill']['ID']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Array.from(new Set(block));
|
|
|
+ }
|
|
|
+ function getBase(node){
|
|
|
+ if(node && node.children.length === 0){
|
|
|
+ if(cbTools.isDef(node.data.calcBase)){
|
|
|
+ let figures = cbParser.getFigure(node.data.calcBase);
|
|
|
+ tempBases = tempBases.concat(figures);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(node && node.children.length > 0) {
|
|
|
+ for(let i = 0, len = node.children.length; i < len; i++){
|
|
|
+ getBase(node.children[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
|
|
|
let baseFigureTemplate = {
|
|
|
'FBFXGCF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
|
},
|
|
|
'FBFXDEJJRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.labour.totalFee || 0;
|
|
|
},
|
|
|
'FBFXDEJJCLF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.material.totalFee || 0;
|
|
|
},
|
|
|
'FBFXDEJJJXF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.machine.totalFee || 0;
|
|
|
},
|
|
|
'FBFXTZRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.adjustLabour.totalFee || 0;
|
|
|
},
|
|
|
'FBFXTZJSRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.adjustMachineLabour.totalFee || 0;
|
|
|
},
|
|
|
'FBFXZCF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.mainMaterial.totalFee || 0;
|
|
|
},
|
|
|
'FBFXSBF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.mainMaterial.totalFee || 0;
|
|
@@ -163,13 +280,13 @@ let baseFigureTemplate = {
|
|
|
return this['FBFXDEJJRGF']() + this['FBFXDEJJCLF']() + this['FBFXDEJJJXF']();
|
|
|
},
|
|
|
'CSXMF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
|
},
|
|
|
'ZZCSXMF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
@@ -178,61 +295,61 @@ let baseFigureTemplate = {
|
|
|
return this['ZZCSXMDEJJRGF']() + this['ZZCSXMDEJJCLF']() + this['ZZCSXMDEJJJXF']()
|
|
|
},
|
|
|
'ZZCSXMDEJJRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.labour.totalFee || 0;
|
|
|
},
|
|
|
'ZZCSXMDEJJCLF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.material.totalFee || 0;
|
|
|
},
|
|
|
'ZZCSXMDEJJJXF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.machine.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMDEJJRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.labour.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMDEJJCLF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.material.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMDEJJJXF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.machine.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMTZRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.adjustLabour.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMTZJSRGF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.adjustMachineLabour.totalFee || 0;
|
|
|
},
|
|
|
'JSCSXMZCF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.mainMaterial.totalFee || 0;
|
|
@@ -250,19 +367,19 @@ let baseFigureTemplate = {
|
|
|
return this['JSCSXMDEJJRGF']() + this['JSCSXMDEJJCLF']() + this['JSCSXMDEJJJXF']();
|
|
|
},
|
|
|
'QTXMF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
|
},
|
|
|
'GF': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
|
},
|
|
|
'SJ': function () {
|
|
|
- let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX];
|
|
|
+ let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX]['bill'];
|
|
|
if(cbTools.isUnDef(bill)) return 0;
|
|
|
if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
|
|
|
return bill.feesIndex.common.totalFee || 0;
|
|
@@ -270,37 +387,37 @@ let baseFigureTemplate = {
|
|
|
};
|
|
|
|
|
|
let baseFigureMap = {
|
|
|
- '分部分项工程费': 'FBFXGCF',
|
|
|
- '分部分项定额基价人工费': 'FBFXDEJJRGF',
|
|
|
- '分部分项定额基价材料费': 'FBFXDEJJCLF',
|
|
|
- '分部分项定额基价机械费': 'FBFXDEJJJXF',
|
|
|
- '分部分项调整人工费': 'FBFXTZRGF',
|
|
|
- '分部分项调整机上人工费': 'FBFXTZJSRGF',
|
|
|
- '分部分项主材费': 'FBFXZCF',
|
|
|
- '分部分项设备费': 'FBFXSBF',
|
|
|
- '分部分项未计价材料费': 'FBFXWJJCLF',
|
|
|
- '分部分项人工工日': 'FBFXRGGR',
|
|
|
- '分部分项工程量清单中的基价直接工程费': 'FBFXGCLQDJJZJGCF',
|
|
|
- '措施项目费': 'CSXMF',
|
|
|
- '组织措施项目费': 'ZZCSXMF',
|
|
|
- '组织措施项目定额基价直接工程费': 'ZZCSXMDEJJZJGCF',
|
|
|
- '组织措施项目定额基价人工费': 'ZZCSXMDEJJRGF',
|
|
|
- '组织措施项目定额基价材料费': 'ZZCSXMDEJJCLF',
|
|
|
- '组织措施项目定额基价机械费': 'ZZCSXMDEJJJXF',
|
|
|
- '技术措施项目费': 'JSCSXMF',
|
|
|
- '技术措施项目定额基价人工费': 'JSCSXMDEJJRGF',
|
|
|
- '技术措施项目定额基价材料费': 'JSCSXMDEJJCLF',
|
|
|
- '技术措施项目定额基价机械费': 'JSCSXMDEJJJXF',
|
|
|
- '技术措施项目调整人工费': 'JSCSXMTZRGF',
|
|
|
- '技术措施项目调整机上人工费': 'JSCSXMTZJSRGF',
|
|
|
- '技术措施项目主材费': 'JSCSXMZCF',
|
|
|
- '技术措施项目设备费': 'JSCSXMSBF',
|
|
|
- '技术措施项目未计价材料费': 'JSCSXMWJJCLF',
|
|
|
- '技术措施项目人工工日': 'JSCSXMRGGR',
|
|
|
- '技术措施项目清单中的定额基价直接工程费': 'JSCSXMQDDEJJZJGCF',
|
|
|
- '其他项目费': 'QTXMF',
|
|
|
- '规费': 'GF',
|
|
|
- '税金': 'SJ'
|
|
|
+ '分部分项工程费': {base: 'FBFXGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项定额基价人工费': {base: 'FBFXDEJJRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项定额基价材料费': {base: 'FBFXDEJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项定额基价机械费': {base: 'FBFXDEJJJXF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项调整人工费': {base: 'FBFXTZRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项调整机上人工费': {base: 'FBFXTZJSRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项主材费': {base: 'FBFXZCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项设备费': {base: 'FBFXSBF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项未计价材料费': {base: 'FBFXWJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项人工工日': {base: 'FBFXRGGR', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '分部分项工程量清单中的基价直接工程费': {base: 'FBFXGCLQDJJZJGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
|
|
|
+ '措施项目费': {base: 'CSXMF', fixedFlag: fixedFlag.MEASURE},
|
|
|
+ '组织措施项目费': {base: 'ZZCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
|
|
|
+ '组织措施项目定额基价直接工程费': {base: 'ZZCSXMDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
|
|
|
+ '组织措施项目定额基价人工费': {base: 'ZZCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
|
|
|
+ '组织措施项目定额基价材料费': {base: 'ZZCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
|
|
|
+ '组织措施项目定额基价机械费': {base: 'ZZCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
|
|
|
+ '技术措施项目费': {base: 'JSCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目定额基价人工费': {base: 'JSCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目定额基价材料费': {base: 'JSCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目定额基价机械费': {base: 'JSCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目调整人工费': {base: 'JSCSXMTZRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目调整机上人工费': {base: 'JSCSXMTZJSRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目主材费': {base: 'JSCSXMZCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目设备费': {base: 'JSCSXMSBF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目未计价材料费': {base: 'JSCSXMWJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目人工工日': {base: 'JSCSXMRGGR', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '技术措施项目清单中的定额基价直接工程费': {base: 'JSCSXMQDDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
|
|
|
+ '其他项目费': {base: 'QTXMF', fixedFlag: fixedFlag.OTHER},
|
|
|
+ '规费': {base: 'GF', fixedFlag: fixedFlag.CHARGE},
|
|
|
+ '税金': {base: 'SJ', fixedFlag: fixedFlag.TAX}
|
|
|
};
|
|
|
|
|
|
//输入式分析器
|
|
@@ -329,18 +446,55 @@ let cbAnalyzer = {
|
|
|
}
|
|
|
return true;
|
|
|
},
|
|
|
+ //循环计算
|
|
|
+ cycleCalc: function (node, baseFigures, exp) {
|
|
|
+ let stack = [];
|
|
|
+ if(node.sourceType !== calcBase.project.Bills.getSourceType()){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let sbillID = cbTools.getBaseBill(node).data.ID;
|
|
|
+ let expFigures = cbParser.getFigure(exp);
|
|
|
+ for(let i = 0, len = expFigures.length; i < len; i++){
|
|
|
+ let figure = expFigures[i];
|
|
|
+ if(cbTools.isDef(baseFigures[figure])){
|
|
|
+ let bill = baseFigures[figure]['fixedBill']['bill'];
|
|
|
+ if(checkStack(getRefStack([bill.ID]), sbillID)){
|
|
|
+ console.log('循环计算');
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ function checkStack(stack, startBillID){
|
|
|
+ //引用栈发现了初始引用
|
|
|
+ return stack.indexOf(startBillID) !== -1;
|
|
|
+ }
|
|
|
+ function getRefStack(billIDs){
|
|
|
+ stack = Array.from(new Set(stack.concat(billIDs)));
|
|
|
+ for(let i = 0, len = billIDs.length; i < len; i++){
|
|
|
+ let block = cbTools.getStackBlock(billIDs[i]);
|
|
|
+ if(block.length > 0){
|
|
|
+ stack = Array.from(new Set(stack.concat(block)));
|
|
|
+ getRefStack(block);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return stack;
|
|
|
+ }
|
|
|
+ },
|
|
|
//四则运算合法性,前端控制不允许重复出现运算符,这里主要判断()的使用问题,这里再判断一次
|
|
|
arithmeticLeagl: function (exp) {
|
|
|
let ilegalRex = /[\+,\-,\*,\/]{2}/g;
|
|
|
return !ilegalRex.test(exp);
|
|
|
},
|
|
|
//
|
|
|
- legalExp: function (exp) {
|
|
|
- exp = this.standar(exp);
|
|
|
+ legalExp: function (node) {
|
|
|
+ let exp = this.standar(node.data.userCalcBase);
|
|
|
if(this.inputLegal(exp)){
|
|
|
- if(this.baseLegal(calcBase.baseFigures, exp)){
|
|
|
- if(this.arithmeticLeagl(exp)){
|
|
|
- return exp;
|
|
|
+ if(this.baseLegal(cbTools.getFigure(node), exp)){
|
|
|
+ if(!this.cycleCalc(node, cbTools.getFigure(node), exp)){
|
|
|
+ if(this.arithmeticLeagl(exp)){
|
|
|
+ return exp;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
@@ -390,7 +544,7 @@ let cbParser = {
|
|
|
let cbCalctor = {
|
|
|
//计算基数
|
|
|
base: function (figure) {
|
|
|
- return baseFigureTemplate[calcBase.baseFigures[figure]]();
|
|
|
+ return baseFigureTemplate[calcBase.baseFigures[figure]['base']]();
|
|
|
},
|
|
|
//计算
|
|
|
exec: function () {
|
|
@@ -414,13 +568,17 @@ let calcBase = {
|
|
|
me.fixedFlag = fixedFlag;
|
|
|
cbTools.setFixedBills(project, me.fixedBills, me.fixedFlag);
|
|
|
me.baseFigures = baseFigureMap;
|
|
|
+ cbTools.setBaseBills(me.baseFigures, me.fixedBills);
|
|
|
//me.baseFigures.fixedBills = me.fixedBills;
|
|
|
cbTools.setBaseFigureClass(me.baseFigures, me.baseFigureClass);
|
|
|
},
|
|
|
getBase: function (figure) {
|
|
|
- return cbCalctor.base(figure);
|
|
|
+ return cbCalctor.base(figure);
|
|
|
|
|
|
},
|
|
|
+ getBaseByClass: function (node) {
|
|
|
+ return cbTools.getFigure(node);
|
|
|
+ },
|
|
|
calculate: function (node) {
|
|
|
let me = calcBase,
|
|
|
$CBA = cbAnalyzer,
|
|
@@ -429,7 +587,7 @@ let calcBase = {
|
|
|
try {
|
|
|
me.success = false;
|
|
|
//分析输入式合法性
|
|
|
- let exp = $CBA.legalExp(node.data.userCalcBase);
|
|
|
+ let exp = $CBA.legalExp(node);
|
|
|
if(!exp){
|
|
|
throw '表达式不正确';
|
|
|
}
|
|
@@ -449,7 +607,7 @@ let calcBase = {
|
|
|
me.project.calcProgram.saveNode(node);
|
|
|
}
|
|
|
catch (err){
|
|
|
- alert('表达式不正确');
|
|
|
+ alert(err);
|
|
|
}
|
|
|
},
|
|
|
};
|