| 
					
				 | 
			
			
				@@ -0,0 +1,452 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Created by Zhong on 2017/11/28. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//清单固定行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixedFlag = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 分部分项工程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SUB_ENGINERRING: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 措施项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MEASURE: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 施工技术措施项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CONSTRUCTION_TECH: 3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 安全文明施工按实计算费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SAFETY_CONSTRUCTION_ACTUAL: 4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 施工组织措施专项费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CONSTRUCTION_ORGANIZATION: 5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 安全文明施工专项费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SAFETY_CONSTRUCTION: 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 其他项目 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    OTHER: 7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 暂列金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PROVISIONAL: 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 暂估价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ESTIMATE: 9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 材料(工程设备)暂估价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MATERIAL_PROVISIONAL: 10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 专业工程暂估价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ENGINEERING_ESITIMATE: 11, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 计日工 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    DAYWORK: 12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 总承包服务费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TURN_KEY_CONTRACT: 13, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 索赔与现场签证 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CLAIM_VISA: 14, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 规费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CHARGE: 15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 社会保险费及住房公积金 Social insurance fee and housing accumulation fund 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SOCIAL_INSURANCE_HOUSING_FUND: 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 工程排污费 charges for disposing pollutants 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    POLLUTANTS: 17, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 税金 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TAX: 18 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let cbTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    isDef: function (v) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return v !== undefined && v !== null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    isUnDef: function (v) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return v === undefined || v === null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    isNum: function (v) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.isDef(v) && !isNaN(v) && v !== Infinity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    returnV: function (v, r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(this.isDef(v)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return v; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    findBill: function (fixedFlag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bills = projectObj.project.Bills.datas; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = bills.length; i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(bills[i].flagsIndex.flag === fixedFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return bills[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //需要用到计算基数的时候,先找出所有的固定清单,避免每个基数都要去遍历寻找清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    setFixedBills: function (project, billsObj, fixedFlag) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bills = project.Bills.datas; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = bills.length; i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //生成清单基数计算分类模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    setBaseFigureClass: function (baseFigures, mapObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mapObj['CONSTRUCTION_ORGANIZATION'] = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mapObj['OTHER'] = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mapObj['CHARGE'] = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mapObj['TAX'] = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(baseFigures[figure] !== 'QTXMF'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapObj['OTHER'][figure] = baseFigures[figure]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(baseFigures[figure] !== 'GF'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapObj['CHARGE'][figure] = baseFigures[figure]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(baseFigures[figure] !== 'SJ'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapObj['TAX'][figure] = baseFigures[figure]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mapObj['OTHERS'][figure] = baseFigures[figure]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let baseFigureTemplate = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'FBFXGCF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'FBFXWJJCLF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'FBFXRGGR': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'FBFXGCLQDJJZJGCF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this['FBFXDEJJRGF']() + this['FBFXDEJJCLF']() + this['FBFXDEJJJXF'](); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'CSXMF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'ZZCSXMDEJJZJGCF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this['ZZCSXMDEJJRGF']() + this['ZZCSXMDEJJCLF']() + this['ZZCSXMDEJJJXF']() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'ZZCSXMDEJJRGF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'JSCSXMSBF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'JSCSXMWJJCLF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'JSCSXMRGGR': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'JSCSXMQDDEJJZJGCF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this['JSCSXMDEJJRGF']() + this['JSCSXMDEJJCLF']() + this['JSCSXMDEJJJXF'](); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'QTXMF': function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//输入式分析器 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let cbAnalyzer = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    standar: function (exp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //去空格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exp = exp.replace(/\s/g, ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //( to ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exp = exp.replace(/(/g, '('); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //)to ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exp = exp.replace(/)/g, ')'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return exp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //输入合法性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    inputLegal: function (exp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let ilegalRex = /[^0-9,\u4e00-\u9fa5,\+,\-,\/,\*,\(,\),.]/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return !ilegalRex.test(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //基数合法性、存在性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseLegal: function (baseFigures, exp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let expFigures = cbParser.getFigure(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = expFigures.length; i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(cbTools.isUnDef(baseFigures[expFigures[i]])){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //四则运算合法性,前端控制不允许重复出现运算符,这里主要判断()的使用问题,这里再判断一次 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    arithmeticLeagl: function (exp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let ilegalRex = /[\+,\-,\*,\/]{2}/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return !ilegalRex.test(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    legalExp: function (exp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exp = this.standar(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(this.inputLegal(exp)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(this.baseLegal(calcBase.baseFigures, exp)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(this.arithmeticLeagl(exp)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return exp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    isCN: function(v){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let regex = /[\u4e00-\u9fa5]/g; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return (regex.test(v)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//输入式转换器 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let cbParser = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //获取表达式中的基数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getFigure: function(expr){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let cnRex = /[^\u4e00-\u9fa5]/; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let temp = expr.split(cnRex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = temp.length; i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(temp[i] !== '' && rst.indexOf(temp[i]) === -1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst.push(temp[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //将表达式转换为可编译的表达式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    toCompileExpr: function(v){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let strs = this.getFigure(v); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let exps = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = strs.length; i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let exp = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            exp.orgExp = strs[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            exps.push(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = 0, len = exps.length;i < len; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            exps[i].compileExp = '$CBC.base(\'' + exps[i].orgExp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            exps[i].compileExp = exps[i].compileExp + '\')'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v = v.replace(new RegExp(exps[i].orgExp,"g"), exps[i].compileExp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return v; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let cbCalctor = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //计算基数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    base: function (figure) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseFigureTemplate[calcBase.baseFigures[figure]](); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    exec: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let calcBase = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //清单固定行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fixedFlag: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fixedBills: Object.create(null), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //清单基数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseFigures: Object.create(null), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //清单可选基数映射,分两类:组织措施项目:排除父项和计算的父项; 其他项目、规费、税金、工程造价,及新增部分:显示所有计算基数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    baseFigureClass: Object.create(null), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //初始化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    init: function (project) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.project = project; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.fixedFlag = fixedFlag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cbTools.setFixedBills(project, me.fixedBills, me.fixedFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.baseFigures = baseFigureMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //me.baseFigures.fixedBills = me.fixedBills; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cbTools.setBaseFigureClass(me.baseFigures, me.baseFigureClass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getBase: function (figure) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       return  cbCalctor.base(figure); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calculate: function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = calcBase, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $CBA = cbAnalyzer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $CBP = cbParser, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $CBC = cbCalctor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //分析输入式合法性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let exp = $CBA.legalExp(node.data.userCalcBase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!exp){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw '表达式不正确'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //输入式转换表达式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let compileExp = $CBP.toCompileExpr(exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let calcBaseValue = eval(compileExp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!cbTools.isNum(calcBaseValue)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw '表达式不正确'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //存储 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            node.data.calcBase = exp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            node.data.calcBaseValue = parseFloat(calcBaseValue).toDecimal(decimalObj.decimal('totalPrice', node)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.project.calcProgram.calculate(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.project.calcProgram.saveNode(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        catch (err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            alert('表达式不正确'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 |