浏览代码

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

zhongzewei 6 年之前
父节点
当前提交
93b6580462

+ 86 - 13
modules/reports/rpt_component/jpc_flow_tab.js

@@ -341,14 +341,17 @@ JpcFlowTabSrv.prototype.createNew = function(){
                             doc.fontSize(12);
                         }
                         let hasSplitStr = false, splitStrArr = [];
+                        let accAmt = 0;
                         for (let i = 0; i < values.length; i++) {
-                            let amt = JpcCommonHelper.getStringLinesInArea(area, values[i], doc) - 1;
-                            rst += amt;
-                            if (amt > 0) {
+                            let amt = JpcCommonHelper.getStringLinesInArea(area, values[i], doc);
+                            accAmt += amt;
+                            // rst += amt;
+                            if (amt > 1) {
                                 hasSplitStr = true;
                                 splitStrArr.push(i);
                             }
                         }
+                        if (accAmt > rst) rst = accAmt;
                         if (hasSplitStr) {
                             let newValArr = [];
                             for (let i = 0; i < values.length; i++) {
@@ -998,11 +1001,13 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
+            rst[JV.PROP_IS_AUTO_HEIGHT] = true;
             return rst;
         } else {
             if (contentValInfo[3] > 0) showText = '';
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
+            rst[JV.PROP_IS_AUTO_HEIGHT] = false;
             return rst;
         }
     };
@@ -1077,17 +1082,24 @@ function setupControl(mergeCell, controls) {
             "Shrink": "T",
             "ShowZero": orgCtrl.ShowZero,
             "Horizon": orgCtrl.Horizon,
-            "Vertical": "top",
+            "Vertical": orgCtrl.Vertical,
             "Wrap": "T",
-            "VerticalForExcel": "justify"
+            "VerticalForExcel": "center"
         };
     } else {
         mergeCell[JV.PROP_CONTROL].Shrink = "T";
         mergeCell[JV.PROP_CONTROL].Vertical = "top";
         mergeCell[JV.PROP_CONTROL].Wrap = "T";
-        mergeCell[JV.PROP_CONTROL].VerticalForExcel = "justify";
+        mergeCell[JV.PROP_CONTROL].VerticalForExcel = "center";
         orgCtrl = mergeCell[JV.PROP_CONTROL];
     }
+    if (mergeCell[JV.PROP_IS_AUTO_HEIGHT]) {
+        mergeCell[JV.PROP_CONTROL]["VerticalForExcel"] = 'justify';
+        // mergeCell[JV.PROP_CONTROL]["Vertical"] = 'center';
+    } else {
+        mergeCell[JV.PROP_CONTROL]["VerticalForExcel"] = 'center';
+        // mergeCell[JV.PROP_CONTROL]["Vertical"] = 'top';
+    }
     return orgCtrl;
 }
 
