Преглед изворни кода

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

TonyKang пре 4 година
родитељ
комит
c08f3b7c76

+ 6 - 6
config/config.js

@@ -9,7 +9,7 @@ module.exports = {
             user:'smartcost',
             pass:'smartcost3850888',
             auth: {
-                "authdb": "admin"
+                "authSource": "admin"
             },
             connectTimeoutMS: 100000,
             useMongoClient: true
@@ -23,7 +23,7 @@ module.exports = {
             user:'smartcost',
             pass:'smartcost3850888',
             auth: {
-                "authdb": "admin"
+                "authSource": "admin"
             },
             connectTimeoutMS: 100000,
             useMongoClient: true
@@ -37,7 +37,7 @@ module.exports = {
             user:'smartcost',
             pass:'smartcost3850888',
             auth: {
-                "authdb": "scConstruct"
+                "authSource": "scConstruct"
             },
             connectTimeoutMS: 20000,
             useMongoClient: true
@@ -49,7 +49,7 @@ module.exports = {
             user:'smartcost',
             pass:'SmartCost3850888',
             auth: {
-                "authdb": "admin"
+                "authSource": "admin"
             },
             connectTimeoutMS: 50000,
             useMongoClient: true
@@ -63,7 +63,7 @@ module.exports = {
             user:'smartcost',
             pass:'SmartCost3850888',
             auth: {
-                "authdb": "admin"
+                "authSource": "admin"
             },
             connectTimeoutMS: 100000,
             useMongoClient: true
@@ -76,7 +76,7 @@ module.exports = {
             user:'smartcost',
             pass:'SmartCost3850888',
             auth: {
-                "authdb": "admin"
+                "authSource": "admin"
             },
             connectTimeoutMS: 50000,
             useMongoClient: true

+ 1 - 1
modules/main/controllers/calc_program_controller.js

@@ -152,7 +152,7 @@ async function deleteTemplate(req, res) {
 
 async function saveGatherCalcPrograms(req, res) {
   let result = {};
-  calcProgramFacade.saveGatherCalcPrograms(req.body.data, function (err, msg) {
+  await calcProgramFacade.saveGatherCalcPrograms(req.body.data, function (err, msg) {
     if (err) {
       result.error = 1;
       result.data = 0;

+ 7 - 7
modules/main/facade/bill_facade.js

@@ -134,25 +134,25 @@ module.exports={
     // 获取单位工程ID 工程费用(费用汇总里的totalFee) 映射表
     getUnitsBudgetMap: async function (unitIDs) {
         const rst = {};
-        unitIDs.forEach(unitID => {
+        /* unitIDs.forEach(unitID => {
             rst[unitID] = 1000000;
-        });
-        /* const gatherData = await gatherModel.find({ projectID: { $in: unitIDs } }, '-_id projectID totalFee').lean();
+        }); */
+        const gatherData = await gatherModel.find({ projectID: { $in: unitIDs } }, '-_id projectID totalFee').lean();
         const gatherMap = {};
         gatherData.forEach(item => gatherMap[item.projectID] = item.totalFee || 0);
         unitIDs.forEach(unitID => {
             rst[unitID] = gatherMap[unitID] || 0;
-        }); */
+        });
         return rst;
     },
     // 获取设备购置费
     getUnitsEquipmentMap: async function (unitIDs) {
-        //return await equipmentFacade.getEquipmentTotalCost(unitIDs);
-        const rst = {};
+        /* const rst = {};
         unitIDs.forEach(unitID => {
             rst[unitID] = 5000;
         });
-        return rst;
+        return rst; */
+        return await equipmentFacade.getEquipmentTotalCost(unitIDs);
     },
     // 获取概算汇总初始化数据
     initialBudgetSummary: async function (constructionID) {

+ 86 - 73
modules/main/facade/calc_program_facade.js

@@ -9,7 +9,7 @@ let stdCalcProgramsModel = mongoose.model('std_calc_programs');
 let projectCalcProgramsModel = mongoose.model('calc_programs');
 let gatherCalcProgramsModel = mongoose.model('gather_calc_programs');
 let EngineeringLibModel = require("../../users/models/engineering_lib_model");
-let _=require("lodash");
+let _ = require("lodash");
 let consts = require('../models/project_consts');
 let projectConsts = consts.projectConst;
 
@@ -39,7 +39,7 @@ async function newProjectCalcProgramFile(data) {
     // 绑定多个计算程序标准文件时,默认取第一个作为标准模板。
     // let stdCP = await getStdCalcProgramFile(valid_CP_libs[0].id);
     let stdCP = await getStdCalcProgramFile(data.property.calcProgram.id);
-    let doc={
+    let doc = {
         ID: uuidV1(),
         projectID: data.ID,
         name: data.name,
@@ -53,12 +53,12 @@ async function newProjectCalcProgramFile(data) {
 };
 
 async function getProjectCalcProgramFile(ID) {
-    let projCP = await projectCalcProgramsModel.findOne({ID:ID});
+    let projCP = await projectCalcProgramsModel.findOne({ID: ID});
     return projCP;
 };
 
 async function getStdCalcProgramFile(libID) {
-    let stdCP = await stdCalcProgramsModel.findOne({ID:libID});
+    let stdCP = await stdCalcProgramsModel.findOne({ID: libID});
     return stdCP;
 };
 
@@ -83,38 +83,40 @@ function getData(projectID, callback) {
                 });
             } else {
                 callback(0, projectConsts.CALC_PROGRAM, datas);
-            };
+            }
+            ;
         } else {
             callback(1, projectConsts.CALC_PROGRAM, null);
-        };
+        }
+        ;
     });
 };
 
 // 统一的 save() 方法供project调用
-function save (user_id, datas, callback) {
-    let returnData ={
-        moduleName:'calc_program',
-        data:{}
+function save(user_id, datas, callback) {
+    let returnData = {
+        moduleName: 'calc_program',
+        data: {}
     };
-    projectCalcProgramsModel.update({"projectID": 553}, {"libName":"goo—test"}, callback(null, returnData));
+    projectCalcProgramsModel.update({"projectID": 553}, {"libName": "goo—test"}, callback(null, returnData));
 }
 
 // saveCalcItem({projectID: 597, templatesID: 4, calcItem: calcItem})
 function saveCalcItem(dataObj, callback) {
-    dataObj=JSON.parse(dataObj);
+    dataObj = JSON.parse(dataObj);
     projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
-        if(!err){
-            for (let i = 0; i < data.templates.length; i++){
-                if (data.templates[i].ID == dataObj.templatesID){
-                    for (let j=0; j < data.templates[i].calcItems.length; j++){
-                        if (data.templates[i].calcItems[j].ID == dataObj.calcItem.ID){
+        if (!err) {
+            for (let i = 0; i < data.templates.length; i++) {
+                if (data.templates[i].ID == dataObj.templatesID) {
+                    for (let j = 0; j < data.templates[i].calcItems.length; j++) {
+                        if (data.templates[i].calcItems[j].ID == dataObj.calcItem.ID) {
                             data.templates[i].calcItems[j] = dataObj.calcItem;
                             break;
-                        };
-                    };
+                        }
+                    }
                     break;
-                };
-            };
+                }
+            }
             data.save(function (err) {
                 if (err) {
                     callback(1, '本条计算规则保存失败');
@@ -133,20 +135,20 @@ function saveCalcItem(dataObj, callback) {
 function saveCalcItems(datas, callback) {
     let datasObj = JSON.parse(datas);
     projectCalcProgramsModel.findOne({projectID: datasObj.projectID}, function (err, data) {
-        if(!err){
-            for (let cI of datasObj.calcItems){
-                for (let i = 0; i < data.templates.length; i++){
-                    if (data.templates[i].ID == cI.templatesID){
-                        for (let j=0; j < data.templates[i].calcItems.length; j++){
-                            if (data.templates[i].calcItems[j].ID == cI.calcItem.ID){
+        if (!err) {
+            for (let cI of datasObj.calcItems) {
+                for (let i = 0; i < data.templates.length; i++) {
+                    if (data.templates[i].ID == cI.templatesID) {
+                        for (let j = 0; j < data.templates[i].calcItems.length; j++) {
+                            if (data.templates[i].calcItems[j].ID == cI.calcItem.ID) {
                                 data.templates[i].calcItems[j] = cI.calcItem;
                                 break;
-                            };
-                        };
+                            }
+                        }
                         break;
-                    };
-                };
-            };
+                    }
+                }
+            }
             data.save(function (err) {
                 if (err) {
                     callback(1, '本条计算规则保存失败');
@@ -165,11 +167,11 @@ function saveCalcItems(datas, callback) {
 // 插入一条计算规则、删除一条计算规则,则整套计算规则整个传入更新,仅calcItems指定值。
 // 修改文件名称,则只传入name。
 function updateTemplate(dataObj, callback) {
-    dataObj=JSON.parse(dataObj);
+    dataObj = JSON.parse(dataObj);
     projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
-        if(!err){
-            for (let i = 0; i < data.templates.length; i++){
-                if (data.templates[i].ID == dataObj.ID){
+        if (!err) {
+            for (let i = 0; i < data.templates.length; i++) {
+                if (data.templates[i].ID == dataObj.ID) {
                     if (dataObj.name)
                         data.templates[i].name = dataObj.name;
                     if (dataObj.custom)
@@ -177,8 +179,10 @@ function updateTemplate(dataObj, callback) {
                     if (dataObj.calcItems)
                         data.templates[i].calcItems = dataObj.calcItems;
                     break;
-                };
-            };
+                }
+                ;
+            }
+            ;
             data.save(function (err) {
                 if (err) {
                     callback(1, '计算模板保存失败');
@@ -196,10 +200,10 @@ function updateTemplate(dataObj, callback) {
 // 一次性替换所有模板:用于切换模板文件。(这里实际上只替换了所有模板,基本信息如projectID、name等保留)
 // {projectID: 2706, libID: 2}
 async function updateTemplateFile(dataObj, callback) {
-    dataObj=JSON.parse(dataObj);
+    dataObj = JSON.parse(dataObj);
     let stdCP = await getStdCalcProgramFile(dataObj.libID);
     projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
-        if(!err){
+        if (!err) {
             data.templates = stdCP.templates;
             data.save(function (err) {
                 if (err) {
@@ -217,11 +221,11 @@ async function updateTemplateFile(dataObj, callback) {
 
 // {  projectID: 1233, ID: 19, name: '建筑工程2', custom: true, calcItems: [{},{}] }
 function addTemplate(dataObj, callback) {
-    dataObj=JSON.parse(dataObj);
+    dataObj = JSON.parse(dataObj);
     projectCalcProgramsModel.update({projectID: dataObj.projectID},
         {
-            $push:{
-                templates:{
+            $push: {
+                templates: {
                     "ID": dataObj.ID,
                     "name": dataObj.name,
                     "calcItems": dataObj.calcItems,
@@ -242,11 +246,11 @@ function addTemplate(dataObj, callback) {
 
 // {  projectID: 1233, ID: 19}
 function deleteTemplate(dataObj, callback) {
-    dataObj=JSON.parse(dataObj);
+    dataObj = JSON.parse(dataObj);
     projectCalcProgramsModel.update({projectID: dataObj.projectID},
         {
-            $pull:{
-                templates:{
+            $pull: {
+                templates: {
                     "ID": dataObj.ID
                 }
             }
@@ -262,39 +266,48 @@ function deleteTemplate(dataObj, callback) {
     );
 };
 
-function saveGatherCalcPrograms(dataObj, callback) {
-  dataObj = JSON.parse(dataObj);
-  gatherCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
-    if(data == null){ // 第一次保存,找不到
-      let doc={
-        projectID: dataObj.projectID,
-        totalFee: dataObj.totalFee,
-        calcPrograms: dataObj.calcPrograms
-      };
-      gatherCalcProgramsModel.create(doc, function (err) {
-        if (err) {
-          callback(1, '汇总计算程序创建失败' + err, null);
-        } else {
-          callback(0, '成功', doc.projectID);
+async function saveGatherCalcPrograms(dataObj, callback) {
+    dataObj = JSON.parse(dataObj);
+    await gatherCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
+        if (data == null) { // 第一次保存,找不到
+            let doc = {
+                projectID: dataObj.projectID,
+                totalFee: dataObj.totalFee,
+                calcPrograms: dataObj.calcPrograms
+            };
+            gatherCalcProgramsModel.create(doc, function (err) {
+                if (err) {
+                    callback(1, '汇总计算程序创建失败' + err, null);
+                } else {
+                    callback(0, '成功', doc.projectID);
+                }
+            });
         }
-      });
-    }
-    else {
-      data.totalFee = dataObj.totalFee;
-      data.calcPrograms = dataObj.calcPrograms;
-      data.save(function (err) {
-        if (err) {
-          callback(1, '汇总计算程序保存失败' + err, null);
-        } else {
-          callback(0, '成功', data.projectID);
+        else {
+            data.totalFee = dataObj.totalFee;
+            data.calcPrograms = dataObj.calcPrograms;
+            data.save(function (err) {
+                if (err) {
+                    callback(1, '汇总计算程序保存失败' + err, null);
+                } else {
+                    callback(0, '成功', data.projectID);
+                }
+            });
         }
-      });
-    }
-  })
+    })
 };
 
+// 报表用多单位工程的费用汇总数据。
+async function getGatherFees(projectIDsArr) {
+    let rst = await gatherCalcProgramsModel.find({projectID: {"$in": projectIDsArr}}, ["-_id"]).lean();
+    // console.log(rst);
+    return rst;
+}
+
 
 // for test
+// getGatherFees([77218, 5097]);
+// getGatherFees([77297, 79097]);
 // let s = '{"projectID":2164,"ID":23,"name":"建筑工程7","custom":true,"calcItems":[]}';
 // addTemplate(s, function(data){console.log('add successfull!')});
 // let s = '{"projectID":2164,"ID":15}';

+ 10 - 9
modules/pm/models/project_model.js

@@ -67,10 +67,10 @@ ProjectsDAO.prototype.getAllUnitProjects = async function (userId, compilation,
                 'compilation': compilation,
                 'property.rootProjectID': rootPrjID,
                 'deleteInfo': null
-                }, 
+                },
                 {
-                    'userID': userId, 
-                    'compilation': compilation, 
+                    'userID': userId,
+                    'compilation': compilation,
                     'property.rootProjectID': rootPrjID,
                     'deleteInfo.deleted': {'$in': [null, false]}
                 }
@@ -84,13 +84,13 @@ ProjectsDAO.prototype.getAllUnitProjects = async function (userId, compilation,
                 projIDs.push(project.ID);
             }
         }
-        // 设置分享信息 
+        // 设置分享信息
         const shareMap = await pmFacade.getShareInfoMap(allIDs);
         projects.forEach(project => {
             project.shareInfo = shareMap[project.ID] || [];
         });
         // 当前费用定额未读的分享的条目数量
-        
+
         // 设置汇总字段
         let summaryInfo = await pmFacade.getSummaryInfo(projIDs);
         pmFacade.setupSummaryFields(summaryInfo, projects);
@@ -100,7 +100,7 @@ ProjectsDAO.prototype.getAllUnitProjects = async function (userId, compilation,
         callback(1, 'Error', null);
     }
 }
-    
+
 ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, callback) {
     try {//
         let projects = await Projects.find({
@@ -118,13 +118,13 @@ ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, cal
                 projIDs.push(project.ID);
             }
         }
-        // 设置分享信息 
+        // 设置分享信息
         const shareMap = await pmFacade.getShareInfoMap(allIDs);
         projects.forEach(project => {
             project.shareInfo = shareMap[project.ID] || [];
         });
         // 当前费用定额未读的分享的条目数量
-        
+
         // 设置汇总字段
         let summaryInfo = await pmFacade.getSummaryInfo(projIDs);
         pmFacade.setupSummaryFields(summaryInfo, projects);
@@ -182,6 +182,7 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                 data.updateData['compilation'] = compilationId;
                 data.updateData['createDateTime'] = new Date();
                 data.updateData['fileVer'] = await index.getVersion();
+                data.updateData['lastFileVer'] = data.updateData['fileVer'];
                 /*if(data.updateData.projType === projectType.project){
                     //设置建设项目基本信息,多个单位工程共用
                     data.updateData.property = {basicInformation: basicInformation};
@@ -275,7 +276,7 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                     let cpFile = await calcProgramFacade.newProjectCalcProgramFile(data.updateData);
                     newProject.property.calcProgramFile = cpFile ? cpFile : null;
                     //新建设备购置计录行
-                    await equipmentPurchaseModel.create({projectID:newProject.ID,total:0,equipments:[]});    
+                    await equipmentPurchaseModel.create({projectID:newProject.ID,total:0,equipments:[]});
                 }
                 newProject.save(async function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {

+ 4 - 3
public/web/sheet/sheet_common.js

@@ -707,12 +707,12 @@ var sheetCommonObj = {
                     var imageWidth = 25;
                     var imageX = x + w - imageWidth - imageMagin, imageY = y + h / 2 - imageHeight / 2;
                     ctx.save();
-                   /* 2020-12-16 这里原先是还原背景色的,发现不需要了,先观察 
+                   //2020-12-16 这里原先是还原背景色的,发现不需要了,先观察 
                     if (style.backColor) {
                         ctx.fillStyle = style.backColor;
                         ctx.fillRect(x, y, w, h);
                     } 
-                    */
+                   
                     ctx.drawImage(image, imageX, imageY, imageWidth, imageHeight);
                     ctx.beginPath();
                     ctx.arc(imageX + imageWidth / 2, imageY + imageHeight / 2, 1, 0, 360, false);
@@ -724,7 +724,8 @@ var sheetCommonObj = {
                     ctx.restore();
                     w = w - imageWidth - imageMagin;
                     //这里的左对齐的,当显示的字长度超过空白地方时,要改成右对齐
-                    if (style.hAlign == 0) {
+                    //如果是自动换行的,则不用右对齐
+                    if (style.hAlign == 0 && style.wordWrap !== true) {
                         if (value) {
                             let textWidth = ctx.measureText(value).width;
                             let spaceWidth = w;

+ 2 - 0
web/building_saas/budget-summary/js/budgetSummarySheet.js

@@ -684,6 +684,8 @@ const budgetSummaryObj = (() => {
   const init = async (constructionID) => {
     try {
       $.bootstrapLoading.start();
+      // 得先计算费用汇总(概算汇总计算基于费用汇总算出来的总金额)
+      await projectObj.project.calcProgram.getGatherFeeData();
       const { treeData, costGrowthRate, growthPeriod } = await ajaxPost('/bills/initialBudgetSummary', { constructionID });
       calcSetting.costGrowthRate = costGrowthRate;
       calcSetting.growthPeriod = growthPeriod;

+ 2 - 12
web/building_saas/main/js/models/calc_program.js

@@ -2894,9 +2894,7 @@ class CalcProgram {
     };
 
     //报表用取费类别汇总。调用:let obj = projectObj.project.calcProgram.getGatherFeeData();
-    getGatherFeeData(){
-      // $.bootstrapLoading.start();
-      // setTimeout(()=>{
+    async getGatherFeeData(){
         let rst = {projectID: projectObj.project.ID(), totalFee: 0, calcPrograms: []};
         let tpls = calcTools.getUsedTemplates();
 
@@ -2910,18 +2908,10 @@ class CalcProgram {
         let oldValue = projectObj.project.mainTree.items[0].data.totalFee;
         if (oldValue != rst.totalFee){
           projectObj.project.mainTree.items[0].data.totalFee = rst.totalFee;
-          $.bootstrapLoading.start();
-          CommonAjax.post("/calcProgram/saveGatherCalcPrograms", rst, function (data) {
-            // if(callback){
-            //   callback(data);
-            $.bootstrapLoading.end();
-            // }
-          });
+          await ajaxPost('/calcProgram/saveGatherCalcPrograms', rst);
         }
         console.log(rst);
         return rst;
-      // });
-      // $.bootstrapLoading.end();
     };
 };
 

+ 27 - 333
web/building_saas/main/js/views/gather_fees_view.js

@@ -50,10 +50,6 @@ let gatherFeesView = {
 
     buildSheet: function (){
         let me = this;
-        let obj = projectObj.project.calcProgram.getGatherFeeData();
-        me.datas = obj.calcPrograms;
-        $('#lblGatherFee').text(`费用汇总 ${obj.totalFee}`);
-
         if (me.mainSpread) {
             me.mainSpread.destroy();
             me.mainSpread = null;
@@ -62,31 +58,19 @@ let gatherFeesView = {
             me.detailSpread.destroy();
             me.detailSpread = null;
         };
-        me.mainSpread = sheetCommonObj.buildSheet($('#gfMainSpread')[0], me.mainSetting, me.datas.length);
+        // me.mainSpread = sheetCommonObj.buildSheet($('#gfMainSpread')[0], me.mainSetting, me.datas.length);
+        me.mainSpread = sheetCommonObj.buildSheet($('#gfMainSpread')[0], me.mainSetting, 1);
         me.mainSheet = me.mainSpread.getSheet(0);
         sheetCommonObj.spreadDefaultStyle(me.mainSpread);
-        me.detailSpread = sheetCommonObj.buildSheet($('#gfDetailSpread')[0], me.detailSetting, me.datas[0].calcItems.length);
+        // me.detailSpread = sheetCommonObj.buildSheet($('#gfDetailSpread')[0], me.detailSetting, me.datas[0].calcItems.length);
+        me.detailSpread = sheetCommonObj.buildSheet($('#gfDetailSpread')[0], me.detailSetting, 1);
         me.detailSheet = me.detailSpread.getSheet(0);
         sheetCommonObj.spreadDefaultStyle(me.detailSpread);
-        // let arr = projectObj.project.calcProgram.compiledFeeTypeNames.slice();
-        // arr.delete('暂估费');
-        // let fieldName = new GC.Spread.Sheets.CellTypes.ComboBox();
-        // fieldName.items(arr);
-        // me.detailSheet.getRange(-1, 4, -1, 1).cellType(fieldName);
-
         me.mainSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
         me.detailSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onDetailValueChanged);
         me.detailSheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
         me.detailSheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onDetailEnterCell);
-        me.detailSheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
-        sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
-        me.mainSheet.setRowCount(me.datas.length);
-
         me.detailSheet.name('gatherfee_detail');
-        // feeRateObject.setFeeRateCellCol(me.detailSheet, _.findIndex(me.detailSetting.header,{'dataCode':'feeRate'}));
-        sheetCommonObj.showData(me.detailSheet, me.detailSetting, me.datas[0].calcItems);
-        me.getfeeRateColor(me.datas[0].calcItems);
-        customRowHeader(me.detailSheet, me.datas[0].calcItems.length);
         if(!projectReadOnly){
             // me.loadMainContextMenu();
             // me.loadDetailContextMenu();
@@ -101,23 +85,22 @@ let gatherFeesView = {
             sheetCommonObj.disableSpread(me.mainSpread);
             sheetCommonObj.disableSpread(me.detailSpread);
         };
-
     },
-    getStdCalcProgramFiles: function(){
-        function getStdCPFilesHtml(stdCPLibs) {
-            let result = '<option value="">请选择计算程序标准库</option>';
-            if (stdCPLibs.length <= 0) {
-                return result;
-            };
-
-            for (let lib of stdCPLibs){
-                result += '<option value='+ lib.id +'>'+ lib.name +'</option>';
-            };
-            return result;
-        };
-
-        let stdCPHtml = getStdCPFilesHtml(projectObj.project.projectInfo.engineeringInfo.program_lib);
-        $("#calcProgramFileSelect").html(stdCPHtml);
+    showData: async function () {
+      $.bootstrapLoading.start();
+      let me = this;
+      let obj = await projectObj.project.calcProgram.getGatherFeeData();
+      me.datas = obj.calcPrograms;
+      $('#lblGatherFee').text(`费用汇总 ${obj.totalFee}`);
+      sheetCommonObj.showData(me.mainSheet, me.mainSetting, me.datas);
+      me.mainSheet.setRowCount(me.datas.length);
+      sheetCommonObj.showData(me.detailSheet, me.detailSetting, me.datas[0].calcItems);
+      me.getfeeRateColor(me.datas[0].calcItems);
+      customRowHeader(me.detailSheet, me.datas[0].calcItems.length);
+
+      let count = gatherFeesView.datas[gatherFeesView.mainSheet.getActiveRowIndex()].calcItems.length;
+      gatherFeesView.detailSheet.setRowCount(count, GC.Spread.Sheets.SheetArea.viewport);
+      $.bootstrapLoading.end();
     },
     onMainEnterCell: function(sender, args) {
         var me = gatherFeesView;
@@ -247,274 +230,7 @@ let gatherFeesView = {
         // let e = `ID:${c.ID} ${c.expression} ${c.dispExpr} ${c.dispExprUser} ${c.compiledExpr} ${c.custom}`;
         // projectObj.testDisplay('', e);
     },
-    onClipboardPasting: function (sender, args) {
-         args.cancel = true;
-    },
-    loadMainContextMenu: function () {
-        $.contextMenu({
-            selector: '#gfMainSpread',
-            build: function ($trigger, e) {
-                SheetDataHelper.safeRightClickSelection($trigger, e, gatherFeesView.mainSpread);
-            },
-            items: {
-                "copyTemplate": {
-                    name: "另存为",
-                    icon: 'copy',
-                    callback: function (key, opt) {
-                        $.bootstrapLoading.start();
-                        let template = gatherFeesView.getSelectionInfo().template;
-                        let idx = gatherFeesView.mainSpread.getActiveSheet().getActiveRowIndex();
-
-                        let newTemplate = {};
-                        newTemplate.ID = analyzer.templateMaxID() + 1;
-                        newTemplate.name = analyzer.templateNewName(template.name);
-                        newTemplate.custom = true;
-                        newTemplate.calcItems = [];
-                        $.extend(true, newTemplate.calcItems, template.calcItems);
-                        // 清理掉费率ID关联
-                        for (let ci of newTemplate.calcItems){
-                            if (ci.feeRateID || ci.feeRateID == null)
-                                delete ci.feeRateID;
-                        };
-
-                        let data = {
-                            'projectID': projectObj.project.ID(),
-                            'ID': newTemplate.ID,
-                            'name': newTemplate.name,
-                            'custom': newTemplate.custom,
-                            'calcItems': newTemplate.calcItems
-                        };
-
-                        gatherFeesView.addTemplate(data, function (rst) {
-                            if (rst){
-                                let ts = projectObj.project.calcProgram.templates;
-                                ts.push(newTemplate);
-                                projectObj.project.calcProgram.compileTemplateMaps();
-                                projectObj.project.calcProgram.compileTemplate(newTemplate);
-                                gatherFeesView.buildSheet();
-                                gatherFeesView.mainSheet.setSelection(ts.length - 1, 0, 1, 1);
-                                gatherFeesView.mainSheet.showRow(ts.length - 1, GC.Spread.Sheets.VerticalPosition.center);
-                                gatherFeesView.refreshDetailSheet();
-                                $.bootstrapLoading.end();
-                            }
-                        });
-                    }
-                },
-                "reNameTemplate": {
-                    name: "重命名...",
-                    icon: 'edit',
-                    disabled: function () {
-                        let custom = gatherFeesView.getSelectionInfo().template.custom;
-                        let canReName = custom ? custom : false;
-                        return !canReName;
-                    },
-                    callback: function (key, opt) {
-                        $.bootstrapLoading.start();
-                        let template = gatherFeesView.getSelectionInfo().template;
-                        let idx = gatherFeesView.mainSpread.getActiveSheet().getActiveRowIndex();
-
-                        let newName = '';
-                        hintBox.valueBox('重命名', template.name, function () {
-                            newName = hintBox.value;
-
-                            if (!newName){
-                                hintBox.error(`名称不能为空!`);
-                                return false;
-                            };
-
-                            if (newName == template.name) {
-                                $.bootstrapLoading.end();
-                                return;
-                            }
-
-                            if (analyzer.templateNameIsExist(newName)){
-                                hintBox.error(`“${newName}” 已存在,请重新输入!`);
-                                return false;
-                            };
-
-                            template.name = newName;
-                            let data = {
-                                'projectID': projectObj.project.ID(),
-                                'ID': template.ID,
-                                'name': template.name
-                            };
-                            gatherFeesView.updateTemplate(data, function (rst) {
-                                if (rst){
-                                    projectObj.project.calcProgram.compileTemplateMaps();
-                                    projectObj.mainController.refreshTreeNode(calcTools.getNodesByProgramID(template.ID));
-                                    sheetCommonObj.showData(gatherFeesView.mainSpread.getSheet(0), gatherFeesView.mainSetting, gatherFeesView.datas);
-                                    $.bootstrapLoading.end();
-                                }
-                            });
-                        });
-                    }
-                },
-                "spr1": '--------',
-                "deleteTemplate": {
-                    name: '删除',
-                    icon: 'fa-remove',
-                    disabled: function () {
-                        let custom = gatherFeesView.getSelectionInfo().template.custom;
-                        let canDelete = custom ? custom : false;
-                        return !canDelete;
-                    },
-                    callback: function () {
-                        $.bootstrapLoading.start();
-                        let template = gatherFeesView.getSelectionInfo().template;
-                        if (analyzer.templateIsUsed(template.ID)) {
-                            $.bootstrapLoading.end();
-                            hintBox.infoBox('系统提示', `计算模板“${template.name}”已被使用,不允许删除!`, 1);
-                            return;
-                        };
-                        hintBox.infoBox('系统提示', `确定要删除计算模板“${template.name}”吗?`, 2, cbYes);
-                        function cbYes() {
-                            let data = {
-                                'projectID': projectObj.project.ID(),
-                                'ID': template.ID
-                            };
-                            gatherFeesView.deleteTemplate(data, function (rst) {
-                                if (rst){
-                                    let idx = gatherFeesView.mainSheet.getActiveRowIndex();
-                                    projectObj.project.calcProgram.templates.splice(idx, 1);
-                                    projectObj.project.calcProgram.compileTemplateMaps();
-                                    gatherFeesView.buildSheet();
-                                    gatherFeesView.mainSheet.setSelection(idx - 1, 0, 1, 1);
-                                    gatherFeesView.mainSheet.showRow(idx - 1, GC.Spread.Sheets.VerticalPosition.center);
-                                    gatherFeesView.refreshDetailSheet();
-                                    $.bootstrapLoading.end();
-                                }
-                            });
-                        };
-                    }
-                }
-            }
-        });
-    },
-    loadDetailContextMenu: function () {
-        $.contextMenu({
-            selector: '#gfDetailSpread',
-            build: function ($triggerElement, event) {
-                SheetDataHelper.safeRightClickSelection($triggerElement, event, gatherFeesView.detailSpread);
-            },
-            items: {
-                "newCalcItem": {
-                    name: "插入行",
-                    icon: 'fa-sign-in',
-                    callback: function () {
-                        $.bootstrapLoading.start();
-                        let template = gatherFeesView.getSelectionInfo().template;
-                        let idx = gatherFeesView.detailSpread.getActiveSheet().getActiveRowIndex();
-
-                        let newItem = {};
-                        newItem.ID = analyzer.calcItemMaxID(template) + 1;
-                        // newItem.name = '新建';
-                        newItem.memo = '自定义';
-                        newItem.custom = true;
-                        newItem.expression = '0';                           // 这里必须得有值,否则程序内部公式解析会出现诸多问题
-                        template.calcItems.splice(idx + 1, 0, newItem);
-                        let data = {
-                            'projectID': projectObj.project.ID(),
-                            'ID': template.ID,
-                            'calcItems': template.calcItems
-                        };
-                        gatherFeesView.updateTemplate(data, function (rst) {
-                            if (rst){
-                                projectObj.project.calcProgram.compileTemplate(template);
-                                gatherFeesView.refreshDetailSheet();
-                                gatherFeesView.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
-                                let relationNodes = calcTools.getNodesByProgramID(template.ID);
-                                projectObj.project.calcProgram.calcNodesAndSave(relationNodes);
-                            }
-                        });
-                        $.bootstrapLoading.end();
-                    }
-                },
-                "spr1": '--------',
-                "deleteCalcItem": {
-                    name: '删除行',
-                    icon: 'fa-remove',
-                    callback: function () {
-                        $.bootstrapLoading.start();
-                        let template = gatherFeesView.getSelectionInfo().template;
-                        let idx = gatherFeesView.detailSpread.getActiveSheet().getActiveRowIndex();
-                        let item = template.calcItems[idx];
-
-                        if (item.fieldName == 'common'){
-                            $.bootstrapLoading.end();
-                            hintBox.infoBox('系统提示', `费用类别为“工程造价”的行不允许删除!`, 1);
-                            return;
-                        };
 
-                        if (analyzer.calcItemIsUsed(template, item)){
-                            $.bootstrapLoading.end();
-                            let s = hintBox.font(item.tempUsed + 1);
-                            hintBox.infoBox('系统提示', `第 ${idx + 1} 行“${item.name}”已被第 ${s} 行引用,不允许删除!`, 1);
-                            delete item.tempUsed;
-                            return;
-                        };
-
-                        hintBox.infoBox('系统提示', `确定要删除计算规则“${item.name}”吗?`, 2, cbYes);
-                        function cbYes() {
-                            template.calcItems.splice(idx, 1);
-                            let data = {
-                                'projectID': projectObj.project.ID(),
-                                'ID': template.ID,
-                                'calcItems': template.calcItems
-                            };
-                            gatherFeesView.updateTemplate(data, function (rst) {
-                                if (rst){
-                                    projectObj.project.calcProgram.compileTemplate(template);
-                                    gatherFeesView.refreshDetailSheet();
-                                    let relationNodes = calcTools.getNodesByProgramID(template.ID);
-                                    projectObj.project.calcProgram.calcNodesAndSave(relationNodes);
-                                    $.bootstrapLoading.end();
-                                }
-                            });
-                        };
-                    }
-                }
-            }
-        });
-
-    },
-    saveCalcItem: function (data, callback) {//data
-        CommonAjax.post('/calcProgram/saveCalcItem', data,
-            function (result) {
-                if(callback){
-                    callback(result);
-                }
-            }
-        );
-    },
-    updateTemplate: function (data, callback) {
-        CommonAjax.post('/calcProgram/updateTemplate', data,
-            function (result) {
-                if(callback){
-                    callback(result);
-                }
-            }
-        );
-    },
-    addTemplate: function (data, callback) {
-        CommonAjax.post('/calcProgram/addTemplate', data,
-            function (result) {
-                if(callback){
-                    callback(result);
-                }
-            }
-        );
-    },
-    deleteTemplate: function (data, callback) {
-        $.bootstrapLoading.start();
-        CommonAjax.post('/calcProgram/deleteTemplate', data,
-            function (result) {
-                if(callback){
-                    callback(result);
-                }
-                $.bootstrapLoading.end();
-            }
-        );
-    },
     getSelectionInfo:function () {
         var templateIndex = this.mainSpread.getActiveSheet().getActiveRowIndex();
         var dIndex = this.detailSpread.getActiveSheet().getActiveRowIndex();
@@ -552,40 +268,18 @@ $(document).ready(function(){
         sessionStorage.setItem('mainTab', '#tab_gather_fees');
         $(e.relatedTarget.hash).removeClass('active');
         // 每次进来都要重新计算一次
-        // if (!gatherFeesView.mainSpread)
+        if (!gatherFeesView.mainSpread)
             gatherFeesView.buildSheet()
-        // else
-        //     gatherFeesView.mainSpread.refresh();
+        else
+            gatherFeesView.mainSpread.refresh();
 
-        let count = gatherFeesView.datas[gatherFeesView.mainSheet.getActiveRowIndex()].calcItems.length;
-        gatherFeesView.detailSheet.setRowCount(count, GC.Spread.Sheets.SheetArea.viewport);
+        gatherFeesView.showData();
     });
 
-    $("#calcProgramFileSelect").change(function() {
-        // 取标准库数据过来显示。
-        let libID = $(this).val();
-        if (libID == ''){
-            gatherFeesView.mainSpread.getSheet(0).setRowCount(0);
-            gatherFeesView.detailSpread.getSheet(0).setRowCount(0);
-            return false;
-        };
-
-        $.bootstrapLoading.start();
-        libID = parseFloat(libID);
-        let projectID = projectObj.project.ID();
-        CommonAjax.post('/calcProgram/updateTemplateFile', {"projectID": projectID, "libID": libID}, function (data) {
-            projectObj.project.calcProgram.datas.templates = data;
-            projectObj.project.calcProgram.compileAllTemps();
-            projectObj.project.calcProgram.calcAllNodesAndSave();
-            gatherFeesView.buildSheet();
-            $.bootstrapLoading.end();
-        });
-    });
-
-    $("#lblGatherFee").bind('click',function () {
-        gatherFeesView.buildSheet();
-        gatherFeesView.refreshDetailSheet();
-    });
+    // $("#lblGatherFee").bind('click',function () {
+    //     gatherFeesView.buildSheet();
+    //     gatherFeesView.refreshDetailSheet();
+    // });
 });
 
 

+ 58 - 23
web/building_saas/main/js/views/select_FB_view.js

@@ -31,23 +31,50 @@ let selectFBObject = {
         }
         return null;
     },
+    showTreeData:function(roots){
+        let me = this;
+        let parentIDs = [];
+        let node = me.getSelectedNode();
+        if(node) parentIDs = me.getAllParentIDs(node);
+        this.datas = [];
+        for(let r of roots){
+            me.setDatas(r,parentIDs);
+        }
+        sheetCommonObj.showTreeData(me.spread.getSheet(0), me.setting, me.datas);
+        let row = me.getSelectedRow(node);
+        me.spread.getSheet(0).setSelection(row,0,1,1);
+        me.spread.getSheet(0).showRow(row, GC.Spread.Sheets.VerticalPosition.center);
+    },
+
     showData:function(){
+        let budgetType = projectObj.project.property.budgetType||commonConstants.BudgetType.BUILDING;
+        if(budgetType===commonConstants.BudgetType.BUILDING){//建筑安装工程显示清单树 显示定额章节树
+            this.showRationTree();
+        }else{//城市轨道交通工程 显示分部
+            this.showBillTree();
+        }
+    },
+    showRationTree:async function(){
+        let rationLibID = rationLibObj.getDefaultStdRationLibID();
+        if(!this.rationChapterTree){
+            $.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);
+            $.bootstrapLoading.end();
+        }
+        if(this.rationChapterTree.roots.length >0){
+            this.showTreeData(this.rationChapterTree.roots[0].children);
+        }
+    },
+    showBillTree:function(){
         let me = selectFBObject;
-        billsGuidance.initBillsLibs(()=>{
-            let parentIDs = [];
-            let node = me.getSelectedNode();
-            if(node) parentIDs = me.getAllParentIDs(node);
-            this.datas = [];
-            for(let r of billsGuidance.bills.tree.roots){
-                selectFBObject.setDatas(r,parentIDs);
-            }
-            sheetCommonObj.showTreeData(me.spread.getSheet(0), me.setting, me.datas);
-            let row = me.getSelectedRow(node);
-            me.spread.getSheet(0).setSelection(row,0,1,1);
-            me.spread.getSheet(0).showRow(row, GC.Spread.Sheets.VerticalPosition.center);
+        billsGuidance.initBillsLibs(()=>{ 
+            me.showTreeData(billsGuidance.bills.tree.roots);
         });
     },
 
+
     getSelectedRow:function(node){
         let row = 0;//要选中的行;   
         if(node){
@@ -88,18 +115,26 @@ let selectFBObject = {
     },
 
 
-    setDatas:function(node,parentIDs){
-        if(node.children.length > 0){//过滤叶子节点
-            let nodeData = node.data;
-            let d = {
-                ID:nodeData.ID,
-                ParentID:nodeData.ParentID,
-                code:nodeData.code,
-                name:nodeData.name,
-                unit:nodeData.unit
+    setDatas:function(node,parentIDs){   
+        let budgetType = projectObj.project.property.budgetType||commonConstants.BudgetType.BUILDING;
+        let nodeData = node.data;
+        let d = {
+            ID:nodeData.ID,
+            ParentID:nodeData.ParentID,
+            code:nodeData.code,
+            name:nodeData.name,
+            unit:nodeData.unit
+        }
+        if(nodeData.name  && budgetType === commonConstants.BudgetType.BUILDING){
+            let index = nodeData.name.indexOf(' ');
+            if(index !== -1){
+                d.code = nodeData.name.substring(0,index);
+                d.name = nodeData.name.substring(index+1);
             }
-            if(parentIDs.includes(d.ID)) d.collapsed = false
-            this.datas.push(d);
+        }
+        if(parentIDs.includes(d.ID)) d.collapsed = false
+        this.datas.push(d);
+        if(node.children.length > 0){
             for(let c of node.children){
                 this.setDatas(c,parentIDs)
             }

+ 40 - 3
web/building_saas/pm/js/pm_newMain.js

@@ -39,6 +39,28 @@ const FileKind = {
     tender: 1, //投标
     bid: 2  //招标
 };
+
+// 概算类型,对应可用工程专业
+const budgetEngineeringListMap = {
+    [commonConstants.BudgetType.BUILDING]: [
+        '房屋建筑工程',
+        '装配式钢结构建筑工程',
+        '装饰工程',
+        '构筑物',
+        '市政工程',
+        '机械(爆破)土石方工程',
+        '人工土石方工程',
+        '围墙工程',
+        '幕墙工程',
+        '安装工程',
+        '市政安装工程',
+    ],
+    [commonConstants.BudgetType.RAIL]: [
+        '城市轨道交通工程',
+        '城市轨道交通安装工程'
+    ],
+};
+
 let curTaxType = 1; //1:"一般计税",2:"简易计税"
 let curBudgetType = commonConstants.BudgetType.BUILDING;
 let curValutionType = 'bill',   //计价方式默认只有清单计价
@@ -372,8 +394,9 @@ const projTreeObj = {
             name: '导入招投标接口文件',
             icon: 'fa-cloud-upload',
             visible: function () {
-                const names = ['重庆定额(2018)', '广东定额(2018)'];
-                return compilationData && names.includes(compilationData.name);
+                return false;
+                /* const names = ['重庆定额(2018)', '广东定额(2018)'];
+                return compilationData && names.includes(compilationData.name); */
             },
             callback: function () {
                 $('#importInterface').modal('show');
@@ -2089,6 +2112,15 @@ $(document).ready(function() {
         changeEngineering();
     });
 
+    // 选择项目类型
+    $("input[name='budgetType-tender']").click(function () {
+        curBudgetType = +$(this).val();
+        const engineeringList = getEngineeringList();
+        const engineeringHtml = getEngineeringHtml(engineeringList);
+        $("#tender-engineering").html(engineeringHtml);
+        changeEngineering();
+    });
+
     //选择计价规则
     $("#valuation").change(function () {
         curValuation = $(this).val();
@@ -3655,6 +3687,7 @@ function setProjOptions(projs, selected){
     if(projs.length > 0){
         let firstProj = selected && selected.data.projType === projectType.project ? selected: projs[0];
         curTaxType = firstProj.data.property.taxType || 1;
+        curBudgetType = firstProj.data.property.budgetType || commonConstants.BudgetType.BUILDING;
         if (firstProj.data.property.valuationType) {
             curValutionType = firstProj.data.property.valuationType;
         }
@@ -3675,6 +3708,7 @@ function setProjOptions(projs, selected){
             $proj.attr("href", "javascript:void(0);");
             $proj.click(function () {
                 curTaxType = projs[i].data.property.taxType || 1;
+                curBudgetType = projs[i].data.property.budgetType || commonConstants.BudgetType.BUILDING;;
                 if (projs[i].data.property.valuationType) {
                     curValutionType = projs[i].data.property.valuationType;
                 }
@@ -3877,6 +3911,7 @@ function AddTender() {
 
         //let valuation = $("#valuation").val();
         let valuation = curValuation;   //跟建设项目一样的计价规则
+        debugger;
 
         let engineeringName = $("#tender-engineering").val();
         if (!engineeringName || engineeringName === '') {
@@ -4355,10 +4390,12 @@ function getEngineeringHtml(engineeringList) {
     if (engineeringList.length <= 0) {
         return result;
     }
+    console.log(engineeringList);
     let engLibNames = [];
     for(let i = 0; i < engineeringList.length; i++){
         let tmp = engineeringList[i];
-        if(engLibNames.includes(tmp.lib.name)){
+        const validEngNames = budgetEngineeringListMap[curBudgetType];
+        if(engLibNames.includes(tmp.lib.name) || !validEngNames.includes(tmp.lib.name)){
            continue;
         }
         result += `<option ${i === 0 ? 'selected' : ''} value="${tmp.lib.name}">${tmp.lib.name}</option>`;

+ 22 - 27
web/over_write/js/chongqing_2018.js

@@ -10,8 +10,8 @@ if(typeof projectGljObject !== 'undefined'){
         {ID:'MAIN_MATERIAL',text:'主材'}
     ];
     $('#menu_index_info').show();
-    //2020-11-06 暂时去掉主城区加载通用 
-  projectGljObject.addCommonInfoPriceID = function (condition) { 
+    //2020-11-06 暂时去掉主城区加载通用
+  projectGljObject.addCommonInfoPriceID = function (condition) {
     if(condition.areaID != projectGljObject.commonInfoPriceID) condition.commonInfoPriceID = projectGljObject.commonInfoPriceID;
   }
 }
@@ -218,30 +218,25 @@ function overwriteRationCalcBases (taxType){
 (function overwriteFeeTypes() {
     if (typeof cpFeeTypes == 'undefined') return;
     cpFeeTypes = [
-        {type: 'rationUnitPrice', name: '定额综合单价', code: '1800'},
-        {type: 'labour', name: '人工费', code: '101'},
-        {type: 'material', name: '材料费', code: '201'},
-        {type: 'machine', name: '施工机具使用费', code: '301'},
-        {type: 'mainMaterial', name: '主材费', code: '501'},
-        {type: 'equipment', name: '设备费', code: '502'},
-        {type: 'manage', name: '企业管理费', code: '600'},
-        {type: 'profit', name: '利润', code: '700'},
-        {type: 'risk', name: '一般风险费', code: '1000'},
-        {type: 'labourDiff', name: '人工价差', code: '104'},
-        {type: 'materialDiff', name: '材料价差', code: '203'},
-        {type: 'machineDiff', name: '施工机具使用价差', code: '304'},
-        {type: 'otherRisk', name: '其他风险费', code: '1800'},
-        {type: 'unratedMaterial', name: '未计价材料费', code: '1800'},
-        {type: 'organizeMeasures', name: '组织措施费', code: '1200'},
-        {type: 'safeCivilization', name: '安全文明施工费', code: '1204'},
-        {type: 'document', name: '建设工程竣工档案编制费', code: '10041'},
-        {type: 'acceptance', name: '住宅工程质量分户验收费', code: '1206'},
-        {type: 'forceFee', name: '规费', code: '800'},
-        {type: 'tax', name: '税金', code: '900'},
-        {type: 'VAT', name: '增值税', code: '1800'},
-        {type: 'surtax', name: '附加税', code: '1800'},
-        {type: 'environmentTax', name: '环境保护税', code: '1800'},
-        {type: 'common', name: '工程造价', code: '1'}
+        {type: 'marketLabour', name: '人工费'},
+        {type: 'rationLabour', name: '定额人工费'},
+        {type: 'labourDiff', name: '人工费价差'},
+        {type: 'marketMaterial', name: '材料费'},
+        {type: 'rationMaterial', name: '定额材料费'},
+        {type: 'materialDiff', name: '材料费价差'},
+        {type: 'unratedMaterial', name: '未计价材料费'},
+        {type: 'marketMainMaterial', name: '市场价主材费'},
+        {type: 'marketEquipment', name: '市场价设备费'},
+        {type: 'marketMachine', name: '施工机具使用费'},
+        {type: 'rationMachine', name: '定额施工机具使用费'},
+        {type: 'machineLabourDiff', name: '机上人工费价差'},
+        {type: 'fuelDiff', name: '燃料动力费价差'},
+        {type: 'organizeMeasures', name: '施工组织措施费'},
+        {type: 'manage', name: '企业管理费'},
+        {type: 'profit', name: '利润'},
+        {type: 'forceFee', name: '规费'},
+        {type: 'tax', name: '税金'},
+        {type: 'common', name: '建筑安装工程费'}
     ];
 })();
 
@@ -393,4 +388,4 @@ function getCustomerCoeData() {
         { amount:1, operator:'*', gljCode:null, coeType:'主材'},
         { amount:1, operator:'*', gljCode:null, coeType:'设备'}
     ]
-}
+}