Browse Source

加载列设置数据,readOnly & getText事件设置

MaiXinRong 7 years ago
parent
commit
43214ef1a5
2 changed files with 92 additions and 9 deletions
  1. 0 1
      modules/users/models/compilation_model.js
  2. 92 8
      web/users/js/col_setting.js

+ 0 - 1
modules/users/models/compilation_model.js

@@ -124,7 +124,6 @@ class CompilationModel extends BaseModel {
         updateData[sectionString + ".$.ration_lib"] = data.ration_lib;
         updateData[sectionString + ".$.name"] = data.name;
         updateData[sectionString + ".$.engineering"] = data.engineering;
-        console.log(data.main_tree_col);
         updateData[sectionString + ".$.main_tree_col"] = JSON.parse(data.main_tree_col);
 
         let result = await this.db.update(condition, updateData);

+ 92 - 8
web/users/js/col_setting.js

@@ -6,7 +6,32 @@ let ColSettingObj = {
     colSetting: null,
     DEFAULT_TITLE_STYLE: null,
     DEFAULT_DATA_STYLE: null,
-    Rows: {data: 0, filedName: 0, width: 1, readOnly: 2},
+    cellType: {
+        getText: null,
+        readOnly: null
+    },
+    Rows: {data: 0, filedName: 0, getText: 1, width: 2, readOnly: 3},
+    columnValueChanged: function (e, info) {
+        let that = ColSettingObj;
+        info.colList.forEach(function (iCol) {
+            info.sheet.setValue(that.colSetting.headRows + that.Rows.width, iCol, info.sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport);
+        });
+    },
+    valueChanged: function (e, info) {
+        let that = ColSettingObj;
+        if (info.row === that.colSetting.headRows + that.Rows.width) {
+            info.sheet.setColumnWidth(info.col, info.newValue, GC.Spread.Sheets.SheetArea.viewport);
+        }
+    },
+    selectionChanged: function (e, info) {
+        let that = ColSettingObj, sel = info.newSelections[0];
+        if (sel.row <= that.colSetting.headRows) {
+            $('.btn-toolbar').removeClass('disabled');
+            $('#font').val(info.sheet.getCell(sel.row, sel.col, GC.Spread.Sheets.SheetArea.viewport).font());
+        } else {
+            $('.btn-toolbar').addClass('disabled');
+        }
+    },
     getCellStyle: function (font, hAlign, vAlign) {
         var style = new GC.Spread.Sheets.Style();
         style.font = font;
@@ -15,6 +40,17 @@ let ColSettingObj = {
         style.wordWrap = true;
         return style;
     },
+    initCellType: function () {
+        this.cellType.readOnly = new GC.Spread.Sheets.CellTypes.ComboBox();
+        this.cellType.readOnly.items([true, false,
+            'readOnly.bills', 'readOnly.ration', 'readOnly.volumePrice',
+            'readOnly.non_bills', 'readOnly.non_ration', 'readOnly.non_volumePrice',
+            'readOnly.billsParent', 'readOnly.forCalcBase'
+        ]);
+
+        this.cellType.getText = new GC.Spread.Sheets.CellTypes.ComboBox();
+        this.cellType.getText.items(['getText.type']);
+    },
     initSheet: function (sheet, setting) {
         sheet.setColumnCount(2, GC.Spread.Sheets.SheetArea.rowHeader);
         sheet.setColumnWidth(0, 80, GC.Spread.Sheets.SheetArea.rowHeader);
@@ -23,8 +59,10 @@ let ColSettingObj = {
 
         sheet.setText(setting.headRows + this.Rows.data, 0, 'Data', GC.Spread.Sheets.SheetArea.rowHeader);
         sheet.setStyle(setting.headRows + this.Rows.data, -1, this.DEFAULT_DATA_STYLE);
+        sheet.addSpan(setting.headRows + this.Rows.data, 0, 2, 1, GC.Spread.Sheets.SheetArea.rowHeader);
 
         sheet.setText(setting.headRows + this.Rows.filedName, 1, 'FieldName', GC.Spread.Sheets.SheetArea.rowHeader);
+        sheet.setText(setting.headRows + this.Rows.getText, 1, 'getText', GC.Spread.Sheets.SheetArea.rowHeader);
 
         sheet.setText(setting.headRows + this.Rows.width, 0, 'width', GC.Spread.Sheets.SheetArea.rowHeader);
         sheet.addSpan(setting.headRows + this.Rows.width, 0, 1, 2, GC.Spread.Sheets.SheetArea.rowHeader);
@@ -35,6 +73,7 @@ let ColSettingObj = {
     initColSetting: function (setting) {
         this.DEFAULT_TITLE_STYLE = this.getCellStyle('Arial', GC.Spread.Sheets.HorizontalAlign.center, GC.Spread.Sheets.VerticalAlign.center);
         this.DEFAULT_DATA_STYLE = this.getCellStyle('Arial', GC.Spread.Sheets.HorizontalAlign.left, GC.Spread.Sheets.VerticalAlign.center);
+        this.initCellType();
 
         $('#empty-rows').val(setting.emptyRows);
         $('#col-count').val(setting.cols ? setting.cols.length : 0);
@@ -42,15 +81,55 @@ let ColSettingObj = {
 
         colEditSpread = new GC.Spread.Sheets.Workbook($('#colEditSpread')[0], {sheetCount: 1});
         colEditSpread.options.tabStripVisible = false;
+        colEditSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, this.columnValueChanged);
+        colEditSpread.bind(GC.Spread.Sheets.Events.ValueChanged, this.valueChanged);
+        colEditSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, this.selectionChanged);
+
         this.initSheet(colEditSpread.getActiveSheet(), setting);
         this.setColCount(this.colSetting.cols.length);
         this.setHeaderRowCount(this.colSetting.headRows);
+
+        if (setting.cols) {
+            let sheet = colEditSpread.getActiveSheet(), iRow;
+            for (let iCol = 0; iCol < setting.cols.length; iCol++) {
+                let col = setting.cols[iCol], iRow = 0;
+                // header
+                for (let i in col.head.spanCols) {
+                    if (col.head.spanCols[i] !== 0) {
+                        let cell = sheet.getCell(iRow, iCol, GC.Spread.Sheets.SheetArea.viewport);
+                        cell.value(col.head.titleNames[i]).font(col.head.font[i]).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]);
+                    }
+                    if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
+                        sheet.addSpan(iRow, iCol, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.viewport);
+                    }
+                    iRow += col.head.spanRows[i];
+                };
+                // data
+                // field
+                let cell = sheet.getCell(this.colSetting.headRows + this.Rows.data, iCol, GC.Spread.Sheets.SheetArea.viewport);
+                cell.value(col.data.field).font(col.data.font).hAlign(col.head.hAlign).vAlign(col.data.vAlign);
+                // getText
+                cell = sheet.getCell(this.colSetting.headRows + this.Rows.getText, iCol, GC.Spread.Sheets.SheetArea.viewport);
+                cell.cellType(this.cellType.getText).value(col.data.getText).hAlign(GC.Spread.Sheets.HorizontalAlign.right);
+                // 列宽
+                sheet.setColumnWidth(iCol, col.width);
+                sheet.setValue(this.colSetting.headRows + this.Rows.width, iCol, sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport);
+                // readonly
+                cell = sheet.getCell(this.colSetting.headRows + this.Rows.readOnly, iCol, GC.Spread.Sheets.SheetArea.viewport);
+                cell.cellType(this.cellType.readOnly).value(col.readOnly).hAlign(GC.Spread.Sheets.HorizontalAlign.right);
+            }
+        }
+        let cell = info.sheet.getCell(0, 0, GC.Spread.Sheets.SheetArea.viewport);
+        if (cell) {
+            $('#font').val(cell.font());
+        }
     },
     setColCount: function (count) {
         let sheet = colEditSpread.getActiveSheet();
         sheet.setColumnCount(count);
         for (let iCol = 0; iCol < sheet.getColumnCount(); iCol++) {
             sheet.setValue(this.colSetting.headRows + this.Rows.width, iCol, sheet.getColumnWidth(iCol), GC.Spread.Sheets.SheetArea.viewport);
+            sheet.getCell(this.colSetting.headRows + this.Rows.readOnly, iCol, GC.Spread.Sheets.SheetArea.viewport).cellType(this.cellType.readOnly);
             sheet.setValue(this.colSetting.headRows + this.Rows.readOnly, iCol, false, GC.Spread.Sheets.SheetArea.viewport);
         }
     },
@@ -142,6 +221,11 @@ let ColSettingObj = {
             col.data.vAlign = cell.vAlign();
             col.data.hAlign = cell.hAlign();
             col.data.font = cell.font();
+            // getText
+            cell = sheet.getCell(setting.headRows + this.Rows.getText, iCol);
+            if (cell.text() !== '') {
+                col.data.getText = cell.text();
+            }
             setting.cols.push(col);
         }
         return setting;
@@ -199,41 +283,41 @@ $('#save-col-setting').click(function () {
 });
 
 $('#h-left').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.hAlign(GC.Spread.Sheets.HorizontalAlign.left);
     });
 });
 $('#h-center').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
     });
 });
 
 $('#h-right').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.hAlign(GC.Spread.Sheets.HorizontalAlign.right);
     });
 });
 
 $('#v-top').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.vAlign(GC.Spread.Sheets.VerticalAlign.top);
     });
 });
 $('#v-center').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.vAlign(GC.Spread.Sheets.VerticalAlign.center);
     });
 });
 $('#v-bottom').click(function () {
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.vAlign(GC.Spread.Sheets.VerticalAlign.bottom);
     });
 });
 
 $('#set-font').click(function () {
     var sFont = $('#font').val();
-    ColSettingObj.controlSelectCells(spread, function (cell) {
+    ColSettingObj.controlSelectCells(colEditSpread, function (cell) {
         cell.font(sFont);
     });
 });