vxe-table 3.15.1 → 3.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/filter/mixin.js +29 -10
- package/es/table/module/filter/panel.js +173 -142
- package/es/table/src/methods.js +31 -7
- package/es/table/style.css +18 -0
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +18 -0
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +226 -142
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/filter/mixin.js +33 -9
- package/lib/table/module/filter/mixin.min.js +1 -1
- package/lib/table/module/filter/panel.js +153 -122
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/src/methods.js +36 -7
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/style/style.css +18 -0
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +18 -0
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/table/module/filter/mixin.ts +27 -10
- package/packages/table/module/filter/panel.ts +178 -143
- package/packages/table/src/methods.ts +31 -7
- package/styles/components/table-module/filter.scss +16 -0
- package/styles/components/table.scss +6 -1
- /package/es/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/es/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
- /package/es/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
- /package/lib/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
- /package/lib/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
- /package/lib/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
|
@@ -91,6 +91,16 @@ var _default = exports.default = {
|
|
|
91
91
|
filterStore.visible = false;
|
|
92
92
|
} else {
|
|
93
93
|
const el = $xeTable.$refs.refElem;
|
|
94
|
+
const {
|
|
95
|
+
scrollTop,
|
|
96
|
+
scrollLeft,
|
|
97
|
+
visibleHeight,
|
|
98
|
+
visibleWidth
|
|
99
|
+
} = (0, _dom.getDomNode)();
|
|
100
|
+
const filterOpts = $xeTable.computeFilterOpts;
|
|
101
|
+
const {
|
|
102
|
+
transfer
|
|
103
|
+
} = filterOpts;
|
|
94
104
|
const tableRect = el.getBoundingClientRect();
|
|
95
105
|
const btnElem = evnt.currentTarget;
|
|
96
106
|
const {
|
|
@@ -138,23 +148,37 @@ var _default = exports.default = {
|
|
|
138
148
|
return;
|
|
139
149
|
}
|
|
140
150
|
const btnRect = btnElem.getBoundingClientRect();
|
|
141
|
-
const filterWidth = filterWrapperElem.offsetWidth;
|
|
142
151
|
const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
|
|
143
152
|
const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
|
|
153
|
+
const filterWidth = filterWrapperElem.offsetWidth;
|
|
144
154
|
const centerWidth = filterWidth / 2;
|
|
145
|
-
let left =
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
left
|
|
155
|
+
let left = 0;
|
|
156
|
+
let top = 0;
|
|
157
|
+
let maxHeight = 0;
|
|
158
|
+
if (transfer) {
|
|
159
|
+
left = btnRect.left - centerWidth + scrollLeft;
|
|
160
|
+
top = btnRect.top + btnElem.clientHeight + scrollTop;
|
|
161
|
+
maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
|
|
162
|
+
if (left < 16) {
|
|
163
|
+
left = 16;
|
|
164
|
+
} else if (left > visibleWidth - filterWidth - 16) {
|
|
165
|
+
left = visibleWidth - filterWidth - 16;
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
left = btnRect.left - tableRect.left - centerWidth;
|
|
169
|
+
top = btnRect.top - tableRect.top + btnElem.clientHeight;
|
|
170
|
+
maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
|
|
171
|
+
if (left < 1) {
|
|
172
|
+
left = 1;
|
|
173
|
+
} else if (left > el.clientWidth - filterWidth - 1) {
|
|
174
|
+
left = el.clientWidth - filterWidth - 1;
|
|
175
|
+
}
|
|
153
176
|
}
|
|
154
177
|
filterStore.style = {
|
|
155
178
|
top: (0, _dom.toCssUnit)(top),
|
|
156
179
|
left: (0, _dom.toCssUnit)(left)
|
|
157
180
|
};
|
|
181
|
+
// 判断面板不能大于表格高度
|
|
158
182
|
filterStore.maxHeight = maxHeight;
|
|
159
183
|
});
|
|
160
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let renderer=_ui.VxeUI.renderer;var _default=exports.default={methods:{_openFilter(e){let i=(0,_util.handleFieldOrColumn)(this,e);if(i&&i.filters){let t=this.elemStore,l=i.fixed;return this.scrollToColumn(i).then(()=>{var e=t[`${l||"main"}-header-wrapper`]||t["main-header-wrapper"];e&&(e=e.querySelector(`.vxe-header--column.${i.id} .vxe-cell--filter`),(0,_dom.triggerEvent)(e,"click"))})}return this.$nextTick()},_setFilter(e,t,l){e=(0,_util.handleFieldOrColumn)(this,e);return e&&e.filters&&(e.filters=(0,_util.toFilters)(t||[]),l)?this.handleColumnConfirmFilter(e,new Event("click")):this.$nextTick()},checkFilterOptions(){var e=this.filterStore;e.isAllSelected=e.options.every(e=>e._checked),e.isIndeterminate=!e.isAllSelected&&e.options.some(e=>e._checked)},triggerFilterEvent(
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let renderer=_ui.VxeUI.renderer;var _default=exports.default={methods:{_openFilter(e){let i=(0,_util.handleFieldOrColumn)(this,e);if(i&&i.filters){let t=this.elemStore,l=i.fixed;return this.scrollToColumn(i).then(()=>{var e=t[`${l||"main"}-header-wrapper`]||t["main-header-wrapper"];e&&(e=e.querySelector(`.vxe-header--column.${i.id} .vxe-cell--filter`),(0,_dom.triggerEvent)(e,"click"))})}return this.$nextTick()},_setFilter(e,t,l){e=(0,_util.handleFieldOrColumn)(this,e);return e&&e.filters&&(e.filters=(0,_util.toFilters)(t||[]),l)?this.handleColumnConfirmFilter(e,new Event("click")):this.$nextTick()},checkFilterOptions(){var e=this.filterStore;e.isAllSelected=e.options.every(e=>e._checked),e.isIndeterminate=!e.isAllSelected&&e.options.some(e=>e._checked)},triggerFilterEvent(l,r,n){let F=this;var s=F,o=F;let e=this.filterStore;if(e.column===r&&e.visible)e.visible=!1;else{let{initStore:e,filterStore:p}=s,t=o.elemStore;if(p.column===r&&p.visible)p.visible=!1;else{let a=F.$refs.refElem,{scrollTop:h,scrollLeft:c,visibleHeight:u,visibleWidth:d}=(0,_dom.getDomNode)();let f=F.computeFilterOpts.transfer,m=a.getBoundingClientRect(),v=l.currentTarget;var{filters:s,filterMultiple:_,filterRender:g}=r,g=(0,_utils.isEnableConf)(g)?renderer.get(g.name):null;let i=r.filterRecoverMethod||(g?g.tableFilterRecoverMethod||g.filterRecoverMethod:null);o._currFilterParams=n,Object.assign(p,{multiple:_,options:s,column:r,style:null}),p.options.forEach(e=>{var{_checked:t,checked:l}=e;(e._checked=l)||t===l||i&&i({option:e,column:r,$table:F})}),this.checkFilterOptions(),p.visible=!0,e.filter=!0,F.$nextTick(()=>{if((0,_util.getRefElem)(t["main-header-scroll"])){var i=F.$refs.refTableFilter,i=i?i.$el:null;if(i){var r=v.getBoundingClientRect(),n=i.querySelector(".vxe-table--filter-header"),s=i.querySelector(".vxe-table--filter-footer"),i=i.offsetWidth,o=i/2;let e=0,t=0,l=0;f?(e=r.left-o+c,t=r.top+v.clientHeight+h,l=Math.min(Math.max(m.height,Math.floor(u/2)),Math.max(80,u-t-(n?n.clientHeight:0)-(s?s.clientHeight:0)-28)),e<16?e=16:e>d-i-16&&(e=d-i-16)):(e=r.left-m.left-o,t=r.top-m.top+v.clientHeight,l=Math.max(40,a.clientHeight-t-(n?n.clientHeight:0)-(s?s.clientHeight:0)-14),e<1?e=1:e>a.clientWidth-i-1&&(e=a.clientWidth-i-1)),p.style={top:(0,_dom.toCssUnit)(t),left:(0,_dom.toCssUnit)(e)},p.maxHeight=l}}})}F.dispatchEvent("filter-visible",{column:r,field:r.field,property:r.field,filterList:F.getCheckedFilters(),visible:p.visible},l)}},handleFilterConfirmFilter(e){var t=this.filterStore;t.options.forEach(e=>{e.checked=e._checked}),this.confirmFilterEvent(e)},_saveFilterPanel(){return this.handleFilterConfirmFilter(null),this.$nextTick()},_resetFilterPanel(){return this.handleFilterResetFilter(null),this.$nextTick()},_getCheckedFilters(){var e=this.tableFullColumn;let n=[];return e.forEach(e=>{var{field:t,filters:l}=e;let i=[],r=[];l&&l.length&&(l.forEach(e=>{e.checked&&(i.push(e.value),r.push(e.data))}),i.length)&&n.push({column:e,field:t,property:t,values:i,datas:r})}),n},handleColumnConfirmFilter(e,t){let l=this;var i=l.mouseConfig;let{scrollXLoad:r,scrollYLoad:n}=l;var s=l.computeFilterOpts,o=l.computeMouseOpts,a=e.field;let h=[],c=[];e.filters.forEach(e=>{e.checked&&(h.push(e.value),c.push(e.data))});var u=this.getCheckedFilters(),e={$table:this,$event:t,column:e,field:a,property:a,values:h,datas:c,filters:u,filterList:u};return s.remote||(this.handleTableData(!0),this.checkSelectionStatus()),i&&o.area&&this.handleFilterEvent&&l.handleFilterEvent(t,e),t&&l.emitEvent("filter-change",e,t),l.closeFilter(),l.updateFooter().then(()=>{var{scrollXLoad:e,scrollYLoad:t}=this;if(r||e||n||t)return(r||e)&&l.updateScrollXSpace(),(n||t)&&l.updateScrollYSpace(),l.refreshScroll()}).then(()=>(l.updateCellAreas(),l.recalculate(!0))).then(()=>{setTimeout(()=>l.recalculate(),50)})},confirmFilterEvent(e){var t=this.filterStore,t=t.column;this.handleColumnConfirmFilter(t,e)},handleClearFilter(e){if(e){var{filters:l,filterRender:i}=e;if(l){i=(0,_utils.isEnableConf)(i)?renderer.get(i.name):null;let t=e.filterResetMethod||(i?i.tableFilterResetMethod||i.filterResetMethod:null);l.forEach(e=>{e._checked=!1,e.checked=!1,t||(e.data=_xeUtils.default.clone(e.resetValue,!0))}),t&&t({options:l,column:e,$table:this})}}},handleFilterResetFilter(e){this.handleClearFilter(this.filterStore.column),this.confirmFilterEvent(e)},_clearFilter(e){var t=this.filterStore;let l;return e?(l=(0,_util.handleFieldOrColumn)(this,e))&&this.handleClearFilter(l):this.visibleColumn.forEach(this.handleClearFilter),e&&l===t.column||Object.assign(t,{isAllSelected:!1,isIndeterminate:!1,style:null,options:[],column:null,multiple:!1,visible:!1}),this.updateData()},_updateFilterOptionStatus(e,t){return e._checked=t,e.checked=t,this.$nextTick()}}};
|
|
@@ -10,28 +10,169 @@ var _vn = require("../../../ui/src/vn");
|
|
|
10
10
|
const {
|
|
11
11
|
getI18n,
|
|
12
12
|
getIcon,
|
|
13
|
-
renderer
|
|
13
|
+
renderer,
|
|
14
|
+
globalMixins
|
|
14
15
|
} = _ui.VxeUI;
|
|
16
|
+
function renderOptions($xeFilterPanel, h, filterRender, compConf) {
|
|
17
|
+
const props = $xeFilterPanel;
|
|
18
|
+
const $xeTable = $xeFilterPanel.$xeTable;
|
|
19
|
+
const tableInternalData = $xeTable;
|
|
20
|
+
const {
|
|
21
|
+
filterStore
|
|
22
|
+
} = props;
|
|
23
|
+
const {
|
|
24
|
+
column,
|
|
25
|
+
multiple,
|
|
26
|
+
maxHeight
|
|
27
|
+
} = filterStore;
|
|
28
|
+
const slots = column ? column.slots : null;
|
|
29
|
+
const filterSlot = slots ? slots.filter : null;
|
|
30
|
+
const params = Object.assign({}, tableInternalData._currFilterParams, {
|
|
31
|
+
$panel: $xeFilterPanel,
|
|
32
|
+
$table: $xeTable
|
|
33
|
+
});
|
|
34
|
+
const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
|
|
35
|
+
if (filterSlot) {
|
|
36
|
+
return [h('div', {
|
|
37
|
+
class: 'vxe-table--filter-template',
|
|
38
|
+
style: maxHeight ? {
|
|
39
|
+
maxHeight: `${maxHeight}px`
|
|
40
|
+
} : {}
|
|
41
|
+
}, $xeTable.callSlot(filterSlot, params, h))];
|
|
42
|
+
} else if (rtFilter) {
|
|
43
|
+
return [h('div', {
|
|
44
|
+
class: 'vxe-table--filter-template',
|
|
45
|
+
style: maxHeight ? {
|
|
46
|
+
maxHeight: `${maxHeight}px`
|
|
47
|
+
} : {}
|
|
48
|
+
}, (0, _vn.getSlotVNs)(rtFilter.call($xeTable, h, filterRender, params)))];
|
|
49
|
+
}
|
|
50
|
+
const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
|
|
51
|
+
const isAllIndeterminate = multiple && filterStore.isIndeterminate;
|
|
52
|
+
return [h('ul', {
|
|
53
|
+
class: 'vxe-table--filter-header'
|
|
54
|
+
}, [h('li', {
|
|
55
|
+
class: ['vxe-table--filter-option', {
|
|
56
|
+
'is--checked': isAllChecked,
|
|
57
|
+
'is--indeterminate': isAllIndeterminate
|
|
58
|
+
}],
|
|
59
|
+
attrs: {
|
|
60
|
+
title: getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
|
|
61
|
+
},
|
|
62
|
+
on: {
|
|
63
|
+
click: evnt => {
|
|
64
|
+
$xeFilterPanel.changeAllOption(evnt, !filterStore.isAllSelected);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, (multiple ? [h('span', {
|
|
68
|
+
class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
69
|
+
})] : []).concat([h('span', {
|
|
70
|
+
class: 'vxe-checkbox--label'
|
|
71
|
+
}, getI18n('vxe.table.allFilter'))]))]), h('ul', {
|
|
72
|
+
class: 'vxe-table--filter-body',
|
|
73
|
+
style: maxHeight ? {
|
|
74
|
+
maxHeight: `${maxHeight}px`
|
|
75
|
+
} : {}
|
|
76
|
+
}, filterStore.options.map(item => {
|
|
77
|
+
const isChecked = item._checked;
|
|
78
|
+
const isIndeterminate = false;
|
|
79
|
+
return h('li', {
|
|
80
|
+
class: ['vxe-table--filter-option', {
|
|
81
|
+
'is--checked': isChecked
|
|
82
|
+
}],
|
|
83
|
+
attrs: {
|
|
84
|
+
title: item.label
|
|
85
|
+
},
|
|
86
|
+
on: {
|
|
87
|
+
click: evnt => {
|
|
88
|
+
$xeFilterPanel.changeOption(evnt, !item._checked, item);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}, (multiple ? [h('span', {
|
|
92
|
+
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
93
|
+
})] : []).concat([h('span', {
|
|
94
|
+
class: 'vxe-checkbox--label'
|
|
95
|
+
}, (0, _utils.formatText)(item.label, 1))]));
|
|
96
|
+
}))];
|
|
97
|
+
}
|
|
98
|
+
function renderFooter($xeFilterPanel, h) {
|
|
99
|
+
const props = $xeFilterPanel;
|
|
100
|
+
const $xeTable = $xeFilterPanel.$xeTable;
|
|
101
|
+
const {
|
|
102
|
+
filterStore
|
|
103
|
+
} = props;
|
|
104
|
+
const {
|
|
105
|
+
column,
|
|
106
|
+
multiple
|
|
107
|
+
} = filterStore;
|
|
108
|
+
const filterOpts = $xeTable.computeFilterOpts;
|
|
109
|
+
const hasCheckOption = $xeFilterPanel.computeHasCheckOption;
|
|
110
|
+
const filterRender = column.filterRender;
|
|
111
|
+
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
112
|
+
const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
|
|
113
|
+
return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
|
|
114
|
+
class: 'vxe-table--filter-footer'
|
|
115
|
+
}, [h('button', {
|
|
116
|
+
class: {
|
|
117
|
+
'is--disabled': isDisabled
|
|
118
|
+
},
|
|
119
|
+
attrs: {
|
|
120
|
+
disabled: isDisabled
|
|
121
|
+
},
|
|
122
|
+
on: {
|
|
123
|
+
click: $xeFilterPanel.confirmFilter
|
|
124
|
+
}
|
|
125
|
+
}, filterOpts.confirmButtonText || getI18n('vxe.table.confirmFilter')), h('button', {
|
|
126
|
+
on: {
|
|
127
|
+
click: $xeFilterPanel.resetFilter
|
|
128
|
+
}
|
|
129
|
+
}, filterOpts.resetButtonText || getI18n('vxe.table.resetFilter'))])] : [];
|
|
130
|
+
}
|
|
15
131
|
var _default = exports.default = {
|
|
16
132
|
name: 'VxeTableFilterPanel',
|
|
133
|
+
mixins: [globalMixins.sizeMixin],
|
|
17
134
|
props: {
|
|
18
135
|
filterStore: Object
|
|
19
136
|
},
|
|
137
|
+
inject: {
|
|
138
|
+
$xeTable: {
|
|
139
|
+
default: null
|
|
140
|
+
}
|
|
141
|
+
},
|
|
20
142
|
computed: {
|
|
21
|
-
|
|
143
|
+
computeHasCheckOption() {
|
|
22
144
|
const {
|
|
23
145
|
filterStore
|
|
24
146
|
} = this;
|
|
25
147
|
return filterStore && filterStore.options.some(option => option.checked);
|
|
26
148
|
}
|
|
27
149
|
},
|
|
150
|
+
mounted() {
|
|
151
|
+
const $xeFilterPanel = this;
|
|
152
|
+
const $xeTable = $xeFilterPanel.$xeTable;
|
|
153
|
+
const filterOpts = $xeTable.computeFilterOpts;
|
|
154
|
+
const {
|
|
155
|
+
transfer
|
|
156
|
+
} = filterOpts;
|
|
157
|
+
const el = this.$refs.refElem;
|
|
158
|
+
if (transfer && el) {
|
|
159
|
+
document.body.appendChild(el);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
beforeDestroy() {
|
|
163
|
+
const el = this.$refs.refElem;
|
|
164
|
+
if (el && el.parentNode) {
|
|
165
|
+
el.parentNode.removeChild(el);
|
|
166
|
+
}
|
|
167
|
+
},
|
|
28
168
|
render(h) {
|
|
29
|
-
const $
|
|
30
|
-
const
|
|
169
|
+
const $xeFilterPanel = this;
|
|
170
|
+
const props = $xeFilterPanel;
|
|
171
|
+
const $xeTable = $xeFilterPanel.$xeTable;
|
|
31
172
|
const tableInternalData = $xeTable;
|
|
32
173
|
const {
|
|
33
174
|
filterStore
|
|
34
|
-
} =
|
|
175
|
+
} = props;
|
|
35
176
|
const {
|
|
36
177
|
visible,
|
|
37
178
|
multiple,
|
|
@@ -41,137 +182,27 @@ var _default = exports.default = {
|
|
|
41
182
|
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
42
183
|
const filterClassName = compConf ? compConf.tableFilterClassName || compConf.filterClassName : '';
|
|
43
184
|
const params = Object.assign({}, tableInternalData._currFilterParams, {
|
|
44
|
-
$panel,
|
|
185
|
+
$panel: $xeFilterPanel,
|
|
45
186
|
$table: $xeTable
|
|
46
187
|
});
|
|
188
|
+
const tableProps = $xeTable;
|
|
189
|
+
const vSize = $xeFilterPanel.computeSize;
|
|
47
190
|
const filterOpts = $xeTable.computeFilterOpts;
|
|
48
191
|
const {
|
|
49
192
|
destroyOnClose
|
|
50
193
|
} = filterOpts;
|
|
51
194
|
return h('div', {
|
|
195
|
+
ref: 'refElem',
|
|
52
196
|
class: ['vxe-table--filter-wrapper', 'filter--prevent-default', compConf && compConf.className ? compConf.className : '', (0, _utils.getClass)(filterClassName, params), {
|
|
53
|
-
|
|
197
|
+
[`size--${vSize}`]: vSize,
|
|
198
|
+
'is--animat': tableProps.animat,
|
|
54
199
|
'is--multiple': multiple,
|
|
55
200
|
'is--active': visible
|
|
56
201
|
}],
|
|
57
202
|
style: filterStore.style
|
|
58
|
-
}, filterStore.visible && (destroyOnClose ? visible : true) && column ?
|
|
203
|
+
}, filterStore.visible && (destroyOnClose ? visible : true) && column ? renderOptions($xeFilterPanel, h, filterRender, compConf).concat(renderFooter($xeFilterPanel, h)) : []);
|
|
59
204
|
},
|
|
60
205
|
methods: {
|
|
61
|
-
renderOptions(h, filterRender, compConf) {
|
|
62
|
-
const $panel = this;
|
|
63
|
-
const $xeTable = this.$parent;
|
|
64
|
-
const tableInternalData = $xeTable;
|
|
65
|
-
const {
|
|
66
|
-
filterStore
|
|
67
|
-
} = this;
|
|
68
|
-
const {
|
|
69
|
-
column,
|
|
70
|
-
multiple,
|
|
71
|
-
maxHeight
|
|
72
|
-
} = filterStore;
|
|
73
|
-
const slots = column ? column.slots : null;
|
|
74
|
-
const filterSlot = slots ? slots.filter : null;
|
|
75
|
-
const params = Object.assign({}, tableInternalData._currFilterParams, {
|
|
76
|
-
$panel,
|
|
77
|
-
$table: $xeTable
|
|
78
|
-
});
|
|
79
|
-
const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
|
|
80
|
-
if (filterSlot) {
|
|
81
|
-
return [h('div', {
|
|
82
|
-
class: 'vxe-table--filter-template',
|
|
83
|
-
style: maxHeight ? {
|
|
84
|
-
maxHeight: `${maxHeight}px`
|
|
85
|
-
} : {}
|
|
86
|
-
}, $xeTable.callSlot(filterSlot, params, h))];
|
|
87
|
-
} else if (rtFilter) {
|
|
88
|
-
return [h('div', {
|
|
89
|
-
class: 'vxe-table--filter-template',
|
|
90
|
-
style: maxHeight ? {
|
|
91
|
-
maxHeight: `${maxHeight}px`
|
|
92
|
-
} : {}
|
|
93
|
-
}, (0, _vn.getSlotVNs)(rtFilter.call($xeTable, h, filterRender, params)))];
|
|
94
|
-
}
|
|
95
|
-
const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
|
|
96
|
-
const isAllIndeterminate = multiple && filterStore.isIndeterminate;
|
|
97
|
-
return [h('ul', {
|
|
98
|
-
class: 'vxe-table--filter-header'
|
|
99
|
-
}, [h('li', {
|
|
100
|
-
class: ['vxe-table--filter-option', {
|
|
101
|
-
'is--checked': isAllChecked,
|
|
102
|
-
'is--indeterminate': isAllIndeterminate
|
|
103
|
-
}],
|
|
104
|
-
attrs: {
|
|
105
|
-
title: getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
|
|
106
|
-
},
|
|
107
|
-
on: {
|
|
108
|
-
click: evnt => {
|
|
109
|
-
this.changeAllOption(evnt, !filterStore.isAllSelected);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}, (multiple ? [h('span', {
|
|
113
|
-
class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
114
|
-
})] : []).concat([h('span', {
|
|
115
|
-
class: 'vxe-checkbox--label'
|
|
116
|
-
}, getI18n('vxe.table.allFilter'))]))]), h('ul', {
|
|
117
|
-
class: 'vxe-table--filter-body',
|
|
118
|
-
style: maxHeight ? {
|
|
119
|
-
maxHeight: `${maxHeight}px`
|
|
120
|
-
} : {}
|
|
121
|
-
}, filterStore.options.map(item => {
|
|
122
|
-
const isChecked = item._checked;
|
|
123
|
-
const isIndeterminate = false;
|
|
124
|
-
return h('li', {
|
|
125
|
-
class: ['vxe-table--filter-option', {
|
|
126
|
-
'is--checked': isChecked
|
|
127
|
-
}],
|
|
128
|
-
attrs: {
|
|
129
|
-
title: item.label
|
|
130
|
-
},
|
|
131
|
-
on: {
|
|
132
|
-
click: evnt => {
|
|
133
|
-
this.changeOption(evnt, !item._checked, item);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}, (multiple ? [h('span', {
|
|
137
|
-
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
138
|
-
})] : []).concat([h('span', {
|
|
139
|
-
class: 'vxe-checkbox--label'
|
|
140
|
-
}, (0, _utils.formatText)(item.label, 1))]));
|
|
141
|
-
}))];
|
|
142
|
-
},
|
|
143
|
-
renderFooter(h) {
|
|
144
|
-
const $xeTable = this.$parent;
|
|
145
|
-
const {
|
|
146
|
-
hasCheckOption,
|
|
147
|
-
filterStore
|
|
148
|
-
} = this;
|
|
149
|
-
const {
|
|
150
|
-
column,
|
|
151
|
-
multiple
|
|
152
|
-
} = filterStore;
|
|
153
|
-
const filterOpts = $xeTable.computeFilterOpts;
|
|
154
|
-
const filterRender = column.filterRender;
|
|
155
|
-
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
156
|
-
const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
|
|
157
|
-
return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
|
|
158
|
-
class: 'vxe-table--filter-footer'
|
|
159
|
-
}, [h('button', {
|
|
160
|
-
class: {
|
|
161
|
-
'is--disabled': isDisabled
|
|
162
|
-
},
|
|
163
|
-
attrs: {
|
|
164
|
-
disabled: isDisabled
|
|
165
|
-
},
|
|
166
|
-
on: {
|
|
167
|
-
click: this.confirmFilter
|
|
168
|
-
}
|
|
169
|
-
}, filterOpts.confirmButtonText || getI18n('vxe.table.confirmFilter')), h('button', {
|
|
170
|
-
on: {
|
|
171
|
-
click: this.resetFilter
|
|
172
|
-
}
|
|
173
|
-
}, filterOpts.resetButtonText || getI18n('vxe.table.resetFilter'))])] : [];
|
|
174
|
-
},
|
|
175
206
|
// 全部筛选事件
|
|
176
207
|
filterCheckAllEvent(evnt, value) {
|
|
177
208
|
const filterStore = this.filterStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_vn=require("../../../ui/src/vn");let{getI18n,getIcon,renderer}=_ui.VxeUI;
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_vn=require("../../../ui/src/vn");let{getI18n,getIcon,renderer,globalMixins}=_ui.VxeUI;function renderOptions(l,i,e,t){var r=l.$xeTable;let a=l.filterStore,{column:s,multiple:n,maxHeight:o}=a;var c=s?s.slots:null,c=c?c.filter:null,p=Object.assign({},r._currFilterParams,{$panel:l,$table:r}),t=t?t.renderTableFilter||t.renderFilter:null;return c?[i("div",{class:"vxe-table--filter-template",style:o?{maxHeight:o+"px"}:{}},r.callSlot(c,p,i))]:t?[i("div",{class:"vxe-table--filter-template",style:o?{maxHeight:o+"px"}:{}},(0,_vn.getSlotVNs)(t.call(r,i,e,p)))]:(c=n?a.isAllSelected:!a.options.some(e=>e._checked),t=n&&a.isIndeterminate,[i("ul",{class:"vxe-table--filter-header"},[i("li",{class:["vxe-table--filter-option",{"is--checked":c,"is--indeterminate":t}],attrs:{title:getI18n(n?"vxe.table.allTitle":"vxe.table.allFilter")},on:{click:e=>{l.changeAllOption(e,!a.isAllSelected)}}},(n?[i("span",{class:["vxe-checkbox--icon",t?getIcon().TABLE_CHECKBOX_INDETERMINATE:c?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([i("span",{class:"vxe-checkbox--label"},getI18n("vxe.table.allFilter"))]))]),i("ul",{class:"vxe-table--filter-body",style:o?{maxHeight:o+"px"}:{}},a.options.map(t=>{var e=t._checked;return i("li",{class:["vxe-table--filter-option",{"is--checked":e}],attrs:{title:t.label},on:{click:e=>{l.changeOption(e,!t._checked,t)}}},(n?[i("span",{class:["vxe-checkbox--icon",e?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([i("span",{class:"vxe-checkbox--label"},(0,_utils.formatText)(t.label,1))]))}))])}function renderFooter(e,t){var l=e.filterStore,{column:i,multiple:r}=l,a=e.$xeTable.computeFilterOpts,s=e.computeHasCheckOption,i=i.filterRender,i=(0,_utils.isEnableConf)(i)?renderer.get(i.name):null,s=!s&&!l.isAllSelected&&!l.isIndeterminate;return r&&(!i||!1!==i.showTableFilterFooter&&!1!==i.showFilterFooter&&!1!==i.isFooter)?[t("div",{class:"vxe-table--filter-footer"},[t("button",{class:{"is--disabled":s},attrs:{disabled:s},on:{click:e.confirmFilter}},a.confirmButtonText||getI18n("vxe.table.confirmFilter")),t("button",{on:{click:e.resetFilter}},a.resetButtonText||getI18n("vxe.table.resetFilter"))])]:[]}var _default=exports.default={name:"VxeTableFilterPanel",mixins:[globalMixins.sizeMixin],props:{filterStore:Object},inject:{$xeTable:{default:null}},computed:{computeHasCheckOption(){var e=this.filterStore;return e&&e.options.some(e=>e.checked)}},mounted(){var e=this.$xeTable.computeFilterOpts.transfer,t=this.$refs.refElem;e&&t&&document.body.appendChild(t)},beforeDestroy(){var e=this.$refs.refElem;e&&e.parentNode&&e.parentNode.removeChild(e)},render(e){var t=this,l=t.$xeTable,i=l,r=t.filterStore,{visible:a,multiple:s,column:n}=r,o=n?n.filterRender:null,c=(0,_utils.isEnableConf)(o)?renderer.get(o.name):null,p=c?c.tableFilterClassName||c.filterClassName:"",i=Object.assign({},i._currFilterParams,{$panel:t,$table:l}),d=l,u=t.computeSize,l=l.computeFilterOpts.destroyOnClose;return e("div",{ref:"refElem",class:["vxe-table--filter-wrapper","filter--prevent-default",c&&c.className?c.className:"",(0,_utils.getClass)(p,i),{["size--"+u]:u,"is--animat":d.animat,"is--multiple":s,"is--active":a}],style:r.style},r.visible&&(!l||a)&&n?renderOptions(t,e,o,c).concat(renderFooter(t,e)):[])},methods:{filterCheckAllEvent(e,t){var l=this.filterStore;l.options.forEach(e=>{e._checked=t,e.checked=t}),l.isAllSelected=t,l.isIndeterminate=!1},changeRadioOption(e,t,l){var i=this.$parent,r=this.filterStore;r.options.forEach(e=>{e._checked=!1}),l._checked=t,i.checkFilterOptions(),this.confirmFilter(e)},changeMultipleOption(e,t,l){var i=this.$parent;l._checked=t,i.checkFilterOptions()},changeAllOption(e,t){this.filterStore.multiple?this.filterCheckAllEvent(e,t):this.resetFilter(e)},changeOption(e,t,l){this.filterStore.multiple?this.changeMultipleOption(e,t,l):this.changeRadioOption(e,t,l)},confirmFilter(e){this.$parent.handleFilterConfirmFilter(e)},resetFilter(e){this.$parent.handleFilterResetFilter(e)}}};
|
package/lib/table/src/methods.js
CHANGED
|
@@ -3347,7 +3347,11 @@ const Methods = {
|
|
|
3347
3347
|
handleReserveStatus($xeTable);
|
|
3348
3348
|
$xeTable.checkSelectionStatus();
|
|
3349
3349
|
return new Promise(resolve => {
|
|
3350
|
-
this.$nextTick().then(() => $xeTable
|
|
3350
|
+
this.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
|
|
3351
|
+
calcCellHeight($xeTable);
|
|
3352
|
+
updateRowOffsetTop($xeTable);
|
|
3353
|
+
return handleRecalculateLayout($xeTable, false);
|
|
3354
|
+
}).then(() => {
|
|
3351
3355
|
let targetScrollLeft = lastScrollLeft;
|
|
3352
3356
|
let targetScrollTop = lastScrollTop;
|
|
3353
3357
|
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
@@ -3360,8 +3364,7 @@ const Methods = {
|
|
|
3360
3364
|
targetScrollTop = 0;
|
|
3361
3365
|
}
|
|
3362
3366
|
reactData.isRowLoading = false;
|
|
3363
|
-
|
|
3364
|
-
updateRowOffsetTop($xeTable);
|
|
3367
|
+
handleRecalculateLayout($xeTable, false);
|
|
3365
3368
|
// 是否变更虚拟滚动
|
|
3366
3369
|
if (oldScrollYLoad === sYLoad) {
|
|
3367
3370
|
(0, _util.restoreScrollLocation)($xeTable, targetScrollLeft, targetScrollTop).then(() => {
|
|
@@ -7506,6 +7509,12 @@ const Methods = {
|
|
|
7506
7509
|
const {
|
|
7507
7510
|
column: newValue
|
|
7508
7511
|
} = params;
|
|
7512
|
+
const {
|
|
7513
|
+
trigger
|
|
7514
|
+
} = currentColumnOpts;
|
|
7515
|
+
if (trigger === 'manual') {
|
|
7516
|
+
return;
|
|
7517
|
+
}
|
|
7509
7518
|
const isChange = oldValue !== newValue;
|
|
7510
7519
|
if (!beforeRowMethod || beforeRowMethod({
|
|
7511
7520
|
column: newValue,
|
|
@@ -7534,6 +7543,12 @@ const Methods = {
|
|
|
7534
7543
|
const {
|
|
7535
7544
|
row: newValue
|
|
7536
7545
|
} = params;
|
|
7546
|
+
const {
|
|
7547
|
+
trigger
|
|
7548
|
+
} = currentRowOpts;
|
|
7549
|
+
if (trigger === 'manual') {
|
|
7550
|
+
return;
|
|
7551
|
+
}
|
|
7537
7552
|
const isChange = oldValue !== newValue;
|
|
7538
7553
|
if (!beforeRowMethod || beforeRowMethod({
|
|
7539
7554
|
row: newValue,
|
|
@@ -9551,7 +9566,8 @@ const Methods = {
|
|
|
9551
9566
|
const $xeTable = this;
|
|
9552
9567
|
const internalData = $xeTable;
|
|
9553
9568
|
const {
|
|
9554
|
-
treeExpandLazyLoadedMaps
|
|
9569
|
+
treeExpandLazyLoadedMaps,
|
|
9570
|
+
treeEATime
|
|
9555
9571
|
} = internalData;
|
|
9556
9572
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
9557
9573
|
const {
|
|
@@ -9560,7 +9576,8 @@ const Methods = {
|
|
|
9560
9576
|
} = params;
|
|
9561
9577
|
const {
|
|
9562
9578
|
lazy,
|
|
9563
|
-
trigger
|
|
9579
|
+
trigger,
|
|
9580
|
+
accordion
|
|
9564
9581
|
} = treeOpts;
|
|
9565
9582
|
if (trigger === 'manual') {
|
|
9566
9583
|
return;
|
|
@@ -9571,7 +9588,17 @@ const Methods = {
|
|
|
9571
9588
|
const expanded = !$xeTable.isTreeExpandByRow(row);
|
|
9572
9589
|
const columnIndex = $xeTable.getColumnIndex(column);
|
|
9573
9590
|
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
9574
|
-
|
|
9591
|
+
if (treeEATime) {
|
|
9592
|
+
clearTimeout(treeEATime);
|
|
9593
|
+
}
|
|
9594
|
+
$xeTable.setTreeExpand(row, expanded).then(() => {
|
|
9595
|
+
if (accordion) {
|
|
9596
|
+
internalData.treeEATime = setTimeout(() => {
|
|
9597
|
+
internalData.treeEATime = undefined;
|
|
9598
|
+
$xeTable.scrollToRow(row);
|
|
9599
|
+
}, 20);
|
|
9600
|
+
}
|
|
9601
|
+
});
|
|
9575
9602
|
$xeTable.dispatchEvent('toggle-tree-expand', {
|
|
9576
9603
|
expanded,
|
|
9577
9604
|
column,
|
|
@@ -10453,7 +10480,8 @@ const Methods = {
|
|
|
10453
10480
|
if (isScrollXBig && mouseOpts.area) {
|
|
10454
10481
|
(0, _log.errLog)('vxe.error.notProp', ['mouse-config.area']);
|
|
10455
10482
|
}
|
|
10456
|
-
$xeTable
|
|
10483
|
+
calcScrollbar($xeTable);
|
|
10484
|
+
return $xeTable.$nextTick(() => {
|
|
10457
10485
|
updateStyle($xeTable);
|
|
10458
10486
|
});
|
|
10459
10487
|
}
|
|
@@ -10572,6 +10600,7 @@ const Methods = {
|
|
|
10572
10600
|
if (isScrollYBig && mouseOpts.area) {
|
|
10573
10601
|
(0, _log.errLog)('vxe.error.notProp', ['mouse-config.area']);
|
|
10574
10602
|
}
|
|
10603
|
+
calcScrollbar($xeTable);
|
|
10575
10604
|
return $xeTable.$nextTick().then(() => {
|
|
10576
10605
|
updateStyle($xeTable);
|
|
10577
10606
|
});
|