UNPKG

vxe-table-select-area

Version:

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

312 lines (311 loc) 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _xeUtils = _interopRequireDefault(require("xe-utils")); var _dom = _interopRequireDefault(require("../../tools/dom")); var _util = require("../../table/src/util"); var _vXETable = _interopRequireDefault(require("../../v-x-e-table")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var _default = { methods: { /** * 手动弹出筛选面板 * @param column */ _openFilter: function _openFilter(fieldOrColumn) { var column = (0, _util.handleFieldOrColumn)(this, fieldOrColumn); if (column && column.filters) { var elemStore = this.elemStore; var fixed = column.fixed; return this.scrollToColumn(column).then(function () { var headerWrapperElem = elemStore["".concat(fixed || 'main', "-header-wrapper")] || elemStore['main-header-wrapper']; if (headerWrapperElem) { var filterBtnElem = headerWrapperElem.querySelector(".vxe-header--column.".concat(column.id, " .vxe-filter--btn")); _dom["default"].triggerEvent(filterBtnElem, 'click'); } }); } return this.$nextTick(); }, /** * 修改筛选条件列表 * @param {ColumnInfo} fieldOrColumn 列 * @param {Array} options 选项 */ _setFilter: function _setFilter(fieldOrColumn, options) { var column = (0, _util.handleFieldOrColumn)(this, fieldOrColumn); if (column && column.filters && options) { column.filters = (0, _util.toFilters)(options); } return this.$nextTick(); }, checkFilterOptions: function checkFilterOptions() { var filterStore = this.filterStore; filterStore.isAllSelected = filterStore.options.every(function (item) { return item._checked; }); filterStore.isIndeterminate = !filterStore.isAllSelected && filterStore.options.some(function (item) { return item._checked; }); }, /** * 点击筛选事件 * 当筛选图标被点击时触发 * 更新选项是否全部状态 * 打开筛选面板 * @param {Event} evnt 事件 * @param {ColumnInfo} column 列配置 * @param {Object} params 参数 */ triggerFilterEvent: function triggerFilterEvent(evnt, column, params) { var _this = this; var filterStore = this.filterStore; if (filterStore.column === column && filterStore.visible) { filterStore.visible = false; } else { var targetElem = evnt.target, pageX = evnt.pageX; var filters = column.filters, filterMultiple = column.filterMultiple, filterRender = column.filterRender; var compConf = filterRender ? _vXETable["default"].renderer.get(filterRender.name) : null; var filterRecoverMethod = column.filterRecoverMethod || (compConf ? compConf.filterRecoverMethod : null); var _DomTools$getDomNode = _dom["default"].getDomNode(), visibleWidth = _DomTools$getDomNode.visibleWidth; Object.assign(filterStore, { args: params, multiple: filterMultiple, options: filters, column: column, style: null, visible: true }); // 复原状态 filterStore.options.forEach(function (option) { var _checked = option._checked, checked = option.checked; option._checked = checked; if (!checked && _checked !== checked) { if (filterRecoverMethod) { filterRecoverMethod({ option: option, column: column, $table: _this }); } } }); this.checkFilterOptions(); this.initStore.filter = true; this.$nextTick(function () { var $refs = _this.$refs; var bodyElem = $refs.tableBody.$el; var filterWrapperElem = $refs.filterWrapper.$el; var filterWidth = 0; var filterHeight = 0; var filterHeadElem = null; var filterFootElem = null; if (filterWrapperElem) { filterWidth = filterWrapperElem.offsetWidth; filterHeight = filterWrapperElem.offsetHeight; filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header'); filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer'); } var centerWidth = filterWidth / 2; var minMargin = 10; var maxLeft = bodyElem.clientWidth - filterWidth - minMargin; var left, right; var style = { top: "".concat(targetElem.offsetTop + targetElem.offsetParent.offsetTop + targetElem.offsetHeight + 8, "px") }; // 判断面板不能大于表格高度 var maxHeight = null; if (filterHeight >= bodyElem.clientHeight) { maxHeight = Math.max(60, bodyElem.clientHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0)); } if (column.fixed === 'left') { left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth; } else if (column.fixed === 'right') { right = targetElem.offsetParent.offsetWidth - targetElem.offsetLeft + (targetElem.offsetParent.offsetParent.offsetWidth - targetElem.offsetParent.offsetLeft) - column.renderWidth - centerWidth; } else { left = targetElem.offsetLeft + targetElem.offsetParent.offsetLeft - centerWidth - bodyElem.scrollLeft; } if (left) { var overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth; if (overflowWidth > 0) { left -= overflowWidth; } style.left = "".concat(Math.min(maxLeft, Math.max(minMargin, left)), "px"); } else if (right) { var _overflowWidth = pageX + filterWidth - centerWidth + minMargin - visibleWidth; if (_overflowWidth > 0) { right += _overflowWidth; } style.right = "".concat(Math.max(minMargin, right), "px"); } filterStore.style = style; filterStore.maxHeight = maxHeight; }); } this.emitEvent('filter-visible', { column: column, field: column.field, property: column.field, filterList: this.getCheckedFilters(), visible: filterStore.visible }, evnt); }, _getCheckedFilters: function _getCheckedFilters() { var tableFullColumn = this.tableFullColumn; var filterList = []; tableFullColumn.forEach(function (column) { var field = column.field, filters = column.filters; var valueList = []; var dataList = []; if (filters && filters.length) { filters.forEach(function (item) { if (item.checked) { valueList.push(item.value); dataList.push(item.data); } }); if (valueList.length) { filterList.push({ column: column, field: field, property: field, values: valueList, datas: dataList }); } } }); return filterList; }, /** * 确认筛选 * 当筛选面板中的确定按钮被按下时触发 * @param {Event} evnt 事件 */ confirmFilterEvent: function confirmFilterEvent(evnt) { var _this2 = this; var filterStore = this.filterStore, filterOpts = this.filterOpts, oldScrollXLoad = this.scrollXLoad, oldScrollYLoad = this.scrollYLoad; var column = filterStore.column; var field = column.field; var values = []; var datas = []; column.filters.forEach(function (item) { if (item.checked) { values.push(item.value); datas.push(item.data); } }); var filterList = this.getCheckedFilters(); // 如果是服务端筛选,则跳过本地筛选处理 if (!filterOpts.remote) { this.handleTableData(true); this.checkSelectionStatus(); } this.emitEvent('filter-change', { column: column, field: field, property: field, values: values, datas: datas, filters: filterList, filterList: filterList }, evnt); this.closeFilter(); this.updateFooter().then(function () { var scrollXLoad = _this2.scrollXLoad, scrollYLoad = _this2.scrollYLoad; if (oldScrollXLoad || scrollXLoad || oldScrollYLoad || scrollYLoad) { if (oldScrollXLoad || scrollXLoad) { _this2.updateScrollXSpace(); } if (oldScrollYLoad || scrollYLoad) { _this2.updateScrollYSpace(); } return _this2.refreshScroll(); } }).then(function () { _this2.updateCellAreas(); return _this2.recalculate(true); }).then(function () { // 存在滚动行为未结束情况 setTimeout(function () { return _this2.recalculate(); }, 50); }); }, handleClearFilter: function handleClearFilter(column) { if (column) { var filters = column.filters, filterRender = column.filterRender; if (filters) { var compConf = filterRender ? _vXETable["default"].renderer.get(filterRender.name) : null; var filterResetMethod = column.filterResetMethod || (compConf ? compConf.filterResetMethod : null); filters.forEach(function (item) { item._checked = false; item.checked = false; if (!filterResetMethod) { item.data = _xeUtils["default"].clone(item.resetValue, true); } }); if (filterResetMethod) { filterResetMethod({ options: filters, column: column, $table: this }); } } } }, /** * 重置筛选 * 当筛选面板中的重置按钮被按下时触发 * @param {Event} evnt 事件 */ resetFilterEvent: function resetFilterEvent(evnt) { this.handleClearFilter(this.filterStore.column); this.confirmFilterEvent(evnt); }, /** * 清空指定列的筛选条件 * 如果为空则清空所有列的筛选条件 * @param {String} fieldOrColumn 列 */ _clearFilter: function _clearFilter(fieldOrColumn) { var filterStore = this.filterStore; var column; if (fieldOrColumn) { column = (0, _util.handleFieldOrColumn)(this, fieldOrColumn); if (column) { this.handleClearFilter(column); } } else { this.visibleColumn.forEach(this.handleClearFilter); } if (!fieldOrColumn || column !== filterStore.column) { Object.assign(filterStore, { isAllSelected: false, isIndeterminate: false, style: null, options: [], column: null, multiple: false, visible: false }); } return this.updateData(); } } }; exports["default"] = _default;