|
@@ -8,50 +8,86 @@
|
|
* @version
|
|
* @version
|
|
*/
|
|
*/
|
|
|
|
|
|
-const mainSpreadSetting = {
|
|
|
|
- cols: [
|
|
|
|
- {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 185, formatter: '@'},
|
|
|
|
- {title: '金额', colSpan: '1', rowSpan: '1', field: 'e_type', hAlign: 1, width: 80, formatter: '@'},
|
|
|
|
- {title: '本期金额', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
- {title: '截止本期金额', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 100, type: 'Number', readOnly: true},
|
|
|
|
- {title: '时间', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
- {title: '备注', colSpan: '1', rowSpan: '1', field: 'memo', hAlign: 0, width: 150, formatter: '@', cellType: 'ellipsisAutoTip'}
|
|
|
|
- ],
|
|
|
|
- emptyRows: 3,
|
|
|
|
- headRows: 1,
|
|
|
|
- headRowHeight: [32],
|
|
|
|
- defaultRowHeight: 21,
|
|
|
|
- headerFont: '12px 微软雅黑',
|
|
|
|
- font: '12px 微软雅黑',
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-const subSpreadSetting = {
|
|
|
|
- cols: [
|
|
|
|
- {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 185, formatter: '@'},
|
|
|
|
- {title: '金额', colSpan: '1', rowSpan: '1', field: 'e_type', hAlign: 1, width: 80, formatter: '@'},
|
|
|
|
- {title: '本期金额', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
- {title: '截止本期金额', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 100, type: 'Number', readOnly: true},
|
|
|
|
- {title: '时间', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
- {title: '备注', colSpan: '1', rowSpan: '1', field: 'memo', hAlign: 0, width: 150, formatter: '@', cellType: 'ellipsisAutoTip'}
|
|
|
|
- ],
|
|
|
|
- emptyRows: 3,
|
|
|
|
- headRows: 1,
|
|
|
|
- headRowHeight: [32],
|
|
|
|
- defaultRowHeight: 21,
|
|
|
|
- headerFont: '12px 微软雅黑',
|
|
|
|
- font: '12px 微软雅黑',
|
|
|
|
-};
|
|
|
|
|
|
|
|
$(document).ready(() => {
|
|
$(document).ready(() => {
|
|
autoFlashHeight();
|
|
autoFlashHeight();
|
|
|
|
+ let datepicker;
|
|
|
|
|
|
- const mainSpread = SpreadJsObj.createNewSpread($('#main-spread')[0]);
|
|
|
|
- const mainSheet = mainSpread.getActiveSheet();
|
|
|
|
- SpreadJsObj.initSheet(mainSheet, mainSpreadSetting);
|
|
|
|
|
|
+ const otherSpreadSetting = {
|
|
|
|
+ cols: [
|
|
|
|
+ {title: '名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 235, formatter: '@'},
|
|
|
|
+ {title: '金额', colSpan: '1', rowSpan: '1', field: 'total_price', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
+ {title: '本期金额', colSpan: '1', rowSpan: '1', field: 'tp', hAlign: 2, width: 100, type: 'Number'},
|
|
|
|
+ {title: '截止本期金额', colSpan: '1', rowSpan: '1', field: 'end_tp', hAlign: 2, width: 100, type: 'Number', readOnly: true},
|
|
|
|
+ {
|
|
|
|
+ title: '时间', colSpan: '1', rowSpan: '1', field: 'real_time', hAlign: 2, width: 120, readOnly: true,
|
|
|
|
+ formatter: 'yyyy-MM-dd', cellType: 'activeImageBtn', normalImg: '#ellipsis-icon', indent: 5,
|
|
|
|
+ },
|
|
|
|
+ {title: '备注', colSpan: '1', rowSpan: '1', field: 'memo', hAlign: 0, width: 180, formatter: '@', cellType: 'ellipsisAutoTip'}
|
|
|
|
+ ],
|
|
|
|
+ emptyRows: 3,
|
|
|
|
+ headRows: 1,
|
|
|
|
+ headRowHeight: [32],
|
|
|
|
+ defaultRowHeight: 21,
|
|
|
|
+ headerFont: '12px 微软雅黑',
|
|
|
|
+ font: '12px 微软雅黑',
|
|
|
|
+ getColor: function (sheet, data, row, col, defaultColor) {
|
|
|
|
+ if (data) {
|
|
|
|
+ if (data.total_price) {
|
|
|
|
+ return data.total_price >= 0
|
|
|
|
+ ? data.end_tp > data.total_price ? '#f8d7da' : defaultColor
|
|
|
|
+ : data.end_tp < data.total_price ? '#f8d7da' : defaultColor;
|
|
|
|
+ } else {
|
|
|
|
+ return defaultColor;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return defaultColor;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ imageClick: function (data, hitinfo) {
|
|
|
|
+ if (!data) return;
|
|
|
|
+
|
|
|
|
+ const setting = hitinfo.sheet.zh_setting;
|
|
|
|
+ if (!setting) return;
|
|
|
|
+ const col = setting.cols[hitinfo.col];
|
|
|
|
+ if (!col || col.field !== 'real_time') return;
|
|
|
|
+
|
|
|
|
+ const pos = SpreadJsObj.getObjPos(hitinfo.sheet.getParent().qo);
|
|
|
|
+ if (!datepicker) {
|
|
|
|
+ datepicker = $('.datepicker-here').datepicker({
|
|
|
|
+ language: 'zh',
|
|
|
|
+ dateFormat: 'yyyy-MM-dd',
|
|
|
|
+ autoClose: true,
|
|
|
|
+ onSelect: function (formattedDate, date, inst) {
|
|
|
|
+ if (!inst.visible) return;
|
|
|
|
+ const sels = hitinfo.sheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0]) return;
|
|
|
|
+ const node = SpreadJsObj.getSelectObject(hitinfo.sheet);
|
|
|
|
+ const uData = { update: {id: node.id, real_time: date} };
|
|
|
|
+
|
|
|
|
+ postData(window.location.pathname + '/update', uData, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadRowData(hitinfo.sheet, sels[0].row);
|
|
|
|
+ }, function () {
|
|
|
|
+ SpreadJsObj.reLoadRowData(hitinfo.sheet, sels[0].row);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }).data('datepicker');
|
|
|
|
+ }
|
|
|
|
+ const value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col);
|
|
|
|
+ if (value) {
|
|
|
|
+ datepicker.selectDate(value);
|
|
|
|
+ } else {
|
|
|
|
+ datepicker.clear();
|
|
|
|
+ }
|
|
|
|
+ datepicker.show();
|
|
|
|
+ $('#datepickers-container').css('top', hitinfo.cellRect.y + pos.y).css('left', hitinfo.cellRect.x + pos.x);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
|
|
- const subSpread = SpreadJsObj.createNewSpread($('#sub-spread')[0]);
|
|
|
|
- const subSheet = subSpread.getActiveSheet();
|
|
|
|
- SpreadJsObj.initSheet(subSheet, subSpreadSetting);
|
|
|
|
|
|
+ const otherSpread = SpreadJsObj.createNewSpread($('#other-spread')[0]);
|
|
|
|
+ const otherSheet = otherSpread.getActiveSheet();
|
|
|
|
+ SpreadJsObj.initSheet(otherSheet, otherSpreadSetting);
|
|
|
|
|
|
$.subMenu({
|
|
$.subMenu({
|
|
menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
|
|
menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
|
|
@@ -67,18 +103,355 @@ $(document).ready(() => {
|
|
$('#sub-menu').addClass('panel-sidebar');
|
|
$('#sub-menu').addClass('panel-sidebar');
|
|
}
|
|
}
|
|
autoFlashHeight();
|
|
autoFlashHeight();
|
|
- mainSpread.refresh();
|
|
|
|
- subSpread.refresh();
|
|
|
|
|
|
+ otherSpread.refresh();
|
|
}
|
|
}
|
|
- });
|
|
|
|
- // 上下窗口resizer
|
|
|
|
- $.divResizer({
|
|
|
|
- select: '#main-resize',
|
|
|
|
- callback: function () {
|
|
|
|
- mainSpread.refresh();
|
|
|
|
- let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
|
|
|
|
- $(".sp-wrap").height(bcontent-30);
|
|
|
|
- subSpread.refresh();
|
|
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ class SeOther {
|
|
|
|
+ constructor () {
|
|
|
|
+ this.data = [];
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+ resortData() {
|
|
|
|
+ this.data.sort(function (a, b) {
|
|
|
|
+ return a.order - b.order;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ calculateAll() {
|
|
|
|
+ for (const d of this.data) {
|
|
|
|
+ d.end_tp = ZhCalc.add(d.pre_tp, d.tp);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ loadDatas(datas) {
|
|
|
|
+ this.data = datas;
|
|
|
|
+ this.calculateAll();
|
|
|
|
+ this.resortData();
|
|
|
|
+ }
|
|
|
|
+ loadUpdateData(updateData) {
|
|
|
|
+ if (updateData.add) {
|
|
|
|
+ for (const a of updateData.add) {
|
|
|
|
+ this.data.push(a);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (updateData.update) {
|
|
|
|
+ for (const u of updateData.update) {
|
|
|
|
+ const d = this.data.find(function (x) {
|
|
|
|
+ return u.id === x.id;
|
|
|
|
+ });
|
|
|
|
+ if (d) {
|
|
|
|
+ _.assign(d, u);
|
|
|
|
+ } else {
|
|
|
|
+ this.data.push(d);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (updateData.del) {
|
|
|
|
+ _.remove(this.data, function (d) {
|
|
|
|
+ return updateData.del.indexOf(d.id) >= 0;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ this.calculateAll();
|
|
|
|
+ this.resortData();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ const seOtherObj = new SeOther();
|
|
|
|
+
|
|
|
|
+ postData(window.location.pathname + '/load', null, function (result) {
|
|
|
|
+ seOtherObj.loadDatas(result);
|
|
|
|
+ SpreadJsObj.loadSheetData(otherSheet, SpreadJsObj.DataType.Data, seOtherObj.data);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (!readOnly) {
|
|
|
|
+ const seOtherOprObj = {
|
|
|
|
+ /**
|
|
|
|
+ * 删除按钮响应事件
|
|
|
|
+ * @param sheet
|
|
|
|
+ */
|
|
|
|
+ deletePress: function (sheet) {
|
|
|
|
+ if (!sheet.zh_setting || readOnly) return;
|
|
|
|
+
|
|
|
|
+ const sortData = sheet.zh_data;
|
|
|
|
+ const datas = [];
|
|
|
|
+ const sels = sheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0]) return;
|
|
|
|
+
|
|
|
|
+ for (let iRow = sels[0].row; iRow < sels[0].row + sels[0].rowCount; iRow++) {
|
|
|
|
+ let bDel = false;
|
|
|
|
+ const node = sortData[iRow];
|
|
|
|
+ if (node) {
|
|
|
|
+ const data = {id: node.id};
|
|
|
|
+ for (let iCol = sels[0].col; iCol < sels[0].col + sels[0].colCount; iCol++) {
|
|
|
|
+ const colSetting = sheet.zh_setting.cols[iCol];
|
|
|
|
+ if (colSetting.field === 'name') {
|
|
|
|
+ toastr.error('名称不能为空,如需删除请使用右键删除');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ const style = sheet.getStyle(iRow, iCol);
|
|
|
|
+ if (!style.locked) {
|
|
|
|
+ const colSetting = sheet.zh_setting.cols[iCol];
|
|
|
|
+ data[colSetting.field] = null;
|
|
|
|
+ bDel = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (bDel) {
|
|
|
|
+ datas.push(data);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (datas.length > 0) {
|
|
|
|
+ postData(window.location.pathname + '/update', {updateType: 'update', updateData: datas}, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadSheetData(otherSheet);
|
|
|
|
+ }, function () {
|
|
|
|
+ SpreadJsObj.reLoadSheetData(otherSheet);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ delete: function (sheet) {
|
|
|
|
+ if (!sheet.zh_setting || readOnly) return;
|
|
|
|
+
|
|
|
|
+ const sortData = sheet.zh_data;
|
|
|
|
+ const datas = [];
|
|
|
|
+ const sels = sheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0]) return;
|
|
|
|
+ const hint = {
|
|
|
|
+ isOld: {type: 'warning', msg: '该数据已计量,不可删除'},
|
|
|
|
+ invalidDel: {type: 'warning', msg: '该数据不是您新增的,只有原报和新增人可删除'},
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ for (let iRow = sels[0].row, iLen = sels[0].row + sels[0].rowCount; iRow < iLen; iRow++) {
|
|
|
|
+ const node = sortData[iRow];
|
|
|
|
+ if (node.pre_used) {
|
|
|
|
+ toastMessageUniq(hint.isOld);
|
|
|
|
+ continue;
|
|
|
|
+ } else {
|
|
|
|
+ if (node.add_uid !== userID || stageUserId !== userID) {
|
|
|
|
+ toastMessageUniq(hint.invalidDel);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ datas.push(node.id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (datas.length > 0) {
|
|
|
|
+ postData(window.location.pathname + '/update', {del: datas}, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadSheetData(otherSheet);
|
|
|
|
+ }, function () {
|
|
|
|
+ SpreadJsObj.reLoadSheetData(otherSheet);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ editEnded: function (e, info) {
|
|
|
|
+ if (!info.sheet.zh_setting || !info.sheet.zh_data) return;
|
|
|
|
+
|
|
|
|
+ const node = info.sheet.zh_data[info.row];
|
|
|
|
+ const col = info.sheet.zh_setting.cols[info.col];
|
|
|
|
+ const data = {};
|
|
|
|
+
|
|
|
|
+ if (node) {
|
|
|
|
+ data.update = {};
|
|
|
|
+ data.update.id = node.id;
|
|
|
|
+
|
|
|
|
+ const oldValue = node ? node[col.field] : null;
|
|
|
|
+ const newValue = trimInvalidChar(info.editingText);
|
|
|
|
+ if (oldValue == info.editingText || ((!oldValue || oldValue === '') && (newValue === ''))) {
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ data.update[col.field] = newValue;
|
|
|
|
+ } else {
|
|
|
|
+ if (col.field !== 'name') {
|
|
|
|
+ toastr.warning('请先输入名称');
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ data.add = {};
|
|
|
|
+ data.add.order = info.row + 1;
|
|
|
|
+ data.add.name = trimInvalidChar(info.editingText);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ postData(window.location.pathname + '/update', data, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
|
+ }, function () {
|
|
|
|
+ SpreadJsObj.reLoadRowData(info.sheet, info.row);
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ editStarting(e, info) {
|
|
|
|
+ if (!info.sheet.zh_setting || !info.sheet.zh_data) {
|
|
|
|
+ info.cancel = true;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const col = info.sheet.zh_setting.cols[info.col];
|
|
|
|
+ const node = info.sheet.zh_data[info.row];
|
|
|
|
+ if (!node) return;
|
|
|
|
+
|
|
|
|
+ switch (col.field) {
|
|
|
|
+ case 'name':
|
|
|
|
+ info.cancel = readOnly || node.pre_used;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ clipboardPasting(e, info) {
|
|
|
|
+ const setting = info.sheet.zh_setting, sortData = info.sheet.zh_data;
|
|
|
|
+ info.cancel = true;
|
|
|
|
+
|
|
|
|
+ if (!setting || !sortData) return;
|
|
|
|
+ const pasteData = info.pasteData.html
|
|
|
|
+ ? SpreadJsObj.analysisPasteHtml(info.pasteData.html)
|
|
|
|
+ : (info.pasteData.text === ''
|
|
|
|
+ ? SpreadJsObj.Clipboard.getAnalysisPasteText()
|
|
|
|
+ : SpreadJsObj.analysisPasteText(info.pasteData.text));
|
|
|
|
+ const hint = {
|
|
|
|
+ name: {type: 'warning', msg: '名称不可为空,已过滤'},
|
|
|
|
+ tp: {type: 'warning', msg: '输入的 金额 非法,已过滤'},
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const uDatas = [], iDatas = [];
|
|
|
|
+ for (let iRow = 0; iRow < info.cellRange.rowCount; iRow++) {
|
|
|
|
+ const curRow = info.cellRange.row + iRow;
|
|
|
|
+ const node = sortData[curRow];
|
|
|
|
+
|
|
|
|
+ let bPaste = false;
|
|
|
|
+ const data = {};
|
|
|
|
+ for (let iCol = 0; iCol < info.cellRange.colCount; iCol++) {
|
|
|
|
+ const curCol = info.cellRange.col + iCol;
|
|
|
|
+ const colSetting = setting.cols[curCol];
|
|
|
|
+ const value = trimInvalidChar(pasteData[iRow][iCol]);
|
|
|
|
+
|
|
|
|
+ if (colSetting.field === 'name' && (!value || value === '')) {
|
|
|
|
+ toastMessageUniq(hint.name);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (colSetting.type === 'Number') {
|
|
|
|
+ const num = _.toNumber(value);
|
|
|
|
+ if (num) {
|
|
|
|
+ data[colSetting.field] = num;
|
|
|
|
+ bPaste = true;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ data[colSetting.field] = value;
|
|
|
|
+ bPaste = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (bPaste) {
|
|
|
|
+ if (node) {
|
|
|
|
+ data.id = node.id;
|
|
|
|
+ uDatas.push(data);
|
|
|
|
+ } else {
|
|
|
|
+ data.order = curRow + 1;
|
|
|
|
+ iDatas.push(data);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ const updateData = {};
|
|
|
|
+ if (uDatas.length > 0) updateData.update = uDatas;
|
|
|
|
+ if (iDatas.length > 0) updateData.add = iDatas;
|
|
|
|
+ if (uDatas.length > 0 || iDatas.length > 0) {
|
|
|
|
+ postData(window.location.pathname + '/update', updateData, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ SpreadJsObj.reLoadSheetData(info.sheet);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ upMove: function () {
|
|
|
|
+ const sels = otherSheet.getSelections(), sortData = otherSheet.zh_data;
|
|
|
|
+ const node = sortData[sels[0].row];
|
|
|
|
+ const preNode = sortData[sels[0].row - 1];
|
|
|
|
+ const data = [
|
|
|
|
+ {id: node.id, order: preNode.order},
|
|
|
|
+ {id: preNode.id, order: node.order}
|
|
|
|
+ ];
|
|
|
|
+ postData(window.location.pathname + '/update', {update: data}, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadRowsData(otherSheet, [sels[0].row, sels[0].row - 1]);
|
|
|
|
+ otherSheet.setSelection(sels[0].row - 1, sels[0].col, sels[0].rowCount, sels[0].colCount);
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ downMove: function () {
|
|
|
|
+ const sels = otherSheet.getSelections(), sortData = otherSheet.zh_data;
|
|
|
|
+ const node = sortData[sels[0].row];
|
|
|
|
+ const nextNode = sortData[sels[0].row + 1];
|
|
|
|
+ const data = [
|
|
|
|
+ {id: node.id, order: nextNode.order},
|
|
|
|
+ {id: nextNode.id, order: node.order}
|
|
|
|
+ ];
|
|
|
|
+ postData(window.location.pathname + '/update', {update: data}, function (result) {
|
|
|
|
+ seOtherObj.loadUpdateData(result);
|
|
|
|
+ SpreadJsObj.reLoadRowsData(otherSheet, [sels[0].row, sels[0].row + 1]);
|
|
|
|
+ otherSheet.setSelection(sels[0].row + 1, sels[0].col, sels[0].rowCount, sels[0].colCount);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ otherSheet.bind(spreadNS.Events.EditEnded, seOtherOprObj.editEnded);
|
|
|
|
+ otherSheet.bind(spreadNS.Events.EditStarting, seOtherOprObj.editStarting);
|
|
|
|
+ otherSheet.bind(spreadNS.Events.ClipboardPasting, seOtherOprObj.clipboardPasting);
|
|
|
|
+ SpreadJsObj.addDeleteBind(otherSpread, seOtherOprObj.deletePress);
|
|
|
|
+ $.contextMenu({
|
|
|
|
+ selector: '#other-spread',
|
|
|
|
+ build: function ($trigger, e) {
|
|
|
|
+ const target = SpreadJsObj.safeRightClickSelection($trigger, e, otherSpread);
|
|
|
|
+ return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
|
|
|
|
+ },
|
|
|
|
+ items: {
|
|
|
|
+ del: {
|
|
|
|
+ name: '删除',
|
|
|
|
+ icon: 'fa-remove',
|
|
|
|
+ callback: function (key, opt) {
|
|
|
|
+ seOtherOprObj.delete(otherSheet);
|
|
|
|
+ },
|
|
|
|
+ disabled: function (key, opt) {
|
|
|
|
+ const sels = otherSheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0]) return true;
|
|
|
|
+
|
|
|
|
+ const row = sels[0].row;
|
|
|
|
+ const node = seOtherObj.data[row];
|
|
|
|
+ return node === undefined || node === null;
|
|
|
|
+ },
|
|
|
|
+ visible: function (key, opt) {
|
|
|
|
+ return !readOnly;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ sprDel: '------------',
|
|
|
|
+ upMove: {
|
|
|
|
+ name: '上移',
|
|
|
|
+ icon: 'fa-arrow-up',
|
|
|
|
+ callback: function (key, opt) {
|
|
|
|
+ seOtherOprObj.upMove();
|
|
|
|
+ },
|
|
|
|
+ disabled: function (key, opt) {
|
|
|
|
+ const sels = otherSheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0] || sels[0].row === 0) return true;
|
|
|
|
+
|
|
|
|
+ const row = sels[0].row;
|
|
|
|
+ const node = seOtherObj.data[row];
|
|
|
|
+ return node === undefined || node === null;
|
|
|
|
+ },
|
|
|
|
+ visible: function (key, opt) {
|
|
|
|
+ return !readOnly;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ downMove: {
|
|
|
|
+ name: '下移',
|
|
|
|
+ icon: 'fa-arrow-down',
|
|
|
|
+ callback: function (key, opt) {
|
|
|
|
+ seOtherOprObj.downMove();
|
|
|
|
+ },
|
|
|
|
+ disabled: function (key, opt) {
|
|
|
|
+ const sels = otherSheet.getSelections();
|
|
|
|
+ if (!sels || !sels[0] || sels[0].row >= seOtherObj.data.length - 1) return true;
|
|
|
|
+
|
|
|
|
+ const row = sels[0].row;
|
|
|
|
+ const node = seOtherObj.data[row];
|
|
|
|
+ return node === undefined || node === null;
|
|
|
|
+ },
|
|
|
|
+ visible: function (key, opt) {
|
|
|
|
+ return !readOnly;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ })
|
|
|
|
+ }
|
|
});
|
|
});
|