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.
Files changed (45) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/filter/mixin.js +29 -10
  6. package/es/table/module/filter/panel.js +173 -142
  7. package/es/table/src/methods.js +31 -7
  8. package/es/table/style.css +18 -0
  9. package/es/table/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +18 -0
  13. package/es/vxe-table/style.min.css +1 -1
  14. package/lib/index.css +1 -1
  15. package/lib/index.min.css +1 -1
  16. package/lib/index.umd.js +226 -142
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/style.min.css +1 -1
  20. package/lib/table/module/filter/mixin.js +33 -9
  21. package/lib/table/module/filter/mixin.min.js +1 -1
  22. package/lib/table/module/filter/panel.js +153 -122
  23. package/lib/table/module/filter/panel.min.js +1 -1
  24. package/lib/table/src/methods.js +36 -7
  25. package/lib/table/src/methods.min.js +1 -1
  26. package/lib/table/style/style.css +18 -0
  27. package/lib/table/style/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/vxe-table/style/style.css +18 -0
  33. package/lib/vxe-table/style/style.min.css +1 -1
  34. package/package.json +2 -2
  35. package/packages/table/module/filter/mixin.ts +27 -10
  36. package/packages/table/module/filter/panel.ts +178 -143
  37. package/packages/table/src/methods.ts +31 -7
  38. package/styles/components/table-module/filter.scss +16 -0
  39. package/styles/components/table.scss +6 -1
  40. /package/es/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  41. /package/es/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  42. /package/es/{iconfont.1744336394111.woff2 → iconfont.1744428010256.woff2} +0 -0
  43. /package/lib/{iconfont.1744336394111.ttf → iconfont.1744428010256.ttf} +0 -0
  44. /package/lib/{iconfont.1744336394111.woff → iconfont.1744428010256.woff} +0 -0
  45. /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 = btnRect.left - tableRect.left - centerWidth;
