Selaa lähdekoodia

项目属性多次通讯问题。

chenshilong 7 vuotta sitten
vanhempi
commit
74a276e7d4

+ 2 - 2
modules/common/base/base_model.js

@@ -22,9 +22,9 @@ class BaseModel {
      * @return {void}
      */
     constructor() {
-        if (new.target === BaseModel) {
+/*        if (new.target === BaseModel) {
             throw new Error('BaseModel不能实例化,只能继承使用。');
-        }
+        }*/
     }
 
     /**

+ 20 - 0
modules/pm/controllers/pm_controller.js

@@ -3,6 +3,7 @@
  */
 import UnitPriceFileModel from "../../glj/models/unit_price_file_model";
 let ProjectsData = require('../models/project_model').project;
+let projectM = require('../../main/models/project');
 let projType = require('../models/project_model').projType;
 let fileType = require('../models/project_model').fileType;
 const engineering = require("../../common/const/engineering");
@@ -58,6 +59,25 @@ module.exports = {
             }
         });
     },
+    // 该方法主要用于项目属性位置提交保存混合型数据,这些数据来自不同的表,包括projects.property、ration、bills、labour_coes.
+    updateMixDatas: function(req, res){
+        let callBackInner = function (err, message, data) {
+            if (err === 0) {
+                callback(req, res, err, message, data);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        };
+        let datas = JSON.parse(req.body.data);
+        for (let data of datas){
+              if (data.sourceType == 'properties'){
+                  ProjectsData.updateUserProjects(req.session.sessionUser.ssoId, data.updateData, callBackInner);
+              }
+              else{
+                projectM.save(data, callBackInner);
+              }
+        };
+    },
     updateFiles: async function(req, res){
         let data = JSON.parse(req.body.data);
         let updateDatas = data.updateDatas;

+ 1 - 0
modules/pm/routes/pm_route.js

@@ -31,6 +31,7 @@ module.exports = function (app) {
      data.updateData.updateType: 1 of ['new', 'update', 'delete']
      */
     pmRouter.post('/updateProjects', pmController.updateProjects);
+    pmRouter.post('/updateMixDatas', pmController.updateMixDatas);
 
     /*
      req.body = {data: '{user_id: user_id, updateData: [{updateType, updateData}]}'}

+ 5 - 5
web/building_saas/main/js/models/fee_rate.js

@@ -243,7 +243,7 @@ var FeeRate = {
                 })
             }
             project.calcProgram.compileAllTemps();
-            rationPM.refreshDetailSheet();
+            calcProgramManage.refreshDetailSheet();
         }
         FeeRate.prototype.refreshCalProgramByRateID=function (rateID,value) {
             var templates = project.calcProgram.datas.templates;
@@ -255,7 +255,7 @@ var FeeRate = {
                 })
             }
             project.calcProgram.compileAllTemps();
-            rationPM.refreshDetailSheet();
+            calcProgramManage.refreshDetailSheet();
         };
         FeeRate.prototype.refreshBillsByRateID=function(rateID,value){
             var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
@@ -379,12 +379,12 @@ var FeeRate = {
                 editInfo.calcItem.feeRate=value;
                 editInfo.calcItem.feeRateID=null;
                 var data={'projectID': projectObj.project.ID(),'templatesID': editInfo.template.ID,'calcItem': editInfo.calcItem};
-                rationPM.saveCalcItem(data,function (result) {
+                calcProgramManage.saveCalcItem(data,function (result) {
                     project.calcProgram.compileAllTemps();
-                    rationPM.refreshDetailSheet();
+                    calcProgramManage.refreshDetailSheet();
                 })
             }else {
-                rationPM.refreshDetailSheet();
+                calcProgramManage.refreshDetailSheet();
             }
         };
         FeeRate.prototype.updateFeeRateByCalc=function (rate,value) {

+ 4 - 4
web/building_saas/main/js/views/calc_program_manage.js

@@ -2,7 +2,7 @@
  * Created by CSL on 2017-08-03.
  * 计算程序管理。
  */
-let rationPM = {
+let calcProgramManage = {
     datas: [],
     mainSpread: null,
     detailSpread: null,
@@ -68,7 +68,7 @@ let rationPM = {
         sheetCommonObj.showData(dSheet, me.detailSetting, me.datas[0].calcItems);
     },
     onMainEnterCell: function(sender, args) {
-        var me = rationPM;
+        var me = calcProgramManage;
         var row = args.sheet.getActiveRowIndex();
 
         me.detailSpread.suspendPaint();
@@ -79,7 +79,7 @@ let rationPM = {
         me.detailSpread.resumePaint();
     },
     onEditEnded: function(sender, args) {
-        var me = rationPM;
+        var me = calcProgramManage;
         if(me.detailSetting.header[args.col].dataCode=='feeRate'){
             var editInfo= me.getSelectionInfo();
             projectObj.project.FeeRate.updateFeeRateFromCalc(args.editingText,editInfo);
@@ -126,7 +126,7 @@ let rationPM = {
 $(document).ready(function(){
     $('#tab_calc_program_manage').on('shown.bs.tab', function (e) {
         $(e.relatedTarget.hash).removeClass('active');
-        rationPM.buildSheet();
+        calcProgramManage.buildSheet();
     });
 });
 

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

@@ -660,14 +660,14 @@ var feeRateObject={
     },
     submitFeeRateFromCalc:function () {
         var rate = feeRateObject.feeRateSelection;
-        var calInfo = rationPM.getSelectionInfo();
+        var calInfo = calcProgramManage.getSelectionInfo();
         calInfo.calcItem.feeRateID=rate.ID;
         calInfo.calcItem.feeRate=null;
         var data={'projectID': projectObj.project.ID(),'templatesID': calInfo.template.ID,'calcItem': calInfo.calcItem};
-        rationPM.saveCalcItem(data,function (result) {
+        calcProgramManage.saveCalcItem(data,function (result) {
             calInfo.calcItem.feeRate=rate.rate;
             projectObj.project.calcProgram.compileAllTemps();
-            rationPM.refreshDetailSheet();
+            calcProgramManage.refreshDetailSheet();
             $("#fee_rate_tree").modal('hide');
         });
         console.log(calInfo);

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

@@ -131,7 +131,15 @@ let labourCoeView = {
         me.loadData(datas);
     },
 
-    save(){
+    refresh(data){
+        let me = this;
+        projectObj.project.labourCoe.refreshData(data);
+        me.needUpdateDatas.splice(0, me.needUpdateDatas.length);
+        $("#std_labour_coe_files").val('');
+        calcProgramManage.buildSheet();
+    }
+
+/*  save(){
         let me = this;
         if (me.needUpdateDatas.length > 0){
             let projectID = projectInfoObj.projectInfo.ID;
@@ -143,11 +151,11 @@ let labourCoeView = {
                 me.needUpdateDatas.splice(0, me.needUpdateDatas.length);
                 projectObj.project.calcProgram.compileAllTemps();
                 projectObj.project.calcProgram.calcAllNodes(calcAllType.catRations);
-                rationPM.buildSheet();
                 $("#std_labour_coe_files").val('');
+                calcProgramManage.buildSheet();
             });
         }
-    }
+    }*/
 };
 
 $(document).ready(function(){

+ 70 - 28
web/building_saas/main/js/views/project_view.js

@@ -533,8 +533,8 @@ var projectObj = {
                 "calculateAll_RationContent": {
                     name: '造价计算',
                     callback: function () {
-                        // projectObj.calculateAll();
-                        project.calcProgram.calcAllNodes();
+                        let changedNodes = project.calcProgram.calcAllNodes();
+                        project.calcProgram.saveNodes(changedNodes);
                     }
                 }
             }
@@ -665,45 +665,38 @@ $('#poj-set').on('show.bs.modal', function () {
     if (projectObj.project) {
         // let mode = projectObj.project.projSetting.billsCalcMode;
         // let settingConst = projectObj.project.projSetting.settingConst;
-        let mode = projectObj.project.property.billsCalcMode ? projectObj.project.property.billsCalcMode : leafBillGetFeeType.rationContent;
-        setCalcFlag($('#rationContent'), leafBillGetFeeType.rationContent, mode);
-        setCalcFlag($('#rationPriceConverse'), leafBillGetFeeType.rationPriceConverse, mode);
-        setCalcFlag($('#rationPrice'), leafBillGetFeeType.rationPrice, mode);
-        setCalcFlag($('#billsPrice'), leafBillGetFeeType.billsPrice, mode);
+        let ft = projectObj.project.property.billsCalcMode ? projectObj.project.property.billsCalcMode : leafBillGetFeeType.rationContent;
+        setCalcFlag($('#rationContent'), leafBillGetFeeType.rationContent, ft);
+        setCalcFlag($('#rationPriceConverse'), leafBillGetFeeType.rationPriceConverse, ft);
+        setCalcFlag($('#rationPrice'), leafBillGetFeeType.rationPrice, ft);
+        setCalcFlag($('#billsPrice'), leafBillGetFeeType.billsPrice, ft);
 
         // mode = projectObj.project.projSetting.zanguCalcType;
-        mode = projectObj.project.property.zanguCalcMode ? projectObj.project.property.zanguCalcMode : zanguCalcType.common;
-        setCalcFlag($('#zangu_common'), zanguCalcType.common, mode);
-        setCalcFlag($('#zangu_gatherMaterial'), zanguCalcType.gatherMaterial, mode);
+        let zg = projectObj.project.property.zanguCalcMode ? projectObj.project.property.zanguCalcMode : zanguCalcType.common;
+        setCalcFlag($('#zangu_common'), zanguCalcType.common, zg);
+        setCalcFlag($('#zangu_gatherMaterial'), zanguCalcType.gatherMaterial, zg);
     }
 });
 $('#property_ok').click(function () {
     let properties = [], projectID = parseInt(scUrlUtil.GetQueryString('project'));
-    let project = projectObj.project, reCalc= false;
+    let project = projectObj.project, reCalcBills= false, reCalcRations= false;
     let b = parseInt($("input[name='calcFlag']:checked").val());
+
     if (b !== project.property.billsCalcMode) {
-        let data1 = {updateType: 'update', updateData: {ID: projectID, 'property.billsCalcMode': b}};
-        properties.push(data1);
+        let bData = {updateType: 'update', updateData: {ID: projectID, 'property.billsCalcMode': b}};
+        properties.push(bData);
         project.property.billsCalcMode = b;
-        reCalc = true;
+        reCalcBills = true;
     };
 
     let zg = parseInt($("input[name='zangu']:checked").val());
     if (zg !== project.property.zanguCalcMode) {
-        let data2 = {updateType: 'update', updateData: {ID: projectID, 'property.zanguCalcMode': zg}};
-        properties.push(data2);
+        let zgData = {updateType: 'update', updateData: {ID: projectID, 'property.zanguCalcMode': zg}};
+        properties.push(zgData);
         project.property.zanguCalcMode = zg;
-        reCalc = true;
+        reCalcBills = true;
     };
 
-    if (labourCoeView.needSave()){
-        labourCoeView.save();
-        reCalc = true;
-    }
-
-    if (reCalc) {
-        project.calcProgram.calcAllNodes(calcAllType.catBills);
-    }
     //基本信息
     if(basicInfoView.toUpdate(basicInfoView.orgDatas, basicInfoView.datas)){
         let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.basicInformation': basicInfoView.toSaveDatas(basicInfoView.datas)}};
@@ -717,6 +710,7 @@ $('#property_ok').click(function () {
     //清单工程量精度
     let newBillsDecimalDatas = billsDecimalView.toBillsDecimalDatas(billsDecimalView.cache);
     if(billsDecimalView.toUpdate(billsQuanDecimal.datas, newBillsDecimalDatas)){
+        reCalcBills = true;
         let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.billsQuantityDecimal': newBillsDecimalDatas}};
         properties.push(updateData);
     }
@@ -724,15 +718,63 @@ $('#property_ok').click(function () {
     //获取更新的数据
     let updateDecimal = m_getDecimalData($('input', '#poj-settings-decimal'));
     if(toUpdateDecimal(decimalObj, updateDecimal)){
+        reCalcRations = true;
+        reCalcBills = true;
         let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.decimal': updateDecimal}};
         properties.push(updateData);
     }
- // 呈现选项
-    projDisplayView.updateChecking(projectID,properties);
+    // 人工系数
+    let lcData;
+    if (labourCoeView.needSave()){
+        reCalcRations = true;
+        reCalcBills = true;
+        project.calcProgram.compileAllTemps();
+
+        let projectID = projectInfoObj.projectInfo.ID;
+        let libID = $("#std_labour_coe_files").children("option:selected").val();
+        let libName = $("#std_labour_coe_files").children("option:selected").text();
+        lcData = {projectID: projectID, libID: libID, libName: libName, newItemArr: labourCoeView.needUpdateDatas};
+        properties.push(lcData);
+    };
+
+    // 呈现选项
+    const autoHeight = $("#autoHeight:checked").length > 0;
+    const disPlayMainMaterial = $("#disPlayMainMaterial:checked").length > 0;
+    if (projDisplayView.needUpdate(autoHeight, disPlayMainMaterial)) {
+        const displaySetting = { autoHeight, disPlayMainMaterial };
+        let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.displaySetting': displaySetting}};
+        properties.push(updateData);
+    }
+
+    // 重新计算树节点
+    let changedNodes = [];
+    if (reCalcRations)    // 定额动,全部计算。
+        changedNodes = project.calcProgram.calcAllNodes(calcAllType.catAll)
+    else if (reCalcBills)  // 清单动,可以只计算清单。
+        changedNodes = project.calcProgram.calcAllNodes(calcAllType.catBills);
+    if (changedNodes.length > 0) {
+        for (let node of changedNodes){
+            let data = {
+                projectID: project.ID(),
+                ID: node.data.ID,
+                quantity: node.data.quantity,
+                calcBase: node.data.calcBase,
+                calcBaseValue: node.data.calcBaseValue,
+                marketUnitFee: node.data.marketUnitFee,
+                marketTotalFee: node.data.marketTotalFee,
+                fees: node.data.fees,
+                feeRate: node.data.feeRate,
+                feeRateID: node.data.feeRateID
+            };
+            let dataObj = {updateType: 'ut_update', updateData: data};
+            properties.push(changedNodes);
+        };
+    };
 
     console.log(properties);
     if(properties.length > 0){
-        CommonAjax.post('/pm/api/updateProjects', {user_id: userID, updateData: properties}, function (rstData) {
+        CommonAjax.post('/pm/api/updateMixDatas', {user_id: userID, updateData: properties}, function (rstData) {
+            if (lcData) labourCoeView.refresh(lcData);
             window.location.href = '/main?project=' + projectID;
         });
     }