|
@@ -0,0 +1,157 @@
|
|
|
+'use strict';
|
|
|
+
|
|
|
+/**
|
|
|
+ * 依赖jQuery, lodash, spreadjs,请放在spreadjs_zh.js之后
|
|
|
+ *
|
|
|
+ * @author Mai
|
|
|
+ * @date
|
|
|
+ * @version
|
|
|
+ */
|
|
|
+
|
|
|
+const NewMergePeg = function (setting) {
|
|
|
+ const spread = SpreadJsObj.createNewSpread($('#mp-spread')[0]);
|
|
|
+ const sheet = spread.getActiveSheet();
|
|
|
+ const spreadSetting = {
|
|
|
+ cols: [
|
|
|
+ {title: '起始桩号', field: 'start-peg', hAlign: 0, width: 80, formatter: '@'},
|
|
|
+ {title: '终止桩号', field: 'end-peg', hAlign: 0, width: 80, formatter: '@'},
|
|
|
+ {title: '位置', field: 'peg-pos', hAlign: 0, width: 60, formatter: '@'},
|
|
|
+ {title: '合并结果', field: 'peg', hAlign: 0, width: 180, formatter: '@'},
|
|
|
+ ],
|
|
|
+ emptyRows: 3,
|
|
|
+ headRows: 1,
|
|
|
+ headRowHeight: [32],
|
|
|
+ headerFont: '12px 微软雅黑',
|
|
|
+ font: '12px 微软雅黑',
|
|
|
+ };
|
|
|
+ const findCol = function (field) {
|
|
|
+ return _.findIndex(spreadSetting.cols, function (c) {return c.field === field});
|
|
|
+ };
|
|
|
+ const spCol = findCol('start-peg'), epCol = findCol('end-peg'), posCol = findCol('peg-pos'), pegCol = findCol('peg');
|
|
|
+ SpreadJsObj.initSheet(sheet, spreadSetting);
|
|
|
+ sheet.setColumnWidth(0, 30, spreadNS.SheetArea.rowHeader);
|
|
|
+ const spreadObj = {
|
|
|
+ mergePeg(row) {
|
|
|
+ const withPos = $('#mp-with-pos')[0].checked
|
|
|
+ const sprChar = '~', withSprChar = $('#mp-with-spr-char')[0].checked;
|
|
|
+ const mergeRow = function (row) {
|
|
|
+ const startPeg = _.trim(sheet.getText(row, spCol));
|
|
|
+ const endPeg = _.trim(sheet.getText(row, epCol));
|
|
|
+ let peg;
|
|
|
+ if (startPeg !== '') {
|
|
|
+ peg = endPeg !== ''
|
|
|
+ ? (withSprChar && endPeg.indexOf(sprChar) !== 0 ? startPeg + sprChar + endPeg : startPeg + endPeg)
|
|
|
+ : startPeg;
|
|
|
+ } else {
|
|
|
+ peg = endPeg !== '' ? endPeg : '';
|
|
|
+ }
|
|
|
+ if (withPos) {
|
|
|
+ peg = _.trim(sheet.getText(row, posCol)) + peg;
|
|
|
+ }
|
|
|
+ sheet.setText(row, pegCol, peg);
|
|
|
+ };
|
|
|
+ if (row) {
|
|
|
+ const rows = row instanceof Array ? row : [row];
|
|
|
+ if (row instanceof Array) {
|
|
|
+ for (const r of rows) {
|
|
|
+ mergeRow(r)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
|
|
|
+ mergeRow(iRow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getPegs() {
|
|
|
+ const result = [];
|
|
|
+ for (let iRow = 0, iLen = sheet.getRowCount(); iRow < iLen; iRow++) {
|
|
|
+ const peg = sheet.getText(iRow, pegCol);
|
|
|
+ if (peg !== '') {
|
|
|
+ result.push({name: peg});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ editStarting(e, info) {
|
|
|
+ if (!info.sheet.zh_setting) return;
|
|
|
+ const col = info.sheet.zh_setting.cols[info.col];
|
|
|
+ switch (col.field) {
|
|
|
+ case 'peg':
|
|
|
+ info.cancel = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ clipboardPasted: function (e, info) {
|
|
|
+ spreadObj.mergePeg();
|
|
|
+ },
|
|
|
+ deletePress: function (sheet) {
|
|
|
+ if (!sheet.zh_setting) return;
|
|
|
+
|
|
|
+ const sel = sheet.getSelections()[0], row = [];
|
|
|
+ for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
|
|
|
+ for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
|
|
|
+ if (iCol !== pegCol) {
|
|
|
+ sheet.setText(iRow, iCol, '');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.push(iRow);
|
|
|
+ }
|
|
|
+ spreadObj.mergePeg(row);
|
|
|
+ },
|
|
|
+ editEnded: function (e, info) {
|
|
|
+ spreadObj.mergePeg(info.row);
|
|
|
+ },
|
|
|
+ cut: function (sheet, sel, callback) {
|
|
|
+ if (!sheet || !sel) return;
|
|
|
+
|
|
|
+ callback();
|
|
|
+ const rows = [];
|
|
|
+ for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
|
|
|
+ for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
|
|
|
+ sheet.setText(iRow, iCol, '');
|
|
|
+ }
|
|
|
+ rows.push(iRow);
|
|
|
+ }
|
|
|
+ spreadObj.mergePeg(rows);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ spread.bind(spreadNS.Events.EditStarting, spreadObj.editStarting);
|
|
|
+ spread.bind(spreadNS.Events.ClipboardPasted, spreadObj.clipboardPasted);
|
|
|
+ spread.bind(spreadNS.Events.EditEnded, spreadObj.editEnded);
|
|
|
+ SpreadJsObj.addDeleteBind(spread, spreadObj.deletePress);
|
|
|
+ SpreadJsObj.addCutEvents(spread, spreadObj.cut);
|
|
|
+
|
|
|
+ // 勾选位置
|
|
|
+ $('#mp-with-pos').click(() => {spreadObj.mergePeg();});
|
|
|
+ // 勾选桩号连接符
|
|
|
+ $('#mp-with-spr-char').click(function () {
|
|
|
+ if (this.checked) {
|
|
|
+ $('#mp-spr-char').show();
|
|
|
+ } else {
|
|
|
+ $('#mp-spr-char').hide();
|
|
|
+ }
|
|
|
+ spreadObj.mergePeg();
|
|
|
+ });
|
|
|
+ // 选择连接符
|
|
|
+ $('select', '#merge-peg').change(() => {spreadObj.mergePeg()});
|
|
|
+ // 初始化窗口
|
|
|
+ $('#merge-peg').on('show.bs.modal', function () {
|
|
|
+ sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(),
|
|
|
+ spreadNS.SheetArea.viewport, spreadNS.StorageType.data);
|
|
|
+ });
|
|
|
+ $('#merge-peg').on('shown.bs.modal', function () {
|
|
|
+ spread.refresh();
|
|
|
+ });
|
|
|
+ $('#mp-ok').click(() => {
|
|
|
+ if (setting.callback) {
|
|
|
+ setting.callback(spreadObj.getPegs());
|
|
|
+ }
|
|
|
+ $('#merge-peg').modal('hide');
|
|
|
+ });
|
|
|
+
|
|
|
+ const showModal = function () {
|
|
|
+ $('#merge-peg').modal('show');
|
|
|
+ };
|
|
|
+ return {show: showModal};
|
|
|
+};
|