UNPKG

vxe-table-select-area

Version:

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

342 lines (341 loc) 13.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _xeUtils = _interopRequireDefault(require("xe-utils")); var _utils = _interopRequireDefault(require("../../tools/utils")); var _dom = _interopRequireDefault(require("../../tools/dom")); 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 _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 cellType = 'footer'; function mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex) { for (var mIndex = 0; mIndex < mergeFooterList.length; mIndex++) { var _mergeFooterList$mInd = mergeFooterList[mIndex], mergeRowIndex = _mergeFooterList$mInd.row, mergeColIndex = _mergeFooterList$mInd.col, mergeRowspan = _mergeFooterList$mInd.rowspan, mergeColspan = _mergeFooterList$mInd.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 }; } } } } var _default = { name: 'VxeTableFooter', props: { footerTableData: Array, tableColumn: Array, fixedColumn: Array, fixedType: String, size: String }, mounted: function mounted() { var $xetable = this.$parent, $el = this.$el, $refs = this.$refs, fixedType = this.fixedType; var elemStore = $xetable.elemStore; var prefix = "".concat(fixedType || 'main', "-footer-"); elemStore["".concat(prefix, "wrapper")] = $el; elemStore["".concat(prefix, "table")] = $refs.table; elemStore["".concat(prefix, "colgroup")] = $refs.colgroup; elemStore["".concat(prefix, "list")] = $refs.tfoot; elemStore["".concat(prefix, "xSpace")] = $refs.xSpace; }, destroyed: function destroyed() { var $xetable = this.$parent, fixedType = this.fixedType; var elemStore = $xetable.elemStore; var prefix = "".concat(fixedType || 'main', "-footer-"); elemStore["".concat(prefix, "wrapper")] = null; elemStore["".concat(prefix, "table")] = null; elemStore["".concat(prefix, "colgroup")] = null; elemStore["".concat(prefix, "list")] = null; elemStore["".concat(prefix, "xSpace")] = null; }, render: function render(h) { var _e = this._e, $xetable = this.$parent, fixedType = this.fixedType, fixedColumn = this.fixedColumn, tableColumn = this.tableColumn, footerTableData = this.footerTableData; var tableListeners = $xetable.$listeners, tId = $xetable.tId, footerRowClassName = $xetable.footerRowClassName, footerCellClassName = $xetable.footerCellClassName, footerRowStyle = $xetable.footerRowStyle, footerCellStyle = $xetable.footerCellStyle, allFooterAlign = $xetable.footerAlign, mergeFooterList = $xetable.mergeFooterList, footerSpanMethod = $xetable.footerSpanMethod, allAlign = $xetable.align, scrollXLoad = $xetable.scrollXLoad, columnKey = $xetable.columnKey, columnOpts = $xetable.columnOpts, allColumnFooterOverflow = $xetable.showFooterOverflow, currentColumn = $xetable.currentColumn, overflowX = $xetable.overflowX, scrollbarWidth = $xetable.scrollbarWidth, tooltipOpts = $xetable.tooltipOpts, visibleColumn = $xetable.visibleColumn, expandColumn = $xetable.expandColumn; // 如果是使用优化模式 if (fixedType) { // 如果存在展开行使用全量渲染 if (!expandColumn && (scrollXLoad || allColumnFooterOverflow)) { if (!mergeFooterList.length || !footerSpanMethod) { tableColumn = fixedColumn; } else { tableColumn = visibleColumn; } } else { tableColumn = visibleColumn; } } return h('div', { "class": ['vxe-table--footer-wrapper', fixedType ? "fixed-".concat(fixedType, "--wrapper") : 'body--wrapper'], attrs: { xid: tId }, on: { scroll: this.scrollEvent } }, [fixedType ? _e() : h('div', { "class": 'vxe-body--x-space', ref: 'xSpace' }), h('table', { "class": 'vxe-table--footer', attrs: { xid: tId, cellspacing: 0, cellpadding: 0, border: 0 }, ref: 'table' }, [ /** * 列宽 */ h('colgroup', { ref: 'colgroup' }, tableColumn.map(function (column, $columnIndex) { return h('col', { attrs: { name: column.id }, key: $columnIndex }); }).concat(scrollbarWidth ? [h('col', { attrs: { name: 'col_gutter' } })] : [])), /** * 底部 */ h('tfoot', { ref: 'tfoot' }, footerTableData.map(function (list, _rowIndex) { var $rowIndex = _rowIndex; return h('tr', { "class": ['vxe-footer--row', footerRowClassName ? _xeUtils["default"].isFunction(footerRowClassName) ? footerRowClassName({ $table: $xetable, _rowIndex: _rowIndex, $rowIndex: $rowIndex, fixed: fixedType, type: cellType }) : footerRowClassName : ''], style: footerRowStyle ? _xeUtils["default"].isFunction(footerRowStyle) ? footerRowStyle({ $table: $xetable, _rowIndex: _rowIndex, $rowIndex: $rowIndex, fixed: fixedType, type: cellType }) : footerRowStyle : null }, tableColumn.map(function (column, $columnIndex) { var _ref2; var type = column.type, showFooterOverflow = column.showFooterOverflow, footerAlign = column.footerAlign, align = column.align, footerClassName = column.footerClassName; var showAllTip = tooltipOpts.showAll || tooltipOpts.enabled; var isColGroup = column.children && column.children.length; var fixedHiddenColumn = fixedType ? column.fixed !== fixedType && !isColGroup : column.fixed && overflowX; var footOverflow = _xeUtils["default"].isUndefined(showFooterOverflow) || _xeUtils["default"].isNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow; var footAlign = footerAlign || align || allFooterAlign || allAlign; var showEllipsis = footOverflow === 'ellipsis'; var showTitle = footOverflow === 'title'; var showTooltip = footOverflow === true || footOverflow === 'tooltip'; var hasEllipsis = showTitle || showTooltip || showEllipsis; var attrs = { colid: column.id }; var tfOns = {}; var columnIndex = $xetable.getColumnIndex(column); var _columnIndex = $xetable.getVTColumnIndex(column); var itemIndex = _columnIndex; var params = { $table: $xetable, $grid: $xetable.xegrid, _rowIndex: _rowIndex, $rowIndex: $rowIndex, column: column, columnIndex: columnIndex, $columnIndex: $columnIndex, _columnIndex: _columnIndex, itemIndex: itemIndex, items: list, fixed: fixedType, type: cellType, data: footerTableData }; // 虚拟滚动不支持动态高度 if (scrollXLoad && !hasEllipsis) { showEllipsis = hasEllipsis = true; } if (showTitle || showTooltip || showAllTip) { tfOns.mouseenter = function (evnt) { if (showTitle) { _dom["default"].updateCellTitle(evnt.currentTarget, column); } else if (showTooltip || showAllTip) { $xetable.triggerFooterTooltipEvent(evnt, params); } }; } if (showTooltip || showAllTip) { tfOns.mouseleave = function (evnt) { if (showTooltip || showAllTip) { $xetable.handleTargetLeaveEvent(evnt); } }; } if (tableListeners['footer-cell-click']) { tfOns.click = function (evnt) { $xetable.emitEvent('footer-cell-click', Object.assign({ cell: evnt.currentTarget }, params), evnt); }; } if (tableListeners['footer-cell-dblclick']) { tfOns.dblclick = function (evnt) { $xetable.emitEvent('footer-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt); }; } // 合并行或列 if (mergeFooterList.length) { var spanRest = mergeFooterMethod(mergeFooterList, _rowIndex, _columnIndex); if (spanRest) { var rowspan = spanRest.rowspan, colspan = spanRest.colspan; if (!rowspan || !colspan) { return null; } if (rowspan > 1) { attrs.rowspan = rowspan; } if (colspan > 1) { attrs.colspan = colspan; } } } else if (footerSpanMethod) { // 自定义合并方法 var _ref = footerSpanMethod(params) || {}, _ref$rowspan = _ref.rowspan, _rowspan = _ref$rowspan === void 0 ? 1 : _ref$rowspan, _ref$colspan = _ref.colspan, _colspan = _ref$colspan === void 0 ? 1 : _ref$colspan; if (!_rowspan || !_colspan) { return null; } if (_rowspan > 1) { attrs.rowspan = _rowspan; } if (_colspan > 1) { attrs.colspan = _colspan; } } return h('td', { "class": ['vxe-footer--column', column.id, (_ref2 = {}, _defineProperty(_ref2, "col--".concat(footAlign), footAlign), _defineProperty(_ref2, "col--".concat(type), type), _defineProperty(_ref2, 'col--last', $columnIndex === tableColumn.length - 1), _defineProperty(_ref2, 'fixed--hidden', fixedHiddenColumn), _defineProperty(_ref2, 'col--ellipsis', hasEllipsis), _defineProperty(_ref2, 'col--current', currentColumn === column), _ref2), _utils["default"].getClass(footerClassName, params), _utils["default"].getClass(footerCellClassName, params)], attrs: attrs, style: footerCellStyle ? _xeUtils["default"].isFunction(footerCellStyle) ? footerCellStyle(params) : footerCellStyle : null, on: tfOns, key: columnKey || columnOpts.useKey ? column.id : $columnIndex }, [h('div', { "class": ['vxe-cell', { 'c--title': showTitle, 'c--tooltip': showTooltip, 'c--ellipsis': showEllipsis }] }, column.renderFooter(h, params))]); }).concat(scrollbarWidth ? [h('td', { "class": 'vxe-footer--gutter col--gutter' })] : [])); }))])]); }, methods: { /** * 滚动处理 * 如果存在列固定左侧,同步更新滚动状态 * 如果存在列固定右侧,同步更新滚动状态 */ scrollEvent: function scrollEvent(evnt) { var $xetable = this.$parent, fixedType = this.fixedType; var $refs = $xetable.$refs, scrollXLoad = $xetable.scrollXLoad, triggerScrollXEvent = $xetable.triggerScrollXEvent, lastScrollLeft = $xetable.lastScrollLeft; var tableHeader = $refs.tableHeader, tableBody = $refs.tableBody, tableFooter = $refs.tableFooter, validTip = $refs.validTip; var headerElem = tableHeader ? tableHeader.$el : null; var footerElem = tableFooter ? tableFooter.$el : null; var bodyElem = tableBody.$el; var scrollLeft = footerElem ? footerElem.scrollLeft : 0; var isX = scrollLeft !== lastScrollLeft; $xetable.lastScrollLeft = scrollLeft; $xetable.lastScrollTime = Date.now(); if (headerElem) { headerElem.scrollLeft = scrollLeft; } if (bodyElem) { bodyElem.scrollLeft = scrollLeft; } if (scrollXLoad && isX) { triggerScrollXEvent(evnt); } if (isX && validTip && validTip.visible) { validTip.updatePlacement(); } $xetable.emitEvent('scroll', { type: cellType, fixed: fixedType, scrollTop: bodyElem.scrollTop, scrollLeft: scrollLeft, isX: isX, isY: false }, evnt); } } }; exports["default"] = _default;