Browse Source

1. mongoose4.8.5版本不支持deleteManage, 4.12.0(最新)连接数据库方式改变,调整为4.10.7 - 4.11.0
2. treeSheetController, bind前解绑
3. 清单、定额、量价,修改quantity后,实时计算

MaiXinRong 7 years ago
parent
commit
fa74355dbc

+ 1 - 1
package.json

@@ -8,7 +8,7 @@
     "babel-preset-es2015": "^6.24.1",
     "babel-preset-stage-2": "^6.24.1",
     "express": "^4.13.1",
-    "mongoose": "^4.8.5",
+    "mongoose": "~4.10.7",
     "async": "^2.1.5",
     "connect-mongo": "^1.3.2",
     "cookie-parser": "~1.4.3",

+ 1 - 0
public/web/tree_sheet/tree_sheet_controller.js

@@ -18,6 +18,7 @@ var TREE_SHEET_CONTROLLER = {
         controller.prototype.showTreeData = function () {
             var that = this;
             TREE_SHEET_HELPER.showTreeData(this.setting, this.sheet, this.tree);
+            this.sheet.unbind(GC.Spread.Sheets.Events.SelectionChanged);
             this.sheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e, info) {
                 that.setTreeSelected(that.tree.items[info.newSelections[0].row]);
             });

+ 6 - 2
web/building_saas/main/js/models/bills.js

@@ -273,12 +273,16 @@ var Bills = {
             this.project.pushNow('updateAllBills', this.getSourceType(), updateData);
         };
 
-        bills.prototype.updateNodes = function (nodes) {
+        bills.prototype.updateNodes = function (nodes, updateNow) {
             let updateData = [];
             for (let node of nodes) {
                 updateData.push({'updateType': 'ut_update', 'updateData': tools.formatBillsUpdateData(node.data)});
             }
-            this.project.pushNow('updateBills', this.getSourceType(), updateData);
+            if (updateNow) {
+                this.project.pushNow('updateBills', this.getSourceType(), updateData);
+            } else {
+                this.project.push(this.getSourceType(), updateData);
+            }
         };
 
         return new bills(project);

+ 24 - 0
web/building_saas/main/js/models/ration.js

@@ -6,6 +6,20 @@ var Ration = {
     createNew: function (project) {
         // 用户定义private方法
         var tools = {
+            formatRationUpdateData: function (data) {
+                let uData = JSON.parse(JSON.stringify(data));
+                delete uData.feesIndex;
+                delete uData.flagsIndex;
+                // if (uData.fees) {
+                //     for (let fee of uData.fees) {
+                //         fee.unitFee = fee.unitFee.toFixed(2);
+                //         fee.totalFee = fee.totalFee.toFixed(2);
+                //         fee.tenderUnitFee = fee.tenderUnitFee.toFixed(2);
+                //         fee.tenderTotalFee = fee.tenderTotalFee.toFixed(2);
+                //     }
+                // }
+                return uData;
+            }
         };
 
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
@@ -258,6 +272,16 @@ var Ration = {
             this.project.pushNow('updateBills', this.getSourceType(), updateData);
         };
 
+        ration.prototype.updateRation = function (ration, updateNow) {
+            let updateData = [];
+            updateData.push({'updateType': 'ut_update', 'updateData': tools.formatRationUpdateData(ration)});
+            if (updateNow) {
+                this.project.pushNow('updateRations', this.getSourceType(), updateData);
+            } else {
+                this.project.push(this.getSourceType(), updateData);
+            }
+        }
+
         return new ration(project);
     }
 };

+ 6 - 2
web/building_saas/main/js/models/volume_price.js

@@ -148,7 +148,7 @@ var VolumePrice = {
                 volumePrice.feesIndex.common.totalFee = (volumePrice.feesIndex.common.unitFee * volumePrice.quantity).toDecimal(tools.owner.Decimal.common.totalFee);
                 volumePrice.needRefresh = true;
             }
-            updateField(volumePrice, field, newValue) {
+            updateField(volumePrice, field, newValue, updateNow) {
                 calcFees.setFee(volumePrice, field, newValue);
                 let updateData = [];
                 let data = {'ID': volumePrice.ID, 'projectID': this.getProject().ID()};
@@ -163,7 +163,11 @@ var VolumePrice = {
                     data[field] = newValue;
                 }
                 updateData.push({'updateType': 'ut_update', 'updateData': data});
-                tools.owner.pushNow('updateVolumePrice', this.getSourceType(), updateData);
+                if (updateNow) {
+                    tools.owner.pushNow('updateVolumePrice', this.getSourceType(), updateData);
+                } else {
+                    tools.owner.push(this.getSourceType(), updateData);
+                }
             }
         }
 

+ 155 - 92
web/building_saas/main/js/views/project_view.js

@@ -12,6 +12,78 @@ var projectObj = {
             subViewObj.saveComments(node);
         }*/
     },
