Browse Source

项目管理相关功能适应两层结构

zhongzewei 7 years ago
parent
commit
1cccb508af

+ 52 - 40
modules/common/const/bills_fixed.js

@@ -2,46 +2,58 @@
  * Created by Zhong on 2017/12/18.
  */
 const fixedFlag = {
-    // 分部分项工程
-    SUB_ENGINERRING: 1,
-    // 措施项目
-    MEASURE: 2,
-    // 施工技术措施项目
-    CONSTRUCTION_TECH: 3,
-    // 安全文明施工按实计算费用
-    SAFETY_CONSTRUCTION_ACTUAL: 4,
-    // 施工组织措施专项费用
-    CONSTRUCTION_ORGANIZATION: 5,
-    // 安全文明施工专项费用
-    SAFETY_CONSTRUCTION: 6,
-    // 其他项目
-    OTHER: 7,
-    // 暂列金额
-    PROVISIONAL: 8,
-    // 暂估价
-    ESTIMATE: 9,
-    // 材料(工程设备)暂估价
-    MATERIAL_PROVISIONAL: 10,
-    // 专业工程暂估价
-    ENGINEERING_ESITIMATE: 11,
-    // 计日工
-    DAYWORK: 12,
-    // 总承包服务费
-    TURN_KEY_CONTRACT: 13,
-    // 索赔与现场签证
-    CLAIM_VISA: 14,
-    // 规费
-    CHARGE: 15,
-    // 社会保险费及住房公积金 Social insurance fee and housing accumulation fund
-    SOCIAL_INSURANCE_HOUSING_FUND: 16,
-    // 工程排污费 charges for disposing pollutants
-    POLLUTANTS: 17,
-    // 税金
-    TAX: 18,
-    //工程造价
-    ENGINEERINGCOST: 19,
-    //增值税
-    ADDED_VALUE_TAX: 20
+    // 建筑安装工程费
+    CONSTRUCTION_INSTALL_FEE: 1,
+    // 土地使用及拆迁补偿费
+    LAND_USED_DEMOLITION: 2,
+    // 养护工程其他费用
+    MAINTENANCE_EXPENSES: 3,
+    // 预备费
+    BUDGET_FEE: 4,
+    // 基本预备费
+    BASE_BUDGET_FEE: 5,
+    // 价差预备费
+    SPREAD_BUDGET_FEE: 6,
+    // 一二三四部分合计
+    ONE_TO_FOUR_TOTAL: 7,
+    // 贷款利息
+    LOAN_INTEREST: 8,
+    // 总造价
+    TOTAL_COST: 9,
+    // 设备购置费
+    EQUIPMENT_ACQUISITION_FEE: 10,
+    // 专项费用 Special cost
+    SPECIAL_COST: 11,
+    // 施工场地建设费
+    CONSTRUCTION_PLANT_COST: 12,
+    // 养护单位(业主)管理费
+    MAINTENANCE_MANAGENENT_FEE: 13,
+    // 信息化费 Informatization fee
+    INFORMATIZATION_FEE: 14,
+    // 工程监理费 Engineering supervision fee
+    ENGINEERING_SUP_FEE: 15,
+    // 设计文件审查费 Design Document Review Fee
+    DOCUMENT_REVIEW_FEE: 16,
+    // 勘察设计费 Survey and design fees
+    SURVEY_DESIGN_FEE: 17,
+    // 招标代理及标底编制费 Bidding Agent and Preparing Fee of Bid Base
+    AGENT_BASE_FEE: 18,
+    //第100章至700章清单
+    ONE_SEVEN_BILLS: 19,
+    //专项暂定合计
+    PROVISIONAL_TOTAL: 20,
+    //清单合计扣除专项暂定合计
+    BILLS_TOTAL_WT_PROV: 21,
+    //计日工 daywork labor
+    DAYWORK_LABOR: 22,
+    //劳务
+    LABOUR_SERVICE:23,
+    //材料
+    MATERIAL:24,
+    //施工机械
+    CONSTRUCTION_MACHINE:25,
+    //暂列金额
+    PROVISIONAL:26
 };
 
 export default fixedFlag;

+ 13 - 31
modules/pm/controllers/pm_controller.js

