Przeglądaj źródła

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

Chenshilong 7 lat temu
rodzic
commit
71c43987a9

+ 2 - 1
config/gulpConfig.js

@@ -9,7 +9,8 @@ module.exports = {
         'lib/popper/popper.min.js',
         'lib/bootstrap/bootstrap.min.js',
         'web/building_saas/js/*.js',
-        'public/web/scMathUtil.js'
+        'public/web/scMathUtil.js',
+        'public/web/PerfectLoad.js'
     ],
     common_css:[
         'lib/bootstrap/css/bootstrap.min.css',

+ 37 - 1
modules/fee_rates/controllers/fee_rates_controller.js

@@ -55,7 +55,9 @@ module.exports = {
     changeFeeRateFileFromCurrent:changeFeeRateFileFromCurrent,
     changeFeeRateFileFromOthers:changeFeeRateFileFromOthers,
     setFeeRateToBill:setFeeRateToBill,
-    updateFeeRate:updateFeeRate
+    updateFeeRate:updateFeeRate,
+    updateRates:updateRates,
+    feeRateFileSaveAs:feeRateFileSaveAs
 }
 
 function libNames(req, res) {
@@ -211,3 +213,37 @@ async function updateFeeRate(req,res) {
     }
     res.json(result);
 }
+
+function updateRates(req,res){
+    let result={
+        error:0
+    }
+    let data = req.body.data;
+    data=JSON.parse(data);
+    feeRateFacde.updateRates(data.user_id,data)(function (err,re) {
+        if(err){
+            result.error=1;
+            result.message = err.message;
+        }else {
+            result.data = re;
+        }
+        res.json(result);
+    })
+}
+
+function feeRateFileSaveAs(req,res){
+    let result={
+        error:0
+    }
+    let data = req.body.data;
+    data=JSON.parse(data);
+    feeRateFacde.feeRateFileSaveAs(data.user_id,data)(function (err,re) {
+        if(err){
+            result.error=1;
+            result.message = err.message;
+        }else {
+            result.data = re;
+        }
+        res.json(result);
+    })
+}

+ 3 - 1
modules/fee_rates/facade/fee_rates_facade.js

@@ -29,7 +29,9 @@ module.exports={
     getFeeRatesByProject:getFeeRatesByProject,
     getGCFeeRateFiles: getGCFeeRateFiles ,
     setFeeRateToBill:setFeeRateToBill,
-    updateFeeRate:updateFeeRate
+    updateFeeRate:updateFeeRate,
+    updateRates:update_rates,
+    feeRateFileSaveAs:feeRateFileSaveAs
 };
 let operationMap={
     'ut_create':create_fee_rate,

+ 2 - 0
modules/fee_rates/routes/fee_rates_route.js

@@ -20,6 +20,8 @@ module.exports = function (app) {
     frRouter.post('/changeFeeRateFileFromOthers', frController.changeFeeRateFileFromOthers);
     frRouter.post('/setFeeRateToBill', frController.setFeeRateToBill);
     frRouter.post('/updateFeeRate', frController.updateFeeRate);
+    frRouter.post('/updateRates', frController.updateRates);
+    frRouter.post('/feeRateFileSaveAs', frController.feeRateFileSaveAs);
     app.use('/feeRates',frRouter);
 }
 

+ 1 - 1
modules/pm/models/project_model.js

@@ -77,7 +77,7 @@ ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callbac
                         name: data.updateData.name,
                         project_id: data.updateData.ID,
                         user_id: userId,
-                        root_project_id: data.property.rootProjectID
+                        root_project_id: data.updateData.property.rootProjectID
                     };
                     let addResult = await unitPriceFileModel.add(insertData);
                     if (!addResult) {

Plik diff jest za duży
+ 82 - 0
public/web/PerfectLoad.js


+ 13 - 8
web/building_saas/main/js/controllers/project_controller.js

@@ -18,17 +18,22 @@ ProjectController = {
         if (!project || !sheetController) { return null; }
 
         let target = project.getParentTarget(project.mainTree.selected, 'sourceType', project.Bills.getSourceType());
-        let newSource = null, newNode = null;
-        let parentID = target ? target.source.getParentID() : project.Bills.tree.setting.rootId;
-        let nextSiblingID = target ? target.source.getNextSiblingID() : project.Bills.tree.setting.rootId;
+        let newSource = null, newNode = null, parentID, nextSiblingID;
+        if (target) {
+            console.log(target.depth());
+            parentID = target.depth() === 0 ? target.source.getID() : target.source.getParentID();
+            nextSiblingID = target ? target.source.getNextSiblingID() : project.Bills.tree.setting.rootId;
 
-        if (std) {
-            let newCode = project.Bills.newFormatCode(std.code);
-            newSource = project.Bills.insertStdBills(parentID, nextSiblingID, std, newCode);
+            if (std) {
+                let newCode = project.Bills.newFormatCode(std.code);
+                newSource = project.Bills.insertStdBills(parentID, nextSiblingID, std, newCode);
+            } else {
+                newSource = project.Bills.insertBills(parentID, nextSiblingID);
+            }
+            newNode = project.mainTree.insert(target.depth() === 0 ? target.getID() : target.getParentID(), target.getNextSiblingID());
         } else {
-            newSource = project.Bills.insertBills(parentID, nextSiblingID);
+            alert('不可添加清单');
         }
-        newNode = project.mainTree.insert(target.getParentID(), target.getNextSiblingID());
 
         if (newNode) {
             newNode.source = newSource;

+ 99 - 13
web/building_saas/main/js/models/fee_rate.js

@@ -8,6 +8,7 @@ var FeeRate = {
 
         function FeeRate(proj){
             this.datas = null;
+            this.datasBackup = null;
             this.sourceType = ModuleNames.feeRate;
             proj.registerModule(ModuleNames.feeRate, this);
         };
@@ -15,6 +16,14 @@ var FeeRate = {
             this.datas = datas;
             socketObject.connect();
         };
+        FeeRate.prototype.backupDatas=function () {
+          this.datasBackup = _.cloneDeep(this.datas);
+        };
+        FeeRate.prototype.dataRecovery=function () {
+            this.datas = this.datasBackup;
+            feeRateObject.activateFeeRate = this.getActivateFeeRate();
+            feeRateObject.datas = feeRateObject.activateFeeRate.rates;
+        };
         FeeRate.prototype.getActivateFeeRate = function () {
             var feeRate={
                 rates:[]
@@ -123,10 +132,25 @@ var FeeRate = {
         };
 
         FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {
-            var query={
-                ID:feerate.feeRateID
-            };
-            this.updateFeeRate(query,items);
+            var me = this;
+            var data={
+                query:{
+                    ID:feerate.feeRateID
+                },
+                doc:items,
+                user_id:userID
+            }
+            var errCallBack=function () {
+                me.dataRecovery();
+                $.bootstrapLoading.end();
+            }
+            CommonAjax.post('/feeRates/updateRates', data, function (result) {
+                _.forEach(items,function (t) {
+                     feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);
+                 })
+                 me.onFeeRateFileChange();
+                $.bootstrapLoading.end();
+            },errCallBack);
         };
         FeeRate.prototype.updateFeeRate=function (query,doc) {
           var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');
@@ -168,6 +192,55 @@ var FeeRate = {
             }
             socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
         };
+        FeeRate.prototype.onFeeRateFileChange=function () {
+            this.refreshCalProgramWhenFeeFileChange();
+            this.refreshBillsWhenFeeFileChange();
+            var node = project.mainTree.selected;
+            if(node){
+                if (node.sourceType==='ration' && calcProgramObj.sheet) {
+                    calcProgramObj.showData(node);
+                }
+            }
+            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
+        };
+
+        FeeRate.prototype.refreshBillsWhenFeeFileChange=function(){
+            var me = this;
+            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
+                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID){
+                    if(n.data.hasOwnProperty("feeRateID")&&n.data.feeRateID){
+                        var rate = me.getFeeRateByID(n.data.feeRateID);
+                        if(rate){
+                            n.data.feeRate=number_util.roundToString(rate.rate,feeRate_consts.decimal);
+                            return true;
+                        }else {
+                            n.data.feeRate=null;
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            })
+            if(nodes.length>0){
+                projectObj.mainController.refreshTreeNode(nodes)
+            }
+        };
+        FeeRate.prototype.refreshCalProgramWhenFeeFileChange=function () {
+            var me = this;
+            var templates = project.calcProgram.datas.templates;
+            for(var i =0;i<templates.length;i++){
+                _.forEach(templates[i].calcItems,function (item) {
+                    if(item.hasOwnProperty("feeRateID")&&item.feeRateID){
+                        var rate = me.getFeeRateByID(item.feeRateID);
+                        if(rate){
+                            item.feeRate = rate.rate;
+                        }
+                    }
+                })
+            }
+            project.calcProgram.compileAllTemps();
+            rationPM.refreshDetailSheet();
+        }
         FeeRate.prototype.refreshCalProgramByRateID=function (rateID,value) {
             var templates = project.calcProgram.datas.templates;
             for(var i =0;i<templates.length;i++){
@@ -208,9 +281,11 @@ var FeeRate = {
                     me.datas.libName=data.libName;
                     me.datas.feeRateID=data.feeRateID;
                     me.datas.rates=data.rates;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
+                    me.onFeeRateFileChange();
                     callback();
                 }
+            },function () {
+                $.bootstrapLoading.end();
             });
         };
         FeeRate.prototype.checkFeeRateName = function(newVal,callback){
@@ -224,17 +299,26 @@ var FeeRate = {
                 callback(data);
             });
         };
-        FeeRate.prototype.feeRateFileSaveAs = function (newName) {
+        FeeRate.prototype.feeRateFileSaveAs = function (newName,callback) {
+            var me = this;
+            $.bootstrapLoading.start();
+            this.backupDatas();
             this.datas.name = newName;
             this.datas.ID = uuid.v1();
             this.datas.feeRateID=uuid.v1();
             this.datas.usageProjects=[];
             this.datas.usageProjects.push({name:projectInfoObj.projectInfo.name,ID:projectInfoObj.projectInfo.ID});
-            var updateData = this.getUpdateData('ut_update',{projectID:projectInfoObj.projectInfo.ID},this.datas,'feeRateFileSaveAs');
-            project.pushNow('updateFeeRate',[this.sourceType],updateData);
-
-            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
-            return  this.datas;
+            var data={
+                query:{projectID:projectInfoObj.projectInfo.ID},
+                doc:this.datas,
+                user_id:userID
+            }
+            CommonAjax.post('/feeRates/feeRateFileSaveAs', data, function (data) {
+                callback(me.datas);
+            },function () {
+                me.dataRecovery();
+                $.bootstrapLoading.end();
+            });
         };
         FeeRate.prototype.getChangeInfo = function (callback) {
            // var projectID = projectInfoObj.projectInfo.ID;
@@ -400,9 +484,10 @@ var FeeRate = {
             CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
                 if (data) {
                     me.datas=data;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
                     callback();
                 }
+            },function () {
+                $.bootstrapLoading.end();
             });
         };
 
@@ -418,9 +503,10 @@ var FeeRate = {
             CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
                 if (data) {
                     me.datas=data;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
                     callback();
                 }
+            },function () {
+                $.bootstrapLoading.end();
             });
 
         };

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

@@ -84,7 +84,7 @@ var PROJECT = {
             this.composition.loadData();
             this.Decimal = {
                 common: {
-                    quantity: 3,
+                    quantity: 4,
                     unitFee: 2,
                     totalFee: 2
                 }

+ 30 - 23
web/building_saas/main/js/views/fee_rate_view.js

@@ -7,6 +7,7 @@
 var feeRateObject={
     mainViews:null,
     datas:null,
+    datasBackup:null,
     canEdit:false,
     activateFeeRate:null,
     needCascadeSet:false,
@@ -367,6 +368,7 @@ var feeRateObject={
     },
     updateBySelect:function (rate,selectMap,mapID) {
        var selected = this.mainViews.getSelections()[0];
+        projectObj.project.FeeRate.backupDatas();
        var item = this.datas[selected.sourceRow];
         item.rate = rate;
         _.forEach(selectMap,function (value,key) {
@@ -385,7 +387,7 @@ var feeRateObject={
         }else {
             this.mainViews.data.updateItem(selected.sourceRow,item);
         }
-        projectObj.project.FeeRate.synchronizeFeeRate();
+        //projectObj.project.FeeRate.synchronizeFeeRate();
 
         //this.views.data.updateItem()
     },
@@ -452,11 +454,6 @@ var feeRateObject={
                 }
             }
         })
-
-        _.forEach(items,function (t) {
-            feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);
-        })
-
         projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
     },
     loadPageContent:function(){
@@ -487,11 +484,13 @@ var feeRateObject={
         });
     },
     changeFeeRateStandard:function(newVal){
+        $.bootstrapLoading.start();
         var callback=function () {
             feeRateObject.createSpreadView();
             feeRateObject.loadPageContent();
             projectObj.project.FeeRate.synchronizeFeeRate();
             subRateObject.destorySpreadView();
+            $.bootstrapLoading.end();
         };
         projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
     },
@@ -511,7 +510,6 @@ var feeRateObject={
                 $('#saveAsConfirm').removeAttr("disabled");
                 $('#nameError').hide();
             }
-            console.log(data);
         };
         projectObj.project.FeeRate.checkFeeRateName(newVal,callback);
     },
