| 
					
				 | 
			
			
				@@ -229,22 +229,6 @@ let nodeTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return treeNodeCalcType.ctRationCalcProgram; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 界面显示的结点的工程量的数值。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    uiQuantity: function (treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return parseFloatPlus(treeNode.data.quantity).toDecimal(decimalObj.decimal("quantity", treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 界面显示的工料机价格,包括定额价、市场价等。参数 price 传入一个普通的价格数值即可。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    uiGLJPrice: function (price){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (price) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return parseFloat(price).toDecimal(decimalObj.glj.unitPrice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 界面显示的工料机数量。参数 quantity 传入一个普通的数量数值即可。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    uiGLJQuantity: function (quantity){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (quantity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return parseFloat(quantity).toDecimal(decimalObj.glj.quantity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 参数fieldName值: 'common.totalFee'、'equipment.unitFee' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getFee: function (treeNode, fieldName) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -263,126 +247,55 @@ let nodeTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getNodeByID: function (ID){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return cbTools.getNodeByID(ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    getRationBaseFee: function (treeNode, gljTypes, priceType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!treeNode.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let result = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let price = 0, temp = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (gljTypes.indexOf(glj.type) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (priceType == priceTypes.ptDiffPrice){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let aprice = me.uiGLJPrice(glj["adjustPrice"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let mprice = me.uiGLJPrice(glj["marketPrice"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                temp = (me.uiGLJQuantity(glj["quantity"]) * mprice).toDecimal(decimalObj.ration.unitPrice) - (me.uiGLJQuantity(glj["quantity"]) * aprice).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                temp = temp.toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else if (priceType == priceTypes.ptAdjustPrice){price = me.uiGLJPrice(glj["adjustPrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else if (priceType == priceTypes.ptMarketPrice){price = me.uiGLJPrice(glj["marketPrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                temp = (me.uiGLJQuantity(glj["quantity"]) * price).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result = (result + temp).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calcEstimateFee: function (treeNode, isBase = false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let me = this, sumU = 0, sumT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (nodeTools.isTotalCostBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let nodes = projectObj.project.mainTree.roots; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let node of nodes){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (nodeTools.isTotalCostBill(node)) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let eU = 0, eT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (node.data.feesIndex && node.data.feesIndex.estimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                eU = node.data.feesIndex.estimate.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                eT = node.data.feesIndex.estimate.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                eU = 0, eT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumU = (sumU + parseFloatPlus(eU)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumT = (sumT + parseFloatPlus(eT)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sumU = (sumU).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sumT = (sumT).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!treeNode.data.gljList) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let GLJObjs = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (allMaterialTypes.indexOf(glj.type) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (glj.isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    GLJObjs.push({code: glj.code, name: glj.name, specs: glj.specs, unit: glj.unit, type: glj.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        quantity: glj.quantity, marketPrice: glj.marketPrice}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else{   // 组成物 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (compositionTypes.indexOf(glj.type) >= 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let mds = projectObj.project.composition.getCompositionByGLJ(glj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (!mds) mds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        for (let md of mds){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (md.isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                let isExist = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                let mdQ = (me.uiGLJQuantity(glj.quantity) * me.uiGLJQuantity(md.consumption)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                for (let obj of GLJObjs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    if (gljOprObj.getIndex(md, gljKeyArray) == gljOprObj.getIndex(obj, gljKeyArray)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        isExist = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        obj.quantity = (me.uiGLJQuantity(obj.quantity) + mdQ).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (!isExist) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    GLJObjs.push({code: md.code, name: md.name, specs: md.specs, unit: md.unit, type: md.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        quantity: mdQ, marketPrice: md.marketPrice}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let obj of GLJObjs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumU = sumU + (me.uiGLJQuantity(obj.quantity) * me.uiGLJPrice(obj.marketPrice)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumU = sumU.toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let q = (me.uiGLJQuantity(obj.quantity) * me.uiQuantity(treeNode)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumT = sumT + (q * me.uiGLJPrice(obj.marketPrice)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumT = sumT.toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sumU = sumU.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (projectObj.project.property.zanguCalcMode == zanguCalcType.common){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumT = (nodeTools.uiQuantity(treeNode) * sumU).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else if (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sumT = sumT.toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (isBase) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return sumU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        nodeTools.checkFeeField(treeNode, {'fieldName': 'estimate', 'unitFee': sumU, 'totalFee': sumT}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const rationCalcBaser = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    '定额基价人工费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+let assistCalcer = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 界面显示的结点的工程量的数值。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uiQuantity: function (treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return parseFloatPlus(treeNode.data.quantity).toDecimal(decimalObj.decimal("quantity", treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    '定额基价材料费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 界面显示的工料机价格,包括定额价、市场价等。参数 price 传入一个普通的价格数值即可。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uiGLJPrice: function (price){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (price) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return parseFloat(price).toDecimal(decimalObj.glj.unitPrice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    '定额基价机械费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 界面显示的工料机数量。参数 quantity 传入一个普通的数量数值即可。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uiGLJQuantity: function (quantity){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (quantity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return parseFloat(quantity).toDecimal(decimalObj.glj.quantity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    '定额基价机上人工费': function machineLabourFee(node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!node.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    rationBaseFee: function (treeNode, gljTypes, priceType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!treeNode.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let result = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let price = 0, temp = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (gljTypes.indexOf(glj.type) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (priceType == priceTypes.ptDiffPrice){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let aprice = me.uiGLJPrice(glj["adjustPrice"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let mprice = me.uiGLJPrice(glj["marketPrice"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temp = (me.uiGLJQuantity(glj["quantity"]) * mprice).toDecimal(decimalObj.ration.unitPrice) - (me.uiGLJQuantity(glj["quantity"]) * aprice).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temp = temp.toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if (priceType == priceTypes.ptAdjustPrice){price = me.uiGLJPrice(glj["adjustPrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else if (priceType == priceTypes.ptMarketPrice){price = me.uiGLJPrice(glj["marketPrice"]);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temp = (me.uiGLJQuantity(glj["quantity"]) * price).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = (result + temp).toDecimal(decimalObj.ration.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    machineLabourFee: function (gljArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!gljArr) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let result = 0, mdSum = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let glj of node.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let glj of gljArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (glj.type == gljType.GENERAL_MACHINE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 获取机械组成物 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let mds = projectObj.project.composition.getCompositionByGLJ(glj); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -395,36 +308,126 @@ const rationCalcBaser = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         mdSum = (mdSum).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 result = result + (glj["quantity"] * mdSum).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 result = (result).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    estimateFee: function (treeNode, isBase = false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, sumU = 0, sumT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 父清单暂估费的汇总计算走计算程序逻辑,不在这里。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (nodeTools.isTotalCostBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let nodes = projectObj.project.mainTree.roots; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of nodes){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (nodeTools.isTotalCostBill(node)) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let eU = 0, eT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node.data.feesIndex && node.data.feesIndex.estimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    eU = node.data.feesIndex.estimate.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    eT = node.data.feesIndex.estimate.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    eU = 0, eT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumU = (sumU + parseFloatPlus(eU)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = (sumT + parseFloatPlus(eT)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumU = (sumU).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumT = (sumT).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!treeNode.data.gljList) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let GLJObjs = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (allMaterialTypes.indexOf(glj.type) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (glj.isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        GLJObjs.push({code: glj.code, name: glj.name, specs: glj.specs, unit: glj.unit, type: glj.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            quantity: glj.quantity, marketPrice: glj.marketPrice}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else{   // 组成物 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (compositionTypes.indexOf(glj.type) >= 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            let mds = projectObj.project.composition.getCompositionByGLJ(glj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (!mds) mds = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (let md of mds){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (md.isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    let isExist = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    let mdQ = (me.uiGLJQuantity(glj.quantity) * me.uiGLJQuantity(md.consumption)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    for (let obj of GLJObjs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        if (gljOprObj.getIndex(md, gljKeyArray) == gljOprObj.getIndex(obj, gljKeyArray)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            isExist = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            obj.quantity = (me.uiGLJQuantity(obj.quantity) + mdQ).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (!isExist) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        GLJObjs.push({code: md.code, name: md.name, specs: md.specs, unit: md.unit, type: md.type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            quantity: mdQ, marketPrice: md.marketPrice}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let obj of GLJObjs){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumU = sumU + (me.uiGLJQuantity(obj.quantity) * me.uiGLJPrice(obj.marketPrice)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumU = sumU.toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let q = (me.uiGLJQuantity(obj.quantity) * me.uiQuantity(treeNode)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = sumT + (q * me.uiGLJPrice(obj.marketPrice)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = sumT.toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumU = sumU.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (projectObj.project.property.zanguCalcMode == zanguCalcType.common){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = (me.uiQuantity(treeNode) * sumU).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else if (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = sumT.toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (isBase) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return sumU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            nodeTools.checkFeeField(treeNode, {'fieldName': 'estimate', 'unitFee': sumU, 'totalFee': sumT}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const rationCalcBaser = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    '定额基价人工费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    '定额基价材料费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    '定额基价机械费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptBasePrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    '定额基价机上人工费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.machineLabourFee(node.data.gljList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '人工费价差': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.LABOUR], priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '材料费价差': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, baseMaterialTypes, priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, baseMaterialTypes, priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '机械费价差': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptDiffPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '主材费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '设备费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.getRationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '人工工日': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!node.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let glj of node.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (glj.type == gljType.LABOUR) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = rst + (me.uiGLJQuantity(glj["quantity"]) * me.uiQuantity(node)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = rst + (assistCalcer.uiGLJQuantity(glj["quantity"]) * assistCalcer.uiQuantity(node)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rst = rst.toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -451,7 +454,7 @@ const rationCalcBaser = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '甲定设备费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '暂估材料费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return nodeTools.calcEstimateFee(node, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return assistCalcer.estimateFee(node, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     '分包定额基价人工费': function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -621,21 +624,36 @@ let executeObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     base: function(baseName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = executeObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function marketPriceToBase(baseName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function marketPriceToBase(baseName, type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let result = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ( me.treeNode.data.subType === gljType.LABOUR && baseName === '定额基价人工费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ( baseMaterialTypes.includes(me.treeNode.data.subType) && baseName === '定额基价材料费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ( me.treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机械费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ( me.treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === '主材费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ( me.treeNode.data.subType === gljType.EQUIPMENT && baseName === '设备费') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) result = me.treeNode.data.marketUnitFee ? parseFloat(me.treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (me.treeNode.data.subType === gljType.LABOUR && baseName === '定额基价人工费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (baseMaterialTypes.includes(me.treeNode.data.subType) && baseName === '定额基价材料费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (me.treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机械费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (me.treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === '主材费') || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                (me.treeNode.data.subType === gljType.EQUIPMENT && baseName === '设备费')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (type == rationType.volumePrice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    result = me.treeNode.data.marketUnitFee ? parseFloat(me.treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (type == rationType.gljRation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    result = me.treeNode.data.basePrice ? parseFloat(me.treeNode.data.basePrice).toDecimal(decimalObj.ration.unitPrice) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else if (me.treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === '定额基价机上人工费'){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let glj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'code': me.treeNode.data.code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'name': me.treeNode.data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'specs': me.treeNode.data.specs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'unit': me.treeNode.data.unit, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'quantity': 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    'type': me.treeNode.data.subType      // 注意:这里要取subType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = assistCalcer.machineLabourFee([glj]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 量价、工料机形式的定额, 要把自己的市场单价用于计算程序中的基数。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (me.treeNode.data.type == rationType.volumePrice || me.treeNode.data.type == rationType.gljRation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return marketPriceToBase(baseName) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return marketPriceToBase(baseName, me.treeNode.data.type) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (!rationCalcBaser[baseName]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 alert('定额基数“' + baseName + '”末定义,计算错误。 (模板 ' + me.template.ID + ',规则 ' + me.tempCalcItem.ID +')'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -648,7 +666,7 @@ let executeObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     HJ: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let p = me.treeNode.data.calcBaseValue ? me.treeNode.data.calcBaseValue : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let q = nodeTools.uiQuantity(me.treeNode) ? nodeTools.uiQuantity(me.treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let q = assistCalcer.uiQuantity(me.treeNode) ? assistCalcer.uiQuantity(me.treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let u = (p / q).toDecimal(decimalObj.decimal('unitPrice', me.treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -970,9 +988,9 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){     // 这里的算法要配合冷姐姐的神图才能看懂^_^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let sum_rtf = 0, sum_rttf = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let bq = nodeTools.uiQuantity(treeNode) ? nodeTools.uiQuantity(treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let bq = assistCalcer.uiQuantity(treeNode) ? assistCalcer.uiQuantity(treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let rq = nodeTools.uiQuantity(node) ? nodeTools.uiQuantity(node) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let rq = assistCalcer.uiQuantity(node) ? assistCalcer.uiQuantity(node) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         let ruf = 0, rtuf = 0, rtf = 0, rttf = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (node.data.feesIndex && node.data.feesIndex[ft.type]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ruf = parseFloat(node.data.feesIndex[ft.type].unitFee); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1051,7 +1069,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let f = treeNode.data.feeRate ? treeNode.data.feeRate : 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let q = nodeTools.uiQuantity(treeNode) ? nodeTools.uiQuantity(treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let q = assistCalcer.uiQuantity(treeNode) ? assistCalcer.uiQuantity(treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let b = treeNode.data.calcBaseValue ? treeNode.data.calcBaseValue : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let uf = (b * f * q / 100).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let tuf = uf; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1063,7 +1081,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 总造价清单还要做单项工程、建设项目的四大项金额汇总 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (nodeTools.isTotalCostBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 公式叶子清单没有暂估费,但总造价清单除外。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nodeTools.calcEstimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                assistCalcer.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 nodeTools.initSummaryFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 treeNode.data.summaryFees.totalFee = tf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 treeNode.data.summaryFees.estimateFee = nodeTools.getFee(treeNode, 'estimate.totalFee'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1080,7 +1098,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (treeNode.data.type == rationType.volumePrice){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     delete treeNode.data.gljList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let muf = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let q = nodeTools.uiQuantity(treeNode) ? nodeTools.uiQuantity(treeNode) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let q = assistCalcer.uiQuantity(treeNode) ? assistCalcer.uiQuantity(treeNode) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     treeNode.data.marketTotalFee = (muf * q).toDecimal(decimalObj.ration.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else if (treeNode.data.type == rationType.gljRation){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1089,7 +1107,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     treeNode.data.gljList = me.project.ration_glj.getGljArrByRation(treeNode.data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // 计算程序里没有暂估费的计算规则,会漏掉,所以这里要专门算。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    nodeTools.calcEstimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    assistCalcer.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     fnArr.push('estimate'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1106,7 +1124,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 叶子清单自己的计算程序计算,其暂估费也要汇总算。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                nodeTools.calcEstimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                assistCalcer.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 fnArr.push('estimate'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1126,7 +1144,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let feeRate = parseFloatPlus(calcItem.feeRate) ? parseFloatPlus(calcItem.feeRate).toDecimal(decimalObj.feeRate) : 100;  // 100% 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calcItem.unitFee = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));   // 如果eval()对清单树有影响,就换成小麦的Expression对象再试 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let q = nodeTools.uiQuantity(treeNode) ? nodeTools.uiQuantity(treeNode) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let q = assistCalcer.uiQuantity(treeNode) ? assistCalcer.uiQuantity(treeNode) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calcItem.totalFee = (calcItem.unitFee * q).toDecimal(decimalObj.decimal('totalPrice', treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (calcItem.fieldName) { 
			 |