@@ -387,39 +387,22 @@ module.exports = {
             if(gc_tenderFiles.length > 0){
                 for(let i = 0, len = gc_tenderFiles.length; i < len; i++){
                     let gc_t = gc_tenderFiles[i];
-                    let theEng = _engs[prefix + gc_t.ParentID] || null;
-                    if(!theEng){
-                        let tempEngs = await ProjectsData.getProjectsByIds(userID, compilatoinId, [gc_t.ParentID]);
-                        if(tempEngs.length > 0 && tempEngs[0].projType === projType.engineering){
-                            theEng = _engs[prefix + gc_t.ParentID] = tempEngs[0]._doc;
-                            theEng.children = [];
+                    console.log(gc_t.ParentID);
+                    let theProj = _projs[prefix + gc_t.ParentID] || null;
+                    if(!theProj){
+                        let tempProjs = await ProjectsData.getProjectsByIds(userID, compilatoinId, [gc_t.ParentID]);
+                        console.log(tempProjs[0]);
+                        if(tempProjs.length > 0 && tempProjs[0].projType === projType.project){
+                            theProj = _projs[prefix + gc_t.ParentID] = tempProjs[0]._doc;
+                            buildProj(theProj);
                         }
                     }
-                    if(theEng) {
-                        theEng.children.push(gc_t);
-                        let theProj = _projs[prefix + theEng.ParentID] || null;
-                        if(!theProj){
-                            let tempProj = await ProjectsData.getProjectsByIds(userID, compilatoinId, [theEng.ParentID]);
-                            if(tempProj.length > 0 && tempProj[0].projType === projType.project){
-                                theProj = _projs[prefix + theEng.ParentID] = tempProj[0]._doc;
-                                buildProj(theProj);
-                            }
-                        }
-                        if(theProj) {
-                            let isExist = false;
-                            for(let j = 0, jLen = theProj.children.length; j < jLen; j++){
-                                if(theProj.children[j].ID === theEng.ID){
-                                    isExist = true;
-                                    break;
-                                }
-                            }
-                            if(!isExist){
-                                theProj.children.push(theEng);
-                            }
-                        }
+                    if(theProj) {
+                        theProj.children.push(gc_t);
                     }
                 }
             }
+            console.log(_projs);
             for(let i in _projs){
                 rst.push(_projs[i]);
             }
@@ -555,6 +538,8 @@ module.exports = {
                     if (proj.projType === projType.tender) {
                         //设置工程专业
                         proj._doc.feeStandardName = proj.property.feeStandardName || '';
+                        //设置项目类别
+                        proj._doc.valuationType = proj.property.valuationType === 'bill' ? '预算' : '工程清单';
                     }
                     delete proj._doc.property;
                 }
@@ -580,9 +565,6 @@ module.exports = {
                             } else if (projC.projType === projType.tender) {
                                 //设置工程专业
                                 projC._doc.feeStandardName = projC.property.feeStandardName || '';
-                                if (proj.projType === projType.engineering) {
-                                    ungroupedTenders.push(projC._doc);
-                                }
                             }
                             delete projC._doc.property;
                         }

+ 26 - 105
modules/pm/facade/pm_facade.js

@@ -609,13 +609,10 @@ function getCommonTotalFee(bills) {
 
 function summarizeToParent(parent, child) {
     const decimal = -2;
-    parent.engineeringCost = scMathUtil.roundTo(parseFloat(parent.engineeringCost) + parseFloat(child.engineeringCost), decimal);
-    parent.subEngineering = scMathUtil.roundTo(parseFloat(parent.subEngineering) + parseFloat(child.subEngineering), decimal);
-    parent.measure = scMathUtil.roundTo(parseFloat(parent.measure) + parseFloat(child.measure), decimal);
-    parent.safetyConstruction = scMathUtil.roundTo(parseFloat(parent.safetyConstruction) + parseFloat(child.safetyConstruction), decimal);
-    parent.other = scMathUtil.roundTo(parseFloat(parent.other) + parseFloat(child.other), decimal);
-    parent.charge = scMathUtil.roundTo(parseFloat(parent.charge) + parseFloat(child.charge), decimal);
-    parent.tax = scMathUtil.roundTo(parseFloat(parent.tax) + parseFloat(child.tax), decimal);
+    let costFields = ['totalCost'];
+    for (let field of costFields) {
+        parent[field] = scMathUtil.roundTo(parseFloat(parent[field]) + parseFloat(child[field]), decimal);
+    }
 }
 
 function getBuildingArea(projFeature){
@@ -640,32 +637,29 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
     if(!tender){
         return null;
     }
-    let engineering = await projectModel.findOne({ID: tender.ParentID, $or: notDeleted});
-    if(!engineering){
-        return null;
-    }
-    let project = await projectModel.findOne({ID: engineering.ParentID, $or: notDeleted});
+    let project = await projectModel.findOne({ID: tender.ParentID, $or: notDeleted});
     if(!project){
         return null;
     }
     let summaryInfo = await getSummaryInfo([project.ID]);
+    //已经没有单项工程这一层
     if(summaryType === projectType.engineering){
-        parentName = engineering.name ? engineering.name : '';
+        /*parentName = engineering.name ? engineering.name : '';
         let tenders = await projectModel.find({ParentID: engineering.ID, $or: notDeleted});
         for(let t of tenders){
             if(summaryInfo[t.ID]){
                 summaryInfo[t.ID]['name'] = t.name ? t.name : '';
                 summaryList.push(summaryInfo[t.ID]);
             }
-        }
+        }*/
     }
     else {
         parentName = project.name ? project.name : '';
-        let engs = await projectModel.find({ParentID: project.ID, $or: notDeleted});
-        for(let e of engs){
-            if(summaryInfo[e.ID]){
-                summaryInfo[e.ID]['name'] = e.name ? e.name : '';
-                summaryList.push(summaryInfo[e.ID]);
+        let tenders = await projectModel.find({ParentID: project.ID, $or: notDeleted});
+        for(let t of tenders){
+            if(summaryInfo[t.ID]){
+                summaryInfo[t.ID]['name'] = t.name ? t.name : '';
+                summaryList.push(summaryInfo[t.ID]);
             }
         }
     }
@@ -677,23 +671,15 @@ async function getTendersFeeInfo(tenders) {
     let IDMapping = {};
     //固定清单类别与汇总金额字段映射
     let flagFieldMapping = {};
-    flagFieldMapping[billsFlags.ENGINEERINGCOST] = 'engineeringCost';
-    flagFieldMapping[billsFlags.SUB_ENGINERRING] = 'subEngineering';
-    flagFieldMapping[billsFlags.MEASURE] = 'measure';
-    flagFieldMapping[billsFlags.SAFETY_CONSTRUCTION] = 'safetyConstruction';
-    flagFieldMapping[billsFlags.OTHER] = 'other';
-    flagFieldMapping[billsFlags.CHARGE] = 'charge';
-    flagFieldMapping[billsFlags.TAX] = 'tax';
+    flagFieldMapping[billsFlags.TOTAL_COST] = 'totalCost';
     let tenderIDs = [];
     if(tenders.length > 0){
         for(let tender of tenders){
             tenderIDs.push(tender.ID);
-            IDMapping[tender.ID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: '', perCost: ''};
-            IDMapping[tender.ID]['buildingArea'] = '';
+            IDMapping[tender.ID] = {totalCost: 0};
         }
-        //需要获取的清单固定类别综合合价:工程造价、分部分项、措施项目、安全文明施工专项、规费、其他项目、税金
-        let needFlags = [billsFlags.ENGINEERINGCOST, billsFlags.SUB_ENGINERRING, billsFlags.MEASURE,
-            billsFlags.SAFETY_CONSTRUCTION, billsFlags.CHARGE, billsFlags.OTHER, billsFlags.TAX];
+        //需要获取的清单固定类别综合合价:总造价
+        let needFlags = [billsFlags.TOTAL_COST];
         //获取单位工程汇总金额需要用到的所有清单
         let allBills = await billsModel.find({projectID: {$in: tenderIDs}, 'flags.flag': {$in: needFlags}, $or: notDeleted},
             '-_id projectID fees flags');
@@ -703,72 +689,34 @@ async function getTendersFeeInfo(tenders) {
             let costField = flagFieldMapping[billsFlag];
             IDMapping[bills.projectID][costField] = getCommonTotalFee(bills);
         }
-        //占造价比例、单方造价
-        for(let tender of tenders){
-            let tenderInfo = IDMapping[tender.ID];
-            tenderInfo.rate = '';
-            //单方造价
-            tenderInfo.perCost = '';
-        }
     }
     return IDMapping;
 }
-
+//@param {Array}projectIDs(建设项目ID) @return {Object}
 async function getSummaryInfo(projectIDs){
     //ID与汇总信息映射
     let IDMapping = {};
     //固定清单类别与汇总金额字段映射
     let flagFieldMapping = {};
-    flagFieldMapping[billsFlags.ENGINEERINGCOST] = 'engineeringCost';
-    flagFieldMapping[billsFlags.SUB_ENGINERRING] = 'subEngineering';
-    flagFieldMapping[billsFlags.MEASURE] = 'measure';
-    flagFieldMapping[billsFlags.SAFETY_CONSTRUCTION] = 'safetyConstruction';
-    flagFieldMapping[billsFlags.OTHER] = 'other';
-    flagFieldMapping[billsFlags.CHARGE] = 'charge';
-    flagFieldMapping[billsFlags.TAX] = 'tax';
+    flagFieldMapping[billsFlags.TOTAL_COST] = 'totalCost';
     let projects = await projectModel.find({ID: {$in : projectIDs}, projType: projectType.project, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
     //设置建设项目的总建筑面积
     for(let project of projects){
-        let grossArea = '';
-        if(project.property && project.property.basicInformation){
-            for(let basicInfo of project.property.basicInformation){
-                if(basicInfo.key === 'basicInfo'){
-                    for(let k of basicInfo.items){
-                        if(k.key === 'grossArea'){
-                            grossArea = k.value;
-                        }
-                    }
-                }
-            }
-        }
-        IDMapping[project.ID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: grossArea, perCost: ''};
+        IDMapping[project.ID] = {totalCost: 0};
     }
-
-    //单项工程
-    let engineerings = await projectModel.find({ParentID: {$in : projectIDs}, projType: projectType.engineering, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
     //单位工程
     let tenders = [];
-    let engIDs = [];
-    for(let eng of engineerings){
-        engIDs.push(eng.ID);
-        IDMapping[eng.ID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: '', perCost: ''};
-    }
-    if(engIDs.length > 0){
-        tenders = await projectModel.find({ParentID: {$in : engIDs}, projType: projectType.tender, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
+    if(projectIDs.length > 0){
+        tenders = await projectModel.find({ParentID: {$in : projectIDs}, projType: projectType.tender, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
     }
     let tenderIDs = [];
     if(tenders.length > 0){
         for(let tender of tenders){
             tenderIDs.push(tender.ID);
-            IDMapping[tender.ID] = {engineeringCost: 0, subEngineering: 0, measure: 0, safetyConstruction: 0, other: 0, charge: 0, tax: 0, rate: 0, buildingArea: '', perCost: '',changeMark:tender.changeMark,property:tender.property};
-            let buildingArea = getBuildingArea(tender.property.projectFeature);
-            if(buildingArea){
-                IDMapping[tender.ID]['buildingArea'] = buildingArea;
-            }
+            IDMapping[tender.ID] = {totalCost: 0, changeMark:tender.changeMark};//property:tender.property
         }
-        //需要获取的清单固定类别综合合价:工程造价、分部分项、措施项目、安全文明施工专项、规费、其他项目、税金
-        let needFlags = [billsFlags.ENGINEERINGCOST, billsFlags.SUB_ENGINERRING, billsFlags.MEASURE,
-            billsFlags.SAFETY_CONSTRUCTION, billsFlags.CHARGE, billsFlags.OTHER, billsFlags.TAX];
+        //需要获取的清单固定类别综合合价:总造价
+        let needFlags = [billsFlags.TOTAL_COST];
         //获取单位工程汇总金额需要用到的所有清单
         let allBills = await billsModel.find({projectID: {$in: tenderIDs}, 'flags.flag': {$in: needFlags}, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]},
                                             '-_id projectID fees flags');
@@ -778,36 +726,9 @@ async function getSummaryInfo(projectIDs){
             let costField = flagFieldMapping[billsFlag];
             IDMapping[bills.projectID][costField] = getCommonTotalFee(bills);
         }
-        //进行单项工程级别的汇总
-        for(let tender of tenders){
-            summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID]);
-        }
         //进行建设项目级别的汇总
-        for(let eng of engineerings){
-            summarizeToParent(IDMapping[eng.ParentID], IDMapping[eng.ID]);
-        }
-        //占造价比例、单方造价
-        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];
-            projectInfo.rate = 100;
-            projectInfo.perCost = projectInfo.buildingArea.toString().trim() === '' || projectInfo.buildingArea == 0 ?
-                                  projectInfo.buildingArea.toString().trim() : scMathUtil.roundTo(projectInfo.engineeringCost / projectInfo.buildingArea, perCostDecimal);
+            summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID]);
         }
     }
     return IDMapping;

+ 12 - 48
modules/pm/models/project_model.js

@@ -76,16 +76,7 @@ ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, cal
         for(let proj of projects){
             let summaryProj = summaryInfo[proj.ID];
             if(summaryProj){
-                proj._doc.engineeringCost = summaryProj.engineeringCost;
-                proj._doc.subEngineering = summaryProj.subEngineering;
-                proj._doc.measure = summaryProj.measure;
-                proj._doc.safetyConstruction = summaryProj.safetyConstruction;
-                proj._doc.other = summaryProj.other;
-                proj._doc.charge = summaryProj.charge;
-                proj._doc.tax = summaryProj.tax;
-                proj._doc.rate = summaryProj.rate;
-                proj._doc.buildingArea = summaryProj.buildingArea;
-                proj._doc.perCost = summaryProj.perCost;
+                proj._doc.totalCost = summaryProj.totalCost;
             }
         }
         callback(0, '', projects);
@@ -232,18 +223,8 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                 //update
                 try {
                     if (data.updateData.projType === projectType.project) {
-                        let engineerings = await Projects.find({userID: userId, ParentID: data.updateData.ID});
-                        let isExist = false;
-                        if (engineerings.length > 0) {
-                            for (let j = 0, jLen = engineerings.length; j < jLen; j++) {
-                                let e_tenders = await Projects.find({userID: userId, ParentID: engineerings[j].ID});
-                                if (e_tenders.length > 0) {
-                                    isExist = true;
-                                    break;
-                                }
-                            }
-                        }
-                        if (isExist) {//fake
+                        let tenders = await Projects.find({userID: userId, ParentID: data.updateData.ID});
+                        if (tenders.length > 0) {
                             await UnitPriceFiles.update({
                                 user_id: userId,
                                 root_project_id: data.updateData.ID
@@ -253,25 +234,13 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                                 rootProjectID: data.updateData.ID
                             }, {$set: {deleteInfo: deleteInfo}}, {multi: true});
                             await Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll);
-                        }
-                        else {//true
+                        } else {//true
                             await UnitPriceFiles.remove({user_id: userId, root_project_id: data.updateData.ID});
                             await FeeRateFiles.remove({userID: userId, rootProjectID: data.updateData.ID});
                             //await Projects.update({userID: userId, NextSiblingID: data.updateData.ID, deleteInfo: null}, {$set: {NextSiblingID: data.NextSiblingID}});
                             await Projects.remove({userID: userId, ID: data.updateData.ID}, updateAll);
                         }
-                    }
-                    else if (data.updateData.projType === projectType.engineering) {
-                        let tenders = await Projects.find({userID: userId, ParentID: data.updateData.ID});
-                        if (tenders.length > 0) {//fake
-                            await Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll);
-                        }
-                        else {//true
-                            //await Projects.update({userID: userId, NextSiblingID: data.updateData.ID, deleteInfo: null}, {$set: {NextSiblingID: data.NextSiblingID}});
-                            await Projects.remove({userID: userId, ID: data.updateData.ID}, updateAll);
-                        }
-                    }
-                    else if (data.updateData.projType === projectType.tender) {//fake
+                    } else if (data.updateData.projType === projectType.tender) {//fake
                         let delTender = await Projects.findOne({userID: userId, ID: data.updateData.ID});
                         //如果这个单位工程用到的费率文件、单价文件,没有被其他的单位工程使用,则应该一起跟随删除
                         if(delTender){
@@ -290,11 +259,9 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                             await Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll);
                         }
 
-                    }
-                    else if (data.updateData.projType === projectType.folder) {//true
+                    } else if (data.updateData.projType === projectType.folder) {//true
                         await Projects.remove({userID: userId, ID: data.updateData.ID}, updateAll);
-                    }
-                    else throw '未知文件类型,删除失败!';
+                    } else throw '未知文件类型,删除失败!';
                 }
                 catch (error) {
                     callback(1, error, null);
@@ -322,14 +289,14 @@ ProjectsDAO.prototype.udpateUserFiles = async function (userId, datas, callback)
                 await Projects.update({
                     userID: userId,
                     'property.unitPriceFile.id': data.updateData.id
-                }, {$set: {'property.unitPriceFile.name': data.updateData.name}});
+                }, {$set: {'property.unitPriceFile.name': data.updateData.name}}, {multi: true});
             }
             else if (data.updateType === updateType.update && data.fileType === fileType.feeRateFile) {
                 await FeeRateFiles.update({ID: data.updateData.ID}, data.updateData);
                 await Projects.update({
                     userID: userId,
                     'property.feeFile.id': data.updateData.ID
-                }, {$set: {'property.feeFile.name': data.updateData.name}});
+                }, {$set: {'property.feeFile.name': data.updateData.name}}, {multi: true});
             }
             else if (data.updateType === updateType.delete && data.fileType === fileType.unitPriceFile) {
                 data.updateData.deleteInfo = deleteInfo;
@@ -525,8 +492,7 @@ ProjectsDAO.prototype.recGC = async function (userID, datas, callback) {
                 datas[i].findData.ID = findNode[0].ID;
                 updateDatas.push(datas[i]);
             }
-        }
-        else {
+        } else {
             if (datas[i].updateType === projectType.project && datas[i].updateData.NextSiblingID === undefined) {//则为待查询NextSiblingID,前端无法查询
                 let projData = await Projects.find({userID: userID, ID: datas[i].findData.ID});//建设项目原本可能属于某文件夹、文件夹的存在需要判断
                 let projPid = projData[0].ParentID;
@@ -559,8 +525,7 @@ ProjectsDAO.prototype.recGC = async function (userID, datas, callback) {
                                 });
                             }
                         })
-                    }
-                    else if (data.updateType === fileType.feeRateFile) {
+                    } else if (data.updateType === fileType.feeRateFile) {
                         FeeRateFiles.update(data.findData, data.updateData, function (err) {
                             if (err) cb(err);
                             else {
@@ -573,8 +538,7 @@ ProjectsDAO.prototype.recGC = async function (userID, datas, callback) {
                                 });
                             }
                         });
