| 
					
				 | 
			
			
				@@ -641,7 +641,8 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             contain: treeNode.data.contain, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             quantityEXP: treeNode.data.quantityEXP, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             summaryFees: treeNode.data.summaryFees, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            name:treeNode.data.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            name:treeNode.data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rationQuantityCoe: treeNode.data.rationQuantityCoe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 定额大类 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1079,11 +1080,11 @@ let analyzer = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (var i = 0; i < atIDArr.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let patt = new RegExp(atIDArr[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let val = `$CE.at(${IDArr[i]}, false)`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let val = `$CE.at(${IDArr[i]},false)`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst = rst.replace(patt, val); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rst = rst.replace(/\[/g, "$CE.base('"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rst = rst.replace(/\]/g, "', false)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst = rst.replace(/\]/g, "',false)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rst = rst.replace(/L/g, labourCoe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1470,7 +1471,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 只计算treeNode自身。changedArr: 外部传来的一个数组,专门存储发生变动的节点。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    innerCalc(treeNode, changedArr, isTender = false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    innerCalc(treeNode, changedArr, tender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 仅用作树节点显示的工料机不能参与计算。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.sourceType === ModuleNames.ration_glj) return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1685,6 +1686,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calcTools.initFees(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (tender == tenderTypes.ttCalc) calcTools.calcNodeTenderQty(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (let idx of template.compiledSeq) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let calcItem = template.calcItems[idx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $CE.tempCalcItem = calcItem; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1696,8 +1698,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calcItem.unitFee = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     calcItem.totalFee = (calcItem.unitFee * calcTools.uiNodeQty(treeNode)).toDecimal(decimalObj.decimal('totalPrice', treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (isTender) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        calcTools.calcNodeTenderQty(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (tender == tenderTypes.ttCalc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         calcItem.tenderUnitFee = (eval(tExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         calcItem.tenderTotalFee = (calcItem.tenderUnitFee * treeNode.data.tenderQuantity).toDecimal(decimalObj.decimal('totalPrice', treeNode)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1708,6 +1709,10 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         calcTools.checkFeeField(treeNode, calcItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (tender == tenderTypes.ttReverseRation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.calcTenderReverse(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 deleteUselessFees(treeNode, fnArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1719,22 +1724,22 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算本节点、所有父节点(默认,可选)、公式引用节点(默认,可选)。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calculate(treeNode, calcParents = true, calcFormulas = true, isTender = false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calculate(treeNode, calcParents = true, calcFormulas = true, tender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let changedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.innerCalc(treeNode, changedNodes, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.innerCalc(treeNode, changedNodes, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.changed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 计算父结点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (calcParents){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let curNode = treeNode.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 while (curNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    me.innerCalc(curNode, changedNodes, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    me.innerCalc(curNode, changedNodes, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     curNode = curNode.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 父结点算完,再计算所有的公式结点(必须先算完父结点,再算公式结点) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (calcFormulas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.calcFormulaNodes(changedNodes, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.calcFormulaNodes(changedNodes, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1747,7 +1752,7 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calcAllType.catRations   计算所有定额、工料机形式的定额、量价,因为它们都走自己的计算程序 (改变人工系数、费率值、工料机单价时会用到)  不要用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         缺陷:calcAllType.catRations 参数情况不会计算父结点。(calcAllType.catBills 可以,因为清单的父结点也是清单会计算) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calcAllNodes(calcType = calcAllType.catAll, isTender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calcAllNodes(calcType = calcAllType.catAll, tender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let changedNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         function calcNodes(nodes) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1759,17 +1764,17 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (calcType == calcAllType.catAll || calcType == node.sourceType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     node.calcType = calcTools.getCalcType(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (node.calcType != treeNodeCalcType.ctCalcBaseValue) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        me.innerCalc(node, changedNodes, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.innerCalc(node, changedNodes, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calcNodes(me.project.mainTree.roots); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.calcFormulaNodes(changedNodes, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.calcFormulaNodes(changedNodes, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return changedNodes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 计算全部公式项。 (参数意义:将通过本方法后发生改变的节点存入changedArr中) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calcFormulaNodes(changedArr, isTender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calcFormulaNodes(changedArr, tender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let formulaNodes = cbTools.getFormulaNodes(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (formulaNodes.length == 0) return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1778,13 +1783,13 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             projectObj.project.calcBase.calculate(formulaNode, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (projectObj.project.calcBase.success){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 计算公式结点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.innerCalc(formulaNode, changedArr, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.innerCalc(formulaNode, changedArr, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 计算父结点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (formulaNode.changed){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let curNode = formulaNode.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     while (curNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        me.innerCalc(curNode, changedArr, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.innerCalc(curNode, changedArr, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         curNode = curNode.parent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1875,8 +1880,9 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.calcNodesAndSave(billNodes, callback); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    calcAllNodesAndSave(calcType = calcAllType.catAll, callback, isTender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let changedNodes = this.calcAllNodes(calcType, isTender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // tender: null:不调价(普通计算)。 1: 正向调价   2:反向调价-调子目    3: 反向调价-调工料机 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calcAllNodesAndSave(calcType = calcAllType.catAll, callback, tender){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let changedNodes = this.calcAllNodes(calcType, tender); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.saveNodes(changedNodes, callback); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1925,6 +1931,29 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         projectObj.project.property.tenderSetting.gljPriceTenderCoe = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 反向调价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    calcTenderReverse(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.data.feesIndex.common.tenderUnitFee = treeNode.data.feesIndex.common.unitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode.data.targetTotalFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.data.targetUnitFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.data.targetTotalFee = treeNode.data.targetUnitFee * treeNode.data.quantity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.data.rationQuantityCoe = treeNode.data.targetTotalFee / treeNode.data.feesIndex.common.totalFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.data.tenderQuantity = treeNode.data.quantity * treeNode.data.rationQuantityCoe; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.data.feesIndex.common.tenderTotalFee = treeNode.data.tenderQuantity * treeNode.data.feesIndex.common.tenderUnitFee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // export default analyzer; 
			 |