146
- const top = btnRect.top - tableRect.top + btnElem.clientHeight;
147
- // 判断面板不能大于表格高度
148
- const maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
149
- if (left < 1) {
150
- left = 1;
151
- } else if (left > el.clientWidth - filterWidth - 1) {
152
- left = el.clientWidth - filterWidth - 1;
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(t,r,l){let u=this;var n=u,d=u;let e=this.filterStore;if(e.column===r&&e.visible)e.visible=!1;else{let{initStore:e,filterStore:c}=n,h=d.elemStore;if(c.column===r&&c.visible)c.visible=!1;else{let s=u.$refs.refElem,o=s.getBoundingClientRect(),a=t.currentTarget;var{filters:n,filterMultiple:f,filterRender:m}=r,m=(0,_utils.isEnableConf)(m)?renderer.get(m.name):null;let i=r.filterRecoverMethod||(m?m.tableFilterRecoverMethod||m.filterRecoverMethod:null);d._currFilterParams=l,Object.assign(c,{multiple:f,options:n,column:r,style:null}),c.options.forEach(e=>{var{_checked:t,checked:l}=e;(e._checked=l)||t===l||i&&i({option:e,column:r,$table:u})}),this.checkFilterOptions(),c.visible=!0,e.filter=!0,u.$nextTick(()=>{if((0,_util.getRefElem)(h["main-header-scroll"])){var t=u.$refs.refTableFilter,t=t?t.$el:null;if(t){var l=a.getBoundingClientRect(),i=t.offsetWidth,r=t.querySelector(".vxe-table--filter-header"),t=t.querySelector(".vxe-table--filter-footer"),n=i/2;let e=l.left-o.left-n;n=l.top-o.top+a.clientHeight,l=Math.max(40,s.clientHeight-n-(r?r.clientHeight:0)-(t?t.clientHeight:0)-14);e<1?e=1:e>s.clientWidth-i-1&&(e=s.clientWidth-i-1),c.style={top:(0,_dom.toCssUnit)(n),left:(0,_dom.toCssUnit)(e)},c.maxHeight=l}}})}u.dispatchEvent("filter-visible",{column:r,field:r.field,property:r.field,filterList:u.getCheckedFilters(),visible:c.visible},t)}},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 c=[],h=[];e.filters.forEach(e=>{e.checked&&(c.push(e.value),h.push(e.data))});var u=this.getCheckedFilters(),e={$table:this,$event:t,column:e,field:a,property:a,values:c,datas:h,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()}}};
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
- hasCheckOption() {
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 $panel = this;
30
- const $xeTable = this.$parent;
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
- } = this;
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
- 'is--animat': $xeTable.animat,
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 ? this.renderOptions(h, filterRender, compConf).concat(this.renderFooter(h)) : []);
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;var _default=exports.default={name:"VxeTableFilterPanel",props:{filterStore:Object},computed:{hasCheckOption(){var e=this.filterStore;return e&&e.options.some(e=>e.checked)}},render(e){var t=this.$parent,l=t,i=this.filterStore,{visible:r,multiple:s,column:a}=i,n=a?a.filterRender:null,c=(0,_utils.isEnableConf)(n)?renderer.get(n.name):null,o=c?c.tableFilterClassName||c.filterClassName:"",l=Object.assign({},l._currFilterParams,{$panel:this,$table:t}),h=t.computeFilterOpts.destroyOnClose;return e("div",{class:["vxe-table--filter-wrapper","filter--prevent-default",c&&c.className?c.className:"",(0,_utils.getClass)(o,l),{"is--animat":t.animat,"is--multiple":s,"is--active":r}],style:i.style},i.visible&&(!h||r)&&a?this.renderOptions(e,n,c).concat(this.renderFooter(e)):[])},methods:{renderOptions(l,e,t){var i=this.$parent;let r=this.filterStore,{column:s,multiple:a,maxHeight:n}=r;var c=s?s.slots:null,c=c?c.filter:null,o=Object.assign({},i._currFilterParams,{$panel:this,$table:i}),t=t?t.renderTableFilter||t.renderFilter:null;return c?[l("div",{class:"vxe-table--filter-template",style:n?{maxHeight:n+"px"}:{}},i.callSlot(c,o,l))]:t?[l("div",{class:"vxe-table--filter-template",style:n?{maxHeight:n+"px"}:{}},(0,_vn.getSlotVNs)(t.call(i,l,e,o)))]:(c=a?r.isAllSelected:!r.options.some(e=>e._checked),t=a&&r.isIndeterminate,[l("ul",{class:"vxe-table--filter-header"},[l("li",{class:["vxe-table--filter-option",{"is--checked":c,"is--indeterminate":t}],attrs:{title:getI18n(a?"vxe.table.allTitle":"vxe.table.allFilter")},on:{click:e=>{this.changeAllOption(e,!r.isAllSelected)}}},(a?[l("span",{class:["vxe-checkbox--icon",t?getIcon().TABLE_CHECKBOX_INDETERMINATE:c?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([l("span",{class:"vxe-checkbox--label"},getI18n("vxe.table.allFilter"))]))]),l("ul",{class:"vxe-table--filter-body",style:n?{maxHeight:n+"px"}:{}},r.options.map(t=>{var e=t._checked;return l("li",{class:["vxe-table--filter-option",{"is--checked":e}],attrs:{title:t.label},on:{click:e=>{this.changeOption(e,!t._checked,t)}}},(a?[l("span",{class:["vxe-checkbox--icon",e?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([l("span",{class:"vxe-checkbox--label"},(0,_utils.formatText)(t.label,1))]))}))])},renderFooter(e){var{hasCheckOption:t,filterStore:l}=this,{column:i,multiple:r}=l,s=this.$parent.computeFilterOpts,i=i.filterRender,i=(0,_utils.isEnableConf)(i)?renderer.get(i.name):null,t=!t&&!l.isAllSelected&&!l.isIndeterminate;return r&&(!i||!1!==i.showTableFilterFooter&&!1!==i.showFilterFooter&&!1!==i.isFooter)?[e("div",{class:"vxe-table--filter-footer"},[e("button",{class:{"is--disabled":t},attrs:{disabled:t},on:{click:this.confirmFilter}},s.confirmButtonText||getI18n("vxe.table.confirmFilter")),e("button",{on:{click:this.resetFilter}},s.resetButtonText||getI18n("vxe.table.resetFilter"))])]:[]},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)}}};
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)}}};
@@ -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.recalculate()).then(() => {
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
- calcCellHeight($xeTable);
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
- $xeTable.setTreeExpand(row, expanded);
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.$nextTick(() => {
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
  });