@@ -538,9 +536,15 @@ var feeRateObject={
         }
     },
     submitSaveAs:function (newName) {
-        this.activateFeeRate =  projectObj.project.FeeRate.feeRateFileSaveAs(newName);
-        feeRateObject.loadPageContent();
-        $('#copy-lv').modal('hide');
+        var me = this;
+          projectObj.project.FeeRate.feeRateFileSaveAs(newName,function (result) {
+              me.activateFeeRate = result;
+              me.loadPageContent();
+              $('#copy-lv').modal('hide');
+              socket.emit('feeRateChangeNotify', projectObj.project.FeeRate.getActivateFeeRateFileID());
+              $.bootstrapLoading.end();
+        });
+
     },
     getChangeInfo:function () {
         var me = this;
@@ -573,6 +577,7 @@ var feeRateObject={
         }
     },
     changeFeeRateFileFromCurrent:function(){
+        $.bootstrapLoading.start();
         var newVal = $("#currentOptions").val();
         if($("#currentOptions").val()==this.activateFeeRate.ID){
             return;
@@ -585,7 +590,8 @@ var feeRateObject={
         var callback=function () {
             feeRateObject.createSpreadView();
             feeRateObject.loadPageContent();
-            projectObj.project.FeeRate.synchronizeFeeRate();
+            projectObj.project.FeeRate.onFeeRateFileChange();
+            $.bootstrapLoading.end();
         }
         projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newFeeRateFile,callback);
     },
@@ -606,10 +612,12 @@ var feeRateObject={
         }
     },
     changeFeeRateFileConfirm:function(feeRateFileID,name){
+        $.bootstrapLoading.start();
         var callback=function () {
             feeRateObject.createSpreadView();
             feeRateObject.loadPageContent();
-            projectObj.project.FeeRate.synchronizeFeeRate();
+            projectObj.project.FeeRate.onFeeRateFileChange();
+            $.bootstrapLoading.end();
         }
         projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);
     },
