ソースを参照

工程特征bug

zhangweicheng 6 年 前
コミット
1f8321f7c1
1 ファイル変更89 行追加32 行削除
  1. 89 32
      web/building_saas/main/js/views/project_property_projFeature.js

+ 89 - 32
web/building_saas/main/js/views/project_property_projFeature.js

@@ -24,7 +24,7 @@ let projFeatureView = {
         combos: [],
         combos: [],
         dateRows: [],
         dateRows: [],
         locked: {
         locked: {
-            rows: [0],
+            rows: [],
             cols: [0]
             cols: [0]
         }
         }
     },
     },
@@ -51,12 +51,14 @@ let projFeatureView = {
     },
     },
 
 
     getComboItemsByRow: function (row) {
     getComboItemsByRow: function (row) {
-        for(let i = 0, len = this.setting.combos.length; i < len; i++){
-            if(this.setting.combos[i].row === row){
-                return this.setting.combos[i].items;
-            }
+        let data = this.datas[row];
+        if (!data) {
+            return null;
         }
         }
-        return null;
+        if (!data.cellType || data.cellType !== 'comboBox') {
+            return null;
+        }
+        return data.options ? data.options.split('@') : [];
     },
     },
 
 
     buildHeader: function (sheet, headers) {
     buildHeader: function (sheet, headers) {
@@ -80,7 +82,7 @@ let projFeatureView = {
         if(!this.workBook){
         if(!this.workBook){
             this.workBook = new GC.Spread.Sheets.Workbook($('#projFeatureSpread')[0], {sheetCount: 1});
             this.workBook = new GC.Spread.Sheets.Workbook($('#projFeatureSpread')[0], {sheetCount: 1});
             sheetCommonObj.spreadDefaultStyle(this.workBook);
             sheetCommonObj.spreadDefaultStyle(this.workBook);
-            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: null, editEnded: this.onEditEnded}]);
+            sheetCommonObj.bindEscKey(this.workBook, [{sheet: this.workBook.getSheet(0), editStarting: this.onEditStarting, editEnded: this.onEditEnded}]);
             this.setOptions(this.workBook, this.setting.options);
             this.setOptions(this.workBook, this.setting.options);
             this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
             this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
             this.bindEvent(this.workBook);
             this.bindEvent(this.workBook);
@@ -90,9 +92,10 @@ let projFeatureView = {
     bindEvent: function (workBook) {
     bindEvent: function (workBook) {
         const _events = GC.Spread.Sheets.Events;
         const _events = GC.Spread.Sheets.Events;
         let sheet = workBook.getActiveSheet();
         let sheet = workBook.getActiveSheet();
-        sheet.options.isProtected = true;
+        sheet.bind(_events.EditStarting, this.onEditStarting);
         sheet.bind(_events.EditEnded, this.onEditEnded);
         sheet.bind(_events.EditEnded, this.onEditEnded);
         sheet.bind(_events.EnterCell, this.onEnterCell);
         sheet.bind(_events.EnterCell, this.onEnterCell);
+        sheet.bind(_events.ClipboardPasting, this.onClipboardPasting);
         sheet.bind(_events.ClipboardPasted, this.onClipboardPasted);
         sheet.bind(_events.ClipboardPasted, this.onClipboardPasted);
     },
     },
 
 
@@ -104,35 +107,75 @@ let projFeatureView = {
             sheet.setRowCount(datas.length);
             sheet.setRowCount(datas.length);
             me.initTree(sheet, true, datas);
             me.initTree(sheet, true, datas);
             sheet.setFormatter(-1, 1, '@');
             sheet.setFormatter(-1, 1, '@');
-           for(let row = 0;row < datas.length ; row ++){
-               //锁定
-               if (!me.setting.locked.rows.includes(row)) {
-                   sheet.getCell(row, 1).locked(false);
-               }
-               if(datas[row].cellType == 'comboBox'){
-                   let options = datas[row].options?datas[row].options.split("@"):[];
-                   me.setCombo(sheet, row, options);
-               }else if(datas[row].cellType == 'number'){
-                   me.setting.numRows.push(row);
-               }
-               for(let col = 0;col < cols.length;col++){
-                   sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
-               }
-           }
+            //兼容旧数据
+            let compatLockedKeys = ['engineering'],
+                compatNumKeys = [
+                    'buildingArea',
+                    'basementBuildingArea',
+                    'totalFloors',
+                    'basementFloors',
+                    'buildingFloors',
+                    'buildingHeight',
+                    'basementHeight',
+                    'firstFloorHeight',
+                    'podiumBuildingHeight',
+                    'standardFloorHeight'
+                ];
+            for(let row = 0;row < datas.length ; row ++){
+                if(datas[row].cellType == 'comboBox'){
+                    let options = datas[row].options?datas[row].options.split("@"):[];
+                    me.setCombo(sheet, row, options);
+                } else if(datas[row].cellType == 'number' || compatNumKeys.includes(datas[row].key)){
+                    me.setting.numRows.push(row);
+                } else if (datas[row].cellType === 'date') {
+                    me.setting.dateRows.push(row);
+                }
+                let readOnly = typeof datas[row].readOnly === 'string' ? JSON.parse(datas[row].readOnly) : datas[row].readOnly;
+                if (readOnly || datas[row].items || compatLockedKeys.includes(datas[row].key)) {
+                    me.setting.locked.rows.push(row);
+                }
+                for(let col = 0;col < cols.length;col++){
+                    sheet.setValue(row, col, datas[row][cols[col]['dataCode']]);
+                }
+            }
+            basicInfoView.setDatePicker(sheet, me.setting.dateRows);
         };
         };
         this.renderSheetFuc(sheet, fuc);
         this.renderSheetFuc(sheet, fuc);
     },
     },
