Selaa lähdekoodia

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

Chenshilong 7 vuotta sitten
vanhempi
commit
6cb96e4be8

+ 4 - 0
modules/main/controllers/project_controller.js

@@ -22,6 +22,10 @@ module.exports = {
     },
     getData: function (req, res) {
         var data = JSON.parse(req.body.data);
+        // 注释代码用于测试getFilterData
+        // Project.getFilterData(data.project_id, ['bills', 'projectGLJ'], function (err, result) {
+        //     console.log(result);
+        // });
         Project.getData(data.project_id, function (err, message, result) {
             if (!err) {
                 callback(req, res, err, message, result);

+ 28 - 5
modules/main/models/project.js

@@ -14,9 +14,13 @@ let projSetting = require('./proj_setting_model');
 let volumePriceData = require('../../volume_price/models/volume_price_model');
 var labour_coe_facade = require('../facade/labour_coe_facade');
 var calc_program_facade = require('../facade/calc_program_facade');
+
+const ProjectModel = require('../../pm/models/project_model').project;
+import GLJListModel from "../../glj/models/glj_list_model";
+
 var consts = require('./project_consts');
 var projectConsts = consts.projectConst;
-var async = require("async");
+var asyncTool = require("async");
 
 var moduleMap = {};
 
@@ -73,7 +77,7 @@ Project.prototype.save = function(datas, callback){
         functions.push(saveModule(item));
     }
 
-    async.parallel(functions, function(err, results) {
+    asyncTool.parallel(functions, function(err, results) {
         if (!err){
             callback(null, '', results)
         }
@@ -98,7 +102,7 @@ Project.prototype.getData = function(projectID, callback){
         })(itemName))
     }
 
-    async.parallel(functions, function(err, results) {
+    asyncTool.parallel(functions, function(err, results) {
         if (!err){
             callback(null, '', results)
         }
@@ -111,11 +115,29 @@ Project.prototype.getData = function(projectID, callback){
 Project.prototype.getFilterData = function (projectID, filter, callback) {
     let functions = [];
     let getModuleData = function (moduleName) {
-        return function (cb) {
+        return async function (cb) {
             if (moduleMap[moduleName]) {
                 moduleMap[moduleName].getData(projectID, function (err, name, data) {
                     cb(err, {'moduleName': name, 'data': data})
                 });
+            } else if (moduleName === projectConsts.PROJECTGLJ) {
+                try {
+                    if (isNaN(projectID) || projectID <= 0) {
+                        throw '标段id有误';
+                    }
+                    // 获取标段对应的单价文件id
+                    let unitPriceFileId = await ProjectModel.getUnitPriceFileId(projectID);
+                    if (unitPriceFileId <= 0) {
+                        throw '没有对应的单价文件';
+                    }
+                    // 先获取对应标段的项目工料机数据
+                    let gljListModel = new GLJListModel();
+                    let [gljList, mixRatioConnectData] = await gljListModel.getListByProjectId(projectID, unitPriceFileId);
+
+                    cb(null, {'moduleName': moduleName, 'data': gljList});
+                } catch (error) {
+                    cb(error, null);
+                }
             } else {
                 throw '要查询的项目模块不存在';
             }
@@ -124,7 +146,8 @@ Project.prototype.getFilterData = function (projectID, filter, callback) {
     for (let itemName of filter) {
         functions.push(getModuleData(itemName));
     }
-    async.parallel(functions, function (err, results) {
+    asyncTool.parallel(functions, function (err, results) {
+        console.log(results);
         if (err) {
             throw '获取项目数据出错';
         } else {

+ 12 - 3
public/web/number_util.js

@@ -2,9 +2,9 @@
  * Created by chen on 2017/7/5.
  */
 
-Number.prototype.toDecimal = function (ADigit) {
-    return parseFloat(this.toFixed(ADigit));
-};
+// Number.prototype.toDecimal = function (ADigit) {
+//     return parseFloat(this.toFixed(ADigit));
+// };
 
 var  number_util = {
     isNumber : function (obj) {
@@ -24,5 +24,14 @@ var  number_util = {
             value = editingText;
         }
         return value;
+    },
+    roundToString:function(obj,decimal){
+        let value;
+        if(this.isNumber(obj)){
+            value = scMathUtil.roundTo(obj,-decimal)
+        }else {
+            value = scMathUtil.roundTo(Number(obj),-decimal);
+        }
+        return value.toFixed(decimal);
     }
 }

+ 10 - 1
public/web/scMathUtil.js

@@ -66,7 +66,7 @@ let scMathUtil = {
             if (num === 0){
                 num = 1;
                 let bin1 = bin.substring(0, i);
-                let bin2 = zeroString(iLength - (i + 1));//bin.substring(i + 1, iLength);
+                let bin2 = this.zeroString(iLength - (i + 1));//bin.substring(i + 1, iLength);
                 result = bin1 + num.toString() + bin2;
                 break;
             }
@@ -78,4 +78,13 @@ let scMathUtil = {
         let me = this;
         return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
     }
+};
+
+Number.prototype.toDecimal = function (ADigit) {
+    //return parseFloat(this.toFixed(ADigit));
+    digit = (ADigit && typeof(ADigit) === 'Number' && Number.isInteger(ADigit) && ADigit >= 0) ? -ADigit : -2;
+    // var s = scMathUtil.roundTo(this, digit);
+    // console.log('Number: ' + this + '   Digit: ' + digit + '    Result: ' + s);
+    // return parseFloat(s);
+    return scMathUtil.roundTo(this, digit);
 };

+ 3 - 11
web/building_saas/fee_rates/fee_rate.html

@@ -1,14 +1,6 @@
-<!DOCTYPE html>
-<html lang="en">
 
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="x-ua-compatible" content="ie=edge">
 
-</head>
-
-<body >
+<div >
 <div class="toolsbar px-1">
     <div class="form-inline py-1">
         <label class="mx-2" >当前使用:<span id="feeRateFileName">费率1</span>(<a href="#" id="pop-lv"><span id="projectCount">3</span> 单位工程使用</a>)
@@ -164,5 +156,5 @@
 </div>
 
 
-</body>
-</html>
+</div>
+

+ 3 - 0
web/building_saas/glj/js/composition.js

@@ -69,4 +69,7 @@ function compositionSuccess(info) {
     projectGLJSheet.setCellByField('unit_price.market_price', info.parentMarketPrice, false);
     projectGLJSheet.setCellByField('unit_price.base_price', info.parentBasePrice, false);
     projectGLJSheet.setCellByField('adjust_price', info.parentMarketPrice, false);
+
+    // 更新组成物缓存
+    projectObj.project.composition.loadData();
 }

+ 1 - 1
web/building_saas/glj/js/composition_spread.js

@@ -92,7 +92,7 @@ CompositionSpread.prototype.initRightClick = function(target) {
                     let row = self.rightClickTarget.row;
                     let idColumn = self.sheetObj.getFieldColumn('mix_ratio_id');
                     let deleteId = activeSheet.getValue(row, idColumn);
-                    self.deleteComposition(deleteId, row, mixRatioSuccess);
+                    self.deleteComposition(deleteId, row, self.successCallback);
                 }
             },
         }

+ 1 - 0
web/building_saas/glj/js/project_glj.js

@@ -26,6 +26,7 @@ let currentTag = '';
 let isChanging = false;
 $(document).ready(function () {
     $('#tab_gongliaoji').on('show.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
         init();
     });
 

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

@@ -76,11 +76,11 @@
     <div class="main">
         <div class="main-nav">
             <ul class="nav nav-tabs flex-column" role="tablist">
-                <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" role="tab">造价书</a></li>
+                <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" id="tab_zaojiashu" role="tab">造价书</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#gongliaoji" id="tab_gongliaoji" role="tab">工料机</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab">计算程序</a></li>
-                <li class="nav-item"><a data-toggle="tab" href="#baobiao" role="tab" onclick="">报表</a></li>
+                <li class="nav-item"><a data-toggle="tab" href="#baobiao" role="tab" id="tab_baobiao" onclick="">报表</a></li>
             </ul>
         </div>
         <div class="content">

+ 11 - 0
web/building_saas/main/js/main.js

@@ -6,4 +6,15 @@ $(function () {
     projectInfoObj.showProjectInfo();
     projectObj.checkMainSpread();
     projectObj.loadProjectData();
+
+    $('#tab_baobiao').on('shown.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
+        // do something
+    });
+
+    $('#tab_zaojiashu').on('shown.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
+        // do something
+    });
+
 });

+ 43 - 40
web/building_saas/main/js/models/fee_rate.js

@@ -15,15 +15,6 @@ var FeeRate = {
             this.datas = datas;
             socketObject.connect();
         };
-   /*     FeeRate.prototype.getViewDatas = function(){
-            var  rates=[];
-            _.forEach(this.datas,function (item) {
-                if(item.status == 'activate'){
-                    rates= item.rates;
-                }
-            })
-            return rates;
-        };*/
         FeeRate.prototype.getActivateFeeRate = function () {
             var feeRate={
                 rates:[]
@@ -126,7 +117,8 @@ var FeeRate = {
             doc.rate.rate =doc.rate.rate.toDecimal(feeRate_consts.decimal);
             this.updateFeeRate(query,doc);
             if(this.ifRateChange(params)){
-                this.synchronizeFeeRate();
+                //this.synchronizeFeeRate();
+                this.onFeeRateChange(params.dataItem.ID,params.dataItem.rate);
             }
         };
 
@@ -139,7 +131,6 @@ var FeeRate = {
         FeeRate.prototype.updateFeeRate=function (query,doc) {
           var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');
             project.pushNow('updateFeeRate',[this.sourceType],updateData);
-            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
         };
         FeeRate.prototype.updateStatusBySelected = function (updateTasks) {
             var updateData = [];
@@ -155,18 +146,53 @@ var FeeRate = {
             var node = project.mainTree.selected;
             if(node){
                 if (node.sourceType==='ration' && calcProgramObj.sheet) {
-                    project.calcProgram.compileAllTemps();
                     calcProgramObj.showData(node);
                 }
             }
         };
         FeeRate.prototype.ifRateChange=function (params) {
-            if(params.dataItem.rate!=params.oldDataItem.rate){
+            if(params.dataItem.memo==params.oldDataItem.memo){
                 return true;
             }else {
                 return false;
             }
         };
+        FeeRate.prototype.onFeeRateChange=function (rateID,value) {
+            var node = project.mainTree.selected;
+            this.refreshCalProgramByRateID(rateID,value);
+            this.refreshBillsByRateID(rateID,value);
+            if(node){
+                if (node.sourceType==='ration' && calcProgramObj.sheet) {
+                    calcProgramObj.showData(node);
+                }
+            }
+            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
+        };
+        FeeRate.prototype.refreshCalProgramByRateID=function (rateID,value) {
+            var templates = project.calcProgram.datas.templates;
+            for(var i =0;i<templates.length;i++){
+                _.forEach(templates[i].calcItems,function (item) {
+                    if(item.feeRateID==rateID){
+                        item.feeRate = value;
+                    }
+                })
+            }
+            project.calcProgram.compileAllTemps();
+            rationPM.refreshDetailSheet();
+        };
+        FeeRate.prototype.refreshBillsByRateID=function(rateID,value){
+            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
+                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rateID){
+                    n.data.feeRate=number_util.roundToString(value,feeRate_consts.decimal);
+                    return true;
+                }else {
+                    return false;
+                }
+            })
+            if(nodes.length>0){
+                projectObj.mainController.refreshTreeNode(nodes)
+            }
+        };
         FeeRate.prototype.changeFeeRateStandard=function(newVal,callback){
             var me =this;
             var feeRate = this.getActivateFeeRate();
@@ -235,8 +261,8 @@ var FeeRate = {
                     var data=me.getfbUpdateData(rate,bill,value);
                     this.setFeeRateToBill(data,function (result) {
                         if(data.hasOwnProperty('feeRate')){
-                            me.refreshBillsByRateID(rate,value);
-                            socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
+                            rate.rate=value;
+                            me.onFeeRateChange(rate.ID,value);
                         }else {
                             bill.feeRate=value;
                             projectObj.mainController.refreshTreeNode([node])
@@ -281,33 +307,10 @@ var FeeRate = {
                 }
             }
             CommonAjax.post('/feeRates/updateFeeRate', data, function (data) {
-                for(var i =0;i<rationPM.datas.length;i++){
-                    _.forEach(rationPM.datas[i].calcItems,function (item) {
-                        if(item.feeRateID==rate.ID){
-                            item.feeRate = value;
-                        }
-                    })
-                }
                 rate.rate=value;
-                project.calcProgram.compileAllTemps();
-                rationPM.refreshDetailSheet();
-                socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
+                me.onFeeRateChange(rate.ID,value);
             });
         }
-        FeeRate.prototype.refreshBillsByRateID=function(rate,value){
-            rate.rate=value;
-            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
-                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rate.ID){
-                    n.data.feeRate=value;
-                    return true;
-                }else {
-                    return false;
-                }
-            })
-            if(nodes.length>0){
-                projectObj.mainController.refreshTreeNode(nodes)
-            }
-        };
 
         FeeRate.prototype.getfbUpdateData=function (rate,bill,value) {
             var data={};
@@ -383,7 +386,7 @@ var FeeRate = {
             if(node.data.feeRateID){
                 var feeRate = this.getFeeRateByID(node.data.feeRateID);
                 if(feeRate){
-                    node.data.feeRate=parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
+                    node.data.feeRate=number_util.roundToString(feeRate.rate,feeRate_consts.decimal);// parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
                 }
             }
         };

+ 5 - 2
web/building_saas/main/js/views/calc_program_manage.js

@@ -113,14 +113,17 @@ let rationPM = {
     },
     refreshDetailSheet:function () {
         var me=this;
-        var mainSheetIndex = me.mainSpread.getActiveSheet().getActiveRowIndex();
-        sheetCommonObj.showData(me.detailSpread.getSheet(0), me.detailSetting,me.datas[mainSheetIndex].calcItems);
+        if(me.mainSpread&&me.detailSpread){
+            var mainSheetIndex = me.mainSpread.getActiveSheet().getActiveRowIndex();
+            sheetCommonObj.showData(me.detailSpread.getSheet(0), me.detailSetting,me.datas[mainSheetIndex].calcItems);
+        }
     }
 
 };
 
 $(document).ready(function(){
     $('#tab_calc_program_manage').on('shown.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
         rationPM.buildSheet();
     });
 });

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

@@ -350,6 +350,10 @@ var feeRateObject={
             this.mainViews.destroy();
             this.mainViews = null;
         }
+        if(subRateObject.views){
+            subRateObject.views.destroy();
+            subRateObject.views = null;
+        }
         this.activateFeeRate = projectObj.project.FeeRate.getActivateFeeRate();
         this.datas = this.activateFeeRate.rates;
         this.mainViews = new GC.Spread.Views.DataView($('#divFee')[0],
@@ -648,7 +652,7 @@ var feeRateObject={
         var data={'projectID': projectObj.project.ID(),'templatesID': calInfo.template.ID,'calcItem': calInfo.calcItem};
         rationPM.saveCalcItem(data,function (result) {
             calInfo.calcItem.feeRate=rate.rate;
-            project.calcProgram.compileAllTemps();
+            projectObj.project.calcProgram.compileAllTemps();
             rationPM.refreshDetailSheet();
             $("#fee_rate_tree").modal('hide');
         });
@@ -691,6 +695,7 @@ $(function(){
     );
 
     $('#tab_fee_rate').on('shown.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
         feeRateObject.reFreshRateViews();
         feeRateObject.loadPageContent();
     });