Browse Source

自定义模板。

chenshilong 7 years atrás
parent
commit
84142c0087

+ 9 - 0
web/building_saas/main/js/models/calc_program.js

@@ -940,6 +940,15 @@ let analyzer = {
               }
         };
         return false;
+    },
+    fieldNameIsUsed: function(template, fieldName){
+        let fieldNameEn = projectObj.project.calcProgram.compiledFeeTypeMaps[fieldName];
+        for (let item of template.calcItems){
+              if (item.fieldName == fieldNameEn){
+                  return true;
+              }
+        };
+        return false;
     }
 };
 

+ 74 - 55
web/building_saas/main/js/views/calc_program_manage.js

@@ -33,7 +33,7 @@ let calcProgramManage = {
         ],
         view:{
             comboBox:[],
-            lockColumns:[0,1,2,5,6],
+            lockColumns:[2,5],
             colHeaderHeight: CP_Col_Width.colHeader,
             rowHeaderWidth: CP_Col_Width.rowHeader
         }
@@ -59,9 +59,8 @@ let calcProgramManage = {
         me.detailSpread.getSheet(0).getRange(-1, 4, -1, 1).cellType(fieldName);
 
         me.mainSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
-        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.CellChanged, me.onDetailCellChanged);
-        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onDetailEditEnded);
-        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
+        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.ValueChanged, me.onDetailValueChanged);
+        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onDetailEnterCell);
 
         let mSheet = me.mainSpread.getSheet(0);
         sheetCommonObj.showData(mSheet, me.mainSetting, me.datas);
@@ -86,41 +85,55 @@ let calcProgramManage = {
         sheetCommonObj.showData(dSheet, me.detailSetting, dData);
         me.detailSpread.resumePaint();
     },
-    onDetailEditEnded: function(sender, args) {
+    onDetailValueChanged: function(sender, args) {
         $.bootstrapLoading.start();
-
         let me = calcProgramManage;
         let editInfo= me.getSelectionInfo();
-        if (me.detailSetting.header[args.col].dataCode == 'feeRate') {
+        let curCalcItem = editInfo.calcItem;
+        let dataCode = me.detailSetting.header[args.col].dataCode;
+
+        if (dataCode == 'feeRate') {
             projectObj.project.FeeRate.updateFeeRateFromCalc(args.editingText,editInfo);
-        }
-        else {
-            if (me.detailSetting.header[args.col].dataCode == 'displayFieldName') {
-                if (editInfo.calcItem.displayFieldName == args.editingText) {
-                    $.bootstrapLoading.end();
-                    return;
-                }
-                editInfo.calcItem.fieldName = projectObj.project.calcProgram.compiledFeeTypeMaps[args.editingText];
-                editInfo.calcItem.displayFieldName = args.editingText;    // 这句不入库,仅用于切换后再切换回来时界面正确显示
-            }
-            else if (me.detailSetting.header[args.col].dataCode == 'dispExprUser'){  // 除非直接改单元格,弹窗不会走这里
-                alert(editInfo.calcItem.dispExprUser);
+            $.bootstrapLoading.end();
+            return;
+        };
+
+        if (dataCode == 'displayFieldName') {
+            if (curCalcItem.displayFieldName == args.newValue) {
+                $.bootstrapLoading.end();
+                return;
             };
 
-            let data = {
-                'projectID': projectObj.project.ID(),
-                'templatesID': editInfo.template.ID,
-                'calcItem': editInfo.calcItem
+            if (analyzer.fieldNameIsUsed(me.getSelectionInfo().template, args.newValue)){
+                let sheet = me.detailSpread.getActiveSheet();
+                sheet.suspendEvent();
+                sheet.setValue(args.row, args.col, args.oldValue);
+                sheet.resumeEvent();
+                $.bootstrapLoading.end();
+                alert(`“${args.newValue}” 已被其它行使用,不允许重复选择!`);
+                return;
             };
-            me.saveCalcItem(data, function (rst) {
-                if (rst){
-                    projectObj.project.calcProgram.calcAllNodesAndSave();
-                    $.bootstrapLoading.end();
-                }
-            });
+
+            curCalcItem.fieldName = projectObj.project.calcProgram.compiledFeeTypeMaps[args.newValue];
         }
+        else if (dataCode == 'dispExprUser'){  // 除非直接改单元格,弹窗不会走这里
+            alert('用户修改dispExprUser值,触发onDetailEditEnded事件。');
+        };
+
+        curCalcItem[dataCode] = args.newValue;
+        let data = {
+            'projectID': projectObj.project.ID(),
+            'templatesID': editInfo.template.ID,
+            'calcItem': curCalcItem
+        };
+        me.saveCalcItem(data, function (rst) {
+            if (rst){
+                projectObj.project.calcProgram.calcAllNodesAndSave();
+            }
+        });
+        $.bootstrapLoading.end();
     },
-    onEnterCell: function (sender, args) {
+    onDetailEnterCell: function (sender, args) {
         // let t = calcProgramManage.getSelectionInfo().template;
         // let c = calcProgramManage.getSelectionInfo().calcItem;
         // let lc = analyzer.calcItemLabourCoe(c);
@@ -167,10 +180,9 @@ let calcProgramManage = {
                                 calcProgramManage.buildSheet();
                                 calcProgramManage.mainSpread.getActiveSheet().setSelection(ts.length - 1, 0, 1, 1);
                                 calcProgramManage.refreshDetailSheet();
-                                $.bootstrapLoading.end();
                             }
-                            else $.bootstrapLoading.end();
                         });
+                        $.bootstrapLoading.end();
                     }
                 },
                 "reNameTemplate": {
@@ -213,10 +225,9 @@ let calcProgramManage = {
                             if (rst){
                                 projectObj.project.calcProgram.compileTemplate(template);
                                 sheetCommonObj.showData(calcProgramManage.mainSpread.getSheet(0), calcProgramManage.mainSetting, calcProgramManage.datas);
-                                $.bootstrapLoading.end();
                             }
-                            else $.bootstrapLoading.end();
                         });
+                        $.bootstrapLoading.end();
                     }
                 },
                 "spr1": '--------',