+    treeSelectedChanged: function (node) {
+        let project = projectObj.project;
+        subViewObj.loadComments(node);
+        gljOprObj.showDataIfRationSelect(node);
+
+        // CSL.2017.07.25
+        if (SubActiveSheetNameIs('JSCX')) {
+            if (node.sourceType === project.Bills.getSourceType() || node.sourceType === project.Ration.getSourceType()) {
+                calcProgramObj.showData(node);
+            } else {
+                calcProgramObj.clearData();
+            };
+        };
+        //zhong 2017-9-1 特征及内容
+        if(pageCCOprObj.active){
+            pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];//mainSpread焦点单元格
+            if(node.sourceType === project.Bills.getSourceType()){
+                pageCCOprObj.setCacheAndShow(node);
+            }
+            else{
+                pageCCOprObj.clearData();
+            }
+        }
+    },
+    refreshBaseActn: function (tree) {
+        let setButtonValid = function (valid, btn) {
+            if (valid) {
+                btn.removeClass('disabled');
+            } else {
+                btn.addClass('disabled');
+            }
+        };
+        let selected = tree.selected, that = projectObj;
+        let canUpLevel = function (node) {
+            if (selected && selected.depth() > 0 && selected.canUpLevel()) {
+                if (selected.sourceType === that.project.Bills.getSourceType()) {
+                    return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
+                } else {
+                    return false;
+                }
+            } else {
+                return false;
+            }
+        };
+        let canDownLevel = function (node) {
+            if (selected && selected.depth() > 0 && selected.canDownLevel()) {
+                if (selected.sourceType === that.project.Bills.getSourceType()) {
+                    return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
+                } else {
+                    return false;
+                }
+            } else {
+                return false;
+            }
+        };
+        let canDelete = function (node) {
+            if (selected) {
+                if (selected.sourceType === that.project.Bills.getSourceType()) {
+                    return !(selected.data.flagsIndex && selected.data.flagsIndex.fixed && selected.data.flagsIndex.fixed.flag > 0);
+                } else {
+                    return true;
+                }
+            } else {
+                return false;
+            }
+        };
+        setButtonValid(canUpLevel(selected), $('#upLevel'));
+        setButtonValid(canDownLevel(selected), $('#downLevel'));
+        setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
+        setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
+        setButtonValid(canDelete(selected), $('#delete'));
+    },
     checkCommonField: function (editingText, colSetting) {
         let value;
         if (colSetting.data.decimal) {
@@ -53,27 +125,93 @@ var projectObj = {
             return this.checkCommonField(editingText, colSetting);
         }
     },
+    checkBusinessValidate: function (value, node, fieldName) {
+        let project = projectObj.project;
+        if (!project) {
+            return false;
+        }
+        if (node.sourceType !== project.VolumePrice.getSourceType() && fieldName === 'quantity') {
+            return project.quantity_detail.quantityEditChecking(value,node,fieldName);
+        } else if (fieldName === 'code') {
+            if (node.sourceType === project.Bills.getSourceType()) {
+                return project.Bills.CodeChecking(value, node);
+            } else if (node.sourceType === project.Ration.getSourceType()) {
+                return project.Ration.CodeChecking(value, node);
+            } else {
+                return true;
+            }
+        } else {
+            return true;
+        }
+    },
+    billsCodeEdited: function (value, node) {
+
+    },
+    updateAndReCalculate: function (node, fieldName, value) {
+        let project = projectObj.project, calc = new BillsCalcHelper(project), nodes = [];
+        let getNodes = function (node) {
+            let cur = node, nodes = [];
+            while (cur) {
+                nodes.push(cur);
+                cur = cur.parent;
+            }
+            return nodes;
+        }
+        if (node.sourceType === projectObj.project.Bills.getSourceType()) {
+            calcFees.setFee(node.data, fieldName, value);
+            calc.calcNode(node, true);
+            nodes = getNodes(node);
+        } else if (node.sourceType === projectObj.project.VolumePrice.getSourceType()) {
+            project.beginUpdate('VolumePrice_QuantityChange');
+            project.VolumePrice.updateField(node.source, fieldName, value, false);
+            calc.calcNode(node.parent, true);
+            nodes = getNodes(node.parent);
+            project.Bills.updateNodes(nodes, false);
+            project.endUpdate();
+            nodes.push(node);
+        } else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
+            project.beginUpdate('Ration_QuantityChange');
+            calcFees.setFee(node.data, fieldName, value);
+            node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
+            // calcProgram.calculate的传参必须是cacheNode类型,故无法将计算放在Ration模块中。
+            project.calcProgram.calculate(node);
+            project.Ration.updateRation(node.source, false);
+            calc.calcNode(node.parent, true);
+            nodes = getNodes(node.parent);
+            project.Bills.updateNodes(nodes, false);
+            project.endUpdate();
+            nodes.push(node);
+        }
+        this.mainController.refreshTreeNode(nodes, false);
+        calc = null;
+    },
     mainSpreadEditEnded: function (sender, info) {
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
         let colSetting = projectObj.mainController.setting.cols[info.col];
         let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
+        // 检查输入类型等
         let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
-        let validate = project.quantity_detail.quantityEditChecking(value,node,fieldName);
 
-        if (colSetting.data.wordWrap) {
-            info.sheet.autoFitRow(info.row);
-        }
-        if (value && value != calcFees.getFee(node.data, fieldName)&&validate) {
-            if (node.sourceType === project.Bills.getSourceType()) {
-                project.Bills.updateField(node.source, fieldName, value);
-            } else if (node.sourceType === project.Ration.getSourceType()) {
-                project.Ration.updateField(node.source, fieldName, value);
-            } else if (node.sourceType === project.VolumePrice.getSourceType()) {
-                project.VolumePrice.updateField(node.source, fieldName, value);
+        if (value && value !== calcFees.getFee(node.data, fieldName)) {
+            if (fieldName === 'code') {
+
+            } else if (fieldName === 'quantity' && projectObj.checkBusinessValidate(value, node, fieldName)) {
+                projectObj.updateAndReCalculate(node, fieldName, value);
+            } else {
+                if (node.sourceType === project.Bills.getSourceType()) {
+                    project.Bills.updateField(node.source, fieldName, value, true);
+                } else if (node.sourceType === project.Ration.getSourceType()) {
+                    project.Ration.updateField(node.source, fieldName, value, true);
+                } else if (node.sourceType === project.VolumePrice.getSourceType()) {
+                    project.VolumePrice.updateField(node.source, fieldName, value, true);
+                }
+                if (colSetting.data.wordWrap) {
+                    info.sheet.autoFitRow(info.row);
+                }
+                projectObj.mainController.refreshTreeNode([node]);
             }
         }
-        projectObj.mainController.refreshTreeNode([node]);
     },
     checkMainSpread: function () {
         if (!this.mainSpread) {
@@ -115,89 +253,15 @@ var projectObj = {
                         col.data.formatter = MainTreeCol.getNumberFormatter(col.data.decimal);
                     }
                 });
-                that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
-                that.mainController.showTreeData();
-                that.mainController.bind('refreshBaseActn', function (tree) {
-                    var setButtonValid = function (valid, btn) {
-                        if (valid) {
-                            btn.removeClass('disabled');
-                        } else {
-                            btn.addClass('disabled');
-                        }
-                    };
-                    let selected = tree.selected;
-                    let canUpLevel = function (node) {
-                        if (selected && selected.depth() > 0 && selected.canUpLevel()) {
-                            if (selected.sourceType === that.project.Bills.getSourceType()) {
-                                return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
-                            } else {
-                                return false;
-                            }
-                        } else {
-                            return false;
-                        }
-                    };
-                    let canDownLevel = function (node) {
-                        if (selected && selected.depth() > 0 && selected.canDownLevel()) {
-                            if (selected.sourceType === that.project.Bills.getSourceType()) {
-                                return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
-                            } else {
-                                return false;
-                            }
-                        } else {
-                            return false;
-                        }
-                    };
-                    let canDelete = function (node) {
-                        if (selected) {
-                            if (selected.sourceType === that.project.Bills.getSourceType()) {
-                                return !(selected.data.flagsIndex && selected.data.flagsIndex.fixed && selected.data.flagsIndex.fixed.flag > 0);
-                            } else {
-                                return true;
-                            }
-                        } else {
-                            return false;
-                        }
-                    };
-                    setButtonValid(canUpLevel(selected), $('#upLevel'));
-                    setButtonValid(canDownLevel(selected), $('#downLevel'));
-                    setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
-                    setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
-                    setButtonValid(canDelete(selected), $('#delete'));
-                });
-
-              /*  if(!projectObj.gljSpreed){
-                    projectObj.gljSpreed = gljView.buildSheet($("#gljSpread")[0]);
-                    that.loadGLJSpreadContextMenu();
-                }*/
 
                 that.project.calcProgram = new CalcProgram(that.project);
                 that.project.calcProgram.compileAllTemps();
 
+                that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
+                that.mainController.showTreeData();
+                that.mainController.bind('refreshBaseActn', that.refreshBaseActn);
                 that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.beforeTreeSelectedChange, that.beforeMainTreeSelectedChange);
-                that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, function (node) {
-                    subViewObj.loadComments(node);
-                    gljOprObj.showDataIfRationSelect(node);
-
-                    // CSL.2017.07.25
-                    if (SubActiveSheetNameIs('JSCX')) {
-                        if (node.sourceType === that.project.Bills.getSourceType() || node.sourceType === that.project.Ration.getSourceType()) {
-                            calcProgramObj.showData(node);
-                        } else {
-                            calcProgramObj.clearData();
-                        };
-                    };
-                    //zhong 2017-9-1 特征及内容
-                    if(pageCCOprObj.active){
-                        pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];//mainSpread焦点单元格
-                        if(node.sourceType === that.project.Bills.getSourceType()){
-                            pageCCOprObj.setCacheAndShow(node);
-                        }
-                        else{
-                            pageCCOprObj.clearData();
-                        }
-                    }
-                });
+                that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.treeSelectedChanged);
 
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
 
@@ -323,7 +387,7 @@ var projectObj = {
             cur = cur.parent;
         }
         this.mainController.refreshTreeNode(nodes, false);
-        this.project.Bills.updateNodes(nodes);
+        this.project.Bills.updateNodes(nodes, true);
         calc = null;
     },
     // 计算全部清单
@@ -421,4 +485,3 @@ $('#property_ok').click(function () {
     projectObj.project.setCalcFlag(parseInt($("input[name='calcFlag']:checked").val()));
     projectObj.calculateAll();
 });
-