|  | @@ -1,399 +0,0 @@
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - * Created by Mai on 2017/7/5.
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// const rationContent = 0, rationPrice = 1, rationPriceConverse = 2, billsPrice = 3;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -// sumTotalFeeFlag: sum(child.totalFee), totalFeeFlag: bills.quantity × bills.unitFee
 | 
	
		
			
				|  |  | -// const sumTotalFeeFlag = 0, totalFeeFlag = 1;
 | 
	
		
			
				|  |  | -// rationContentUnitFeeFlag: sum(child.unitFee * child.quantity / bills.quantity)
 | 
	
		
			
				|  |  | -// averageQtyUnitFeeFlag: sum(child.totalFee/bills.quantity)
 | 
	
		
			
				|  |  | -// billsPriceUnitFeeFlag: 根据定额计算程序
 | 
	
		
			
				|  |  | -// converseUnitFeeFalg: bills.totalFee / bills.quantity
 | 
	
		
			
				|  |  | -// const rationContentUnitFeeFlag = 0, averageQtyUnitFeeFlag = 1, billsPriceUnitFeeFlag = 2, converseUnitFeeFlag = 3;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/*let rationContentCalcFields = [
 | 
	
		
			
				|  |  | -    {'type': 'common', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'labour', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'material', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'machine', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -let rationPriceCalcFields = [
 | 
	
		
			
				|  |  | -    {'type': 'common', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'labour', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'material', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'machine', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -let rationPriceConverseCalcFields = [
 | 
	
		
			
				|  |  | -    {'type': 'common', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'labour', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'material', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'machine', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
 | 
	
		
			
				|  |  | -];
 | 
	
		
			
				|  |  | -let billsPriceCalcFields = [
 | 
	
		
			
				|  |  | -    {'type': 'common', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'labour', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'material', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
 | 
	
		
			
				|  |  | -    {'type': 'machine', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
 | 
	
		
			
				|  |  | -];*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/*let nodeCalcObj = {
 | 
	
		
			
				|  |  | -    node: null,
 | 
	
		
			
				|  |  | -    digit: 2,
 | 
	
		
			
				|  |  | -    field: null,
 | 
	
		
			
				|  |  | -    getFee: calcFees.getFee,
 | 
	
		
			
				|  |  | -    sumTotalFee: function() {
 | 
	
		
			
				|  |  | -        let result = 0, child;
 | 
	
		
			
				|  |  | -        for (child of this.node.children) {
 | 
	
		
			
				|  |  | -            let value = this.getFee(child.data, this.field.totalFee);
 | 
	
		
			
				|  |  | -            if (Object.prototype.toString.apply(value) === "[object String]") {
 | 
	
		
			
				|  |  | -                value = parseFloat(value);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            result += value;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return result;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    averageQty: function() {
 | 
	
		
			
				|  |  | -        let result = 0, child, qty;
 | 
	
		
			
				|  |  | -        result = this.sumTotalFee(this.field);
 | 
	
		
			
				|  |  | -        qty = this.getFee(this.node.data, 'quantity');
 | 
	
		
			
				|  |  | -        if (Object.prototype.toString.apply(qty) === "[object String]") {
 | 
	
		
			
				|  |  | -            qty = parseFloat(qty);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (qty !== 0) {
 | 
	
		
			
				|  |  | -            result = result / qty;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return result;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    totalFee: function () {
 | 
	
		
			
				|  |  | -        return this.getFee(this.node.data, this.field.unitFee) * this.getFee(this.node.data, 'quantity');
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    rationContentUnitFee: function () {
 | 
	
		
			
				|  |  | -        let result = 0, child, qty = this.getFee(this.node.data, 'quantity');
 | 
	
		
			
				|  |  | -        if (Object.prototype.toString.apply(qty) === "[object String]") {
 | 
	
		
			
				|  |  | -            qty = parseFloat(qty);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (qty === 0) {
 | 
	
		
			
				|  |  | -            qty = 1;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        for (child of this.node.children) {
 | 
	
		
			
				|  |  | -            let childUnitFee = this.getFee(child.data, this.field.unitFee);
 | 
	
		
			
				|  |  | -            if (Object.prototype.toString.apply(childUnitFee) === "[object String]") {
 | 
	
		
			
				|  |  | -                childUnitFee = parseFloat(childUnitFee);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            let childQuantity = this.getFee(child.data, 'quantity');
 | 
	
		
			
				|  |  | -            if (Object.prototype.toString.apply(childQuantity) === "[object String]") {
 | 
	
		
			
				|  |  | -                childQuantity = parseFloat(childQuantity);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            result += (childUnitFee * childQuantity / qty).toDecimal(this.digit);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return result;
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    converseUnitFee: function (digit) {
 | 
	
		
			
				|  |  | -        let totalFee = this.sumTotalFee().toDecimal(digit);
 | 
	
		
			
				|  |  | -        let qty = this.getFee(this.node.data, 'quantity');
 | 
	
		
			
				|  |  | -        if (qty !== 0){
 | 
	
		
			
				|  |  | -            return totalFee / qty;
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            return 0;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -};*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/*let baseCalcField = [
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        ID: 1,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '一',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "A",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "定额直接费",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "A1+A2+A3",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "人工费+材料费+机械费",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: null,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'RationDirect',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 2,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '1',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "A1",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "人工费",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "H_J",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "合计",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: 0,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'labour',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 3,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '2',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "A2",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "材料费",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "H_J",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "合计",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: 100,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'material',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 4,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '3',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "A3",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "机械费",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "H_J",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "合计",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: 0,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'machine',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 5,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '二',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "A4",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "管理费",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "A",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "定额直接费",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: 0,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'management',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 6,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '三',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "B",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "利润",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "A",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "定额直接费",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: 0,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'profit',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 7,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '四',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "C",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "风险费用",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: null,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'risk',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }, {
 | 
	
		
			
				|  |  | -        ID: 8,
 | 
	
		
			
				|  |  | -        // 序号
 | 
	
		
			
				|  |  | -        serialNo: '',
 | 
	
		
			
				|  |  | -        // 费用代号
 | 
	
		
			
				|  |  | -        code: "",
 | 
	
		
			
				|  |  | -        // 名称
 | 
	
		
			
				|  |  | -        name: "综合单价",
 | 
	
		
			
				|  |  | -        // 计算基数
 | 
	
		
			
				|  |  | -        dispExpr: "A+B",
 | 
	
		
			
				|  |  | -        // 基数说明
 | 
	
		
			
				|  |  | -        statement: "定额直接费+利润",
 | 
	
		
			
				|  |  | -        // 费率
 | 
	
		
			
				|  |  | -        feeRate: NaN,
 | 
	
		
			
				|  |  | -        // 费用类别
 | 
	
		
			
				|  |  | -        type: 'common',
 | 
	
		
			
				|  |  | -        // 备注
 | 
	
		
			
				|  |  | -        memo: ''
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -];*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/*class BillsCalcHelper {
 | 
	
		
			
				|  |  | -    constructor (project, calcFlag) {
 | 
	
		
			
				|  |  | -        this.project = project;
 | 
	
		
			
				|  |  | -        this.InitFields(project.calcFields);
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    getBillsGLjs (node) {
 | 
	
		
			
				|  |  | -        let rations = this.project.Ration.getBillsSortRation(node.source.getID());
 | 
	
		
			
				|  |  | -        let gljs = this.project.ration_glj.getGatherGljArrByRations(rations);
 | 
	
		
			
				|  |  | -        for (let glj of gljs) {
 | 
	
		
			
				|  |  | -            glj.quantity = (glj.quantity / calcFees.getFee(node.data, 'quantity')).toDecimal(4);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return gljs;
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    calcRationLeaf (node, fields, isIncre) {
 | 
	
		
			
				|  |  | -        nodeCalcObj.node = node;
 | 
	
		
			
				|  |  | -        nodeCalcObj.digit = this.project.Decimal.common.unitFee;
 | 
	
		
			
				|  |  | -        calcFees.checkFields(node.data, fields);
 | 
	
		
			
				|  |  | -        let nodeCalc = nodeCalcObj, virData= null, decimal = this.project.Decimal;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 清单单价:套用定额计算程序
 | 
	
		
			
				|  |  | -        // if (this.project.projSetting.billsCalcMode === billsPrice) {
 | 
	
		
			
				|  |  | -/!*        if (this.project.property.billsCalcMode === leafBillGetFeeType.billsPrice) {
 | 
	
		
			
				|  |  | -            rationCalcObj.calcGljs = this.getBillsGLjs(node);
 | 
	
		
			
				|  |  | -            console.log(rationCalcObj.calcGljs);
 | 
	
		
			
				|  |  | -            rationCalcObj.calcFields = rationCalcFields;
 | 
	
		
			
				|  |  | -            virData = rationCalcObj.calculate();
 | 
	
		
			
				|  |  | -        }*!/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        for (let field of fields) {
 | 
	
		
			
				|  |  | -            nodeCalcObj.field = field;
 | 
	
		
			
				|  |  | -            switch (field.unitFeeFlag) {
 | 
	
		
			
				|  |  | -                case rationContentUnitFeeFlag:
 | 
	
		
			
				|  |  | -                    node.data.feesIndex[field.type].unitFee = nodeCalcObj.rationContentUnitFee().toDecimal(decimal.common.unitFee);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                case averageQtyUnitFeeFlag:
 | 
	
		
			
				|  |  | -                    node.data.feesIndex[field.type].unitFee = nodeCalcObj.averageQty().toDecimal(decimal.common.unitFee);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                case billsPriceUnitFeeFlag:
 | 
	
		
			
				|  |  | -                    node.data.feesIndex[field.type].unitFee = virData[field.type];
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                case converseUnitFeeFlag:
 | 
	
		
			
				|  |  | -                    node.data.feesIndex[field.type].unitFee = nodeCalcObj.converseUnitFee(decimal.common.totalFee).toDecimal(decimal.common.unitFee);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                default:
 | 
	
		
			
				|  |  | -                    node.data.feesIndex[field.type].unitFee = 0;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            let value = 0;
 | 
	
		
			
				|  |  | -            switch (field.totalFeeFlag) {
 | 
	
		
			
				|  |  | -                case sumTotalFeeFlag:
 | 
	
		
			
				|  |  | -                    value = nodeCalcObj.sumTotalFee().toDecimal(decimal.common.totalFee);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                case totalFeeFlag:
 | 
	
		
			
				|  |  | -                    value = nodeCalcObj.totalFee().toDecimal(decimal.common.totalFee);
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | -                default:
 | 
	
		
			
				|  |  | -                    value = 0;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            this.setTotalFee(node, field, value, isIncre);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    calcVolumePriceLeaf (node, fields, isIncre) {
 | 
	
		
			
				|  |  | -        let total = 0;
 | 
	
		
			
				|  |  | -        for (let child of node.children) {
 | 
	
		
			
				|  |  | -            total += calcFees.getFee(child.data, 'feesIndex.common.totalFee');
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    calcParent (node, fields, isIncre) {
 | 
	
		
			
				|  |  | -        nodeCalcObj.node = node;
 | 
	
		
			
				|  |  | -        calcFees.checkFields(node.data, fields);
 | 
	
		
			
				|  |  | -        for (let field of fields) {
 | 
	
		
			
				|  |  | -            nodeCalcObj.field = field;
 | 
	
		
			
				|  |  | -            let value = nodeCalcObj.sumTotalFee().toDecimal(this.project.Decimal.common.totalFee);
 | 
	
		
			
				|  |  | -            this.setTotalFee(node, field, value, isIncre);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    clearFeeFields(node, fields, isIncre) {
 | 
	
		
			
				|  |  | -        for (let field of fields) {
 | 
	
		
			
				|  |  | -            node.data.feesIndex[field.type].unitFee = 0;
 | 
	
		
			
				|  |  | -            this.setTotalFee(node, field, 0, isIncre);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    calcNode(node, isIncre) {
 | 
	
		
			
				|  |  | -        if (node.source.children.length > 0) {
 | 
	
		
			
				|  |  | -            this.calcParent(node, this.project.calcFields, isIncre);
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            if (node.children.length > 0) {
 | 
	
		
			
				|  |  | -                if (node.firstChild().sourceType === this.project.Ration.getSourceType()) {
 | 
	
		
			
				|  |  | -                    this.calcRationLeaf(node, this.project.calcFields, isIncre);
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    this.calcVolumePriceLeaf(node, this.project.calcFields, isIncre);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            } else {
 | 
	
		
			
				|  |  | -                this.clearFeeFields(node, this.project.calcFields, isIncre);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    calcNodes (nodes) {
 | 
	
		
			
				|  |  | -        for (let node of nodes) {
 | 
	
		
			
				|  |  | -            if (node.sourceType !== this.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (node.source.children.length > 0) {
 | 
	
		
			
				|  |  | -                this.calcNodes(node.children);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            this.calcNode(node);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    updateParent (parent, field, Incre) {
 | 
	
		
			
				|  |  | -        if (parent && parent.sourceType === this.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -            calcFees.checkFields(parent.data, [field]);
 | 
	
		
			
				|  |  | -            parent.data.feesIndex[field.type].totalFee = (parent.data.feesIndex[field.type].totalFee + Incre).toDecimal(this.project.Decimal.common.totalFee);
 | 
	
		
			
				|  |  | -            parent.data.feesIndex[field.type].unitFee = 0;   // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
 | 
	
		
			
				|  |  | -            this.updateParent(parent.parent, field, Incre);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    setTotalFee (node, field, value, isIncre) {
 | 
	
		
			
				|  |  | -        if (isIncre) {
 | 
	
		
			
				|  |  | -            let incre = value - node.data.feesIndex[field.type].totalFee;
 | 
	
		
			
				|  |  | -            node.data.feesIndex[field.type].totalFee = value;
 | 
	
		
			
				|  |  | -            node.data.feesIndex[field.type].unitFee = 0; // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
 | 
	
		
			
				|  |  | -            this.updateParent(node.parent, field, incre);
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            node.data.feesIndex[field.type].totalFee = value;
 | 
	
		
			
				|  |  | -            node.data.feesIndex[field.type].unitFee = 0; // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    converseCalc (node) {
 | 
	
		
			
				|  |  | -        if (node && node.sourceType === this.project.Bills.getSourceType()) {
 | 
	
		
			
				|  |  | -            this.calcNode(node);
 | 
	
		
			
				|  |  | -            this.converseCalc(node.parent);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    calcAll () {
 | 
	
		
			
				|  |  | -        this.calcNodes(this.project.mainTree.roots);
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -    InitFields (fields) {
 | 
	
		
			
				|  |  | -        for (let field of fields) {
 | 
	
		
			
				|  |  | -            if (field.unitFee) return;
 | 
	
		
			
				|  |  | -            field.unitFee = 'feesIndex.' + field.type + '.unitFee';
 | 
	
		
			
				|  |  | -            field.unitFeeSplit = field.unitFee.split('.');
 | 
	
		
			
				|  |  | -            field.totalFee = 'feesIndex.' + field.type + '.totalFee';
 | 
	
		
			
				|  |  | -            field.totalFeeSplit = field.totalFee.split('.');
 | 
	
		
			
				|  |  | -            field.tenderUnitFee = 'feesIndex.'+ field.type + '.tenderUnitFee';
 | 
	
		
			
				|  |  | -            field.tenderUnitFeeSplit = field.tenderUnitFee.split('.');
 | 
	
		
			
				|  |  | -            field.tenderTotalFee = 'feesIndex.' + field.type + '.tenderTotalFee';
 | 
	
		
			
				|  |  | -            field.tenderTotalFeeSplit = field.tenderTotalFee.split('.');
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -}*/
 |