vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
211 lines (210 loc) • 8.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf"));
var _vXETable = _interopRequireDefault(require("../../v-x-e-table"));
var _utils = _interopRequireDefault(require("../../tools/utils"));
var _xeUtils = _interopRequireDefault(require("xe-utils"));
var _vn = require("../../tools/vn");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _default = {
name: 'VxeTableFilter',
props: {
filterStore: Object
},
computed: {
hasCheckOption: function hasCheckOption() {
var filterStore = this.filterStore;
return filterStore && filterStore.options.some(function (option) {
return option.checked;
});
}
},
render: function render(h) {
var $xetable = this.$parent,
filterStore = this.filterStore;
var args = filterStore.args,
column = filterStore.column;
var filterRender = column ? column.filterRender : null;
var compConf = filterRender ? _vXETable["default"].renderer.get(filterRender.name) : null;
var filterClassName = compConf ? compConf.filterClassName : '';
return h('div', {
"class": ['vxe-table--filter-wrapper', 'filter--prevent-default', compConf && compConf.className ? compConf.className : '', _utils["default"].getClass(filterClassName, Object.assign({
$panel: this,
$table: $xetable
}, args)), {
'is--animat': $xetable.animat,
'is--multiple': filterStore.multiple,
'is--active': filterStore.visible
}],
style: filterStore.style
}, filterStore.visible ? this.renderOptions(h, filterRender, compConf).concat(this.renderFooter(h)) : []);
},
methods: {
renderOptions: function renderOptions(h, filterRender, compConf) {
var _this = this;
var $xetable = this.$parent,
filterStore = this.filterStore;
var args = filterStore.args,
column = filterStore.column,
multiple = filterStore.multiple,
maxHeight = filterStore.maxHeight;
var slots = column.slots;
if (slots && slots.filter) {
return [h('div', {
"class": 'vxe-table--filter-template'
}, $xetable.callSlot(slots.filter, Object.assign({
$panel: this,
context: this
}, args), h))];
} else if (compConf && compConf.renderFilter) {
return [h('div', {
"class": 'vxe-table--filter-template'
}, (0, _vn.getSlotVNs)(compConf.renderFilter.call($xetable, h, filterRender, Object.assign({
$panel: this,
context: this
}, args))))];
}
var isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(function (item) {
return item._checked;
});
var isAllIndeterminate = multiple && filterStore.isIndeterminate;
return [h('ul', {
"class": 'vxe-table--filter-header'
}, [h('li', {
"class": ['vxe-table--filter-option', {
'is--checked': isAllChecked,
'is--indeterminate': isAllIndeterminate
}],
attrs: {
title: _conf["default"].i18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
},
on: {
click: function click(evnt) {
_this.changeAllOption(evnt, !filterStore.isAllSelected);
}
}
}, (multiple ? [h('span', {
"class": ['vxe-checkbox--icon', isAllIndeterminate ? _conf["default"].icon.TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? _conf["default"].icon.TABLE_CHECKBOX_CHECKED : _conf["default"].icon.TABLE_CHECKBOX_UNCHECKED]
})] : []).concat([h('span', {
"class": 'vxe-checkbox--label'
}, _conf["default"].i18n('vxe.table.allFilter'))]))]), h('ul', {
"class": 'vxe-table--filter-body',
style: maxHeight ? {
maxHeight: "".concat(maxHeight, "px")
} : {}
}, filterStore.options.map(function (item) {
var isChecked = item._checked;
var isIndeterminate = false;
return h('li', {
"class": ['vxe-table--filter-option', {
'is--checked': isChecked
}],
attrs: {
title: item.label
},
on: {
click: function click(evnt) {
_this.changeOption(evnt, !item._checked, item);
}
}
}, (multiple ? [h('span', {
"class": ['vxe-checkbox--icon', isIndeterminate ? _conf["default"].icon.TABLE_CHECKBOX_INDETERMINATE : isChecked ? _conf["default"].icon.TABLE_CHECKBOX_CHECKED : _conf["default"].icon.TABLE_CHECKBOX_UNCHECKED]
})] : []).concat([h('span', {
"class": 'vxe-checkbox--label'
}, _utils["default"].formatText(item.label, 1))]));
}))];
},
renderFooter: function renderFooter(h) {
var hasCheckOption = this.hasCheckOption,
filterStore = this.filterStore;
var column = filterStore.column,
multiple = filterStore.multiple;
var filterRender = column.filterRender;
var compConf = filterRender ? _vXETable["default"].renderer.get(filterRender.name) : null;
var isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
return multiple && (!compConf || (_xeUtils["default"].isBoolean(compConf.showFilterFooter) ? compConf.showFilterFooter !== false : compConf.isFooter !== false)) ? [h('div', {
"class": 'vxe-table--filter-footer'
}, [h('button', {
"class": {
'is--disabled': isDisabled
},
attrs: {
disabled: isDisabled
},
on: {
click: this.confirmFilter
}
}, _conf["default"].i18n('vxe.table.confirmFilter')), h('button', {
on: {
click: this.resetFilter
}
}, _conf["default"].i18n('vxe.table.resetFilter'))])] : [];
},
// 全部筛选事件
filterCheckAllEvent: function filterCheckAllEvent(evnt, value) {
var filterStore = this.filterStore;
filterStore.options.forEach(function (option) {
option._checked = value;
option.checked = value;
});
filterStore.isAllSelected = value;
filterStore.isIndeterminate = false;
},
/*************************
* Publish methods
*************************/
// (单选)筛选发生改变
changeRadioOption: function changeRadioOption(evnt, checked, item) {
var $xetable = this.$parent,
filterStore = this.filterStore;
filterStore.options.forEach(function (option) {
option._checked = false;
});
item._checked = checked;
$xetable.checkFilterOptions();
this.confirmFilter(evnt);
},
// (多选)筛选发生改变
changeMultipleOption: function changeMultipleOption(evnt, checked, item) {
var $xetable = this.$parent;
item._checked = checked;
$xetable.checkFilterOptions();
},
changeAllOption: function changeAllOption(evnt, checked) {
if (this.filterStore.multiple) {
this.filterCheckAllEvent(evnt, checked);
} else {
this.resetFilter(evnt);
}
},
// 筛选发生改变
changeOption: function changeOption(evnt, checked, item) {
if (this.filterStore.multiple) {
this.changeMultipleOption(evnt, checked, item);
} else {
this.changeRadioOption(evnt, checked, item);
}
},
// 确认筛选
confirmFilter: function confirmFilter(evnt) {
var $xetable = this.$parent,
filterStore = this.filterStore;
filterStore.options.forEach(function (option) {
option.checked = option._checked;
});
$xetable.confirmFilterEvent(evnt);
},
// 重置筛选
resetFilter: function resetFilter(evnt) {
var $xetable = this.$parent;
$xetable.resetFilterEvent(evnt);
}
/*************************
* Publish methods
*************************/
}
};
exports["default"] = _default;