Selaa lähdekoodia

Merge branch 'budget' of http://192.168.1.41:3000/SmartCost/ConstructionCost into budget

TonyKang 4 vuotta sitten
vanhempi
commit
c33eb5f0b9

+ 3 - 1
modules/equipment_purchase/facade/equipment_purchase_facade.js

@@ -114,7 +114,9 @@ async function updateEquipments (projectID,updateData,total){
     for(let data of updateData){
         if(data.type === 'insert' ){
             tasks.push({updateOne:{ filter:{projectID},update:{'$push':{equipments:{ $each: data.documents }}}}})
-        }else {
+        }else if(data.type === 'delete' ){
+            tasks.push({updateOne:{ filter:{projectID},update:{'$pull':{equipments:{ ID: data.ID }}}}})
+        } else {
             let task = {updateOne : {
                 filter:{projectID,'equipments.ID':data.ID},
                 update:{$set:getPreUpdate('equipments.$',data.doc)}

+ 31 - 15
modules/main/facade/bill_facade.js

@@ -134,9 +134,6 @@ module.exports={
     // 获取单位工程ID 工程费用(费用汇总里的totalFee) 映射表
     getUnitsBudgetMap: async function (unitIDs) {
         const rst = {};
-        /* unitIDs.forEach(unitID => {
-            rst[unitID] = 1000000;
-        }); */
         const gatherData = await gatherModel.find({ projectID: { $in: unitIDs } }, '-_id projectID totalFee').lean();
         const gatherMap = {};
         gatherData.forEach(item => gatherMap[item.projectID] = item.totalFee || 0);
@@ -147,11 +144,6 @@ module.exports={
     },
     // 获取设备购置费
     getUnitsEquipmentMap: async function (unitIDs) {
-        /* const rst = {};
-        unitIDs.forEach(unitID => {
-            rst[unitID] = 5000;
-        });
-        return rst; */
         return await equipmentFacade.getEquipmentTotalCost(unitIDs);
     },
     // 获取概算汇总初始化数据
@@ -166,14 +158,38 @@ module.exports={
             growthPeriod,
         }
     },
+    // 项目管理等需要获取概算汇总项目数据映射
+    getBudgetSummaryInfo: async function (constructionIDs) {
+        const map = {};
+        const task = [];
+        for (const constructionID of constructionIDs) {
+            task.push(this.getBudgetSummary(constructionID, true));
+            
+        }
+        const summaryResult = await Promise.all(task);
+        summaryResult.forEach(items => {
+            items.forEach(item => {
+                if (item.orgProjectID) {
+                    map[item.orgProjectID] = item;
+                }
+            });
+        });
+        return map;
+    },
     // 获取概算汇总数据(拍好序的)
-    getBudgetSummary: async function (constructionID) {
+    // 如果isSimple为true,只进行工程费用部分汇总,只返回工程费用部分数据
+    getBudgetSummary: async function (constructionID, isSimple = false) {
         // 获取建设项目清单数据(工程建设其他费用 - 建设项目总概算)部分
-        const constructionOtherFeeBills = await bill_Model.find({ projectID: constructionID }).lean();
-        const sortedOtherFeeBills = getSortedTreeData('-1', constructionOtherFeeBills);
-        sortedOtherFeeBills.forEach(item => item.area = BudgetArea.CONSTRUCTION_OTHER_FEE);
+        let sortedOtherFeeBills = [];
+        if (!isSimple) {
+            const constructionOtherFeeBills = await bill_Model.find({ projectID: constructionID }).lean();
+            sortedOtherFeeBills = getSortedTreeData('-1', constructionOtherFeeBills);
+            sortedOtherFeeBills.forEach(item => item.area = BudgetArea.CONSTRUCTION_OTHER_FEE);
+        } else {
+            sortedOtherFeeBills = await bill_Model.find({ projectID: constructionID, 'flags.flag': fixedFlag.CONSTRUCTION_BUDGET }).lean();
+        }
         // 获取工程费用数据
-        const constructionFeeBills = await this.getConstructionFeeData(constructionID, sortedOtherFeeBills[0].ID);
+        const constructionFeeBills = await this.getConstructionFeeData(constructionID, (sortedOtherFeeBills[0] && sortedOtherFeeBills[0].ID) || '-1');
         // 汇算工程费用
         await this.summarizeData(constructionFeeBills);
         const rst = [...constructionFeeBills, ...sortedOtherFeeBills];
@@ -295,8 +311,8 @@ module.exports={
             const singleFeeObj = { total: 0, building: 0, installation: 0, equipment: 0 };
             const refUnits = units.filter(unit => unit.ParentID === single.ID);
             for (const unit of refUnits) {
-                const unitFee = unitBudgetMap[unit.orgProjectID]; // 费用汇总算出来的值
-                const unitEquipmentFee = unitEquipmentMap[unit.orgProjectID]; // 设备购置窗口的值
+                const unitFee = +unitBudgetMap[unit.orgProjectID]; // 费用汇总算出来的值
+                const unitEquipmentFee = +unitEquipmentMap[unit.orgProjectID]; // 设备购置窗口的值
                 const unitTotalFee = scMathUtil.roundForObj(unitFee + unitEquipmentFee, decimal); // 费用汇总算出来的值 + 设备购置值
                 // 汇算到单项工程
                 singleFeeObj.total = scMathUtil.roundForObj(singleFeeObj.total + unitTotalFee, processDecimal);

+ 29 - 45
modules/pm/facade/pm_facade.js

@@ -137,6 +137,7 @@ let fs = require("fs");
 let path = require("path");
 let request = require("request");
 const systemSettingModel = mongoose.model('system_setting');
+const billFacade = require('../../main/facade/bill_facade');
 
 
 let qiniu_config = {
@@ -1256,7 +1257,25 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
 
 //获取单位工程的各标段费用信息(不进行汇总)
 async function getTendersFeeInfo(tenders) {
-    let IDMapping = {};
+    const unitIDs = tenders.map(tender => tender.ID);
+    const unitsBudgetMap = await billFacade.getUnitsBudgetMap(unitIDs);
+    const unitsEquipmentMap = await billFacade.getUnitsEquipmentMap(unitIDs);
+    const IDMapping = {};
+    tenders.forEach(tender => {
+        const unitID = tender.ID;
+        const decimal = tender && tender.property && tender.property.decimal && tender.property.decimal.bills && tender.property.decimal.bills.totalPrice || 2;
+        const unitFee = +unitsBudgetMap[unitID]; // 费用汇总算出来的值
+        const unitEquipmentFee = +unitsEquipmentMap[unitID]; // 设备购置窗口的值
+        const unitTotalFee = scMathUtil.roundForObj(unitFee + unitEquipmentFee, decimal); // 费用汇总算出来的值 + 设备购置值
+        IDMapping[unitID] = {
+            engineeringCost: unitTotalFee,
+            buildingArea: '',
+            rate: '',
+            perCost: '',
+        }
+    })
+
+    /* let IDMapping = {};
     //固定清单类别与汇总金额字段映射
     let flagFieldMapping = {};
     flagFieldMapping[fixedFlag.ENGINEERINGCOST] = 'engineeringCost';
@@ -1296,7 +1315,7 @@ async function getTendersFeeInfo(tenders) {
             //单方造价
             tenderInfo.perCost = '';
         }
-    }
+    } */
     return IDMapping;
 }
 
@@ -1307,7 +1326,7 @@ const defaultSummaryField = {
             { name: 'estimate', feeName: 'estimate' }
         ]
     },
-    [fixedFlag.SUB_ENGINERRING]: {
+    /* [fixedFlag.SUB_ENGINERRING]: {
         items: [{ name: 'subEngineering', feeName: 'common' }]
     },
     [fixedFlag.MEASURE]: {
@@ -1324,7 +1343,7 @@ const defaultSummaryField = {
     },
     [fixedFlag.TAX]: {
         items: [{ name: 'tax', feeName: 'common' }]
-    }
+    } */
 };
 
 // 项目管理界面需要显示的汇总字段
@@ -1332,12 +1351,12 @@ function setupSummaryFields(summaryInfo, projects, fields = null) {
     if (!fields) {
         fields = [
             'engineeringCost',
-            'subEngineering',
+            /* 'subEngineering',
             'measure',
             'safetyConstruction',
             'other',
             'charge',
-            'tax',
+            'tax', */
             'rate',
             'buildingArea',
             'perCost'
@@ -1362,6 +1381,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
             });
         }
     }
+    const summaryMap = await billFacade.getBudgetSummaryInfo(projectIDs);
     //ID与汇总信息映射
     let IDMapping = {};
     let projects = await projectModel.find({ID: {$in : projectIDs}, projType: projectType.project, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
@@ -1379,8 +1399,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
                 }
             }
         }
-        IDMapping[project.ID] = {rate: 0, buildingArea: grossArea, perCost: ''};
-        initFees(IDMapping[project.ID], summaryField);
+        IDMapping[project.ID] = { engineeringCost: summaryMap[project.ID].totalFee || 0, rate: summaryMap[project.ID].rate || 0, buildingArea: grossArea, perCost: ''};
     }
 
     //单项工程
@@ -1390,8 +1409,7 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
     
     for(let eng of engineerings){
         engIDs.push(eng.ID);
-        IDMapping[eng.ID] = {rate: 0, buildingArea: '', perCost: ''};
-        initFees(IDMapping[eng.ID], summaryField);
+        IDMapping[eng.ID] = {engineeringCost: summaryMap[eng.ID].totalFee || 0, rate: summaryMap[eng.ID].rate || 0, buildingArea: '', perCost: ''};
     }
     //单位工程
     if(engIDs.length > 0){
@@ -1401,56 +1419,22 @@ async function getSummaryInfo(projectIDs, summaryField = defaultSummaryField){
     if(tenders.length > 0){
         for(let tender of tenders){
             tenderIDs.push(tender.ID);
-            IDMapping[tender.ID] = {rate: 0, buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
-            initFees(IDMapping[tender.ID], summaryField);
+            IDMapping[tender.ID] = {engineeringCost: summaryMap[tender.ID].totalFee || 0, rate: summaryMap[tender.ID].rate || 0,buildingArea: '', perCost: '', changeMark:tender.changeMark,property:tender.property};
             let buildingArea = getBuildingArea(tender.property.projectFeature);
             if(buildingArea){
                 IDMapping[tender.ID]['buildingArea'] = buildingArea;
             }
         }
-        //需要获取的清单固定类别综合合价:工程造价、分部分项、措施项目、安全文明施工专项、规费、其他项目、税金...
-        let needFlags = Object.getOwnPropertyNames(summaryField);
-        //获取单位工程汇总金额需要用到的所有清单
-        let allBills = await billsModel.find({projectID: {$in: tenderIDs}, 'flags.flag': {$in: needFlags}, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]},
-                                            '-_id projectID fees flags');
-        //进行单位工程级别的汇总
-        for(let bills of allBills){
-            let billsFlag = bills.flags[0]['flag'];
-            // 设置上单位工程需要汇总的字段金额
-            const summaryItem = summaryField[billsFlag];
-            summaryItem.items.forEach(costItem => {
-                IDMapping[bills.projectID][costItem.name] = getTotalFee(bills, costItem.feeName);
-            });
-        }
-        const summaryNames = [];
-        for (const flag in summaryField) {
-            summaryField[flag].items.forEach(item => summaryNames.push(item.name));
-        }
-        //进行单项工程级别的汇总
-        for(let tender of tenders){
-            summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID], summaryNames);
-        }
-        //进行建设项目级别的汇总
-        for(let eng of engineerings){
-            summarizeToParent(IDMapping[eng.ParentID], IDMapping[eng.ID], summaryNames);
-        }
         //占造价比例、单方造价
         const rateDecimal = -2;
         const perCostDecimal = -2;
         for(let tender of tenders){
             let tenderInfo = IDMapping[tender.ID];
-            let engInfo = IDMapping[tender.ParentID];
-            tenderInfo.rate = engInfo.engineeringCost == 0 ? 0 : scMathUtil.roundTo(tenderInfo.engineeringCost * 100 / engInfo.engineeringCost, rateDecimal);
             //单方造价
             tenderInfo.perCost = tenderInfo.buildingArea.toString().trim() === '' || tenderInfo.buildingArea == 0 
                 ? tenderInfo.buildingArea.toString().trim() 
                 : scMathUtil.roundTo(tenderInfo.engineeringCost / tenderInfo.buildingArea, perCostDecimal);
         }
-        for(let eng of engineerings){
-            let engInfo = IDMapping[eng.ID];
-            let projInfo = IDMapping[eng.ParentID];
-            engInfo.rate = !isDef(projInfo) || projInfo.engineeringCost == 0 ? 0 : scMathUtil.roundTo(engInfo.engineeringCost * 100 / projInfo.engineeringCost, rateDecimal);
-        }
         //建设项目占造价比例及单方造价
         for(let project of projects){
             let projectInfo = IDMapping[project.ID];

+ 3 - 2
public/common_util.js

@@ -133,10 +133,11 @@ function deleteEmptyObject(arr) {
 
     // 判断单位工程的工程专业的金额所属是“建筑工程费”还是“安装工程费”
     const getEngineeringFeeType = (engineeringName) => {
-        if (['土建工程', '装饰工程', '市政工程', '城市轨道交通工程', '装配式建筑工程', '城市地下综合管廊工程'].includes(engineeringName)) {
+        if (['房屋建筑工程', '装配式钢结构建筑工程', '装饰工程', '构筑物', '市政工程', '市政绿化工程', '机械(爆破)土石方工程',
+        '人工土石方工程', '围墙工程', '幕墙工程', '城市轨道交通工程'].includes(engineeringName)) {
             return 'building';
         }
-        if (['安装工程', '城市轨道交通安装']) {
+        if (['安装工程', '市政安装工程', '城市轨道交通安装']) {
             return 'installation'
         }
         return null;

+ 1 - 0
public/web/tree_sheet/tree_sheet_helper.js

@@ -177,6 +177,7 @@ var TREE_SHEET_HELPER = {
                 }
                 if(colSetting.visible == false) return;//隐藏列不做其它操作
                 if (colSetting.data.getText && Object.prototype.toString.apply(colSetting.data.getText) === "[object Function]") {
+                    if(colSetting.data.field=="quantity") sheet.setFormatter(iRow, iCol, '@');//输入 % 号时会出现奇怪的现像, %一直追加在后面
                     cell.value(colSetting.data.getText(node));
                 }else if((colSetting.data.field=="mainBills"||(['outPutMaxPrice', 'outPutLimitPrice'].includes(colSetting.data.field)))&&MainTreeCol.mainBillsEnable(node)){//主要清单有三种状态,所以直接显示就好,不走最后的逻辑
                     cell.value(node.data[colSetting.data.field]===undefined?false:node.data[colSetting.data.field]);

+ 9 - 6
web/building_saas/budget-summary/js/budgetSummarySheet.js

@@ -64,6 +64,7 @@ const budgetSummaryObj = (() => {
       if (node.data.calcBase && node.data.calcBase !== "") {
         return cbParser.toFExpr(node.data.calcBase);
       }
+      return '';
     },
     'feesIndex.common.unitFee': (node) => {
       return _.get(node, 'data.feesIndex.common.unitFee', '') || '';
@@ -99,7 +100,7 @@ const budgetSummaryObj = (() => {
           return;
         }
         const textFunc = textFactory[field];
-        const val = textFunc ? textFunc(node) : node.data[field];
+        const val = textFunc ? textFunc(node) : node.data[field] || '';
         sheet.setValue(row, col, val);
       });
     });
@@ -249,7 +250,8 @@ const budgetSummaryObj = (() => {
       nodes.forEach(node => {
         const orgItem = orgMap[node.data.ID];
         if (orgItem) {
-          Object.assign(node.data, orgItem);
+          node.data = _.cloneDeep(orgItem);
+          // Object.assign(node.data, orgItem);
         }
       });
       refreshData(sheet, changedCells);
@@ -361,12 +363,13 @@ const budgetSummaryObj = (() => {
         return 0;
       }
       // 工程费用区域,只读
-      const equipmentNode = nodes.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_EQUIPMENT_FEE);
-      if (!equipmentNode) {
+      const constructionFeeNode = nodes.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_FEE);
+      if (!constructionFeeNode) {
         return 0;
       }
-      sheet.getRange(0, 0, equipmentNode.serialNo() + 1, budgetSummaryTreeSetting.cols.length, GC.Spread.Sheets.SheetArea.viewport).locked(true);
-      return equipmentNode.serialNo() + 1;
+      const endIndex =  constructionFeeNode.posterityCount() + 1;
+      sheet.getRange(0, 0, endIndex, budgetSummaryTreeSetting.cols.length, GC.Spread.Sheets.SheetArea.viewport).locked(true);
+      return endIndex;
     }
     if (isMass) {
       TREE_SHEET_HELPER.massOperationSheet(sheet, () => {

+ 10 - 10
web/building_saas/main/html/main.html

@@ -102,7 +102,7 @@
                 data-placement="bottom">
                 <a href="javascript:void(0);"><i class="fa fa-cog"></i></a>
               </span>
-              <span class="btn btn-light btn-sm" id="importSpan" data-toggle="tooltip" data-original-title="导入"
+             <!--  <span class="btn btn-light btn-sm" id="importSpan" data-toggle="tooltip" data-original-title="导入"
                 data-placement="bottom">
                 <a id="importDropDown" class="dropdown-toggle" href="#"><i class="fa fa-cloud-upload"></i></a>
                 <div class="dropdown-menu">
@@ -111,7 +111,7 @@
                   <a id="uploadGld" class="dropdown-item" href="#import" data-toggle="modal"
                     data-target="#import">导入广联达算量Excel清单</a>
                 </div>
-              </span>
+              </span> -->
               <!--<a href="javascript:void(0)" class="btn btn-light btn-sm" id="insertRation" data-toggle="tooltip" data-placement="bottom" data-original-title="插入定额"><i class="fa fa-sign-in" aria-hidden="true"></i></a>-->
               <a href="javascript:void(0)" class="btn btn-light btn-sm" id="delete" data-toggle="tooltip"
                 data-placement="bottom" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
@@ -275,9 +275,9 @@
                       <a class="nav-link sub-item" id="linkGCLMX" data-toggle="tab" href="#subSpread"
                         role="tab">工程量明细</a>
                     </li>
-                    <li class="nav-item">
-                      <a class="nav-link sub-item" id="linkJSCX" data-toggle="tab" href="#subSpread" role="tab">计算程序</a>
-                    </li>
+                    <!--<li class="nav-item">-->
+                      <!--<a class="nav-link sub-item" id="linkJSCX" data-toggle="tab" href="#subSpread" role="tab">计算程序</a>-->
+                    <!--</li>-->
                     <!-- <li class="nav-item">   2018-11-08  新需求,隐藏说明信息
                                       <a class="nav-link" data-toggle="tab" href="#comments" role="tab" id="linkComments">说明信息</a>
                                   </li>-->
@@ -1817,7 +1817,7 @@
           </button>
         </div>
         <div class="modal-body">
-        
+
           <div class="form-check zlfb-check">
             <input class="form-check-input " type="checkbox"  id="bill_first">
             <label class="form-check-label">
@@ -1842,7 +1842,7 @@
               删除自定义分部标题
             </label>
           </div>
-      
+
           <div class="card mt-3">
             <div class="card-body p-2">
               <h5 class="card-title">操作说明</h5>
@@ -1889,7 +1889,7 @@
             起始编码
           </label>
           <input type="number" value="1" id="bill_recode_start" style="width: 50px;">
-        
+
         </div>
         <div class="card mt-3">
           <div class="card-body p-2">
@@ -2763,7 +2763,7 @@
     </div>
   </div>
 
-  
+
 <!--弹出 选择分部窗口-->
 <div class="modal fade" id="selectFBDiv" data-backdrop="static">
   <div class="modal-dialog" role="document">
@@ -3035,4 +3035,4 @@
   </div>
 </body>
 
-</html>
+</html>

+ 7 - 6
web/building_saas/main/js/controllers/block_controller.js

@@ -56,7 +56,8 @@ let BlockController = {
         }
         if(blockData.firstNodeType != blockType.RATION ){//复制的不是定额
           //&& blockData.isFBFX !=  Bills.isFBFX(selected)  
-          if (this.blockIsFB(blockData.firstNodeType) && !Bills.isFBFX(selected)) return true; //第一层是分部,不允许复制到非分部分项
+          if (this.blockIsFB(blockData.firstNodeType)) return !this.isFB(selected)
+          //if (this.blockIsFB(blockData.firstNodeType) && !Bills.isFBFX(selected)) return true; //第一层是分部,不允许复制到非分部分项
           //分项\补项不允许粘贴到“施工组织措施项目”下
           if (this.blockIsFXorBX(blockData.firstNodeType) && Bills.isOrgMeasure(selected)) return true;
           
@@ -81,9 +82,9 @@ let BlockController = {
             return true;
         }
         if(blockData.firstNodeType == blockType.RATION && selected.sourceType == Bills.getSourceType()){ //复制的是定额/量价/工料机、焦点行是分部/清单父项则无效
-            if( selected.data.type == billType.FB ){
+           /*  if( selected.data.type == billType.FB ){
                 return true;
-            }
+            } */
             if(MainTreeCol.readOnly.billsParent(selected)){
                 return true;
             }
@@ -254,10 +255,10 @@ let BlockController = {
         //设置选项的初始值
         setRadioProp('next_node',{checked:true,disabled:false});
         setRadioProp('pre_node',{checked:false,disabled:false});
-        if(Bills.isFBFX(selected)){//  (2.1)、焦点行属于“分部分项工程”:
+        if(this.isFB(selected)){//  (2.1)、焦点行属于“分部分项工程”:
             //复制块的第一层、焦点行的类型都是“分部”
-            if(blockData.firstNodeType == blockType.FB && this.isFB(selected)){
-                if(selected.children.length > 0 && this.isFXorBX(selected.children[0])){//焦点行分部下有分项补项,弹出“粘贴位置选择”,默认为当前行的后项,可选前项,子项灰显。
+            if(blockData.firstNodeType == blockType.FB){
+                if(selected.children.length > 0 && selected.children[0].sourceType == projectObj.project.Ration.getSourceType()){//焦点行分部下有定额,弹出“粘贴位置选择”,默认为当前行的后项,可选前项,子项灰显。
                     setRadioProp('sub_node',{checked:false,disabled:true});
                 }else {
                     //默认为当前行的后项,可选前项、子项。

+ 4 - 0
web/building_saas/main/js/controllers/project_controller.js

@@ -219,6 +219,10 @@ ProjectController = {
     addFB:function(project, sheetController,node,ext) {//添加分部
         if (!project || !sheetController) { return null; }
         let selected =node|| project.mainTree.selected;
+
+         if(selected.sourceType==project.Bills.getSourceType() && selected.data.type==billType.DXFY){//概算大项费用可插入分部,做为最后一个子项
+            return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB,ext);
+         }
         if(selected.parent==null&&isFlag(selected.data)&&selected.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){//选中的是分部分项,则插入做为最后一个子项
             return this.addSpecialBill(project, sheetController,selected, null,true,billType.FB,ext);
         }

+ 6 - 1
web/building_saas/main/js/main.js

@@ -57,7 +57,12 @@ $(function () {
         }
     });
 
-
+    //绑定F2自动打开定额库
+/*     $(document).bind('keydown', function (event) {
+        if(event.key === 'F2'){
+            $('#stdRationTab').click();
+        }
+    });  */ 
 
 });
 

+ 29 - 13
web/building_saas/main/js/models/calc_program.js

@@ -1091,7 +1091,7 @@ let calcTools = {
         let rations = projectObj.project.Ration.datas;
         for (const r of rations) {
             let tpl = projectObj.project.calcProgram.compiledTemplates[r.programID];
-            if (!arr.includes(tpl))
+            if (tpl && !arr.includes(tpl))
               arr.push(tpl);
         };
         arr.sort(function (x, y) {return x.ID - y.ID});
@@ -1578,6 +1578,10 @@ let executeObj = {
     }
 };
 
+// 概算版本,定额计算不走计算程序,只用以下五大项简单的相加
+let budgetFields = ['rationLabour', 'rationMaterial', 'rationMachine', 'rationMainMaterial', 'rationEquipment', 'common'];
+let budgetBaseNames = ['定额人工费', '定额材料费', '定额施工机具使用费', '定额主材费', '定额设备费'];
+
 class CalcProgram {
     constructor(project){
         let me = this;
@@ -1846,7 +1850,8 @@ class CalcProgram {
             nodes = treeNode.children;
 
         function isBaseFeeType(type){
-            return ['labour', 'material', 'machine', 'mainMaterial', 'equipment'].indexOf(type) > -1;
+            // return ['labour', 'material', 'machine', 'mainMaterial', 'equipment'].indexOf(type) > -1;
+            return budgetFields.indexOf(type) > -1;
         };
 
         let nQ = calcTools.uiNodeQty(treeNode);
@@ -1924,6 +1929,7 @@ class CalcProgram {
 
             rst.push(ftObj);
         };
+        me.deleteUselessFees(treeNode, budgetFields);
         treeNode.data.calcTemplate = {"calcItems": rst};
     };
 
@@ -2004,28 +2010,36 @@ class CalcProgram {
         if (calcTools.isVP_or_GLJR(treeNode)){
           let u = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
           let t = (u * nQ).toDecimal(decimalObj.ration.totalPrice);
-          if (treeNode.data.marketTotalFee != t){
-            treeNode.data.marketTotalFee = t;
-            treeNode.changed = true;
-          } ;
+          if ((treeNode.data.marketTotalFee != t) ||
+              (!treeNode.data.feesIndex || !treeNode.data.feesIndex.common || (treeNode.data.feesIndex.common.totalFee != t))
+          ){
+              treeNode.data.marketTotalFee = t;
+              let obj = {};
+              obj.fieldName = 'common';
+              obj.unitFee = u;
+              obj.totalFee = t;
+              obj.tenderUnitFee = obj.unitFee;
+              obj.tenderTotalFee = obj.totalFee;
+              calcTools.checkFeeField(treeNode, obj);
+              me.deleteUselessFees(treeNode, budgetFields);
+              treeNode.changed = true;
+          }
+          return;
         };
       };
 
       calcTools.initFees(treeNode);
       // 只有人、材、机、主、设。
-      let fieldNames = ['labour', 'material', 'machine', 'mainMaterial', 'equipment', 'common'];
-      let funcNames = ['定额人工费','定额材料费','定额施工机具使用费','市场价主材费','市场价设备费'];
-      // let funcNames = ['定额人工费','定额材料费','定额施工机具使用费','定额主材费','定额设备费'];
-      // debugger;
+
       let sum = 0;
       for (let i = 0; i < 5; i++) {
-        if (!rationCalcBases[funcNames[i]]){
+        if (!rationCalcBases[budgetBaseNames[i]]){
           hintBox.infoBox('错误提示', `定额基数${hintBox.font('[' +funcNames[i] + ']')}未定义!`, 1);
           return;
         }
         let obj = {};
-        obj.fieldName = fieldNames[i];
-        obj.unitFee = (rationCalcBases[funcNames[i]](treeNode)).toDecimal(decimalObj.decimal('unitPrice', treeNode));
+        obj.fieldName = budgetFields[i];
+        obj.unitFee = (rationCalcBases[budgetBaseNames[i]](treeNode)).toDecimal(decimalObj.decimal('unitPrice', treeNode));
         obj.totalFee = (obj.unitFee * nQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
         obj.tenderUnitFee = obj.unitFee;
         obj.tenderTotalFee = obj.totalFee;
@@ -2040,6 +2054,8 @@ class CalcProgram {
       obj.tenderUnitFee = obj.unitFee;
       obj.tenderTotalFee = obj.totalFee;
       calcTools.checkFeeField(treeNode, obj);
+
+      me.deleteUselessFees(treeNode, budgetFields);
     };
 
     // 定额部分抽取出来,供分摊定额公用。

+ 3 - 3
web/building_saas/main/js/models/main_consts.js

@@ -69,12 +69,12 @@ const CP_Col_Width = {          // 多处计算程序界面的列宽统一设置
     colHeader: 30,              // 这个是标题栏高度不是宽度,也写在一起
     code: 70,
     serialNo: 50,
-    name: 200,
+    name: 160,
     dispExprUser: 180,
     feeRate: 60,
     displayFieldName: 120,
-    statement: 380,
-    memo: 120,
+    statement: 250,
+    memo: 60,
     unitFee: 90,
     totalFee: 90
 };

+ 1 - 1
web/building_saas/main/js/models/ration_glj.js

@@ -69,7 +69,7 @@ let ration_glj = {
               let glj = JSON.parse(JSON.stringify(ration));
               glj.type = glj.subType;
               glj.totalQuantity = parseFloatPlus(ration.quantity);
-              glj.markertPrice = glj.marketUnitFee;
+              glj.marketPrice = glj.marketUnitFee;
               glj.basePrice = glj.marketUnitFee;
               glj.adjustPrice = glj.marketUnitFee;
               result.push(glj);

+ 12 - 4
web/building_saas/main/js/views/equipment_purchase_view.js

@@ -190,6 +190,7 @@ let equipmentPurchaseObj  = {
         let me = this;
         let temIDMap = {};
         let temParentMap = {};
+        let deleteMap = {};
         for(let d of  updateData){
             if(d.doc){
                 temIDMap[d.ID] = d;
@@ -197,6 +198,7 @@ let equipmentPurchaseObj  = {
                     temParentMap[d.doc.ParentID]?temParentMap[d.doc.ParentID].push(d):temParentMap[d.doc.ParentID]=[d];
                 } 
             } 
+            if(d.type === 'delete')deleteMap[d.ID] = true
         }
         for(let d of this.data){
             let children = this.parentMap[d.ID];
@@ -217,6 +219,7 @@ let equipmentPurchaseObj  = {
                 if(children&&children.length > 0){
                     for(let c of children){
                         let newChild =  temIDMap[c.ID]; 
+                        if(deleteMap[c.ID]) continue;//如果是删除操作,不用计算
                         if(newChild && newChild.doc){
                           if(newChild.doc.ParentID && newChild.doc.ParentID!=ID) continue;//升级操作时,子节点可能已经不是它的子节点了
                         } 
@@ -333,6 +336,7 @@ let equipmentPurchaseObj  = {
         let dataMap = {};
         let temParentMap = {};
         let total = 0;
+        let deleteMap = {};
         for(let d of  updateData){
             if(d.doc){
                 dataMap[d.ID] = d;
@@ -340,11 +344,13 @@ let equipmentPurchaseObj  = {
                     temParentMap[d.doc.ParentID]?temParentMap[d.doc.ParentID].push(d):temParentMap[d.doc.ParentID]=[d];
                 } 
             } 
+            if(d.type === 'delete')deleteMap[d.ID] = true
         }
 
         for(let d of  this.data){
             //累加所有底层节点就行
             if(!this.parentMap[d.ID] && !temParentMap[d.ID] ){
+                if(deleteMap[d.ID]) continue;
                 let totalPrice = d.totalPrice?scMathUtil.roundForObj(d.totalPrice,getDecimal('glj.unitPrice')):0;
                 let data = dataMap[d.ID];
                 if(data && gljUtil.isDef(data.doc.totalPrice))totalPrice = data.doc.totalPrice;
@@ -373,7 +379,9 @@ let equipmentPurchaseObj  = {
             for(let data of updateData){
                 if(data.type === 'insert'){
                     this.sourceData.equipments.push(...data.documents);  
-                }else{
+                }else if (data.type === 'delete'){
+                   _.remove( this.sourceData.equipments,{ID:data.ID});
+                } else{
                     let equipment = _.find(this.sourceData.equipments,{ID:data.ID});
                     if(equipment){
                         Object.assign(equipment,data.doc);
@@ -471,7 +479,7 @@ let equipmentPurchaseObj  = {
                 },
                 callback: function (key, opt) {
                   let row = me.rightClickTarget.row;
-                  me.deleteEquipment(me.data[row].ID);
+                  me.updateEquipments([{ID:me.data[row].ID,type:'delete'}]);
                   //me.preApplyInfoPrice(row);
                 }
               }
@@ -529,8 +537,8 @@ $(function () {
         let selected = me.getSelected();
         if(selected){
            let sel = me.sheet.getSelections()[0];
-           await me.moveUp(selected);
            me.sheet.setSelection(sel.row -1 , sel.col, sel.rowCount, sel.colCount);
+           await me.moveUp(selected);
         }
     })
      //下移
@@ -541,8 +549,8 @@ $(function () {
             let sel = me.sheet.getSelections()[0];
            let node = me.getAfterNode(selected);
            if(node){
-            await me.moveUp(node);
             me.sheet.setSelection(sel.row +1 , sel.col, sel.rowCount, sel.colCount);
+            await me.moveUp(node);
            }
            
         }

+ 6 - 6
web/building_saas/main/js/views/gather_fees_view.js

@@ -7,8 +7,8 @@ let gatherFeesView = {
     mainSetting: {
         header:[
             // {headerName:"ID",headerWidth:80,dataCode:"ID", hAlign: "center"},
-            {headerName:"费用类别",headerWidth:250,dataCode:"name", dataType: "String"},
-            {headerName:"金额",headerWidth:100,dataCode:"totalFee", dataType: "String",hAlign: "right"}
+            {headerName:"费用类别",headerWidth:120,dataCode:"name", dataType: "String"},
+            {headerName:"金额",headerWidth:80,dataCode:"totalFee", dataType: "String",hAlign: "right"}
         ],
         view:{
             comboBox:[],
@@ -268,11 +268,11 @@ $(document).ready(function(){
         sessionStorage.setItem('mainTab', '#tab_gather_fees');
         $(e.relatedTarget.hash).removeClass('active');
         // 每次进来都要重新计算一次
-        if (!gatherFeesView.mainSpread)
-            gatherFeesView.buildSheet()
-        else
-            gatherFeesView.mainSpread.refresh();
+        if (!gatherFeesView.mainSpread) {
+            gatherFeesView.buildSheet();
+        }
 
+        gatherFeesView.mainSpread.refresh();
         gatherFeesView.showData();
     });
 

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

@@ -458,7 +458,7 @@ var gljOprObj = {
         if(me.sheet.getTag(args.row,args.col)=="locked") return false;//如果是双击树节点编号里设置了锁定标记,不能编辑
         if (_.includes(me.setting.view.lockColumns, args.col))  return false;//如果是锁定的列,不能编辑
         if(recode != undefined){
-            if(recode.isMixRatio){//对于组成物列 - 可修改市场价和
+            if(recode.isMixRatio){//对于组成物列 - 可修改市场价和定额消耗量
               return dataCode == 'marketPrice' || dataCode == 'rationItemQuantity'
             }else {
                 if(dataCode == 'rationItemQuantity') return false;

+ 8 - 2
web/building_saas/main/js/views/main_tree_col.js

@@ -130,6 +130,9 @@ let MainTreeCol = {
                 if (Bills.cantCalcToTalFeeByOwn(node)) {
                     return true;
                 }
+                if(BlockController.isFB(node)){//是分部,只读
+                    return true;
+                }
                 // 不属于分部分项、施工技术措施项目的部分,如果不是叶子清单,或有基数计算/定额/量价/人材机 只读
                 if(!calcTools.isLeafBill(node)||calcTools.isCalcBaseBill(node)||node.children.length > 0)return true;
             }
@@ -149,6 +152,9 @@ let MainTreeCol = {
             if (Bills.cantCalcToTalFeeByOwn(node)) {
                 return true;
             }
+            if(BlockController.isFB(node)){//是分部,只读
+                return true;
+            }
             // 不属于分部分项、施工技术措施项目的部分,如果不是叶子清单,或有基数计算/定额/量价/人材机 只读
             if(!calcTools.isLeafBill(node)||calcTools.isCalcBaseBill(node)||node.children.length > 0){
                 return true;
@@ -438,8 +444,8 @@ let MainTreeCol = {
 
         },
         commonTotalFee: function (node) {
-            let readOnly = projectReadOnly || !calcBaseView.ifEdit('bills', projectObj.project.mainTree.items.indexOf(node));
-            return sheetCommonObj.getCusButtonCellType(projectObj.onCommonTotalFeeButtonClick,readOnly) //projectObj.getCommonTotalFeeCellType();
+            //let readOnly = projectReadOnly || !calcBaseView.ifEdit('bills', projectObj.project.mainTree.items.indexOf(node));
+            return sheetCommonObj.getCusButtonCellType(projectObj.onCommonTotalFeeButtonClick,true) //projectObj.getCommonTotalFeeCellType();
         },
         mainBills:function (node) {
             if(MainTreeCol.mainBillsEnable(node)) {

+ 11 - 3
web/building_saas/main/js/views/project_view.js

@@ -443,6 +443,10 @@ var projectObj = {
     },
     updateCellValue: function (node, value, colSetting,editingText) {
         let project = projectObj.project, fieldName = colSetting.data.field;
+        if(fieldName === 'programID' && value === undefined){
+            return projectObj.mainController.refreshTreeNode([node]);
+        }
+
         if(node.sourceType==project.ration_glj.getSourceType()){
             project.ration_glj.updateFromMainSpread(value,node,fieldName);
         }
@@ -1324,6 +1328,8 @@ var projectObj = {
                             if(selected.data.type==billType.FB){
                                 return false;
                             }
+                            if(selected.data.type==billType.DXFY) return false; 
+
                             if(selected.data.type==billType.FX ||  selected.data.type==billType.BX){// 当前定位在分项(包括补项),
                                 if(selected.preSibling){//判断分项有无前兄弟?
                                     //有,则判断父项的类型是什么,是分部,右键有效显示,点击则按②执行。
@@ -1356,11 +1362,12 @@ var projectObj = {
                         $('#selectFBDiv').modal('show');
                     },
                     visible: function(key, opt){
-                        if(project.mainTree.selected){
+                        return true;
+                        /* if(project.mainTree.selected){
                             return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
                         }else {
                             return false;
-                        }
+                        } */
                     }
                 },
                 "insertFX": {
@@ -2310,8 +2317,9 @@ var projectObj = {
             this.itemCol = _.find(setting.cols,function (item) {
                 return  item.data.field == "itemCharacterText";
             })
+            if(!this.itemCol) return false;
         }
-        return !this.itemCol.visible;
+        return this.itemCol && !this.itemCol.visible;
     },
     onCommonTotalFeeButtonClick:function(hitinfo) {
         let me = calcBaseView;

+ 3 - 3
web/building_saas/main/js/views/select_FB_view.js

@@ -3,9 +3,9 @@ let selectFBObject = {
     datas:[],
     setting:{
         header: [
-            {headerName: "编号", headerWidth: 180, dataCode: "code", dataType: "String"},
+            {headerName: "编号", headerWidth: 158, dataCode: "code", dataType: "String"},
             {headerName: "名称", headerWidth: 210, dataCode: "name", dataType: "String"},
-            {headerName: "单位", headerWidth: 50, dataCode: "unit", dataType: "String", hAlign: "center"},
+            {headerName: "单位", headerWidth: 70, dataCode: "unit", dataType: "String", hAlign: "center"},
         ],
         view:{ lockColumns: ["name","code","unit"]}
     },
@@ -60,7 +60,7 @@ let selectFBObject = {
             $.bootstrapLoading.start();
             let treeData = await ajaxPost('/complementaryRation/api/getRationTree', {userId: userID, rationRepId: rationLibID, type: 1});
             this.rationChapterTree = idTree.createNew({id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: false});
-            rationChapterTree.loadDatas(treeData);
+            this.rationChapterTree.loadDatas(treeData);
             $.bootstrapLoading.end();
         }
         if(this.rationChapterTree.roots.length >0){

+ 13 - 4
web/building_saas/pm/js/pm_newMain.js

@@ -48,6 +48,7 @@ const budgetEngineeringListMap = {
         '装饰工程',
         '构筑物',
         '市政工程',
+        '市政绿化工程',
         '机械(爆破)土石方工程',
         '人工土石方工程',
         '围墙工程',
@@ -111,12 +112,12 @@ const projTreeObj = {
             {name: '单价文件', dataCode: 'unitPriceFile', width: 140, vAlign: 'center', hAlign: 'left'},
             {name: '费率文件', dataCode: 'feeRateFile', width: 140, vAlign: 'center', hAlign: 'left'},
             {name: '创建日期', dataCode: 'createDateTime', width: 100, vAlign: 'center', hAlign: 'center'},
-            {name: '分部分项合计', dataCode: 'subEngineering', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+            /* {name: '分部分项合计', dataCode: 'subEngineering', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '措施项目合计', dataCode: 'measure', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-            {name: '其他项目合计', dataCode: 'other', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+            {name: '其他项目合计', dataCode: 'other', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'}, */
             //{name: '安全文明施工费', dataCode: 'safetyConstruction', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-            {name: '规费', dataCode: 'charge', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-            {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+            /* {name: '规费', dataCode: 'charge', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+            {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'}, */
             {name: '占造价比例(%)', dataCode: 'rate', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '建筑面积', dataCode: 'buildingArea', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '单方造价', dataCode: 'perCost', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'}
@@ -2177,6 +2178,10 @@ $(document).ready(function() {
             //清空单项工程下拉和文件下拉
             setEngOptions(null);
             setFileOptions(null);
+            let engineeringList = getEngineeringList();
+            let engineeringHtml = getEngineeringHtml(engineeringList);
+            $("#tender-engineering").html(engineeringHtml);
+            initFeeStandardSel();
         }
         else {
             //触发选项
@@ -3719,6 +3724,10 @@ function setProjOptions(projs, selected){
                     curValuationName = projs[i].data.property.valuationName;
                 }
                 getStdCalcProgramFiles();
+                let engineeringList = getEngineeringList();
+                let engineeringHtml = getEngineeringHtml(engineeringList);
+                $("#tender-engineering").html(engineeringHtml);
+                initFeeStandardSel();
                 $('#newProjectSet').hide();//隐藏文件类型、计税方法选项
                 $("#poj-name").val(projs[i].data.name);
                 setFileOptions(projs[i].data.ID);

+ 2 - 2
web/building_saas/pm/js/pm_share.js

@@ -35,11 +35,11 @@ const pmShare = (function () {
         {name: '来自', dataCode: 'from', width: 80, rateWidth: 0.15, vAlign: 'center', hAlign: 'left'},
         {name: '分享时间', dataCode: 'shareDate', width: 140, rateWidth: 0.15, vAlign: 'center', hAlign: 'left'},
         {name: '工程造价', dataCode: 'engineeringCost', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-        {name: '分部分项合计', dataCode: 'subEngineering', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+        /* {name: '分部分项合计', dataCode: 'subEngineering', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
         {name: '措施项目合计', dataCode: 'measure', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
         {name: '其他项目合计', dataCode: 'other', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
         {name: '规费', dataCode: 'charge', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-        {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+        {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'}, */
         {name: '占造价比例(%)', dataCode: 'rate', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
         {name: '建筑面积', dataCode: 'buildingArea', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
         {name: '单方造价', dataCode: 'perCost', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},

+ 10 - 106
web/over_write/js/chongqing_2018.js

@@ -83,134 +83,38 @@ function overwriteRationCalcBases (taxType){
         rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
             return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
         };
+        rationCalcBases['定额主材费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptBasePrice, isTender);
+        };
+        rationCalcBases['定额设备费'] = function (node, isTender) {
+            return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
+        };
         rationCalcBases['市场价主材费'] = function (node, isTender) {
             return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender);
         };
         rationCalcBases['市场价设备费'] = function (node, isTender) {
             return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], 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, [], gljType.DEPRECIATION_FEE, isTender);
-            };
-            rationCalcBases['特大机械检修费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], gljType.INSPECTION_FEE, isTender);
-            };
-            rationCalcBases['中小机械检修费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], gljType.INSPECTION_FEE, isTender);
-            };
-            rationCalcBases['特大机械维护费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [1, 2], gljType.MAINTENANCE, isTender);
-            };
-            rationCalcBases['中小机械维护费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [3, 4], gljType.MAINTENANCE, isTender);
-            };
-            rationCalcBases['安拆费及场外运输费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.DISMANTLING_FREIGHT_FEE, isTender);
-            };
-/*            rationCalcBases['燃料动力费'] = function (node, isTender) {
-                return calcTools.machineDetailFee(node, node.data.gljList, [], 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, false);
-        };
-        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, false);
+        rationCalcBases['人工工日'] = function (node, isTender) {
+            return calcTools.labourDays(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.LABOUR], priceTypes.ptBasePrice, isTender)
-            else
-                return 0;
-        };
-        rationCalcBases['分包定额材料费'] = function (node, isTender) {
-            if (node.data.isSubcontract)
-                return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender)
-            else
-                return 0;
-        };
-        rationCalcBases['分包定额机械费'] = function (node, isTender) {
-            if (node.data.isSubcontract)
-                return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptBasePrice, isTender)
-            else
-                return 0;
-        };
-        rationCalcBases['分包主材费'] = function (node, isTender) {
-            if (node.data.isSubcontract)
-                return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptMarketPrice, isTender)
-            else
-                return 0;
-        };
-        rationCalcBases['分包设备费'] = function (node, isTender) {
-            if (node.data.isSubcontract)
-                return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender)
-            else
-                return 0;
-        };
-        rationCalcBases['分包人工工日'] = function (node, isTender) {
-            if (node.data.isSubcontract)
-                return calcTools.labourDays(node, isTender)
-            else
-                return 0;
+        rationCalcBases['建筑面积'] = function (node, isTender) {
+            return calcTools.getProjectFeatureProperty('buildingArea');
         };
     };
 };