UNPKG

vxe-table-select-area

Version:

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

313 lines (310 loc) 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calcTreeLine = calcTreeLine; exports.clearTableAllStatus = clearTableAllStatus; exports.clearTableDefaultStatus = clearTableDefaultStatus; exports.colToVisible = colToVisible; exports.getColReMinWidth = getColReMinWidth; exports.getColumnConfig = getColumnConfig; exports.getOffsetSize = getOffsetSize; exports.getRowid = getRowid; exports.getRowkey = getRowkey; exports.handleFieldOrColumn = handleFieldOrColumn; exports.isColumnInfo = isColumnInfo; exports.mergeBodyMethod = mergeBodyMethod; exports.removeScrollListener = removeScrollListener; exports.restoreScrollListener = restoreScrollListener; exports.restoreScrollLocation = restoreScrollLocation; exports.rowToVisible = rowToVisible; exports.toFilters = toFilters; exports.toTreePathSeq = toTreePathSeq; var _vXETable = _interopRequireDefault(require("../../v-x-e-table")); var _xeUtils = _interopRequireDefault(require("xe-utils")); var _columnInfo = require("./columnInfo"); var _dom = _interopRequireDefault(require("../../tools/dom")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var lineOffsetSizes = { mini: 3, small: 2, medium: 1 }; function restoreScrollLocation(_vm, scrollLeft, scrollTop) { return _vm.clearScroll().then(function () { if (scrollLeft || scrollTop) { // 重置最后滚动状态 _vm.lastScrollLeft = 0; _vm.lastScrollTop = 0; // 还原滚动状态 return _vm.scrollTo(scrollLeft, scrollTop); } }); } function toTreePathSeq(path) { return path.map(function (num, i) { return i % 2 === 0 ? Number(num) + 1 : '.'; }).join(''); } function removeScrollListener(scrollElem) { if (scrollElem && scrollElem._onscroll) { scrollElem.onscroll = null; } } function restoreScrollListener(scrollElem) { if (scrollElem && scrollElem._onscroll) { scrollElem.onscroll = scrollElem._onscroll; } } // 行主键 key function getRowkey($xetable) { return $xetable.rowOpts.keyField || $xetable.rowId || '_X_ROW_KEY'; } // 行主键 value function getRowid($xetable, row) { var rowid = _xeUtils["default"].get(row, getRowkey($xetable)); return _xeUtils["default"].eqNull(rowid) ? '' : encodeURIComponent(rowid); } function getPaddingLeftRightSize(elem) { if (elem) { var computedStyle = getComputedStyle(elem); var paddingLeft = _xeUtils["default"].toNumber(computedStyle.paddingLeft); var paddingRight = _xeUtils["default"].toNumber(computedStyle.paddingRight); return paddingLeft + paddingRight; } return 0; } function getElemenMarginWidth(elem) { if (elem) { var computedStyle = getComputedStyle(elem); var marginLeft = _xeUtils["default"].toNumber(computedStyle.marginLeft); var marginRight = _xeUtils["default"].toNumber(computedStyle.marginRight); return elem.offsetWidth + marginLeft + marginRight; } return 0; } function handleFieldOrColumn(_vm, fieldOrColumn) { if (fieldOrColumn) { return _xeUtils["default"].isString(fieldOrColumn) ? _vm.getColumnByField(fieldOrColumn) : fieldOrColumn; } return null; } function queryCellElement(cell, selector) { return cell.querySelector('.vxe-cell' + selector); } function toFilters(filters) { if (filters && _xeUtils["default"].isArray(filters)) { return filters.map(function (_ref) { var label = _ref.label, value = _ref.value, data = _ref.data, resetValue = _ref.resetValue, checked = _ref.checked; return { label: label, value: value, data: data, resetValue: resetValue, checked: !!checked, _checked: !!checked }; }); } return filters; } function getColReMinWidth(params) { var $table = params.$table, column = params.column, cell = params.cell; var allColumnHeaderOverflow = $table.showHeaderOverflow, resizableOpts = $table.resizableOpts; var minWidth = resizableOpts.minWidth; // 如果自定义调整宽度逻辑 if (minWidth) { var customMinWidth = _xeUtils["default"].isFunction(minWidth) ? minWidth(params) : minWidth; if (customMinWidth !== 'auto') { return Math.max(1, _xeUtils["default"].toNumber(customMinWidth)); } } var showHeaderOverflow = column.showHeaderOverflow, colMinWidth = column.minWidth; var headOverflow = _xeUtils["default"].isUndefined(showHeaderOverflow) || _xeUtils["default"].isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow; var showEllipsis = headOverflow === 'ellipsis'; var showTitle = headOverflow === 'title'; var showTooltip = headOverflow === true || headOverflow === 'tooltip'; var hasEllipsis = showTitle || showTooltip || showEllipsis; var minTitleWidth = _xeUtils["default"].floor((_xeUtils["default"].toNumber(getComputedStyle(cell).fontSize) || 14) * 1.6); var paddingLeftRight = getPaddingLeftRightSize(cell) + getPaddingLeftRightSize(queryCellElement(cell, '')); var mWidth = minTitleWidth + paddingLeftRight; // 默认最小宽处理 if (hasEllipsis) { var checkboxIconWidth = getPaddingLeftRightSize(queryCellElement(cell, '--title>.vxe-cell--checkbox')); var requiredIconWidth = getElemenMarginWidth(queryCellElement(cell, '>.vxe-cell--required-icon')); var editIconWidth = getElemenMarginWidth(queryCellElement(cell, '>.vxe-cell--edit-icon')); var helpIconWidth = getElemenMarginWidth(queryCellElement(cell, '>.vxe-cell-help-icon')); var sortIconWidth = getElemenMarginWidth(queryCellElement(cell, '>.vxe-cell--sort')); var filterIconWidth = getElemenMarginWidth(queryCellElement(cell, '>.vxe-cell--filter')); mWidth += checkboxIconWidth + requiredIconWidth + editIconWidth + helpIconWidth + filterIconWidth + sortIconWidth; } // 如果设置最小宽 if (colMinWidth) { var tableBody = $table.$refs.tableBody; var bodyElem = tableBody ? tableBody.$el : null; if (bodyElem) { if (_dom["default"].isScale(colMinWidth)) { var bodyWidth = bodyElem.clientWidth - 1; var meanWidth = bodyWidth / 100; return Math.max(mWidth, Math.floor(_xeUtils["default"].toInteger(colMinWidth) * meanWidth)); } else if (_dom["default"].isPx(colMinWidth)) { return Math.max(mWidth, _xeUtils["default"].toInteger(colMinWidth)); } } } return mWidth; } function countTreeExpand(prevRow, params) { var count = 1; if (!prevRow) { return count; } var $table = params.$table; var rowChildren = prevRow[$table.treeOpts.children]; if ($table.isTreeExpandByRow(prevRow)) { for (var index = 0; index < rowChildren.length; index++) { count += countTreeExpand(rowChildren[index], params); } } return count; } function getOffsetSize($xetable) { return lineOffsetSizes[$xetable.vSize] || 0; } function calcTreeLine(params, items, rIndex) { var $table = params.$table; var expandSize = 1; if (rIndex) { expandSize = countTreeExpand(items[rIndex - 1], params); } return $table.rowHeight * expandSize - (rIndex ? 1 : 12 - getOffsetSize($table)); } function mergeBodyMethod(mergeList, _rowIndex, _columnIndex) { for (var mIndex = 0; mIndex < mergeList.length; mIndex++) { var _mergeList$mIndex = mergeList[mIndex], mergeRowIndex = _mergeList$mIndex.row, mergeColIndex = _mergeList$mIndex.col, mergeRowspan = _mergeList$mIndex.rowspan, mergeColspan = _mergeList$mIndex.colspan; if (mergeColIndex > -1 && mergeRowIndex > -1 && mergeRowspan && mergeColspan) { if (mergeRowIndex === _rowIndex && mergeColIndex === _columnIndex) { return { rowspan: mergeRowspan, colspan: mergeColspan }; } if (_rowIndex >= mergeRowIndex && _rowIndex < mergeRowIndex + mergeRowspan && _columnIndex >= mergeColIndex && _columnIndex < mergeColIndex + mergeColspan) { return { rowspan: 0, colspan: 0 }; } } } } function clearTableDefaultStatus(_vm) { _vm.initStatus = false; _vm.clearSort(); _vm.clearCurrentRow(); _vm.clearCurrentColumn(); _vm.clearRadioRow(); _vm.clearRadioReserve(); _vm.clearCheckboxRow(); _vm.clearCheckboxReserve(); _vm.clearRowExpand(); _vm.clearTreeExpand(); _vm.clearTreeExpandReserve(); if (_vm.clearActived && _vXETable["default"]._edit) { _vm.clearActived(); } if (_vm.clearSelected && (_vm.keyboardConfig || _vm.mouseConfig)) { _vm.clearSelected(); } if (_vm.clearCellAreas && _vm.mouseConfig) { _vm.clearCellAreas(); _vm.clearCopyCellArea(); } return _vm.clearScroll(); } function clearTableAllStatus(_vm) { if (_vm.clearFilter && _vXETable["default"]._filter) { _vm.clearFilter(); } return clearTableDefaultStatus(_vm); } function isColumnInfo(column) { return column instanceof _columnInfo.ColumnInfo; } function getColumnConfig($xetable, _vm, options) { return isColumnInfo(_vm) ? _vm : new _columnInfo.ColumnInfo($xetable, _vm, options); } function rowToVisible($xetable, row) { var tableBody = $xetable.$refs.tableBody; var bodyElem = tableBody ? tableBody.$el : null; if (bodyElem) { var trElem = bodyElem.querySelector("[rowid=\"".concat(getRowid($xetable, row), "\"]")); if (trElem) { var bodyHeight = bodyElem.clientHeight; var bodySrcollTop = bodyElem.scrollTop; var trOffsetTop = trElem.offsetTop + (trElem.offsetParent ? trElem.offsetParent.offsetTop : 0); var trHeight = trElem.clientHeight; // 检测行是否在可视区中 if (trOffsetTop < bodySrcollTop || trOffsetTop > bodySrcollTop + bodyHeight) { // 向上定位 return $xetable.scrollTo(null, trOffsetTop); } else if (trOffsetTop + trHeight >= bodyHeight + bodySrcollTop) { // 向下定位 return $xetable.scrollTo(null, bodySrcollTop + trHeight); } } else { // 如果是虚拟渲染跨行滚动 if ($xetable.scrollYLoad) { return $xetable.scrollTo(null, ($xetable.afterFullData.indexOf(row) - 1) * $xetable.scrollYStore.rowHeight); } } } return Promise.resolve(); } function colToVisible($xetable, column) { var tableBody = $xetable.$refs.tableBody; var bodyElem = tableBody ? tableBody.$el : null; if (bodyElem) { var tdElem = bodyElem.querySelector(".".concat(column.id)); if (tdElem) { var bodyWidth = bodyElem.clientWidth; var bodySrcollLeft = bodyElem.scrollLeft; var tdOffsetLeft = tdElem.offsetLeft + (tdElem.offsetParent ? tdElem.offsetParent.offsetLeft : 0); var tdWidth = tdElem.clientWidth; // 检测行是否在可视区中 if (tdOffsetLeft < bodySrcollLeft || tdOffsetLeft > bodySrcollLeft + bodyWidth) { // 向左定位 return $xetable.scrollTo(tdOffsetLeft); } else if (tdOffsetLeft + tdWidth >= bodyWidth + bodySrcollLeft) { // 向右定位 return $xetable.scrollTo(bodySrcollLeft + tdWidth); } } else { // 如果是虚拟渲染跨行滚动 if ($xetable.scrollXLoad) { var visibleColumn = $xetable.visibleColumn; var scrollLeft = 0; for (var index = 0; index < visibleColumn.length; index++) { if (visibleColumn[index] === column) { break; } scrollLeft += visibleColumn[index].renderWidth; } return $xetable.scrollTo(scrollLeft); } } } return Promise.resolve(); }