UNPKG

vxe-table-select-area

Version:

一个基于 vxe-table 的可区域选中复制、粘贴的组件

1,404 lines (1,402 loc) 214 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _xeUtils = _interopRequireDefault(require("xe-utils")); var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf")); var _cell = _interopRequireDefault(require("./cell")); var _vXETable = _interopRequireDefault(require("../../v-x-e-table")); var _util = require("./util"); var _utils = _interopRequireWildcard(require("../../tools/utils")); var _dom = _interopRequireWildcard(require("../../tools/dom")); var _formats = require("../../v-x-e-table/src/formats"); var _log = require("../../tools/log"); var _vn = require("../../tools/vn"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } var setCellValue = _utils["default"].setCellValue, hasChildrenList = _utils["default"].hasChildrenList, getColumnList = _utils["default"].getColumnList; var calcHeight = _dom["default"].calcHeight, hasClass = _dom["default"].hasClass, addClass = _dom["default"].addClass, removeClass = _dom["default"].removeClass, getEventTargetNode = _dom["default"].getEventTargetNode, isNodeElement = _dom["default"].isNodeElement; var isWebkit = _dom.browse['-webkit'] && !_dom.browse.edge; var debounceScrollYDuration = _dom.browse.msie ? 80 : 20; var resizableStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_WIDTH'; var visibleStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_VISIBLE'; var fixedStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_FIXED'; var orderStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_ORDER'; /** * 生成行的唯一主键 */ function getRowUniqueId() { return _xeUtils["default"].uniqueId('row_'); } function eqCellValue(row1, row2, field) { var val1 = _xeUtils["default"].get(row1, field); var val2 = _xeUtils["default"].get(row2, field); if ((0, _utils.eqEmptyValue)(val1) && (0, _utils.eqEmptyValue)(val2)) { return true; } if (_xeUtils["default"].isString(val1) || _xeUtils["default"].isNumber(val1)) { return '' + val1 === '' + val2; } return _xeUtils["default"].isEqual(val1, val2); } function getNextSortOrder(_vm, column) { var orders = _vm.sortOpts.orders; var currOrder = column.order || null; var oIndex = orders.indexOf(currOrder) + 1; return orders[oIndex < orders.length ? oIndex : 0]; } function getCustomStorageMap(key) { var version = _conf["default"].version; var rest = _xeUtils["default"].toStringJSON(localStorage.getItem(key)); return rest && rest._v === version ? rest : { _v: version }; } function getRecoverRow(_vm, list) { var fullAllDataRowMap = _vm.fullAllDataRowMap; return list.filter(function (row) { return fullAllDataRowMap.has(row); }); } function handleReserveRow(_vm, reserveRowMap) { var fullDataRowIdData = _vm.fullDataRowIdData; var reserveList = []; _xeUtils["default"].each(reserveRowMap, function (item, rowid) { if (fullDataRowIdData[rowid] && reserveList.indexOf(fullDataRowIdData[rowid].row) === -1) { reserveList.push(fullDataRowIdData[rowid].row); } }); return reserveList; } function computeVirtualX(_vm) { var $refs = _vm.$refs, visibleColumn = _vm.visibleColumn; var tableBody = $refs.tableBody; var tableBodyElem = tableBody ? tableBody.$el : null; if (tableBodyElem) { var scrollLeft = tableBodyElem.scrollLeft, clientWidth = tableBodyElem.clientWidth; var endWidth = scrollLeft + clientWidth; var toVisibleIndex = -1; var cWidth = 0; var visibleSize = 0; for (var colIndex = 0, colLen = visibleColumn.length; colIndex < colLen; colIndex++) { cWidth += visibleColumn[colIndex].renderWidth; if (toVisibleIndex === -1 && scrollLeft < cWidth) { toVisibleIndex = colIndex; } if (toVisibleIndex >= 0) { visibleSize++; if (cWidth > endWidth) { break; } } } return { toVisibleIndex: Math.max(0, toVisibleIndex), visibleSize: Math.max(8, visibleSize) }; } return { toVisibleIndex: 0, visibleSize: 8 }; } function computeVirtualY(_vm) { var $refs = _vm.$refs, vSize = _vm.vSize, rowHeightMaps = _vm.rowHeightMaps; var tableHeader = $refs.tableHeader, tableBody = $refs.tableBody; var tableBodyElem = tableBody ? tableBody.$el : null; if (tableBodyElem) { var tableHeaderElem = tableHeader ? tableHeader.$el : null; var rowHeight = 0; var firstTrElem; firstTrElem = tableBodyElem.querySelector('tr'); if (!firstTrElem && tableHeaderElem) { firstTrElem = tableHeaderElem.querySelector('tr'); } if (firstTrElem) { rowHeight = firstTrElem.clientHeight; } if (!rowHeight) { rowHeight = rowHeightMaps[vSize || 'default']; } var visibleSize = Math.max(8, Math.ceil(tableBodyElem.clientHeight / rowHeight) + 2); return { rowHeight: rowHeight, visibleSize: visibleSize }; } return { rowHeight: 0, visibleSize: 8 }; } function calculateMergerOffserIndex(list, offsetItem, type) { for (var mcIndex = 0, len = list.length; mcIndex < len; mcIndex++) { var mergeItem = list[mcIndex]; var startIndex = offsetItem.startIndex, endIndex = offsetItem.endIndex; var mergeStartIndex = mergeItem[type]; var mergeSpanNumber = mergeItem[type + 'span']; var mergeEndIndex = mergeStartIndex + mergeSpanNumber; if (mergeStartIndex < startIndex && startIndex < mergeEndIndex) { offsetItem.startIndex = mergeStartIndex; } if (mergeStartIndex < endIndex && endIndex < mergeEndIndex) { offsetItem.endIndex = mergeEndIndex; } if (offsetItem.startIndex !== startIndex || offsetItem.endIndex !== endIndex) { mcIndex = -1; } } } function setMerges(_vm, merges, mList, rowList) { if (merges) { var treeConfig = _vm.treeConfig, visibleColumn = _vm.visibleColumn; if (!_xeUtils["default"].isArray(merges)) { merges = [merges]; } if (treeConfig && merges.length) { (0, _log.errLog)('vxe.error.noTree', ['merge-cells | merge-footer-items']); } merges.forEach(function (item) { var row = item.row, col = item.col, rowspan = item.rowspan, colspan = item.colspan; if (rowList && _xeUtils["default"].isNumber(row)) { row = rowList[row]; } if (_xeUtils["default"].isNumber(col)) { col = visibleColumn[col]; } if ((rowList ? row : _xeUtils["default"].isNumber(row)) && col && (rowspan || colspan)) { rowspan = _xeUtils["default"].toNumber(rowspan) || 1; colspan = _xeUtils["default"].toNumber(colspan) || 1; if (rowspan > 1 || colspan > 1) { var mcIndex = _xeUtils["default"].findIndexOf(mList, function (item) { return item._row === row && item._col === col; }); var mergeItem = mList[mcIndex]; if (mergeItem) { mergeItem.rowspan = rowspan; mergeItem.colspan = colspan; mergeItem._rowspan = rowspan; mergeItem._colspan = colspan; } else { var mergeRowIndex = rowList ? rowList.indexOf(row) : row; var mergeColIndex = visibleColumn.indexOf(col); mList.push({ row: mergeRowIndex, col: mergeColIndex, rowspan: rowspan, colspan: colspan, _row: row, _col: col, _rowspan: rowspan, _colspan: colspan }); } } } }); } } function removeMerges(_vm, merges, mList, rowList) { var rest = []; if (merges) { var treeConfig = _vm.treeConfig, visibleColumn = _vm.visibleColumn; if (!_xeUtils["default"].isArray(merges)) { merges = [merges]; } if (treeConfig && merges.length) { (0, _log.errLog)('vxe.error.noTree', ['merge-cells | merge-footer-items']); } merges.forEach(function (item) { var row = item.row, col = item.col; if (rowList && _xeUtils["default"].isNumber(row)) { row = rowList[row]; } if (_xeUtils["default"].isNumber(col)) { col = visibleColumn[col]; } var mcIndex = _xeUtils["default"].findIndexOf(mList, function (item) { return item._row === row && item._col === col; }); if (mcIndex > -1) { var rItems = mList.splice(mcIndex, 1); rest.push(rItems[0]); } }); } return rest; } function clearAllSort(_vm) { _vm.tableFullColumn.forEach(function (column) { column.order = null; }); } function getOrderField(_vm, column) { var sortBy = column.sortBy, sortType = column.sortType; return function (row) { var cellValue; if (sortBy) { cellValue = _xeUtils["default"].isFunction(sortBy) ? sortBy({ row: row, column: column }) : _xeUtils["default"].get(row, sortBy); } else { cellValue = _vm.getCellLabel(row, column); } if (!sortType || sortType === 'auto') { return isNaN(cellValue) ? cellValue : _xeUtils["default"].toNumber(cellValue); } else if (sortType === 'number') { return _xeUtils["default"].toNumber(cellValue); } else if (sortType === 'string') { return _xeUtils["default"].toValueString(cellValue); } return cellValue; }; } var Methods = { callSlot: function callSlot(slotFunc, params, h, vNodes) { if (slotFunc) { var $xegrid = this.$xegrid; if ($xegrid) { return $xegrid.callSlot(slotFunc, params, h, vNodes); } if (_xeUtils["default"].isFunction(slotFunc)) { return (0, _vn.getSlotVNs)(slotFunc.call(this, params, h, vNodes)); } } return []; }, /** * 获取父容器元素 */ getParentElem: function getParentElem() { var $el = this.$el, $xegrid = this.$xegrid; return $xegrid ? $xegrid.$el.parentNode : $el.parentNode; }, /** * 获取父容器的高度 */ getParentHeight: function getParentHeight() { var $el = this.$el, $xegrid = this.$xegrid, height = this.height; var parentElem = $el.parentNode; var parentPaddingSize = height === 'auto' ? (0, _dom.getPaddingTopBottomSize)(parentElem) : 0; return Math.floor($xegrid ? $xegrid.getParentHeight() : _xeUtils["default"].toNumber(getComputedStyle(parentElem).height) - parentPaddingSize); }, /** * 获取需要排除的高度 * 但渲染表格高度时,需要排除工具栏或分页等相关组件的高度 * 如果存在表尾合计滚动条,则需要排除滚动条高度 */ getExcludeHeight: function getExcludeHeight() { var $xegrid = this.$xegrid; return $xegrid ? $xegrid.getExcludeHeight() : 0; }, /** * 重置表格的一切数据状态 */ clearAll: function clearAll() { return (0, _util.clearTableAllStatus)(this); }, /** * 同步 data 数据(即将废弃) * 如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑 * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到 */ syncData: function syncData() { var _this = this; return this.$nextTick().then(function () { _this.tableData = []; return _this.$nextTick().then(function () { return _this.loadTableData(_this.tableFullData); }); }); }, /** * 手动处理数据,用于手动排序与筛选 * 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到 */ updateData: function updateData() { var _this2 = this; var scrollXLoad = this.scrollXLoad, scrollYLoad = this.scrollYLoad; return this.handleTableData(true).then(function () { _this2.updateFooter(); _this2.checkSelectionStatus(); if (scrollXLoad || scrollYLoad) { if (scrollXLoad) { _this2.updateScrollXSpace(); } if (scrollYLoad) { _this2.updateScrollYSpace(); } return _this2.refreshScroll(); } }).then(function () { _this2.updateCellAreas(); return _this2.recalculate(true); }).then(function () { // 存在滚动行为未结束情况 setTimeout(function () { return _this2.recalculate(); }, 50); }); }, handleTableData: function handleTableData(force) { var _this3 = this; var scrollYLoad = this.scrollYLoad, scrollYStore = this.scrollYStore, fullDataRowIdData = this.fullDataRowIdData, afterFullData = this.afterFullData; var fullList = afterFullData; // 是否进行数据处理 if (force) { // 更新数据,处理筛选和排序 this.updateAfterFullData(); // 如果为虚拟树,将树结构拍平 fullList = this.handleVirtualTreeToList(); } var tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0); tableData.forEach(function (row, $index) { var rowid = (0, _util.getRowid)(_this3, row); var rest = fullDataRowIdData[rowid]; if (rest) { rest.$index = $index; } }); this.tableData = tableData; return this.$nextTick(); }, updateScrollYStatus: function updateScrollYStatus(fullData) { var treeConfig = this.treeConfig, treeOpts = this.treeOpts, sYOpts = this.sYOpts; var transform = treeOpts.transform; var allList = fullData || this.tableFullData; // 如果gt为0,则总是启用 var scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= allList.length); this.scrollYLoad = scrollYLoad; return scrollYLoad; }, /** * 加载表格数据 * @param {Array} datas 数据 */ loadTableData: function loadTableData(datas) { var _this4 = this; var keepSource = this.keepSource, treeConfig = this.treeConfig, treeOpts = this.treeOpts, editStore = this.editStore, scrollYStore = this.scrollYStore, scrollXStore = this.scrollXStore, lastScrollLeft = this.lastScrollLeft, lastScrollTop = this.lastScrollTop, oldScrollYLoad = this.scrollYLoad, sXOpts = this.sXOpts, sYOpts = this.sYOpts; var treeData = []; var fullData = datas ? datas.slice(0) : []; if (treeConfig) { // 树结构自动转换 if (treeOpts.transform) { if (process.env.NODE_ENV === 'development') { if (!treeOpts.rowField) { (0, _log.errLog)('vxe.error.reqProp', ['table.tree-config.rowField']); } if (!treeOpts.parentField) { (0, _log.errLog)('vxe.error.reqProp', ['table.tree-config.parentField']); } if (!treeOpts.children) { (0, _log.errLog)('vxe.error.reqProp', ['tree-config.children']); } if (!treeOpts.mapChildren) { (0, _log.errLog)('vxe.error.reqProp', ['tree-config.mapChildren']); } if (treeOpts.children === treeOpts.mapChildren) { (0, _log.errLog)('vxe.error.errConflicts', ['tree-config.children', 'tree-config.mapChildren']); } fullData.forEach(function (row) { if (row[treeOpts.children] && row[treeOpts.children].length) { (0, _log.warnLog)('vxe.error.errConflicts', ['tree-config.transform', "row.".concat(treeOpts.children)]); } }); } treeData = _xeUtils["default"].toArrayTree(fullData, { key: treeOpts.rowField, parentKey: treeOpts.parentField, children: treeOpts.children, mapChildren: treeOpts.mapChildren }); fullData = treeData.slice(0); } else { treeData = fullData.slice(0); } } scrollYStore.startIndex = 0; scrollYStore.endIndex = 1; scrollXStore.startIndex = 0; scrollXStore.endIndex = 1; editStore.insertList = []; editStore.insertMaps = {}; editStore.removeList = []; editStore.removeMaps = {}; var sYLoad = this.updateScrollYStatus(fullData); this.scrollYLoad = sYLoad; // 全量数据 this.tableFullData = fullData; this.tableFullTreeData = treeData; // 缓存数据 this.cacheRowMap(true); // 原始数据 this.tableSynchData = datas; // 克隆原数据,用于显示编辑状态,与编辑值做对比 if (keepSource) { this.tableSourceData = _xeUtils["default"].clone(fullData, true); } if (process.env.NODE_ENV === 'development') { if (sYLoad) { if (!(this.height || this.maxHeight)) { (0, _log.errLog)('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']); } if (!this.showOverflow) { (0, _log.warnLog)('vxe.error.reqProp', ['table.show-overflow']); } if (this.spanMethod) { (0, _log.warnLog)('vxe.error.scrollErrProp', ['table.span-method']); } } } if (this.clearCellAreas && this.mouseConfig) { this.clearCellAreas(); this.clearCopyCellArea(); } this.clearMergeCells(); this.clearMergeFooterItems(); this.handleTableData(true); this.updateFooter(); return this.$nextTick().then(function () { _this4.updateHeight(); _this4.updateStyle(); }).then(function () { _this4.computeScrollLoad(); }).then(function () { // 是否启用了虚拟滚动 if (sYLoad) { scrollYStore.endIndex = scrollYStore.visibleSize; } _this4.handleReserveStatus(); _this4.checkSelectionStatus(); return new Promise(function (resolve) { _this4.$nextTick().then(function () { return _this4.recalculate(); }).then(function () { var targetScrollLeft = lastScrollLeft; var targetScrollTop = lastScrollTop; // 是否在更新数据之后自动滚动重置滚动条 if (sXOpts.scrollToLeftOnChange) { targetScrollLeft = 0; } if (sYOpts.scrollToTopOnChange) { targetScrollTop = 0; } // 是否变更虚拟滚动 if (oldScrollYLoad === sYLoad) { (0, _util.restoreScrollLocation)(_this4, targetScrollLeft, targetScrollTop).then(resolve); } else { setTimeout(function () { return (0, _util.restoreScrollLocation)(_this4, targetScrollLeft, targetScrollTop).then(resolve); }); } }); }); }); }, /** * 重新加载数据,不会清空表格状态 * @param {Array} datas 数据 */ loadData: function loadData(datas) { var _this5 = this; var inited = this.inited, initStatus = this.initStatus; return this.loadTableData(datas).then(function () { _this5.inited = true; _this5.initStatus = true; if (!initStatus) { _this5.handleLoadDefaults(); } if (!inited) { _this5.handleInitDefaults(); } return _this5.recalculate(); }); }, /** * 重新加载数据,会清空表格状态 * @param {Array} datas 数据 */ reloadData: function reloadData(datas) { var _this6 = this; var inited = this.inited; return this.clearAll().then(function () { _this6.inited = true; _this6.initStatus = true; return _this6.loadTableData(datas); }).then(function () { _this6.handleLoadDefaults(); if (!inited) { _this6.handleInitDefaults(); } return _this6.recalculate(); }); }, /** * 局部加载行数据并恢复到初始状态 * 对于行数据需要局部更改的场景中可能会用到 * @param {Row} row 行对象 * @param {Object} record 新数据 * @param {String} field 字段名 */ reloadRow: function reloadRow(row, record, field) { var keepSource = this.keepSource, tableSourceData = this.tableSourceData, tableData = this.tableData; if (keepSource) { var rowIndex = this.getRowIndex(row); var oRow = tableSourceData[rowIndex]; if (oRow && row) { if (field) { var newValue = _xeUtils["default"].get(record || row, field); _xeUtils["default"].set(row, field, newValue); _xeUtils["default"].set(oRow, field, newValue); } else { var newRecord = _xeUtils["default"].clone(_objectSpread({}, record), true); _xeUtils["default"].destructuring(oRow, Object.assign(row, newRecord)); } } this.tableData = tableData.slice(0); } else { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.reqProp', ['keep-source']); } } return this.$nextTick(); }, /** * 加载列配置 * 对于表格列需要重载、局部递增场景下可能会用到 * @param {ColumnInfo} columns 列配置 */ loadColumn: function loadColumn(columns) { var _this7 = this; var collectColumn = _xeUtils["default"].mapTree(columns, function (column) { return _cell["default"].createColumn(_this7, column); }, { children: 'children' }); return this.handleColumn(collectColumn); }, /** * 加载列配置并恢复到初始状态 * 对于表格列需要重载、局部递增场景下可能会用到 * @param {ColumnInfo} columns 列配置 */ reloadColumn: function reloadColumn(columns) { var _this8 = this; return this.clearAll().then(function () { return _this8.loadColumn(columns); }); }, handleColumn: function handleColumn(collectColumn) { var _this9 = this; this.collectColumn = collectColumn; var tableFullColumn = getColumnList(collectColumn); this.tableFullColumn = tableFullColumn; this.cacheColumnMap(); this.restoreCustomStorage(); this.parseColumns().then(function () { if (_this9.scrollXLoad) { _this9.loadScrollXData(true); } }); this.clearMergeCells(); this.clearMergeFooterItems(); this.handleTableData(true); if (process.env.NODE_ENV === 'development') { if ((this.scrollXLoad || this.scrollYLoad) && this.expandColumn) { (0, _log.warnLog)('vxe.error.scrollErrProp', ['column.type=expand']); } } return this.$nextTick().then(function () { if (_this9.$toolbar) { _this9.$toolbar.syncUpdate({ collectColumn: collectColumn, $table: _this9 }); } return _this9.recalculate(); }); }, /** * 更新数据行的 Map * 牺牲数据组装的耗时,用来换取使用过程中的流畅 */ cacheRowMap: function cacheRowMap(source) { var _this10 = this; var treeConfig = this.treeConfig, treeOpts = this.treeOpts, tableFullData = this.tableFullData, fullDataRowMap = this.fullDataRowMap, fullAllDataRowMap = this.fullAllDataRowMap, tableFullTreeData = this.tableFullTreeData; var fullDataRowIdData = this.fullDataRowIdData, fullAllDataRowIdData = this.fullAllDataRowIdData; var rowkey = (0, _util.getRowkey)(this); var isLazy = treeConfig && treeOpts.lazy; var handleCache = function handleCache(row, index, items, path, parent, nodes) { var rowid = (0, _util.getRowid)(_this10, row); var seq = treeConfig && path ? (0, _util.toTreePathSeq)(path) : index + 1; var level = nodes ? nodes.length - 1 : 0; if ((0, _utils.eqEmptyValue)(rowid)) { rowid = getRowUniqueId(); _xeUtils["default"].set(row, rowkey, rowid); } if (isLazy && row[treeOpts.hasChild] && _xeUtils["default"].isUndefined(row[treeOpts.children])) { row[treeOpts.children] = null; } var rest = { row: row, rowid: rowid, seq: seq, index: treeConfig && parent ? -1 : index, _index: -1, $index: -1, items: items, parent: parent, level: level }; if (source) { fullDataRowIdData[rowid] = rest; fullDataRowMap.set(row, rest); } fullAllDataRowIdData[rowid] = rest; fullAllDataRowMap.set(row, rest); }; if (source) { fullDataRowIdData = this.fullDataRowIdData = {}; fullDataRowMap.clear(); } fullAllDataRowIdData = this.fullAllDataRowIdData = {}; fullAllDataRowMap.clear(); if (treeConfig) { _xeUtils["default"].eachTree(tableFullTreeData, handleCache, treeOpts); } else { tableFullData.forEach(handleCache); } }, loadTreeChildren: function loadTreeChildren(row, childRecords) { var _this11 = this; var keepSource = this.keepSource, tableSourceData = this.tableSourceData, treeOpts = this.treeOpts, fullDataRowIdData = this.fullDataRowIdData, fullDataRowMap = this.fullDataRowMap, fullAllDataRowMap = this.fullAllDataRowMap, fullAllDataRowIdData = this.fullAllDataRowIdData; var transform = treeOpts.transform, children = treeOpts.children, mapChildren = treeOpts.mapChildren; var rest = fullAllDataRowIdData[(0, _util.getRowid)(this, row)]; var parentLevel = rest ? rest.level : 0; return this.createData(childRecords).then(function (rows) { if (keepSource) { var rowid = (0, _util.getRowid)(_this11, row); var matchObj = _xeUtils["default"].findTree(tableSourceData, function (item) { return rowid === (0, _util.getRowid)(_this11, item); }, treeOpts); if (matchObj) { matchObj.item[children] = _xeUtils["default"].clone(rows, true); } } _xeUtils["default"].eachTree(rows, function (childRow, index, items, path, parent, nodes) { var rowid = (0, _util.getRowid)(_this11, childRow); var rest = { row: childRow, rowid: rowid, seq: -1, index: index, _index: -1, $index: -1, items: items, parent: parent, level: parentLevel + nodes.length }; fullDataRowIdData[rowid] = rest; fullDataRowMap.set(childRow, rest); fullAllDataRowIdData[rowid] = rest; fullAllDataRowMap.set(childRow, rest); }, treeOpts); row[children] = rows; if (transform) { row[mapChildren] = rows; } _this11.updateAfterDataIndex(); return rows; }); }, /** * 更新数据列的 Map * 牺牲数据组装的耗时,用来换取使用过程中的流畅 */ cacheColumnMap: function cacheColumnMap() { var _this12 = this; var tableFullColumn = this.tableFullColumn, collectColumn = this.collectColumn, fullColumnMap = this.fullColumnMap, showOverflow = this.showOverflow, columnOpts = this.columnOpts, rowOpts = this.rowOpts; var fullColumnIdData = this.fullColumnIdData = {}; var fullColumnFieldData = this.fullColumnFieldData = {}; var isGroup = collectColumn.some(hasChildrenList); var isAllOverflow = !!showOverflow; var expandColumn; var treeNodeColumn; var checkboxColumn; var radioColumn; var htmlColumn; var hasFixed; var handleFunc = function handleFunc(column, index, items, path, parent) { var colid = column.id, field = column.field, fixed = column.fixed, type = column.type, treeNode = column.treeNode; var rest = { column: column, colid: colid, index: index, items: items, parent: parent }; if (field) { if (process.env.NODE_ENV === 'development') { if (fullColumnFieldData[field]) { (0, _log.warnLog)('vxe.error.colRepet', ['field', field]); } } fullColumnFieldData[field] = rest; } if (!hasFixed && fixed) { hasFixed = fixed; } if (!htmlColumn && type === 'html') { htmlColumn = column; } if (treeNode) { if (process.env.NODE_ENV === 'development') { if (treeNodeColumn) { (0, _log.warnLog)('vxe.error.colRepet', ['tree-node', treeNode]); } } if (!treeNodeColumn) { treeNodeColumn = column; } } else if (type === 'expand') { if (process.env.NODE_ENV === 'development') { if (expandColumn) { (0, _log.warnLog)('vxe.error.colRepet', ['type', type]); } } if (!expandColumn) { expandColumn = column; } } if (process.env.NODE_ENV === 'development') { if (type === 'checkbox') { if (checkboxColumn) { (0, _log.warnLog)('vxe.error.colRepet', ['type', type]); } if (!checkboxColumn) { checkboxColumn = column; } } else if (type === 'radio') { if (radioColumn) { (0, _log.warnLog)('vxe.error.colRepet', ['type', type]); } if (!radioColumn) { radioColumn = column; } } } if (process.env.NODE_ENV === 'development') { if (_this12.showOverflow && column.showOverflow === false) { (0, _log.warnLog)('vxe.error.errConflicts', ["table.show-overflow=".concat(_this12.showOverflow), "column.show-overflow=".concat(column.showOverflow)]); } if (_this12.showHeaderOverflow && column.showHeaderOverflow === false) { (0, _log.warnLog)('vxe.error.errConflicts', ["table.show-header-overflow=".concat(_this12.showHeaderOverflow), "column.show-header-overflow=".concat(column.showHeaderOverflow)]); } if (_this12.showFooterOverflow && column.showFooterOverflow === false) { (0, _log.warnLog)('vxe.error.errConflicts', ["table.show-footer-overflow=".concat(_this12.showFooterOverflow), "column.show-footer-overflow=".concat(column.showFooterOverflow)]); } } if (process.env.NODE_ENV === 'development') { if (htmlColumn) { if (!columnOpts.useKey) { (0, _log.errLog)('vxe.error.reqProp', ['column-config.useKey', 'column.type=html']); } if (!rowOpts.useKey) { (0, _log.errLog)('vxe.error.reqProp', ['row-config.useKey', 'column.type=html']); } } } if (isAllOverflow && column.showOverflow === false) { isAllOverflow = false; } if (fullColumnIdData[colid]) { (0, _log.errLog)('vxe.error.colRepet', ['colId', colid]); } fullColumnIdData[colid] = rest; fullColumnMap.set(column, rest); }; fullColumnMap.clear(); if (isGroup) { _xeUtils["default"].eachTree(collectColumn, function (column, index, items, path, parent, nodes) { column.level = nodes.length; handleFunc(column, index, items, path, parent); }); } else { tableFullColumn.forEach(handleFunc); } if (process.env.NODE_ENV === 'development') { if (expandColumn && this.mouseOpts.area) { (0, _log.errLog)('vxe.error.errConflicts', ['mouse-config.area', 'column.type=expand']); } } this.isGroup = isGroup; this.treeNodeColumn = treeNodeColumn; this.expandColumn = expandColumn; this.isAllOverflow = isAllOverflow; }, /** * 根据 tr 元素获取对应的 row 信息 * @param {Element} tr 元素 */ getRowNode: function getRowNode(tr) { if (tr) { var fullAllDataRowIdData = this.fullAllDataRowIdData; var rowid = tr.getAttribute('rowid'); var rest = fullAllDataRowIdData[rowid]; if (rest) { return { rowid: rest.rowid, item: rest.row, index: rest.index, items: rest.items, parent: rest.parent }; } } return null; }, /** * 根据 th/td 元素获取对应的 column 信息 * @param {Element} cell 元素 */ getColumnNode: function getColumnNode(cell) { if (cell) { var fullColumnIdData = this.fullColumnIdData; var colid = cell.getAttribute('colid'); var rest = fullColumnIdData[colid]; if (rest) { return { colid: rest.colid, item: rest.column, index: rest.index, items: rest.items, parent: rest.parent }; } } return null; }, /** * 根据 row 获取序号 * @param {Row} row 行对象 */ getRowSeq: function getRowSeq(row) { var fullDataRowIdData = this.fullDataRowIdData; if (row) { var rowid = (0, _util.getRowid)(this, row); var rest = fullDataRowIdData[rowid]; if (rest) { return rest.seq; } } return -1; }, /** * 根据 row 获取相对于 data 中的索引 * @param {Row} row 行对象 */ getRowIndex: function getRowIndex(row) { return this.fullDataRowMap.has(row) ? this.fullDataRowMap.get(row).index : -1; }, /** * 根据 row 获取相对于当前数据中的索引 * @param {Row} row 行对象 */ getVTRowIndex: function getVTRowIndex(row) { return this.afterFullData.indexOf(row); }, // 在 v3 中废弃 _getRowIndex: function _getRowIndex(row) { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.delFunc', ['_getRowIndex', 'getVTRowIndex']); } return this.getVTRowIndex(row); }, /** * 根据 row 获取渲染中的虚拟索引 * @param {Row} row 行对象 */ getVMRowIndex: function getVMRowIndex(row) { return this.tableData.indexOf(row); }, // 在 v3 中废弃 $getRowIndex: function $getRowIndex(row) { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.delFunc', ['$getRowIndex', 'getVMRowIndex']); } return this.getVMRowIndex(row); }, /** * 根据 column 获取相对于 columns 中的索引 * @param {ColumnInfo} column 列配置 */ getColumnIndex: function getColumnIndex(column) { return this.fullColumnMap.has(column) ? this.fullColumnMap.get(column).index : -1; }, /** * 根据 column 获取相对于当前表格列中的索引 * @param {ColumnInfo} column 列配置 */ getVTColumnIndex: function getVTColumnIndex(column) { return this.visibleColumn.indexOf(column); }, // 在 v3 中废弃 _getColumnIndex: function _getColumnIndex(column) { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.delFunc', ['_getColumnIndex', 'getVTColumnIndex']); } return this.getVTColumnIndex(column); }, /** * 根据 column 获取渲染中的虚拟索引 * @param {ColumnInfo} column 列配置 */ getVMColumnIndex: function getVMColumnIndex(column) { return this.tableColumn.indexOf(column); }, // 在 v3 中废弃 $getColumnIndex: function $getColumnIndex(column) { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.delFunc', ['$getColumnIndex', 'getVMColumnIndex']); } return this.getVMColumnIndex(column); }, /** * 判断是否为索引列 * @param {ColumnInfo} column 列配置 */ isSeqColumn: function isSeqColumn(column) { return column && column.type === 'seq'; }, /** * 定义行数据中的列属性,如果不存在则定义 * @param {Row} records 行数据 */ defineField: function defineField(records) { var _this13 = this; var radioOpts = this.radioOpts, checkboxOpts = this.checkboxOpts, treeConfig = this.treeConfig, treeOpts = this.treeOpts, expandOpts = this.expandOpts; var rowkey = (0, _util.getRowkey)(this); if (!_xeUtils["default"].isArray(records)) { records = [records || {}]; } return records.map(function (record) { _this13.tableFullColumn.forEach(function (column) { var field = column.field, editRender = column.editRender; if (field && !_xeUtils["default"].has(record, field)) { var cellValue = null; if (editRender) { var defaultValue = editRender.defaultValue; if (_xeUtils["default"].isFunction(defaultValue)) { cellValue = defaultValue({ column: column }); } else if (!_xeUtils["default"].isUndefined(defaultValue)) { cellValue = defaultValue; } } _xeUtils["default"].set(record, field, cellValue); } }); var otherFields = [radioOpts.labelField, checkboxOpts.checkField, checkboxOpts.labelField, expandOpts.labelField]; otherFields.forEach(function (key) { if (key && (0, _utils.eqEmptyValue)(_xeUtils["default"].get(record, key))) { _xeUtils["default"].set(record, key, null); } }); if (treeConfig && treeOpts.lazy && _xeUtils["default"].isUndefined(record[treeOpts.children])) { record[treeOpts.children] = null; } // 必须有行数据的唯一主键,可以自行设置;也可以默认生成一个随机数 if ((0, _utils.eqEmptyValue)(_xeUtils["default"].get(record, rowkey))) { _xeUtils["default"].set(record, rowkey, getRowUniqueId()); } return record; }); }, /** * 创建 data 对象 * 对于某些特殊场景可能会用到,会自动对数据的字段名进行检测,如果不存在就自动定义 * @param {Array} records 新数据 */ createData: function createData(records) { var _this14 = this; return this.$nextTick().then(function () { return _this14.defineField(records); }); }, /** * 创建 Row|Rows 对象 * 对于某些特殊场景需要对数据进行手动插入时可能会用到 * @param {Array/Object} records 新数据 */ createRow: function createRow(records) { var isArr = _xeUtils["default"].isArray(records); if (!isArr) { records = [records]; } return this.createData(records).then(function (rows) { return isArr ? rows : rows[0]; }); }, /** * 还原数据 * 如果不传任何参数,则还原整个表格 * 如果传 row 则还原一行 * 如果传 rows 则还原多行 * 如果还额外传了 field 则还原指定的单元格数据 */ revertData: function revertData(rows, field) { var _this15 = this; var keepSource = this.keepSource, tableSourceData = this.tableSourceData, treeConfig = this.treeConfig; if (!keepSource) { if (process.env.NODE_ENV === 'development') { (0, _log.warnLog)('vxe.error.reqProp', ['keep-source']); } return this.$nextTick(); } var targetRows = rows; if (rows) { if (!_xeUtils["default"].isArray(rows)) { targetRows = [rows]; } } else { targetRows = _xeUtils["default"].toArray(this.getUpdateRecords()); } if (targetRows.length) { targetRows.forEach(function (row) { if (!_this15.isInsertByRow(row)) { var rowIndex = _this15.getRowIndex(row); if (treeConfig && rowIndex === -1) { (0, _log.errLog)('vxe.error.noTree', ['revertData']); } var oRow = tableSourceData[rowIndex]; if (oRow && row) { if (field) { _xeUtils["default"].set(row, field, _xeUtils["default"].clone(_xeUtils["default"].get(oRow, field), true)); } else { _xeUtils["default"].destructuring(row, _xeUtils["default"].clone(oRow, true)); } } } }); } if (rows) { return this.$nextTick(); } return this.reloadData(tableSourceData); }, /** * 清空单元格内容 * 如果不创参数,则清空整个表格内容 * 如果传 row 则清空一行内容 * 如果传 rows 则清空多行内容 * 如果还额外传了 field 则清空指定单元格内容 * @param {Array/Row} rows 行数据 * @param {String} field 字段名 */ clearData: function clearData(rows, field) { var tableFullData = this.tableFullData, visibleColumn = this.visibleColumn; if (!arguments.length) { rows = tableFullData; } else if (rows && !_xeUtils["default"].isArray(rows)) { rows = [rows]; } if (field) { rows.forEach(function (row) { return _xeUtils["default"].set(row, field, null); }); } else { rows.forEach(function (row) { visibleColumn.forEach(function (column) { if (column.field) { setCellValue(row, column, null); } }); }); } return this.$nextTick(); }, /** * 检查是否为临时行数据 * @param {Row} row 行对象 */ isInsertByRow: function isInsertByRow(row) { var editStore = this.editStore; var rowid = (0, _util.getRowid)(this, row); return editStore.insertList.length && editStore.insertMaps[rowid]; }, /** * 删除所有新增的临时数据 * @returns */ removeInsertRow: function removeInsertRow() { return this.remove(this.editStore.insertList); }, /** * 检查行或列数据是否发生改变 * @param {Row} row 行对象 * @param {String} field 字段名 */ isUpdateByRow: function isUpdateByRow(row, field) { var _this16 = this; var visibleColumn = this.visibleColumn, keepSource = this.keepSource, treeConfig = this.treeConfig, treeOpts = this.treeOpts, tableSourceData = this.tableSourceData, fullDataRowIdData = this.fullDataRowIdData; if (keepSource) { var oRow, property; var rowid = (0, _util.getRowid)(this, row); // 新增的数据不需要检测 if (!fullDataRowIdData[rowid]) { return false; } if (treeConfig) { var children = treeOpts.children; var matchObj = _xeUtils["default"].findTree(tableSourceData, function (item) { return rowid === (0, _util.getRowid)(_this16, item); }, treeOpts); row = Object.assign({}, row, _defineProperty({}, children, null)); if (matchObj) { oRow = Object.assign({}, matchObj.item, _defineProperty({}, children, null)); } } else { var oRowIndex = fullDataRowIdData[rowid].index; oRow = tableSourceData[oRowIndex]; } if (oRow) { if (arguments.length > 1) { return !eqCellValue(oRow, row, field); } for (var index = 0, len = visibleColumn.length; index < len; index++) { property = visibleColumn[index].field; if (property && !eqCellValue(oRow, row, property)) { return true; } } } } return false; }, /** * 获取表格的可视列,也可以指定索引获取列 * @param {Number} columnIndex 索引 */ getColumns: function getColumns(columnIndex) { var columns = this.visibleColumn; return _xeUtils["default"].isUndefined(columnIndex) ? columns.slice(0) : columns[columnIndex]; }, /** * 根据列的唯一主键获取列 * @param {String} colid 列主键 */ getColumnById: function getColumnById(colid) { var fullColumnIdData = this.fullColumnIdData; return fullColumnIdData[colid] ? fullColumnIdData[colid].column : null; }, /** * 根据列的字段名获取列 * @param {String} field 字段名 */ getColumnByField: function getColumnByField(field) { var fullColumnFieldData = this.fullColumnFieldData; return fullColumnFieldData[field] ? fullColumnFieldData[field].column : null; }, /** * 获取当前表格的列 * 收集到的全量列、全量表头列、处理条件之后的全量表头列、当前渲染中的表头列 */ getTableColumn: function getTableColumn() { return { collectColumn: this.collectColumn.slice(0), fullColumn: this.tableFullColumn.slice(0), visibleColumn: this.visibleColumn.slice(0), tableColumn: this.tableColumn.slice(0) }; }, /** * 获取数据,和 data 的行为一致,也可以指定索引获取数据 */ getData: function getData(rowIndex) { var tableSynchData = this.data || this.tableSynchData; return _xeUtils["default"].isUndefined(rowIndex) ? tableSynchData.slice(0) : tableSynchData[rowIndex]; }, /** * 用于多选行,获取已选中的数据 */ getCheckboxRecords: function getCheckboxRecords(isFull) { var _this17 = this; var tableFullData = this.tableFullData, afterFullData = this.afterFullData, treeConfig = this.treeConfig, treeOpts = this.treeOpts, checkboxOpts = this.checkboxOpts, tableFullTreeData = this.tableFullTreeData, afterTreeFullData = this.afterTreeFullData; var transform = treeOpts.transform, children = treeOpts.children, mapChildren = treeOpts.mapChildren; var checkField = checkboxOpts.checkField; var currTableData = isFull ? transform ? tableFullTreeData : tableFullData : transform ? afterTreeFullData : afterFullData; var rowList = []; if (checkField) { if (treeConfig) { rowList = _xeUtils["default"].filterTree(currTableData, function (row) { return _xeUtils["default"].get(row, checkField); }, { children: transform ? mapChildren : children }); } else { rowList = currTableData.filter(function (row) { return _xeUtils["default"].get(row, checkField); }); } } else { var selection = this.selection; if (treeConfig) { rowList = _xeUtils["default"].filterTree(currTableData, function (row) { return _this17.findRowIndexOf(selection, row) > -1; }, { children: transform ? mapChildren : children }); } else { rowList = currTableData.filter(function (row) { return _this17.findRowIndexOf(selection, row) > -1; }); } } return rowList; }, /** * 如果为虚拟树,将树结构拍平 * @returns */ handleVirtualTreeToList: function handleVirtualTreeToList() { var treeOpts = this.treeOpts, treeConfig = this.treeConfig, treeExpandeds = this.treeExpandeds, afterTreeFullData = this.afterTreeFullData, afterFullData = this.afterFullData; if (treeConfig && treeOpts.transform) { var fullData = []; var expandMaps = new Map(); _xeUtils["default"].eachTree(afterTreeFullData, function (row, index, items, path, parent) { if (!parent || expandMaps.has(parent) && treeExpandeds.indexOf(parent) > -1) { expandMaps.set(row, 1); fullData.push(row); } }, { children: treeOpts.mapChildren }); this.afterFullData = fullData; this.updateScrollYStatus(fullData); return fullData; } return afterFullData; }, /** * 获取处理后全量的表格数据 * 如果存在筛选条件,继续处理 */ updateAfterFullData: function updateAfterFullData() { var _this18 = this; var tableFullColumn = this.tableFullColumn, tableFullData = this.tableFullData, filterOpts = this.filterOpts, sortOpts = this.sortOpts, treeConfig = this.treeConfig, treeOpts = this.treeOpts, tableFullTreeData = this.tableFull