@@ -248,10 +259,9 @@ let calcProgramManage = {
                                 calcProgramManage.buildSheet();
                                 calcProgramManage.mainSpread.getActiveSheet().setSelection(idx - 1, 0, 1, 1);
                                 calcProgramManage.refreshDetailSheet();
-                                $.bootstrapLoading.end();
                             }
-                            else $.bootstrapLoading.end();
                         });
+                        $.bootstrapLoading.end();
                     }
                 }
             }
@@ -268,6 +278,7 @@ let calcProgramManage = {
                     name: "插入行",
                     icon: 'fa-sign-in',
                     callback: function () {
+                        $.bootstrapLoading.start();
                         let template = calcProgramManage.getSelectionInfo().template;
                         let idx = calcProgramManage.detailSpread.getActiveSheet().getActiveRowIndex();
 
@@ -276,7 +287,7 @@ let calcProgramManage = {
                         // newItem.name = '新建';
                         newItem.memo = '自定义';
                         newItem.custom = true;
-                        newItem.expression = '0';
+                        newItem.expression = '0';                           // 这里必须得有值,否则程序内部公式解析会出现诸多问题
                         template.calcItems.splice(idx + 1, 0, newItem);
                         let data = {
                             'projectID': projectObj.project.ID(),
@@ -289,9 +300,9 @@ let calcProgramManage = {
                                 calcProgramManage.refreshDetailSheet();
                                 calcProgramManage.detailSpread.getActiveSheet().setSelection(idx + 1, 0, 1, 1);
                                 projectObj.project.calcProgram.calcAllNodesAndSave();
-                                $.bootstrapLoading.end();
                             }
                         });
+                        $.bootstrapLoading.end();
                     }
                 },
                 "spr1": '--------',
@@ -299,30 +310,38 @@ let calcProgramManage = {
                     name: '删除行',
                     icon: 'fa-remove',
                     callback: function () {
+                        $.bootstrapLoading.start();
                         let template = calcProgramManage.getSelectionInfo().template;
                         let idx = calcProgramManage.detailSpread.getActiveSheet().getActiveRowIndex();
                         let item = template.calcItems[idx];
 
+                        if (item.fieldName == 'common'){
+                            $.bootstrapLoading.end();
+                            alert(`费用类别为“工程造价”的行不允许删除!`);
+                            return;
+                        };
+
                         if (analyzer.calcItemIsUsed(template, item)){
+                            $.bootstrapLoading.end();
                             alert(`第 ${idx + 1} 行“${item.name}”已被第 ${item.tempUsed + 1} 行引用,不允许删除!`);
                             delete item.tempUsed;
-                        }
-                        else{
-                            template.calcItems.splice(idx, 1);
-                            let data = {
-                                'projectID': projectObj.project.ID(),
-                                'ID': template.ID,
-                                'calcItems': template.calcItems
-                            };
-                            calcProgramManage.updateTemplate(data, function (rst) {
-                                if (rst){
-                                    projectObj.project.calcProgram.compileTemplate(template);
-                                    calcProgramManage.refreshDetailSheet();
-                                    projectObj.project.calcProgram.calcAllNodesAndSave();
-                                    $.bootstrapLoading.end();
-                                }
-                            });
-                        }
+                            return;
+                        };
+
+                        template.calcItems.splice(idx, 1);
+                        let data = {
+                            'projectID': projectObj.project.ID(),
+                            'ID': template.ID,
+                            'calcItems': template.calcItems
+                        };
+                        calcProgramManage.updateTemplate(data, function (rst) {
+                            if (rst){
+                                projectObj.project.calcProgram.compileTemplate(template);
+                                calcProgramManage.refreshDetailSheet();
+                                projectObj.project.calcProgram.calcAllNodesAndSave();
+                            }
+                        });
+                        $.bootstrapLoading.end();
                     }
                 }
             }