@@ -764,16 +772,6 @@ $(function(){
     });
 
 
-    function changeFRadioClick() {
-        var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
-        if(radioV==='0'){
-            $("#fromProject").show();
-            $("#fromOther").hide();
-        }else {
-            $("#fromProject").hide();
-            $("#fromOther").show();
-        }
-    }
     $('#changeFeeRateConfirm').bind('click',function (){
         var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
         if(radioV==='0'){
@@ -849,7 +847,16 @@ $(function(){
     $('#fee_selected_conf').bind('click',function (){
         feeRateObject.submitFeeRateBySelect();
     })
-
 })
 
+function changeFRadioClick() {
+    var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
+    if(radioV==='0'){
+        $("#fromProject").show();
+        $("#fromOther").hide();
+    }else {
+        $("#fromProject").hide();
+        $("#fromOther").show();
+    }
+}
 

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

@@ -89,7 +89,9 @@ var projectObj = {
         if (colSetting.data.decimal) {
             value = Number(editingText);
             if (number_util.isNumber(value)) {
-                value = value.toDecimal(colSetting.data.decimal);
+                if (colSetting.data.decimal) {
+                    value = value.toDecimal(colSetting.data.decimal);
+                }
             } else {
                 value = null;
                 alert('当前输入的数据类型不正确,请重新输入。');
@@ -111,7 +113,9 @@ var projectObj = {
             }
         }
         if (value) {
-            value = value.toDecimal(colSetting.data.decimal);
+            if (colSetting.data.decimal) {
+                value = value.toDecimal(colSetting.data.decimal);   
+            }
         } else if (editingText && editingText !== '') {
             value = null;
             alert('当前输入的数据类型不正确,请重新输入。');
@@ -135,6 +139,7 @@ var projectObj = {
             }
             return nodes;
         }
+        value = value.toDecimal(projectObj.project.Decimal.common.quantity);
         if (node.sourceType === projectObj.project.Bills.getSourceType()) {
             calcFees.setFee(node.data, fieldName, value);
             calc.calcNode(node, true);
@@ -273,8 +278,10 @@ var projectObj = {
                 }
                 projectObj.mainController.refreshTreeNode([node]);
             }
-        }else if(value==null&&fieldName ==='feeRate'){
+        } else if(value==null && fieldName ==='feeRate'){
             project.FeeRate.cleanFeeRateID(node);
+        } else {
+            projectObj.mainController.refreshTreeNode([node], false);
         }
     },
     checkMainSpread: function () {

+ 1 - 0
web/building_saas/main/js/views/sub_fee_rate_views.js

@@ -83,6 +83,7 @@ var subRateObject={
         var selectValueList=[];
         var selectMap={};
         if(me.datas&&me.datas.length>0){
+            $.bootstrapLoading.start();
             _.forEach(me.datas,function (d,key) {
                 var selectValue = $('#'+d.ID).val();
                 selectValueList.push(selectValue);

+ 1 - 0
web/common/html/header.html

@@ -62,4 +62,5 @@
 <script type="text/javascript" src="/web/building_saas/js/moment.min.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/message.js"></script>
 <script type="text/javascript" src="/public/web/scMathUtil.js"></script>
+<script type="text/javascript" src="/public/web/PerfectLoad.js"></script>
 <!-- endinject -->