@@ -1097,31 +1109,92 @@ function combineAutoHeightCells(prepareObj, page, controls) {
         //merge cells' value and area
         //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
         for (let mergeKey in prepareObj.pageCellObj) {
-            if (prepareObj.pageCellObj[mergeKey].length > 1) {
-                let firstMergeCell = prepareObj.pageCellObj[mergeKey][0].cell;
+            let sameColCells = prepareObj.pageCellObj[mergeKey]; //左右位置相同的Cell先放在一起,统一处理
+            if (sameColCells.length > 1) {
+                let firstMergeCell = sameColCells[0].cell;
+                firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge")); //首先还原original style
+                let orgCtrl = setupControl(firstMergeCell, controls);
+                let validValueAmt = 0, fullValidValueAmt = 0;
+                for (let i = 1; i < sameColCells.length; i++) {
+                    let mergeCell = sameColCells[i].cell;
+                    if (mergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge_Top") < 0) {
+                        fullValidValueAmt++;
+                        //merge into the firstMergeCell! position & value
+                        firstMergeCell[JV.PROP_AREA][JV.PROP_BOTTOM] = mergeCell[JV.PROP_AREA][JV.PROP_BOTTOM];
+                        if (mergeCell[JV.PROP_VALUE]) {
+                            firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" + mergeCell[JV.PROP_VALUE];
+                            validValueAmt++;
+                        } else {
+                            // firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" ;
+                        }
+                        rst.push(sameColCells[i].cellIdx); //记下Cell的位置,在函数外消除
+                        //如果到了最后一条数据,得判断firstMergeCell是否满格(即数据是满的,有可能有些格数据也有折行但不是自动行高判断指标)
+                        //不满格的cell的Vertical强制设置为 'center'
+                        if (i === sameColCells.length - 1 && validValueAmt !== fullValidValueAmt) {
+                            // firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
+                            // firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
+                        }
+                    } else {
+                        //碰到新开始的自动行高行,判断原先的firstMergeCell是否满格(即数据是满的,有可能有些格数据也有折行但不是自动行高判断指标)
+                        //不满格的cell的Vertical强制设置为 'center'
+                        if (validValueAmt !== fullValidValueAmt) {
+                            // firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
+                            // firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
+                        }
+                        firstMergeCell = sameColCells[i].cell;
+                        firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
+                        orgCtrl = setupControl(firstMergeCell, controls);
+                        validValueAmt = 0;
+                        fullValidValueAmt = 0;
+                    }
+                }
+            }
+        }
+        rst.sort(function (i1, i2) {
+            return (i1 > i2)?1:-1;
+        });
+    }
+    return rst;
+}
+
+function combineAutoHeightCellsBk(prepareObj, page, controls) {
+    let rst = [];
+    if (prepareObj.cellsArr) {
+        //merge cells' value and area
+        //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
+        for (let mergeKey in prepareObj.pageCellObj) {
+            let sameColCells = prepareObj.pageCellObj[mergeKey]; //左右位置相同的Cell先放在一起,统一处理
+            if (sameColCells.length > 1) {
+                let firstMergeCell = sameColCells[0].cell;
                 firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                 let orgCtrl = setupControl(firstMergeCell, controls);
                 let validValueAmt = 0;
-                for (let i = 1; i < prepareObj.pageCellObj[mergeKey].length; i++) {
-                    let mergeCell = prepareObj.pageCellObj[mergeKey][i].cell;
+                for (let i = 1; i < sameColCells.length; i++) {
+                    let mergeCell = sameColCells[i].cell;
                     if (mergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge_Top") < 0) {
                         //merge into the firstMergeCell!
                         firstMergeCell[JV.PROP_AREA][JV.PROP_BOTTOM] = mergeCell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" + mergeCell[JV.PROP_VALUE];
                         if (mergeCell[JV.PROP_VALUE]) validValueAmt++;
-                        rst.push(prepareObj.pageCellObj[mergeKey][i].cellIdx);
-                        if (i === prepareObj.pageCellObj[mergeKey].length - 1 && validValueAmt === 0) {
+                        rst.push(sameColCells[i].cellIdx);
+                        if (i === sameColCells.length - 1 && validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
                         }
                     } else {
                         if (validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
                         }
-                        firstMergeCell = prepareObj.pageCellObj[mergeKey][i].cell;
+                        firstMergeCell = sameColCells[i].cell;
                         firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                         orgCtrl = setupControl(firstMergeCell, controls);
                         validValueAmt = 0;

+ 1 - 1
modules/reports/util/rpt_pdf_util.js

@@ -231,7 +231,7 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             doc.rotate(font.FontAngle,rotateOptions);
         }
         doc.text(val,output[0], output[1], options);
-        doc.font(__dirname + '/pdf_base_files/Smart.ttf');
+        doc.font(__dirname + '/pdf_base_files/simhei_bold_italic.ttf');
         // doc.restore();
     }
 

+ 5 - 4
test/unit/reports/test_rpt_test_template.js

@@ -32,7 +32,8 @@ let demoPrjId = - 1;
 // let demoRptId = 361; //封1
 // let demoRptId = 279; //表04
 // let demoRptId = 261; //封3
-let demoRptId = 401; //09
+// let demoRptId = 401; //09
+let demoRptId = 389; //10
 // let demoRptId = 280; //11-1 暂列金
 // let demoRptId = 2260; //测试基本信息
 let pagesize = "A4";
@@ -78,8 +79,8 @@ test('测试 - 测试模板啦: ', function (t) {
                 try {
                     // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataObject_测试模板.jsp");
                     let tplData = rptDataUtil.assembleData(rawDataObj);
-                    fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
-                    fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_测试模板.jsp");
+                    // fsUtil.writeObjToFile(rawDataObj, "D:/GitHome/ConstructionCost/tmp/rptTplRawDataAfterCacl_测试模板.jsp");
+                    // fsUtil.writeObjToFile(tplData, "D:/GitHome/ConstructionCost/tmp/rptTplAssembledData_测试模板.jsp");
                     //it's time to build the report!!!
                     let printCom = JpcEx.createNew();
                     rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE] = pagesize;
@@ -90,7 +91,7 @@ test('测试 - 测试模板啦: ', function (t) {
                     let maxPages = printCom.totalPages;
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
-                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult_测试模板.jsp");
+                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult_测试模板.jsp");
                         // rpt_xl_util.exportExcel(pageRst, pagesize, "local_test_rpt_excel", true, null, null, function(uuidName){
                         //     console.log("excel uuid: " + uuidName);
                         // });

+ 115 - 80
web/building_saas/main/js/models/calc_program.js

@@ -309,28 +309,57 @@ let calcTools = {
         if (!treeNode.data.gljList) return 0;
         let me = this, result = 0;
         let price = 0, temp = 0, temp2 = 0;
-        for (let glj of treeNode.data.gljList) {
-            if (gljTypes.indexOf(glj.type) >= 0) {
-                if (isTender){
-                    calcTools.calcGLJTenderPrice(glj);
-                    calcTools.calcGLJTenderQty(treeNode, glj);
-                };
-                let qty = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
-                let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
-                let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
 
-                if (priceType == priceTypes.ptDiffPrice){
-                    // if (aprice != mprice){
+        // 机械组成物价差: 机上人工、动力燃料
+        if ((priceType == priceTypes.ptDiffPrice) && (gljTypes.includes(gljType.MACHINE_LABOUR) || gljTypes.includes(gljType.FUEL_POWER_FEE))){
+            for (let glj of treeNode.data.gljList) {
+                if ([gljType.GENERAL_MACHINE, gljType.INSTRUMENT].includes(glj.type)){
+                    if (isTender){
+                        calcTools.calcGLJTenderPrice(glj);
+                        calcTools.calcGLJTenderQty(treeNode, glj);
+                    };
+                    let mds = projectObj.project.composition.getCompositionByGLJ(glj);
+                    if (!mds) mds = [];
+                    for (let md of mds){
+                        if (gljTypes.includes(md.type)){
+                            let gljQ = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
+                            let mdQ = me.uiGLJQty(md.consumption);
+                            let mdMP = isTender ? md["tenderPrice"] : md["marketPrice"];
+                            let mdAP = calcTools.hasAdjustPrice() ? md["adjustPrice"] : md["basePrice"];
+                            // if (aprice != mprice){
+                            temp = (temp + (gljQ * mdQ * mdMP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
+                            temp2 = (temp2 + (gljQ * mdQ * mdAP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
+                            // }
+                        }
+                    }
+                }
+            }
+        }
+        // 普通基数计算(包括普通价差)
+        else{
+            for (let glj of treeNode.data.gljList) {
+                if (gljTypes.indexOf(glj.type) >= 0) {
+                    if (isTender){
+                        calcTools.calcGLJTenderPrice(glj);
+                        calcTools.calcGLJTenderQty(treeNode, glj);
+                    };
+                    let qty = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
+                    let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
+                    let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
+
+                    if (priceType == priceTypes.ptDiffPrice){
+                        // if (aprice != mprice){
                         temp = (temp + (qty * mprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
                         temp2 = (temp2 + (qty * aprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
-                    // }
-                }
-                else {
-                    if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
-                    else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
-                    else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
-                    temp = (qty * price).toDecimal(decimalObj.process);
-                    result = (result + temp).toDecimal(decimalObj.process);
+                        // }
+                    }
+                    else {
+                        if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
+                        else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
+                        else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
+                        temp = (qty * price).toDecimal(decimalObj.process);
+                        result = (result + temp).toDecimal(decimalObj.process);
+                    };
                 };
             };
         };
@@ -523,11 +552,11 @@ let calcTools = {
         if (treeNode.data.type != rationType.volumePrice && treeNode.data.type != rationType.gljRation) return;
         let result = 0, me = this;
         if (
-            (treeNode.data.subType === gljType.LABOUR && baseName === rationCalcBasesNameMap.DEJJRGF) ||
-            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.DEJJCLF) ||
-            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJXF) ||
-            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCF) ||
-            (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBF)) {
+            (treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'RGF')) ||
+            (baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'CLF')) ||
+            (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JXF')) ||
+            (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'ZCF')) ||
+            (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'SBF'))) {
             if (treeNode.data.type == rationType.volumePrice)
                 result = treeNode.data.marketUnitFee ? parseFloat(treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0
             else if (treeNode.data.type == rationType.gljRation)
@@ -535,7 +564,7 @@ let calcTools = {
                 // 这里因为是算基数所以要取基价,但不能直接取basePrice,受限于项目属性的三个选项。
                 result = gljOprObj.getBasePrice(treeNode);
         }
-        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJSRGF) {
+        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JSRGF')) {
             let glj = {
                 'code': treeNode.data.code,
                 'name': treeNode.data.name,
@@ -548,11 +577,11 @@ let calcTools = {
         }
         else if (
             (treeNode.data.type == rationType.gljRation) &&
-            ((treeNode.data.subType === gljType.LABOUR && baseName === rationCalcBasesNameMap.RGFJC) ||
-                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.CLFJC) ||
-                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.JXFJC) ||
-                (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCFJC) ||
-                (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBFJC))
+            ((treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'JC_RGF')) ||
+                (baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'JC_CLF')) ||
+                (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JC_JXF')) ||
+                (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'JC_ZCF')) ||
+                (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'JC_SBF')))
         ) {
             let aprice = me.uiGLJPrice(treeNode.data.basePrice);   // 量价虚拟的工料机不可能有发文,这里直接取定额价。
             let mprice = me.uiGLJPrice(treeNode.data.marketUnitFee);
@@ -571,26 +600,22 @@ let calcTools = {
             supplyT = [supplyType.JDYG];
 
         let gljT = [], compT = [];
-        if ([rationCalcBasesNameMap.JGDEJJRGF, rationCalcBasesNameMap.JDDEJJRGF].includes(baseName)){               // 甲供、甲定人工
+        if (calcTools.inBase(baseName, 'JG_RGF') || calcTools.inBase(baseName, 'JD_RGF')){
             gljT = [gljType.LABOUR];
         }
-        else if ([rationCalcBasesNameMap.JGDEJJCLF, rationCalcBasesNameMap.JDDEJJCLF].includes(baseName)){          // 甲供、甲定材料
+        else if (calcTools.inBase(baseName, 'JG_CLF') || calcTools.inBase(baseName, 'JD_CLF')){             // 甲供、甲定材料
             gljT = baseMaterialTypes;
             compT = compositionTypes;
         }
-        else if ([rationCalcBasesNameMap.JGDEJJJXF, rationCalcBasesNameMap.JDDEJJJXF].includes(baseName)){          // 甲供、甲定机械
+        else if (calcTools.inBase(baseName, 'JG_JXF') || calcTools.inBase(baseName, 'JD_JXF')) {            // 甲供、甲定机械
             gljT = baseMachineTypes;
-            compT = [gljType.GENERAL_MACHINE];
+            compT = [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED];              // 取并集,兼容重庆2018新定额
         }
-        else if ([rationCalcBasesNameMap.JGDESGJJF, rationCalcBasesNameMap.JDDESGJJF].includes(baseName)){          // 甲供、甲定机械(重庆2018新定额)
-            gljT = baseMachineTypes;
-            compT = baseMachineTypes_CQ_2018_JX;
-        }
-        else if ([rationCalcBasesNameMap.JGZCF, rationCalcBasesNameMap.JDZCF].includes(baseName)){                  // 甲供、甲定主材
+        else if (calcTools.inBase(baseName, 'JG_ZCF') || calcTools.inBase(baseName, 'JD_ZCF')) {            // 甲供、甲定主材
             gljT = [gljType.MAIN_MATERIAL];
             compT = [gljType.MAIN_MATERIAL];
         }
-        else if ([rationCalcBasesNameMap.JGSBF, rationCalcBasesNameMap.JDSBF].includes(baseName)){                  // 甲供、甲定设备
+        else if (calcTools.inBase(baseName, 'JG_SBF') || calcTools.inBase(baseName, 'JD_SBF')) {           // 甲供、甲定设备
             gljT = [gljType.EQUIPMENT];
         };
         // alert(JSON.stringify(projectGLJ.testGLJs()));
@@ -871,39 +896,47 @@ let calcTools = {
                   return o.value;
               }
         };
+    },
+    inBase(baseName, kindName){
+        return rationCalcBasesNameKinds[kindName].includes(baseName);
     }
 };
 
-let rationCalcBasesNameMap = {
-    DEJJRGF: '定额基价人工费',
-    DEJJCLF: '定额基价材料费',
-    DEJJJXF: '定额基价机械费',
-    DEJJJSRGF: '定额基价机上人工费',
-    RGFJC: '人工费价差',
-    CLFJC: '材料费价差',
-    JXFJC: '机械费价差',
-    ZCFJC: '主材费价差',
-    SBFJC: '设备费价差',
-    ZCF: '主材费',
-    SBF: '设备费',
-    RGGR: '人工工日',
-    JGDEJJRGF: '甲供定额基价人工费',
-    JGDEJJCLF: '甲供定额基价材料费',
-    JGDEJJJXF: '甲供定额基价机械费',
-    JGZCF: '甲供主材费',
-    JGSBF: '甲供设备费',
-    JDDEJJRGF: '甲定定额基价人工费',
-    JDDEJJCLF: '甲定定额基价材料费',
-    JDDEJJJXF: '甲定定额基价机械费',
-    JDZCF: '甲定主材费',
-    JDSBF: '甲定设备费',
-    ZGCLF: '暂估材料费',
-    FBDEJJRGF: '分包定额基价人工费',
-    FBDEJJCLF: '分包定额基价材料费',
-    FBDEJJJXF: '分包定额基价机械费',
-    FBZCF: '分包主材费',
-    FBSBF: '分包设备费',
-    FBRGGR: '分包人工工日'
+let rationCalcBasesNameKinds = {
+    RGF:        ['定额基价人工费', '定额人工费'],
+    CLF:        ['定额基价材料费', '定额材料费'],
+    QTCLF:      ['定额其他材料费'],
+    JXF:        ['定额基价机械费', '定额施工机具使用费'],
+    JSRGF:      ['定额基价机上人工费'],
+    ZCF:        ['主材费'],
+    SBF:        ['设备费'],
+    RGGR:       ['人工工日'],
+    ZGCLF:      ['暂估材料费'],
+
+    JC_RGF:     ['人工费价差'],
+    JC_CLF:     ['材料费价差'],
+    JC_JXF:     ['机械费价差'],
+    JC_ZCF:     ['主材费价差'],
+    JC_SBF:     ['设备费价差'],
+
+    JG_RGF:     ['甲供定额基价人工费', '甲供定额人工费'],
+    JG_CLF:     ['甲供定额基价材料费', '甲供定额材料费'],
+    JG_JXF:     ['甲供定额基价机械费', '甲供定额施工机具费'],
+    JG_ZCF:     ['甲供主材费'],
+    JG_SBF:     ['甲供设备费'],
+
+    JD_RGF:     ['甲定定额基价人工费', '甲定定额人工费'],
+    JD_CLF:     ['甲定定额基价材料费', '甲定定额材料费'],
+    JD_JXF:     ['甲定定额基价机械费', '甲定定额施工机具费'],
+    JD_ZCF:     ['甲定主材费'],
+    JD_SBF:     ['甲定设备费'],
+
+    FB_RGF:     ['分包定额基价人工费'],
+    FB_CLF:     ['分包定额基价材料费'],
+    FB_JXF:     ['分包定额基价机械费'],
+    FB_ZCF:     ['分包主材费'],
+    FB_SBF:     ['分包设备费'],
+    FB_RGGR:    ['分包人工工日']
 };
 
 let rationCalcBases = {
@@ -944,34 +977,34 @@ let rationCalcBases = {
         return calcTools.labourDays(node, isTender);
     },
     '甲供定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价人工费', isTender);
     },
     '甲供定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价材料费', isTender);
     },
     '甲供定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, '甲供定额基价机械费', isTender);
     },
     '甲供主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGZCF, isTender);
+        return calcTools.partASupplyFee(node, '甲供主材费', isTender);
     },
     '甲供设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGSBF, isTender);
+        return calcTools.partASupplyFee(node, '甲供设备费', isTender);
     },
     '甲定定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价人工费', isTender);
     },
     '甲定定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价材料费', isTender);
     },
     '甲定定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, '甲定定额基价机械费', isTender);
     },
     '甲定主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDZCF, isTender);
+        return calcTools.partASupplyFee(node, '甲定主材费', isTender);
     },
     '甲定设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDSBF, isTender);
+        return calcTools.partASupplyFee(node, '甲定设备费', isTender);
     },
     '暂估材料费': function (node, isTender) {
         return calcTools.estimateFee(node, true, isTender);
@@ -1088,6 +1121,7 @@ let analyzer = {
                 expr = expr.replace(/\[[\u4E00-\u9FA5]+\]/gi, '0');
                 expr = expr.replace(/@\d+/gi, '0');
                 expr = expr.replace(/L/gi, '0');
+                expr = expr.replace(/%/gi, '*0.01');
                 if (expr.includes('00'))
                     return false;
 
@@ -1227,6 +1261,7 @@ let analyzer = {
             let val = `$CE.at(${IDArr[i]},false)`;
             rst = rst.replace(patt, val);
         };
+        rst = rst.replace(/%/g, "*0.01");
         rst = rst.replace(/\[/g, "$CE.base('");
         rst = rst.replace(/\]/g, "',false)");
         rst = rst.replace(/L/g, labourCoe);

+ 1 - 1
web/building_saas/main/js/views/calc_base_view.js

@@ -213,7 +213,7 @@ let calcBaseView = {
                 }
             }
             let bnArr = Object.keys(rationCalcBases);
-            bnArr.sort();
+            // bnArr.sort();
             let baseArr = [];
             for (let bn of bnArr) {
                 baseArr.push({base: bn})

+ 8 - 5
web/building_saas/main/js/views/fee_rate_view.js

@@ -345,7 +345,7 @@ var feeRateObject={
                 var imageHeight = hitinfo.cellRect.height-2*imageMagin;
                 var imageWidth = hitinfo.cellRect.width*2/7;
                 if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
-                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row)){
+                    if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row,hitinfo.sheet.name())){
                         $('#calcBaseFeeRateConf').attr('toggle', 'feeRate');
                         changeCalcBaseFeeRate('feeRate');
                         $('#tabFeeRate').tab('show');
@@ -362,7 +362,7 @@ var feeRateObject={
             if(me.editingCell==null){
                 var showSelectBtn = true;
                 if(hitinfo.sheet.name()!='calc_detail'){
-                    showSelectBtn=me.ifFeeRateEdit(hitinfo.row);
+                    showSelectBtn=me.ifFeeRateEdit(hitinfo.row,hitinfo.sheet.name());
                 }
                 if(showSelectBtn){
                     me.editingCell={
@@ -421,9 +421,12 @@ var feeRateObject={
         }
         return children.length+sum;
     },
-    ifFeeRateEdit:function (row) {
-        var selected = projectObj.project.mainTree.items[row];
-        return selected&&MainTreeCol.readOnly.forFeeRate(selected)?false:true;
+    ifFeeRateEdit:function (row,name) {
+        if( name == 'mainSheet'){
+            var selected = projectObj.project.mainTree.items[row];
+            return selected&&MainTreeCol.readOnly.forFeeRate(selected)?false:true;
+        }
+        return true;
     },
     createSpreadView:function () {
         if (this.mainViews) {

+ 2 - 0
web/building_saas/main/js/views/project_view.js

@@ -824,6 +824,8 @@ var projectObj = {
                 let quantityTime = +new Date();
                 console.log(`计算quantity时间——${quantityTime - mTime}`);
                 that.project.property = projectInfoObj.projectInfo.property;
+                if (overwriteRationCalcBases)
+                    overwriteRationCalcBases(that.project.property.taxType);
                 //that.project.calcProgram.compileAllTemps();
                 that.project.calcBase.init(that.project);
                 // that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));

+ 1 - 1
web/building_saas/report/html/rpt_content_format.html

@@ -18,7 +18,7 @@
                             </label>
                         </div>
                     </div>
-                    <div class="col-4">
+                    <div class="col-4" style="display: none">
                         <div class="form-check">
                             <label class="form-check-label">
                                 <input id="rpt_narrow" type="checkbox" class="form-check-input" onchange="rptControlObj.changeCfgOption('isNarrow', this)">

+ 1 - 13
web/building_saas/report/js/rpt_main.js

@@ -150,6 +150,7 @@ let zTreeOprObj = {
         }
         document.getElementById("rpt_vertical_line").checked = cfg.showVerticalLine;
         document.getElementById("rpt_narrow").checked = cfg.isNarrow;
+        // document.getElementById("rpt_narrow").checked = false;
         document.getElementById("rpt_fill_zero").checked = cfg.fillZero;
     },
     extractRptCfg: function (cfg) {
@@ -445,19 +446,6 @@ let rptControlObj = {
         }
     },
     getPDF: function() {
-        // let me = rptControlObj;
-        // if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-        //     let urls = [];
-        //     let orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
-        //     for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-        //         let orgRptName = tplNode.name;
-        //         let url =  "/report_api/getPDF/" + projectInfoObj.projectInfo.ID + "/" + tplNode.refId + "/" +
-        //             me.getCurrentPageSize() + "/" + orientation + "/" + orgRptName
-        //             // + "/" + encodeURI(JSON.stringify(zTreeOprObj.reportPageCfg));
-        //         urls.push(url);
-        //     }
-        //     downloadReport(urls);
-        // }
         let me = rptControlObj;
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
             let rpt_ids = [], rpt_names = [];

+ 121 - 116
web/over_write/js/chongqing_2018.js

@@ -46,12 +46,6 @@ if(typeof materialComponent !== 'undefined'){
 }
 
 // CSL, 2018-08-21 计算程序、基数 的覆盖。---------------------------------------------------------------------------------
-const baseMachineTypes_CQ_2018_JX = [           // 重庆2018新定额施工机具之三大机械类型
-    gljType.GENERAL_MACHINE,
-    gljType.INSTRUMENT,
-    gljType.OTHER_MACHINE_USED
-];
-
 baseMaterialTypes.push(gljType.OTHER_MATERIAL);
 allMaterialTypes.delete(gljType.EQUIPMENT);
 baseMachineTypes.delete(gljType.MACHINE_COMPOSITION);
@@ -60,118 +54,129 @@ baseMachineTypes.push(gljType.INSTRUMENT, gljType.FUEL_POWER_FEE, gljType.DEPREC
     gljType.VERIFICATION_FEE, gljType.OTHER_FEE, gljType.OTHER_MACHINE_USED);
 baseMachineMasterTypes.push(gljType.INSTRUMENT);
 
-if (rationCalcBases){
-    changePropNames(rationCalcBases,
-        ['定额基价人工费', '定额基价材料费', '甲供定额基价人工费', '甲供定额基价材料费', '甲定定额基价人工费', '甲定定额基价材料费', '分包定额基价人工费','分包定额基价材料费'],
-        ['定额人工费', '定额材料费', '甲供定额人工费', '甲供定额材料费', '甲定定额人工费', '甲定定额材料费', '分包定额人工费','分包定额材料费']
-    );
-    deletePropNames(rationCalcBases, [
-        '定额基价机械费', '定额基价机上人工费', '机械费价差', '主材费价差', '设备费价差','甲供定额基价机械费','甲定定额基价机械费',
-        '设备费', '甲供设备费', '甲定设备费', '分包设备费', '分包定额基价机械费']);
-
-    rationCalcBases['定额其他材料费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.OTHER_MATERIAL], priceTypes.ptBasePrice, isTender);
-    },
-    rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, baseMachineTypes_CQ_2018_JX, priceTypes.ptBasePrice, isTender);
-    },
-    rationCalcBases['计价材料价差'] = function (node, isTender) {
-        let baseMaterialTypesWithoutOtherMaterial = [
-            gljType.GENERAL_MATERIAL,
-            gljType.CONCRETE,
-            gljType.MORTAR,
-            gljType.MIX_RATIO,
-            gljType.COMMERCIAL_CONCRETE,
-            gljType.COMMERCIAL_MORTAR
-        ];
-        return calcTools.rationBaseFee(node, baseMaterialTypesWithoutOtherMaterial, priceTypes.ptDiffPrice, isTender);
-    },
-    rationCalcBases['机上人工费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.MACHINE_LABOUR], priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['主材费(市场价)'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
-    };
-    rationCalcBases['机械燃料动力费价差'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.FUEL_POWER_FEE], priceTypes.ptDiffPrice, isTender);
-    };
-    rationCalcBases['机械折旧费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.DEPRECIATION_FEE, isTender);
-    };
-    rationCalcBases['特大机械检修费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
-            gljType.INSPECTION_FEE, isTender);
-    };
-    rationCalcBases['中小机械检修费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
-            gljType.INSPECTION_FEE, isTender);
-    };
-    rationCalcBases['特大机械维护费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
-            gljType.MAINTENANCE, isTender);
-    };
-    rationCalcBases['中小机械维护费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
-            gljType.MAINTENANCE, isTender);
-    };
-    rationCalcBases['机械安拆费及场外运输费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.DISMANTLING_FREIGHT_FEE, isTender);
-    };
-    rationCalcBases['机械燃料动力费'] = function (node, isTender) {
-        return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
-            gljType.FUEL_POWER_FEE, isTender);
-    };
-    rationCalcBases['定额仪器仪表费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
-    },
-    rationCalcBases['定额其他施工机具使用费'] = function (node, isTender) {
-        return calcTools.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
-    },
-    rationCalcBases['甲供定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDESGJJF, isTender);
-    };
-    rationCalcBases['甲定定额施工机具费'] = function (node, isTender) {
-        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDESGJJF, isTender);
-    };
-    rationCalcBases['分包定额施工机具费'] = function (node, isTender) {
-        if (node.data.isSubcontract)
-            return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender)
-        else
-            return 0;
-    };
-    rationCalcBases['建筑面积'] = function (node, isTender) {
-        return calcTools.getProjectFeatureProperty('buildingArea');
-    };
-};
+let overwriteRationCalcBases = function (taxType){
+    if (rationCalcBases){
+        for (let key in rationCalcBases) {
+            delete rationCalcBases[key];
+        };
+        let isJY = taxType == '2';
 
-if (rationCalcBasesNameMap) {
-    let str = '基价';
-    for (let pn in rationCalcBasesNameMap){
-        if (rationCalcBasesNameMap[pn].includes(str))
-            rationCalcBasesNameMap[pn] = rationCalcBasesNameMap[pn].replace(new RegExp(str, "g"), '');
+        rationCalcBases['定额人工费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额材料费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额其他材料费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.OTHER_MATERIAL], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['主材费(市场价)'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
+        };
+        rationCalcBases['人工工日'] = function (node, isTender) {
+            return calcTools.labourDays(node, isTender);
+        };
+        rationCalcBases['人工费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptDiffPrice, isTender);
+        };
+        rationCalcBases['材料费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptDiffPrice, isTender);
+        };
+        if (isJY){
+            rationCalcBases['计价材料价差'] = function (node, isTender) {
+                let baseMaterialTypesWithoutOtherMaterial = [
+                    gljType.GENERAL_MATERIAL,
+                    gljType.CONCRETE,
+                    gljType.MORTAR,
+                    gljType.MIX_RATIO,
+                    gljType.COMMERCIAL_CONCRETE,
+                    gljType.COMMERCIAL_MORTAR
+                ];
+                return calcTools.rationBaseFee(node, baseMaterialTypesWithoutOtherMaterial, priceTypes.ptDiffPrice, isTender);
+            };
+        };
+        rationCalcBases['机上人工费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.MACHINE_LABOUR], priceTypes.ptDiffPrice, isTender);
+        };
+        rationCalcBases['燃料动力费价差'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.FUEL_POWER_FEE], priceTypes.ptDiffPrice, isTender);
+        };
+        if (isJY) {
+            rationCalcBases['定额其他施工机具使用费'] = function (node, isTender) {
+                return calcTools.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
+            };
+            rationCalcBases['机械折旧费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.DEPRECIATION_FEE, isTender);
+            };
+            rationCalcBases['特大机械检修费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
+                    gljType.INSPECTION_FEE, isTender);
+            };
+            rationCalcBases['中小机械检修费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
+                    gljType.INSPECTION_FEE, isTender);
+            };
+            rationCalcBases['特大机械维护费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], baseMachineMasterTypes,
+                    gljType.MAINTENANCE, isTender);
+            };
+            rationCalcBases['中小机械维护费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], baseMachineMasterTypes,
+                    gljType.MAINTENANCE, isTender);
+            };
+            rationCalcBases['安拆费及场外运输费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.DISMANTLING_FREIGHT_FEE, isTender);
+            };
+            rationCalcBases['燃料动力费'] = function (node, isTender) {
+                return calcTools.machineDetailFee(node, node.data.gljList, [], baseMachineMasterTypes,
+                    gljType.FUEL_POWER_FEE, isTender);
+            };
+            rationCalcBases['定额仪器仪表费'] = function (node, isTender) {
+                return calcTools.rationBaseFee(node, [gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
+            };
+        };
+        rationCalcBases['建筑面积'] = function (node, isTender) {
+            return calcTools.getProjectFeatureProperty('buildingArea');
+        };
+        rationCalcBases['甲供定额人工费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额人工费', isTender);
+        };
+        rationCalcBases['甲供定额材料费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额材料费', isTender);
+        };
+        rationCalcBases['甲供定额施工机具费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供定额施工机具费', isTender);
+        };
+        rationCalcBases['甲供主材费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲供主材费', isTender);
+        };
+        rationCalcBases['甲定定额人工费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额人工费', isTender);
+        };
+        rationCalcBases['甲定定额材料费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额材料费', isTender);
+        };
+        rationCalcBases['甲定定额施工机具费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定定额施工机具费', isTender);
+        };
+        rationCalcBases['甲定主材费'] = function (node, isTender) {
+            return calcTools.partASupplyFee(node, '甲定主材费', isTender);
+        };
+        rationCalcBases['暂估材料费'] = function (node, isTender) {
+            return calcTools.estimateFee(node, true, isTender);
+        };
+        // rationCalcBases['分包定额施工机具费'] = function (node, isTender) {
+        //     if (node.data.isSubcontract)
+        //         return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender)
+        //     else
+        //         return 0;
+        // };
     };