+    onEditStarting: function (sender, args) {
+        let me = projFeatureView;
+        if(me.setting.locked.cols.indexOf(args.col) !== -1){
+            args.cancel = true;
+        }
+        if(args.col === 1 && me.setting.locked.rows.indexOf(args.row) !== -1){
+            args.cancel = true;
+        }
+    },
 
 
     onEditEnded: function (sender, args) {
     onEditEnded: function (sender, args) {
         let me = projFeatureView;
         let me = projFeatureView;
         let v =  args.editingText ? args.editingText.toString().trim() : '';
         let v =  args.editingText ? args.editingText.toString().trim() : '';
         if(args.row < me.datas.length){
         if(args.row < me.datas.length){
-            if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
+            let required = typeof me.datas[args.row].required === 'string' ? JSON.parse(me.datas[args.row].required) : me.datas[args.row].required;
+            if (required && !v) {
+                v = me.datas[args.row].value;
+                args.sheet.setValue(args.row, args.col, v);
+            } else if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
                 if(!me.isNum(v)){
                 if(!me.isNum(v)){
                     alert('只能输入数值');
                     alert('只能输入数值');
                     v = me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '';
                     v = me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '';
                     args.sheet.setValue(args.row, args.col, v);
                     args.sheet.setValue(args.row, args.col, v);
                 }
                 }
+            } else if(me.setting.dateRows.indexOf(args.row) !== -1){
+                if(v.length > 0){
+                    v = formatDate(new Date(v), 'yyyy-MM-dd');
+                    v = basicInfoView.filtDate(v);
+                    if(!v){
+                        alert('请输入正确的日期格式yyyy-mm-dd');
+                        args.sheet.setValue(args.row, args.col, me.datas[args.row].value ? me.datas[args.row].value : '');
+                        return;
+                    }
+                }
             }
             }
             me.datas[args.row].value = v;
             me.datas[args.row].value = v;
         }
         }
@@ -141,7 +184,12 @@ let projFeatureView = {
     onEnterCell: function (sender, args) {
     onEnterCell: function (sender, args) {
         args.sheet.repaint();
         args.sheet.repaint();
     },
     },
-
+    onClipboardPasting: function (sender, args) {
+        let me = projFeatureView;
+        if(me.setting.locked.cols.indexOf(args.cellRange.col) !== -1){
+            args.cancel = true;
+        }
+    },
     onClipboardPasted: function (sender, args) {
     onClipboardPasted: function (sender, args) {
         let me = projFeatureView;
         let me = projFeatureView;
         let items = sheetCommonObj.analyzePasteData(me.setting, args);
         let items = sheetCommonObj.analyzePasteData(me.setting, args);
@@ -152,13 +200,28 @@ let projFeatureView = {
         for(let i = 0, len = items.length; i < len; i++){
         for(let i = 0, len = items.length; i < len; i++){
             let row = i + args.cellRange.row;
             let row = i + args.cellRange.row;
             let comboItems = me.getComboItemsByRow(row);
             let comboItems = me.getComboItemsByRow(row);
+            let required = typeof me.datas[row].required === 'string' ? JSON.parse(me.datas[row].required) : me.datas[row].required;
+            if(me.setting.locked.rows.indexOf(row) !== -1){
+                recRows.push(row);
+            }
+            else if (required && !items[i].value) {
+                recRows.push(row);
+            }
             //粘贴下拉框数据过滤
             //粘贴下拉框数据过滤
-            if(comboItems && comboItems.indexOf(items[i].value) !== -1){
+            else if(comboItems && !comboItems.includes(items[i].value)){
                 recRows.push(row);
                 recRows.push(row);
             }
             }
             else if(me.setting.numRows.indexOf(row) !== -1 && !me.isNum(items[i].value)){
             else if(me.setting.numRows.indexOf(row) !== -1 && !me.isNum(items[i].value)){
                 recRows.push(row);
                 recRows.push(row);
             }
             }
+            else if(me.setting.dateRows.indexOf(row) !== -1){
+                items[i].value = basicInfoView.filtDate(items[i].value);
+                if(!me.isDef(items[i].value)){
+                    recRows.push(row);
+                } else {
+                    me.datas[row].value = items[i].value;
+                }
+            }
             else {
             else {
                 me.datas[row].value = items[i].value;
                 me.datas[row].value = items[i].value;
             }
             }
@@ -204,12 +267,6 @@ let projFeatureView = {
     initDatas: function (datas) {
     initDatas: function (datas) {
         this.datas = [];
         this.datas = [];
         for(let i = 0, len = datas.length; i < len; i++){
         for(let i = 0, len = datas.length; i < len; i++){
-            if (typeof datas[i].readOnly === 'string') {
-                datas[i].readOnly = JSON.parse(datas[i].readOnly);
-            }
-            if (datas[i].readOnly && !this.setting.locked.rows.includes(i)) {
-                this.setting.locked.rows.push(i);
-            }
             this.datas.push(this.copyObj(datas[i]));
             this.datas.push(this.copyObj(datas[i]));
         }
         }
     },
     },