UNPKG

vxe-table-select-area

Version:

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

486 lines (485 loc) 16.4 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 _size = _interopRequireDefault(require("../../mixins/size")); 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 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 _default2 = { name: 'VxePager', mixins: [_size["default"]], props: { size: { type: String, "default": function _default() { return _conf["default"].pager.size || _conf["default"].size; } }, // 自定义布局 layouts: { type: Array, "default": function _default() { return _conf["default"].pager.layouts || ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']; } }, // 当前页 currentPage: { type: Number, "default": 1 }, // 加载中 loading: Boolean, // 每页大小 pageSize: { type: Number, "default": function _default() { return _conf["default"].pager.pageSize || 10; } }, // 总条数 total: { type: Number, "default": 0 }, // 显示页码按钮的数量 pagerCount: { type: Number, "default": function _default() { return _conf["default"].pager.pagerCount || 7; } }, // 每页大小选项列表 pageSizes: { type: Array, "default": function _default() { return _conf["default"].pager.pageSizes || [10, 15, 20, 50, 100]; } }, // 列对其方式 align: { type: String, "default": function _default() { return _conf["default"].pager.align; } }, // 带边框 border: { type: Boolean, "default": function _default() { return _conf["default"].pager.border; } }, // 带背景颜色 background: { type: Boolean, "default": function _default() { return _conf["default"].pager.background; } }, // 配套的样式 perfect: { type: Boolean, "default": function _default() { return _conf["default"].pager.perfect; } }, // 当只有一页时隐藏 autoHidden: { type: Boolean, "default": function _default() { return _conf["default"].pager.autoHidden; } }, transfer: { type: Boolean, "default": function _default() { return _conf["default"].pager.transfer; } }, className: [String, Function], // 自定义图标 iconPrevPage: String, iconJumpPrev: String, iconJumpNext: String, iconNextPage: String, iconJumpMore: String }, inject: { $xegrid: { "default": null } }, data: function data() { return { inpCurrPage: this.currentPage }; }, computed: { isSizes: function isSizes() { return this.layouts.some(function (name) { return name === 'Sizes'; }); }, pageCount: function pageCount() { return this.getPageCount(this.total, this.pageSize); }, numList: function numList() { var len = this.pageCount > this.pagerCount ? this.pagerCount - 2 : this.pagerCount; var rest = []; for (var index = 0; index < len; index++) { rest.push(index); } return rest; }, offsetNumber: function offsetNumber() { return Math.floor((this.pagerCount - 2) / 2); }, sizeList: function sizeList() { return this.pageSizes.map(function (item) { if (_xeUtils["default"].isNumber(item)) { return { value: item, label: "".concat(_conf["default"].i18n('vxe.pager.pagesize', [item])) }; } return _objectSpread({ value: '', label: '' }, item); }); } }, watch: { currentPage: function currentPage(value) { this.inpCurrPage = value; } }, render: function render(h) { var _this = this, _ref; var $scopedSlots = this.$scopedSlots, $xegrid = this.$xegrid, vSize = this.vSize, align = this.align, className = this.className; var childNodes = []; if ($scopedSlots.left) { childNodes.push(h('span', { "class": 'vxe-pager--left-wrapper' }, $scopedSlots.left.call(this, { $grid: $xegrid }))); } this.layouts.forEach(function (name) { childNodes.push(_this["render".concat(name)](h)); }); if ($scopedSlots.right) { childNodes.push(h('span', { "class": 'vxe-pager--right-wrapper' }, $scopedSlots.right.call(this, { $grid: $xegrid }))); } return h('div', { "class": ['vxe-pager', className ? _xeUtils["default"].isFunction(className) ? className({ $pager: this }) : className : '', (_ref = {}, _defineProperty(_ref, "size--".concat(vSize), vSize), _defineProperty(_ref, "align--".concat(align), align), _defineProperty(_ref, 'is--border', this.border), _defineProperty(_ref, 'is--background', this.background), _defineProperty(_ref, 'is--perfect', this.perfect), _defineProperty(_ref, 'is--hidden', this.autoHidden && this.pageCount === 1), _defineProperty(_ref, 'is--loading', this.loading), _ref)] }, [h('div', { "class": 'vxe-pager--wrapper' }, childNodes)]); }, methods: { // 上一页 renderPrevPage: function renderPrevPage(h) { return h('button', { "class": ['vxe-pager--prev-btn', { 'is--disabled': this.currentPage <= 1 }], attrs: { type: 'button', title: _conf["default"].i18n('vxe.pager.prevPage') }, on: { click: this.prevPage } }, [h('i', { "class": ['vxe-pager--btn-icon', this.iconPrevPage || _conf["default"].icon.PAGER_PREV_PAGE] })]); }, // 向上翻页 renderPrevJump: function renderPrevJump(h, tagName) { return h(tagName || 'button', { "class": ['vxe-pager--jump-prev', { 'is--fixed': !tagName, 'is--disabled': this.currentPage <= 1 }], attrs: { type: 'button', title: _conf["default"].i18n('vxe.pager.prevJump') }, on: { click: this.prevJump } }, [tagName ? h('i', { "class": ['vxe-pager--jump-more-icon', this.iconJumpMore || _conf["default"].icon.PAGER_JUMP_MORE] }) : null, h('i', { "class": ['vxe-pager--jump-icon', this.iconJumpPrev || _conf["default"].icon.PAGER_JUMP_PREV] })]); }, // number renderNumber: function renderNumber(h) { return h('span', { "class": 'vxe-pager--btn-wrapper' }, this.renderPageBtn(h)); }, // jumpNumber renderJumpNumber: function renderJumpNumber(h) { return h('span', { "class": 'vxe-pager--btn-wrapper' }, this.renderPageBtn(h, true)); }, // 向下翻页 renderNextJump: function renderNextJump(h, tagName) { return h(tagName || 'button', { "class": ['vxe-pager--jump-next', { 'is--fixed': !tagName, 'is--disabled': this.currentPage >= this.pageCount }], attrs: { type: 'button', title: _conf["default"].i18n('vxe.pager.nextJump') }, on: { click: this.nextJump } }, [tagName ? h('i', { "class": ['vxe-pager--jump-more-icon', this.iconJumpMore || _conf["default"].icon.PAGER_JUMP_MORE] }) : null, h('i', { "class": ['vxe-pager--jump-icon', this.iconJumpNext || _conf["default"].icon.PAGER_JUMP_NEXT] })]); }, // 下一页 renderNextPage: function renderNextPage(h) { return h('button', { "class": ['vxe-pager--next-btn', { 'is--disabled': this.currentPage >= this.pageCount }], attrs: { type: 'button', title: _conf["default"].i18n('vxe.pager.nextPage') }, on: { click: this.nextPage } }, [h('i', { "class": ['vxe-pager--btn-icon', this.iconNextPage || _conf["default"].icon.PAGER_NEXT_PAGE] })]); }, // sizes renderSizes: function renderSizes(h) { var _this2 = this; return h('vxe-select', { "class": 'vxe-pager--sizes', props: { value: this.pageSize, placement: 'top', transfer: this.transfer, options: this.sizeList }, on: { change: function change(_ref2) { var value = _ref2.value; _this2.pageSizeEvent(value); } } }); }, // FullJump renderFullJump: function renderFullJump(h) { return this.renderJump(h, true); }, // Jump renderJump: function renderJump(h, isFull) { return h('span', { "class": 'vxe-pager--jump' }, [isFull ? h('span', { "class": 'vxe-pager--goto-text' }, _conf["default"].i18n('vxe.pager.goto')) : null, h('input', { "class": 'vxe-pager--goto', domProps: { value: this.inpCurrPage }, attrs: { type: 'text', autocomplete: 'off' }, on: { input: this.jumpInputEvent, keydown: this.jumpKeydownEvent, blur: this.triggerJumpEvent } }), isFull ? h('span', { "class": 'vxe-pager--classifier-text' }, _conf["default"].i18n('vxe.pager.pageClassifier')) : null]); }, // PageCount renderPageCount: function renderPageCount(h) { return h('span', { "class": 'vxe-pager--count' }, [h('span', { "class": 'vxe-pager--separator' }), h('span', this.pageCount)]); }, // total renderTotal: function renderTotal(h) { return h('span', { "class": 'vxe-pager--total' }, _conf["default"].i18n('vxe.pager.total', [this.total])); }, // number renderPageBtn: function renderPageBtn(h, showJump) { var _this3 = this; var numList = this.numList, currentPage = this.currentPage, pageCount = this.pageCount, pagerCount = this.pagerCount, offsetNumber = this.offsetNumber; var nums = []; var isOv = pageCount > pagerCount; var isLt = isOv && currentPage > offsetNumber + 1; var isGt = isOv && currentPage < pageCount - offsetNumber; var startNumber = 1; if (isOv) { if (currentPage >= pageCount - offsetNumber) { startNumber = Math.max(pageCount - numList.length + 1, 1); } else { startNumber = Math.max(currentPage - offsetNumber, 1); } } if (showJump && isLt) { nums.push(h('button', { "class": 'vxe-pager--num-btn', attrs: { type: 'button' }, on: { click: function click() { return _this3.jumpPage(1); } } }, 1), this.renderPrevJump(h, 'span')); } numList.forEach(function (item, index) { var number = startNumber + index; if (number <= pageCount) { nums.push(h('button', { "class": ['vxe-pager--num-btn', { 'is--active': currentPage === number }], attrs: { type: 'button' }, on: { click: function click() { return _this3.jumpPage(number); } }, key: number }, number)); } }); if (showJump && isGt) { nums.push(this.renderNextJump(h, 'button'), h('button', { "class": 'vxe-pager--num-btn', attrs: { type: 'button' }, on: { click: function click() { return _this3.jumpPage(pageCount); } } }, pageCount)); } return nums; }, getPageCount: function getPageCount(total, size) { return Math.max(Math.ceil(total / size), 1); }, prevPage: function prevPage() { var currentPage = this.currentPage, pageCount = this.pageCount; if (currentPage > 1) { this.jumpPage(Math.min(pageCount, Math.max(currentPage - 1, 1))); } }, nextPage: function nextPage() { var currentPage = this.currentPage, pageCount = this.pageCount; if (currentPage < pageCount) { this.jumpPage(Math.min(pageCount, currentPage + 1)); } }, prevJump: function prevJump() { this.jumpPage(Math.max(this.currentPage - this.numList.length, 1)); }, nextJump: function nextJump() { this.jumpPage(Math.min(this.currentPage + this.numList.length, this.pageCount)); }, jumpPage: function jumpPage(currentPage) { if (currentPage !== this.currentPage) { this.$emit('update:currentPage', currentPage); this.$emit('page-change', { type: 'current', pageSize: this.pageSize, currentPage: currentPage }); } }, pageSizeEvent: function pageSizeEvent(pageSize) { var pageCount = this.getPageCount(this.total, pageSize); var currentPage = this.currentPage; if (currentPage > pageCount) { currentPage = pageCount; this.$emit('update:currentPage', pageCount); } this.$emit('update:pageSize', pageSize); this.$emit('page-change', { type: 'size', pageSize: pageSize, currentPage: currentPage }); }, jumpInputEvent: function jumpInputEvent(evnt) { this.inpCurrPage = evnt.target.value; }, jumpKeydownEvent: function jumpKeydownEvent(evnt) { if (evnt.keyCode === 13) { this.triggerJumpEvent(evnt); } else if (evnt.keyCode === 38) { evnt.preventDefault(); this.nextPage(); } else if (evnt.keyCode === 40) { evnt.preventDefault(); this.prevPage(); } }, triggerJumpEvent: function triggerJumpEvent(evnt) { var value = _xeUtils["default"].toInteger(evnt.target.value); var current = value <= 0 ? 1 : value >= this.pageCount ? this.pageCount : value; var currPage = _xeUtils["default"].toValueString(current); evnt.target.value = currPage; this.inpCurrPage = currPage; this.jumpPage(current); } } }; exports["default"] = _default2;