-
-    rationCalcBasesNameMap.DEQTCLF = '定额其他材料费';
-    rationCalcBasesNameMap.DESGJJSYF = '定额施工机具使用费';
-    rationCalcBasesNameMap.JJCLJC = '计价材料价差';
-    rationCalcBasesNameMap.JSRGFJC = '机上人工费价差';
-    rationCalcBasesNameMap.JXRLDLFJC = '机械燃料动力费价差';
-    rationCalcBasesNameMap.JXZJF = '机械折旧费';
-    rationCalcBasesNameMap.TDJXJXF = '特大机械检修费';
-    rationCalcBasesNameMap.ZXJXJXF = '中小机械检修费';
-    rationCalcBasesNameMap.TDJXWHF = '特大机械维护费';
-    rationCalcBasesNameMap.ZXJXWHF = '中小机械维护费';
-    rationCalcBasesNameMap.XXACJCWYSF = '机械安拆费及场外运输费';
-    rationCalcBasesNameMap.JXRLDLF = '机械燃料动力费';
-    rationCalcBasesNameMap.DEYQYBF = '定额仪器仪表费';
-    rationCalcBasesNameMap.DEQTSGJJSYF = '定额其他施工机具使用费';
-    rationCalcBasesNameMap.JGDESGJJF = '甲供定额施工机具费';
-    rationCalcBasesNameMap.JDDESGJJF = '甲定定额施工机具费';
-    rationCalcBasesNameMap.FGDESGJJF = '分包定额施工机具费';
-    rationCalcBasesNameMap.ZCF_SCJ = '主材费(市场价)';
-    rationCalcBasesNameMap.JZMJ = '建筑面积';
 };
 
 var cpFeeTypes2018 = [