-                    }
-                    else {
+                    } else {
                         if (data) {
                             Projects.update(data.findData, data.updateData, function (err) {
                                 if (err) cb(err);

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

@@ -123,7 +123,7 @@ const billsGuidance = (function () {
                         args.sheet.invalidateLayout();
                     });
                     args.sheet.repaint();
-                } else if (!projectReadOnly && !isInserting && (args.col !== 0 || node.children.length === 0)) {
+                } else if (!projectReadOnly && !isInserting && !projectObj.project.isBillsLocked() && (args.col !== 0 || node.children.length === 0)) {
                     //选中部分的最底层(只是选中部分的最底)
                     let lowestNodes = [bills.tree.items[args.row]];
                     insertBills(lowestNodes);

+ 2 - 2
web/building_saas/pm/html/project-management-share.html

@@ -47,11 +47,11 @@
                     <select id="copyShare_selectProj" class="form-control"><option>请选择建设项目</option></select>
                     <span style="display: none" id="copyShareProj-info" class="form-text text-danger">建设项目不可为空</span>
                 </div>
-                <div class="form-group">
+                <!--<div class="form-group">
                     <label>单项项目</label>
                     <select id="copyShare_selectEng" class="form-control"><option>请选择单项工程</option></select>
                     <span style="display: none" id="copyShareEng-info" class="form-text text-danger">单项工程不可为空</span>
-                </div>
+                </div>-->
                 <div class="form-group">
                     <p id="copyShare_name">拷贝后,工程将重命名为 "<b>建筑工程2(张三共享)</b>"</p>
                 </div>

+ 17 - 147
web/building_saas/pm/html/project-management.html

@@ -240,142 +240,11 @@
         </div>
     </div>
 </div>
-<!--弹出新建单项工程-->
-<div class="modal fade" id="add-engineering-dialog" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title"><i class="fa fa-cube"></i>&nbsp;新建单项工程</h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body">
-                <!--没有点击任何节点-->
-                <form>
-                    <div class="form-group">
-                        <label>单项工程</label>
-                        <input type="text" class="form-control" placeholder="输入单项工程名称" id="engineering-name">
-                        <span class="form-text text-danger" id="engineering-name-info" style="display: none;">已存在 “建筑工程1”</span>
-                    </div>
-                </form>
-            </div>
-            <div class="modal-footer">
-                <a href="javascript:void(0);" class="btn btn-primary" id="add-engineering-confirm">确定</a>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-            </div>
-        </div>
-    </div>
-</div>
-<!--弹出新建单位工程-->
-<!--<div class="modal fade" id="add-tender-dialog" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title"><i class="fa fa-sticky-note-o"></i>新建单位工程</h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body">
-                <form>
-                    <div>
-                        <div class="input-group">
-                            <label style="margin-top: 8px;">建设项目</label>
-                            <input style="margin-left: 5px; border-radius: .25rem;" type="text" class="form-control" placeholder="输入建设项目名称" id="poj-name" autocomplete="off">
-                              <span class="input-group-btn">
-                                <button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown"></button>
-                                <div class="dropdown-menu dropdown-menu-right" style="width:468px" id="poj-name-list">
-                                    <button class="dropdown-item" type="button">汽车生产车间1</button>
-                                    <button class="dropdown-item" type="button">汽车生产车间2</button>
-                                    <button class="dropdown-item" type="button">汽车生产车间3</button>
-                                </div>
-                              </span>
-                        </div>
-                    </div>
-                    <span class="form-text text-info" id="poj-name-info" style="display: none;">新建 “汽车生产车间5”</span>
-                    <div style="margin-top: 15px;">
-                        <div class="input-group">
-                            <label style="margin-top: 8px;">单项工程</label>
-                            <input style="margin-left: 5px; border-radius: .25rem;" type="text" class="form-control" placeholder="输入单项工程名称" id="eng-name" autocomplete="off">
-                              <span class="input-group-btn">
-                                <button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown"></button>
-                                <div class="dropdown-menu dropdown-menu-right" style="width:468px" id="eng-name-list">
-                                    <button class="dropdown-item" type="button">左3号生产车间</button>
-                                    <button class="dropdown-item" type="button">左4号生产车间</button>
-                                </div>                              </span>
-                        </div>
-                    </div>
-                    <span class="form-text text-info" id="eng-name-info" style="display: none;">新建 “左2号生产车间2”</span>
-
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">单位工程</label>
-                        <input style="margin-left: 5px; border-radius: .25rem;" type="text" class="form-control" placeholder="输入单位工程名称" id="tender-name" autocomplete="off">
-                    </div>
-                    <span class="form-text text-danger" id="tender-name-info" style="display: none;">已存在 “建筑工程1”</span>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">单价文件</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="unit-price"><option value="">新建单价文件</option></select>
-                    </div>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">费率文件</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="tender-fee-rate"><option value="">新建费率文件</option></select>
-                    </div>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label>计价方式</label>
-                        <div style="margin-left: 5px; border-radius: .25rem;"  class="row">
-                            <label class="custom-control custom-radio" style="margin-left: 20px;">
-                                <input name="valuation_type" checked id="radioBill" value="bill" type="radio" class="custom-control-input">
-                                <label class="custom-control-label" for="radioBill">清单计价</label>
-                            </label>
-                          &lt;!&ndash;  <label class="custom-control custom-radio" style="margin-left: 5px;">
-                                <input name="valuation_type" id="radioRation" value="ration" type="radio" class="custom-control-input">
-                                <label class="custom-control-label" for="radioRation">定额计价</label>
-                            </label>&ndash;&gt;
-                        </div>
-                    </div>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">计价规则</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="valuation"></select>
-                    </div>
-                    <span class="form-text text-danger" id="valuation-info" style="display: none;">请选择计价规则</span>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">工程专业</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="tender-engineering"></select>
-                    </div>
-                    <span class="form-text text-danger" id="engineering-info" style="display: none;">请选择工程专业</span>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">费用标准</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="tender-feeStandard"></select>
-                    </div>
-                    <span class="form-text text-danger" id="feeStandard-info" style="display: none;">请选择费用标准</span>
-                    <div style="margin-top: 15px;" class="input-group" id="taxType_div">
-                        <label style="margin-top: 8px;">计税方式</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="taxType">
-                            &lt;!&ndash;<option value="1">一般计税</option>
-                            <option value="2">简易计税</option>&ndash;&gt;
-                        </select>
-                    </div>
-                    <div style="margin-top: 15px;" class="input-group">
-                        <label style="margin-top: 8px;">计算程序</label>
-                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="tender-calcProgram"></select>
-                    </div>
-
-                    <span class="form-text text-danger" id="calcProgram-info" style="display: none;">请选择计算程序</span>
-                </form>
-            </div>
-            <div class="modal-footer">
-                <a href="javascript:void(0);" class="btn btn-primary" id="add-tender-confirm">确定</a>
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
-            </div>
-        </div>
-    </div>
-</div>-->
 <div class="modal fade" id="add-tender-dialog" data-backdrop="static">
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title">新建 <i class="fa fa-sticky-note-o"></i> 单位工程</h5>
+                <h5 class="modal-title">新建 <i class="fa fa-sticky-note-o"></i> 分段</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -398,7 +267,7 @@
                         </div>
                     </div>
                     <span class="form-text text-info" id="poj-name-info" style="display: none;">新建 “汽车生产车间5”</span>
-                    <div class="form-group row">
+                    <!--<div class="form-group row">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">单项工程</label>
                         <div class="col">
                             <div class="input-group input-group-sm">
@@ -412,12 +281,12 @@
                                 </div>
                             </div>
                         </div>
-                    </div>
+                    </div>-->
                     <span class="form-text text-info" id="eng-name-info" style="display: none;">新建 “左2号生产车间2”</span>
                     <div class="form-group row">
-                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">单位工程</label>
+                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;段</label>
                         <div class="col">
-                            <input type="text" class="form-control form-control-sm" placeholder="输入单位工程名称" id="tender-name" autocomplete="off">
+                            <input type="text" class="form-control form-control-sm" placeholder="输入分段名称" id="tender-name" autocomplete="off">
                         </div>
                     </div>
                     <span class="form-text text-danger" id="tender-name-info" style="display: none;">已存在 “建筑工程1”</span>
@@ -437,20 +306,21 @@
                             </select>
                         </div>
                     </div>
+                    <!--养护中计价方式为项目类别,预算用清单计价原字段,工程量清单用定额计价原字段-->
                     <div class="form-group row">
-                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计价方式</label>
+                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">项目类别</label>
                         <div class="col">
                             <div class="custom-control custom-radio custom-control-inline">
                                 <input type="radio" value="bill" checked id="radioBill" name="valuation_type" class="custom-control-input">
-                                <label class="custom-control-label" for="radioBill">清单计价</label>
+                                <label class="custom-control-label" for="radioBill">预算</label>
                             </div>
-                           <!-- <div class="custom-control custom-radio custom-control-inline">
+                            <div class="custom-control custom-radio custom-control-inline">
                                 <input type="radio" value="ration" id="radioRation" name="valuation_type" class="custom-control-input">
-                                <label class="custom-control-label" for="radioRation">定额计价</label>
-                            </div>-->
+                                <label class="custom-control-label" for="radioRation">工程量清单</label>
+                            </div>
                         </div>
                     </div>
-                    <div class="form-group row">
+                    <div class="form-group row" style="display: none">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计价规则</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="valuation">
@@ -466,14 +336,14 @@
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">工程专业</label>
+                        <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">养护类别</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="tender-engineering">
                             </select>
                         </div>
                     </div>
-                    <span class="form-text text-danger" id="engineering-info" style="display: none;">请选择工程专业</span>
-                    <div class="form-group row">
+                    <span class="form-text text-danger" id="engineering-info" style="display: none;">请选择养护类别</span>
+                    <div class="form-group row" style="display: none;">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">费用标准</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="tender-feeStandard"></select>
@@ -489,7 +359,7 @@
                             </select>
                         </div>
                     </div>
-                    <div class="form-group row">
+                    <div class="form-group row" style="display: none;">
                         <label for="staticEmail" class="col-auto col-form-label col-form-label-sm">计算程序</label>
                         <div class="col">
                             <select class="form-control  form-control-sm" id="tender-calcProgram">
@@ -685,8 +555,8 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 <button type="button" class="btn btn-primary mr-3" id="changeFileConfirm">确定</button>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
             </div>
         </div>
     </div>

+ 20 - 81
web/building_saas/pm/js/pm_gc.js

@@ -4,7 +4,7 @@
 let gcTree = null;
 let decDate = null;//恢复后的名称后缀(时间+恢复)
 //恢复路径t = tender, e = engineering, p = project
-const recPath = {t: 'T', t_e: 'T_E', t_e_p: 'T_E_P', e: 'E', e_p: 'E_P', p: 'P'};
+const recPath = {t: 'T', t_p: 'T_P', p: 'P'};
 const gcTreeObj = {
     tree: null,
     workBook: null,
@@ -754,15 +754,9 @@ function m_VTreeToDatas(datas){
     let projs = datas;
     rst = rst.concat(projs);
     for(let i = 0, len = projs.length; i < len; i++){
-        let p_engs = projs[i].children || null;
-        if(p_engs){
-            rst = rst.concat(p_engs);
-            for(let j = 0, jLen = p_engs.length; j < jLen; j ++){
-                let e_tenders = p_engs[j].children || null;
-                if(e_tenders){
-                    rst = rst.concat(e_tenders);
-                }
-            }
+        let p_tenders = projs[i].children || null;
+        if(p_tenders){
+            rst = rst.concat(p_tenders);
         }
     }
     return rst;
@@ -796,82 +790,34 @@ function m_getRecDatas(oprNode){
     let path;
     if(oprNode.data.projType === projectType.tender){
         path = recPath.t;
-        let engineering = oprNode.parent || null;
-        if(!engineering) return null;
-        let project = engineering.parent || null;
+        let project = oprNode.parent || null;
         if(!project) return null;
-        if(engineering && deleted(engineering)){
-            path = recPath.t_e;
-        }
         //恢复建设项目
         if(project && deleted(project)){
-            path = recPath.t_e_p;
+            path = recPath.t_p;
         }
         //恢复单价、费率文件
         rstFile = rstFile.concat(getUpdateFiles([oprNode], project));
         if(path === recPath.t){
             rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, -1, true));
-        }
-        else if(path === recPath.t_e){
-            rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, -1, false));
-            rstProj = rstProj.concat(getUpdateDatas(projectType.engineering, engineering, -1, true));
-        }
-        else if(path === recPath.t_e_p){
+        } else if(path === recPath.t_p){
             rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, -1, false));
-            rstProj = rstProj.concat(getUpdateDatas(projectType.engineering, engineering, -1, false));
             rstProj = rstProj.concat(getUpdateDatas(projectType.project, project, -1, false));
         }
-    }
-    else if(oprNode.data.projType === projectType.engineering){
-        path = recPath.e;
-        let project = oprNode.parent || null;
-        if(!project) return null;
-        //恢复建设项目
-        if(project && deleted(project)){
-            path = recPath.e_p;
-        }
-        let tenders = oprNode.children;
-        if(tenders.length > 0){
-            for(let i = 0, len = tenders.length; i < len; i++){
-                rstProj = rstProj.concat(getUpdateDatas(projectType.tender, tenders[i], tenders[i].data.NextSiblingID, false));
-            }
-            rstProj = deWeightName(rstProj);
-            //恢复单价、费率文件
-            rstFile = rstFile.concat(getUpdateFiles(tenders, project));
-        }
-        if(path === recPath.e){
-            rstProj= rstProj.concat(getUpdateDatas(projectType.engineering, oprNode, -1, true));
-        }
-        else if(path === recPath.e_p){
-            rstProj= rstProj.concat(getUpdateDatas(projectType.engineering, oprNode, -1, false));
-            rstProj= rstProj.concat(getUpdateDatas(projectType.project, project, -1, false));
-        }
-    }
-    else if(oprNode.data.projType === projectType.project){
+    } else if(oprNode.data.projType === projectType.project){
         path = recPath.p;
-        let engineerings = oprNode.children;
-        if(engineerings.length > 0){
-            let allTenders = [], rstEngs = [];
-            for(let i = 0, len = engineerings.length; i < len; i++){
-                //恢复单项工程
-                rstEngs = rstEngs.concat(getUpdateDatas(projectType.engineering, engineerings[i], engineerings[i].data.NextSiblingID, false));
-                let tenders = engineerings[i].children;
-                allTenders = allTenders.concat(tenders);
-                let rstTends = [];
-                for(let j = 0, jLen = tenders.length; j < jLen; j++){
-                    //恢复单位工程
-                    rstTends = rstTends.concat(getUpdateDatas(projectType.tender, tenders[j], tenders[j].data.NextSiblingID, false));
-                }
-                //去除重名
-                rstTends = deWeightName(rstTends);
-                rstProj = rstProj.concat(rstTends);
+        let tenders = oprNode.children;
+        if (tenders.length > 0) {
+            let rstTends = [];
+            for(let tender of tenders){
+                //恢复单位工程
+                rstTends = rstTends.concat(getUpdateDatas(projectType.tender, tender, tender.data.NextSiblingID, false));
             }
             //去除重名
-            rstEngs = deWeightName(rstEngs);
-            rstProj = rstProj.concat(rstEngs);
+            rstTends = deWeightName(rstTends);
+            rstProj = rstProj.concat(rstTends);
             //恢复单价、费率文件
-            rstFile = rstFile.concat(getUpdateFiles(allTenders, oprNode));
-
+            rstFile = rstFile.concat(getUpdateFiles(tenders, oprNode));
         }
         //恢复建设项目
         rstProj = rstProj.concat(getUpdateDatas(projectType.project, oprNode, false, false));
@@ -930,8 +876,7 @@ function m_getFilesObjs(nodes){
     for(let i = 0, len = nodes.length; i < len; i++){
         let fileId = $(nodes[i]).attr('fileId') || null;
         if(fileId){
-            let dispName = $('td:eq(0)', $(nodes[i])[0].parentNode.parentNode)[0].textContent;
-            let name = dispName.slice(0, dispName.length - 4);
+            let name = $('td:eq(0)', $(nodes[i])[0].parentNode.parentNode)[0].textContent;
             if($(nodes[i]).attr('fileType') === fileType.unitPriceFile){
                 fileId = parseInt(fileId);
             }
@@ -950,10 +895,6 @@ function m_project(node){
     let parent = node.parent || null;
     if(!parent) return null;
     if(parent && parent.data.projType === projectType.project) return parent;
-
-    let gParent = parent.parent || null;
-    if(!gParent) return null;
-    if(gParent && gParent.data.projType === projectType.project) return gParent;
     return null;
 }
 
@@ -1223,12 +1164,10 @@ function getUpdateDatas(updateType, node, mtNID, mtPM){
         //恢复
         if(mtNID){
             rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {name: newName, deleteInfo: null, NextSiblingID: mtNID}));
-        }
-        else {
+        } else {
             rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {name: newName, deleteInfo: null}));
         }
-    }
-    else if(updateType === projectType.project){
+    } else if(updateType === projectType.project){
         //恢复
         rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {deleteInfo: null, name: newName}));//NextSibling为undefined,后端处理
     }

File diff suppressed because it is too large
+ 89 - 474
web/building_saas/pm/js/pm_newMain.js


+ 14 - 44
web/building_saas/pm/js/pm_share.js

@@ -32,16 +32,8 @@ const pmShare = (function () {
         {name: '工程列表', dataCode: 'name', width: 300, rateWidth: 0.55, vAlign: 'center', hAlign: 'left'},
         {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: '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: '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'},
-        {name: '工程专业', dataCode: 'feeStandardName', width: 100, vAlign: 'center', hAlign: 'left'},
+        {name: '总造价', dataCode: 'totalCost', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+        {name: '项目类别', dataCode: 'valuationType', width: 100, vAlign: 'center', hAlign: 'left'},
     ];
     const spreadOpts = {
         workBook: {
@@ -684,16 +676,7 @@ const pmShare = (function () {
         for(let proj of allDatas){
             let summaryProj = summaryInfo[proj.ID];
             if(summaryProj){
-                proj.engineeringCost = summaryProj.engineeringCost;
-                proj.subEngineering = summaryProj.subEngineering;
-                proj.measure = summaryProj.measure;
-                proj.safetyConstruction = summaryProj.safetyConstruction;
-                proj.other = summaryProj.other;
-                proj.charge = summaryProj.charge;
-                proj.tax = summaryProj.tax;
-                proj.rate = summaryProj.rate;
-                proj.buildingArea = summaryProj.buildingArea;
-                proj.perCost = summaryProj.perCost;
+                proj.totalCost = summaryProj.totalCost;
             }
         }
     }
@@ -728,11 +711,8 @@ const pmShare = (function () {
         for (let data of groupedDatas) {
             setTreeInfo([data].concat(data.children));
         }
-        let engs = _.filter(ungroupedDatas, {projType: projectType.engineering}),
-            tenders = _.filter(ungroupedDatas, {projType: projectType.tender});
-        for (let data of engs) {
-            setTreeInfo([data].concat(data.children));
-        }
+        //未分类分段
+        let tenders = _.filter(ungroupedDatas, {projType: projectType.tender});
         setTreeInfo(tenders);
         let rst = [];
         //整理树结构
@@ -741,15 +721,11 @@ const pmShare = (function () {
         let firstID = getFirstID(groupedDatas);
         //新建未分类建设项目及单项工程
         let ungroupedProj = {ID: uuid.v1(), ParentID: -1, NextSiblingID: firstID, name: '未分类建设项目', projType: projectType.project};
-        let ungroupedEng = {ID: uuid.v1(), ParentID: ungroupedProj.ID, NextSiblingID: -1, name: '未分类单项工程', projType: projectType.engineering};
         /*if (groupedDatas.length > 0) {
             groupedDatas[groupedDatas.length - 1].NextSiblingID = ungroupedProj.ID;
         }*/
         //将未分类的数据归类
-        sortSameDepthData(engs, ungroupedProj.ID);
-        sortSameDepthData(tenders, ungroupedEng.ID);
-        //未分类单项工程处于同层第一个节点
-        ungroupedEng.NextSiblingID = engs[0] ? engs[0].ID : ungroupedEng.NextSiblingID;
+        sortSameDepthData(tenders, ungroupedProj.ID);
         let allDatas = groupedDatas.concat(ungroupedDatas);
         //设置分享信息及操作信息
         setShareInfo(allDatas);
@@ -760,7 +736,6 @@ const pmShare = (function () {
             }
         }
         rst.push(ungroupedProj);
-        rst.push(ungroupedEng);
         return rst;
     }
     //按照时间排序
@@ -923,21 +898,21 @@ const pmShare = (function () {
                 $('#copyShare_selectProj').append(opt);
             }
             //初始选择
-            if(fileHierarchyData.length > 0){
+            /*if(fileHierarchyData.length > 0){
                 setEng(fileHierarchyData[0].ID);
-            }
+            }*/
         });
     }
     //拷贝分享的工程
     //@param {Object}selected {Number}parentID @return {void}
-    function copyShareProject(selected, projID, engID){
-        if(!engID || !selected){
+    function copyShareProject(selected, projID){
+        if(!projID || !selected){
             return;
         }
         let copyMap = {copy: null, update: null};
         let newName = getCopyName(selected);
-        //获取单项工程的单位工程
-        let tenderQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], userID: userID, ParentID: engID};
+        //获取建设项目的分段
+        let tenderQuery = {$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], userID: userID, ParentID: projID};
         CommonAjax.post('/pm/api/getProjectsByQuery', {user_id: userID, query: tenderQuery, options: '-_id -property'}, function (rstData) {
             let updateTender = null;
             for(let tender of rstData){
@@ -959,7 +934,7 @@ const pmShare = (function () {
                 userID: userID,
                 ID: selected.data.actualTreeInfo.ID,
                 NextSiblingID: -1,
-                ParentID: engID,
+                ParentID: projID,
                 name: newName,
                 shareInfo: [],
                 compilation: selected.data.compilation,
@@ -1052,12 +1027,7 @@ const pmShare = (function () {
                 $('#copyShareProj-info').show();
                 return;
             }
-            let selEng = $('#copyShare_selectEng').select().val();
-            if(!selEng){
-                $('#copyShareEng-info').show();
-                return;
-            }
-            copyShareProject(tree.selected, parseInt(selProj), parseInt(selEng));
+            copyShareProject(tree.selected, parseInt(selProj));
         });
         //清除分享
         //清除了该节点后,可能还有该节点的数据在树上(树允许有重复数据),需要更新分享信息

+ 1 - 1
web/over_write/js/jiangxi_2017.js

@@ -346,7 +346,7 @@ if(typeof baseFigureTemplate !== 'undefined'){
         return rst;
     };
     baseFigureTemplate['GJXMDERGF'] =  function (tender) {//估计项目定额人工费
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
+        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';//
         let rst = 0;
         let rations = calcBase.project.Ration.datas;
         for(let ration of rations){