vxe-table 4.18.4 → 4.18.6

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 (159) hide show
  1. package/LICENSE +20 -20
  2. package/README.en.md +118 -118
  3. package/README.ja-JP.md +117 -117
  4. package/README.md +268 -268
  5. package/README.zh-TW.md +117 -117
  6. package/es/grid/style.css +4 -0
  7. package/es/grid/style.min.css +1 -1
  8. package/es/index.css +1 -1
  9. package/es/index.min.css +1 -1
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/table/src/table.js +82 -22
  13. package/es/table/src/util.js +3 -4
  14. package/es/table/style.css +48 -18
  15. package/es/ui/index.js +1 -1
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-grid/style.css +4 -0
  18. package/es/vxe-grid/style.min.css +1 -1
  19. package/es/vxe-table/style.css +48 -18
  20. package/lib/grid/style/style.css +4 -0
  21. package/lib/grid/style/style.min.css +1 -1
  22. package/lib/index.common.js +1 -2
  23. package/lib/index.css +1 -1
  24. package/lib/index.min.css +1 -1
  25. package/lib/index.umd.js +2833 -2733
  26. package/lib/index.umd.min.js +1 -1
  27. package/lib/style.css +1 -1
  28. package/lib/style.min.css +1 -1
  29. package/lib/table/src/table.js +7 -6
  30. package/lib/table/src/table.min.js +1 -1
  31. package/lib/table/src/util.js +4 -6
  32. package/lib/table/src/util.min.js +1 -1
  33. package/lib/table/style/style.css +48 -18
  34. package/lib/ui/index.js +1 -1
  35. package/lib/ui/index.min.js +1 -1
  36. package/lib/ui/src/log.js +1 -1
  37. package/lib/ui/src/log.min.js +1 -1
  38. package/lib/v-x-e-table/index.js +1 -2
  39. package/lib/v-x-e-table/index.min.js +1 -1
  40. package/lib/vxe-colgroup/index.js +1 -2
  41. package/lib/vxe-colgroup/index.min.js +1 -1
  42. package/lib/vxe-column/index.js +1 -2
  43. package/lib/vxe-column/index.min.js +1 -1
  44. package/lib/vxe-grid/index.js +1 -2
  45. package/lib/vxe-grid/index.min.js +1 -1
  46. package/lib/vxe-grid/style/style.css +4 -0
  47. package/lib/vxe-grid/style/style.min.css +1 -1
  48. package/lib/vxe-table/index.js +1 -2
  49. package/lib/vxe-table/index.min.js +1 -1
  50. package/lib/vxe-table/style/style.css +48 -18
  51. package/lib/vxe-toolbar/index.js +1 -2
  52. package/lib/vxe-toolbar/index.min.js +1 -1
  53. package/lib/vxe-ui/index.js +1 -2
  54. package/lib/vxe-ui/index.min.js +1 -1
  55. package/lib/vxe-v-x-e-table/index.js +1 -2
  56. package/lib/vxe-v-x-e-table/index.min.js +1 -1
  57. package/package.json +91 -91
  58. package/packages/colgroup/index.ts +22 -22
  59. package/packages/column/index.ts +22 -22
  60. package/packages/components.ts +43 -43
  61. package/packages/grid/index.ts +18 -18
  62. package/packages/grid/src/emits.ts +19 -19
  63. package/packages/grid/src/grid.ts +1768 -1768
  64. package/packages/grid/src/props.ts +23 -23
  65. package/packages/index.ts +4 -4
  66. package/packages/locale/lang/ar-EG.ts +832 -832
  67. package/packages/locale/lang/de-DE.ts +832 -832
  68. package/packages/locale/lang/en-US.ts +832 -832
  69. package/packages/locale/lang/es-ES.ts +832 -832
  70. package/packages/locale/lang/fr-FR.ts +832 -832
  71. package/packages/locale/lang/hu-HU.ts +832 -832
  72. package/packages/locale/lang/hy-AM.ts +832 -832
  73. package/packages/locale/lang/id-ID.ts +832 -832
  74. package/packages/locale/lang/it-IT.ts +832 -832
  75. package/packages/locale/lang/ja-JP.ts +832 -832
  76. package/packages/locale/lang/ko-KR.ts +832 -832
  77. package/packages/locale/lang/ms-MY.ts +832 -832
  78. package/packages/locale/lang/nb-NO.ts +832 -832
  79. package/packages/locale/lang/pt-BR.ts +832 -832
  80. package/packages/locale/lang/ru-RU.ts +832 -832
  81. package/packages/locale/lang/th-TH.ts +832 -832
  82. package/packages/locale/lang/ug-CN.ts +832 -832
  83. package/packages/locale/lang/uk-UA.ts +832 -832
  84. package/packages/locale/lang/uz-UZ.ts +832 -832
  85. package/packages/locale/lang/vi-VN.ts +832 -832
  86. package/packages/locale/lang/zh-CHT.ts +832 -832
  87. package/packages/locale/lang/zh-CN.ts +832 -832
  88. package/packages/locale/lang/zh-HK.ts +3 -3
  89. package/packages/locale/lang/zh-MO.ts +3 -3
  90. package/packages/locale/lang/zh-TC.ts +3 -3
  91. package/packages/locale/lang/zh-TW.ts +3 -3
  92. package/packages/table/index.ts +26 -26
  93. package/packages/table/module/custom/hook.ts +359 -359
  94. package/packages/table/module/custom/panel.ts +1331 -1331
  95. package/packages/table/module/edit/hook.ts +1032 -1032
  96. package/packages/table/module/export/export-panel.ts +567 -567
  97. package/packages/table/module/export/hook.ts +1654 -1654
  98. package/packages/table/module/export/import-panel.ts +266 -266
  99. package/packages/table/module/export/util.ts +24 -24
  100. package/packages/table/module/filter/hook.ts +468 -468
  101. package/packages/table/module/filter/panel.ts +301 -301
  102. package/packages/table/module/keyboard/hook.ts +495 -495
  103. package/packages/table/module/menu/hook.ts +325 -325
  104. package/packages/table/module/menu/panel.ts +201 -201
  105. package/packages/table/module/validator/hook.ts +631 -631
  106. package/packages/table/render/index.ts +1440 -1440
  107. package/packages/table/src/body.ts +932 -932
  108. package/packages/table/src/cell.ts +1290 -1290
  109. package/packages/table/src/column.ts +190 -190
  110. package/packages/table/src/columnInfo.ts +225 -225
  111. package/packages/table/src/emits.ts +123 -123
  112. package/packages/table/src/footer.ts +368 -368
  113. package/packages/table/src/group.ts +59 -59
  114. package/packages/table/src/header.ts +559 -559
  115. package/packages/table/src/props.ts +324 -324
  116. package/packages/table/src/store.ts +14 -14
  117. package/packages/table/src/table.ts +14001 -13939
  118. package/packages/table/src/use/cell-view.ts +44 -44
  119. package/packages/table/src/use/index.ts +1 -1
  120. package/packages/table/src/util.ts +1064 -1064
  121. package/packages/toolbar/index.ts +18 -18
  122. package/packages/toolbar/src/toolbar.ts +701 -701
  123. package/packages/ui/index.ts +530 -530
  124. package/packages/ui/src/anime.ts +52 -52
  125. package/packages/ui/src/comp.ts +3 -3
  126. package/packages/ui/src/dom.ts +236 -236
  127. package/packages/ui/src/log.ts +8 -8
  128. package/packages/ui/src/utils.ts +56 -56
  129. package/packages/ui/src/vn.ts +55 -55
  130. package/packages/v-x-e-table/index.d.ts +4 -4
  131. package/packages/v-x-e-table/index.ts +4 -4
  132. package/styles/all.scss +7 -7
  133. package/styles/base.scss +16 -16
  134. package/styles/components/grid.scss +89 -85
  135. package/styles/components/icon.scss +225 -225
  136. package/styles/components/old-icon.scss +715 -715
  137. package/styles/components/table-module/all.scss +6 -6
  138. package/styles/components/table-module/custom.scss +527 -527
  139. package/styles/components/table-module/export.scss +130 -130
  140. package/styles/components/table-module/filter.scss +130 -130
  141. package/styles/components/table-module/menu.scss +81 -81
  142. package/styles/components/table.scss +2679 -2679
  143. package/styles/components/toolbar.scss +119 -119
  144. package/styles/default.scss +2 -2
  145. package/styles/helpers/baseMixin.scss +95 -95
  146. package/styles/index.scss +4 -4
  147. package/styles/modules.scss +5 -5
  148. package/styles/theme/base.scss +93 -93
  149. package/styles/theme/dark.scss +49 -49
  150. package/styles/theme/light.scss +44 -44
  151. package/styles/variable.scss +43 -43
  152. package/types/all.d.ts +37 -37
  153. package/types/index.d.ts +4 -4
  154. /package/es/{iconfont.1773644074946.ttf → iconfont.1773972993993.ttf} +0 -0
  155. /package/es/{iconfont.1773644074946.woff → iconfont.1773972993993.woff} +0 -0
  156. /package/es/{iconfont.1773644074946.woff2 → iconfont.1773972993993.woff2} +0 -0
  157. /package/lib/{iconfont.1773644074946.ttf → iconfont.1773972993993.ttf} +0 -0
  158. /package/lib/{iconfont.1773644074946.woff → iconfont.1773972993993.woff} +0 -0
  159. /package/lib/{iconfont.1773644074946.woff2 → iconfont.1773972993993.woff2} +0 -0
@@ -1,301 +1,301 @@
1
- import { h, ref, computed, inject, Teleport, PropType } from 'vue'
2
- import { defineVxeComponent } from '../../../ui/src/comp'
3
- import { VxeUI } from '../../../ui'
4
- import { formatText, isEnableConf } from '../../../ui/src/utils'
5
- import { getPropClass, toCssUnit } from '../../../ui/src/dom'
6
- import { getSlotVNs } from '../../../ui/src/vn'
7
- import { warnLog } from '../../../ui/src/log'
8
- import XEUtils from 'xe-utils'
9
-
10
- import type { VxeGlobalRendererOptions } from 'vxe-pc-ui'
11
- import type { VxeTableConstructor, VxeTableMethods, VxeTablePrivateMethods, VxeColumnPropTypes, VxeTableDefines } from '../../../../types'
12
-
13
- const { getI18n, getIcon, renderer, renderEmptyElement } = VxeUI
14
-
15
- export default defineVxeComponent({
16
- name: 'VxeTableFilterPanel',
17
- props: {
18
- filterStore: {
19
- type: Object as PropType<VxeTableDefines.FilterStoreObj>,
20
- default: () => ({} as VxeTableDefines.FilterStoreObj)
21
- }
22
- },
23
- setup (props, context) {
24
- const xID = XEUtils.uniqueId()
25
-
26
- const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods)
27
- const { reactData: tableReactData, internalData: tableInternalData, getComputeMaps } = $xeTable
28
- const { computeFilterOpts } = getComputeMaps()
29
-
30
- const refElem = ref<HTMLDivElement>()
31
-
32
- const refMaps = {
33
- refElem
34
- }
35
-
36
- const $xeFilterPanel: any = {
37
- xID,
38
- props,
39
- context,
40
- getRefMaps: () => refMaps
41
- }
42
-
43
- const computeHasCheckOption = computed(() => {
44
- const { filterStore } = props
45
- const { column } = filterStore
46
- return column && column.filters && column.filters.some((option) => option.checked)
47
- })
48
-
49
- // 全部筛选事件
50
- const filterCheckAllEvent = (evnt: Event, value: any) => {
51
- const { filterStore } = props
52
- const { column } = filterStore
53
- if (column && column.filters) {
54
- column.filters.forEach((option: any) => {
55
- option._checked = value
56
- option.checked = value
57
- })
58
- }
59
- filterStore.isAllSelected = value
60
- filterStore.isIndeterminate = false
61
- }
62
-
63
- /*************************
64
- * Publish methods
65
- *************************/
66
- // 确认筛选
67
- const confirmFilter = (evnt: Event) => {
68
- const { filterStore } = props
69
- if (!evnt) {
70
- warnLog('vxe.error.delFunc', ['confirmFilter', 'saveFilterPanelByEvent'])
71
- }
72
- $xeTable.handleFilterConfirmFilter(evnt || new Event('click'), filterStore.column || null)
73
- }
74
-
75
- // (单选)筛选发生改变
76
- const changeRadioOption = (evnt: Event, checked: boolean, item: any) => {
77
- $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
78
- }
79
-
80
- /**
81
- * 重置筛选
82
- * 当筛选面板中的重置按钮被按下时触发
83
- * @param {Event} evnt 事件
84
- */
85
- const resetFilter = (evnt: Event) => {
86
- const { filterStore } = props
87
- $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
88
- }
89
-
90
- // (多选)筛选发生改变
91
- const changeMultipleOption = (evnt: Event, checked: boolean, item: any) => {
92
- $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
93
- }
94
-
95
- // 筛选发生改变
96
- const changeOption = (evnt: Event, checked: boolean, item: any) => {
97
- $xeTable.handleFilterChangeOption(evnt, checked, item)
98
- }
99
-
100
- const changeAllOption = (evnt: Event, checked: boolean) => {
101
- const { filterStore } = props
102
- const { column } = filterStore
103
- if (column && column.filterMultiple) {
104
- filterCheckAllEvent(evnt, checked)
105
- } else {
106
- resetFilter(evnt)
107
- }
108
- }
109
- /*************************
110
- * Publish methods
111
- *************************/
112
-
113
- const filterPanelMethods = {
114
- changeRadioOption,
115
- changeMultipleOption,
116
- changeAllOption,
117
- changeOption,
118
- confirmFilter,
119
- resetFilter
120
- }
121
- Object.assign($xeFilterPanel, filterPanelMethods)
122
-
123
- const renderOptions = (filterRender: VxeColumnPropTypes.FilterRender | null, compConf: VxeGlobalRendererOptions | null) => {
124
- const { filterStore } = props
125
- const { column, maxHeight } = filterStore
126
- if (!column) {
127
- return []
128
- }
129
- const { filterMultiple, filters, slots } = column
130
- const filterOptions = (filters || []) as VxeTableDefines.FilterOption[]
131
- const filterSlot = slots ? slots.filter : null
132
- const params = Object.assign({}, tableInternalData._currFilterParams, { option: filterOptions[0], $panel: $xeFilterPanel, $table: $xeTable })
133
- const rtFilter = compConf ? (compConf.renderTableFilter || compConf.renderFilter) : null
134
- if (filterSlot) {
135
- return [
136
- h('div', {
137
- class: 'vxe-table--filter-template',
138
- style: maxHeight
139
- ? {
140
- maxHeight: toCssUnit(maxHeight)
141
- }
142
- : {}
143
- }, $xeTable.callSlot(filterSlot, params))
144
- ]
145
- } else if (filterRender && rtFilter) {
146
- return [
147
- h('div', {
148
- class: 'vxe-table--filter-template',
149
- style: maxHeight
150
- ? {
151
- maxHeight: toCssUnit(maxHeight)
152
- }
153
- : {}
154
- }, getSlotVNs(rtFilter(filterRender, params)))
155
- ]
156
- }
157
- const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked)
158
- const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate
159
- return [
160
- h('ul', {
161
- class: 'vxe-table--filter-header'
162
- }, [
163
- h('li', {
164
- class: ['vxe-table--filter-option', {
165
- 'is--checked': isAllChecked,
166
- 'is--indeterminate': isAllIndeterminate
167
- }],
168
- title: getI18n(filterMultiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter'),
169
- onClick: (evnt: MouseEvent) => {
170
- changeAllOption(evnt, !filterStore.isAllSelected)
171
- }
172
- }, (filterMultiple
173
- ? [
174
- h('span', {
175
- class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
176
- })
177
- ]
178
- : []).concat([
179
- h('span', {
180
- class: 'vxe-checkbox--label'
181
- }, getI18n('vxe.table.allFilter'))
182
- ]))
183
- ]),
184
- h('ul', {
185
- class: 'vxe-table--filter-body',
186
- style: maxHeight
187
- ? {
188
- maxHeight: toCssUnit(maxHeight)
189
- }
190
- : {}
191
- }, filterOptions.map((item: any) => {
192
- const isChecked = item._checked
193
- const isIndeterminate = false
194
- return h('li', {
195
- class: ['vxe-table--filter-option', {
196
- 'is--checked': item._checked
197
- }],
198
- title: item.label,
199
- onClick: (evnt: MouseEvent) => {
200
- changeOption(evnt, !item._checked, item)
201
- }
202
- }, (filterMultiple
203
- ? [
204
- h('span', {
205
- class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
206
- })
207
- ]
208
- : []).concat([
209
- h('span', {
210
- class: 'vxe-checkbox--label'
211
- }, formatText(item.label, 1))
212
- ]))
213
- }))
214
- ]
215
- }
216
-
217
- const renderFooters = () => {
218
- const { filterStore } = props
219
- const { column } = filterStore
220
- if (!column) {
221
- return []
222
- }
223
- const filterOpts = computeFilterOpts.value
224
- const hasCheckOption = computeHasCheckOption.value
225
- const { filterRender, filterMultiple } = column
226
- const { confirmButtonText, resetButtonText, showFooter } = filterOpts
227
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
228
- const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate
229
- let showFlFoot = !!filterMultiple
230
- if (XEUtils.isBoolean(showFooter)) {
231
- showFlFoot = showFooter
232
- } else if (compConf) {
233
- showFlFoot = !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false)
234
- }
235
- return showFlFoot
236
- ? [
237
- h('div', {
238
- class: 'vxe-table--filter-footer'
239
- }, [
240
- h('button', {
241
- class: {
242
- 'is--disabled': isDisabled
243
- },
244
- disabled: isDisabled,
245
- onClick: confirmFilter
246
- }, confirmButtonText || getI18n('vxe.table.confirmFilter')),
247
- h('button', {
248
- onClick: resetFilter
249
- }, resetButtonText || getI18n('vxe.table.resetFilter'))
250
- ])
251
- ]
252
- : []
253
- }
254
-
255
- const renderVN = () => {
256
- const { filterStore } = props
257
- const { initStore } = tableReactData
258
- const { visible, column } = filterStore
259
- if (!column) {
260
- return renderEmptyElement($xeFilterPanel)
261
- }
262
- const filterRender = column ? column.filterRender : null
263
- const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
264
- const filterClassName = compConf ? (compConf.tableFilterClassName || compConf.filterClassName) : ''
265
- const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable })
266
- const tableProps = $xeTable.props
267
- const { computeSize } = $xeTable.getComputeMaps()
268
- const vSize = computeSize.value
269
- const filterOpts = computeFilterOpts.value
270
- const { transfer, destroyOnClose, className } = filterOpts
271
- return h(Teleport, {
272
- to: 'body',
273
- disabled: !transfer
274
- }, [
275
- h('div', {
276
- ref: refElem,
277
- class: [
278
- 'vxe-table--filter-wrapper',
279
- 'filter--prevent-default',
280
- className,
281
- getPropClass(filterClassName, params),
282
- {
283
- [`size--${vSize}`]: vSize,
284
- 'is--animat': tableProps.animat,
285
- 'is--multiple': column.filterMultiple,
286
- 'is--active': visible
287
- }
288
- ],
289
- style: filterStore.style
290
- }, initStore.filter && (destroyOnClose ? visible : true) && column ? renderOptions(filterRender, compConf).concat(renderFooters()) : [])
291
- ])
292
- }
293
-
294
- $xeFilterPanel.renderVN = renderVN
295
-
296
- return $xeFilterPanel
297
- },
298
- render () {
299
- return this.renderVN()
300
- }
301
- })
1
+ import { h, ref, computed, inject, Teleport, PropType } from 'vue'
2
+ import { defineVxeComponent } from '../../../ui/src/comp'
3
+ import { VxeUI } from '../../../ui'
4
+ import { formatText, isEnableConf } from '../../../ui/src/utils'
5
+ import { getPropClass, toCssUnit } from '../../../ui/src/dom'
6
+ import { getSlotVNs } from '../../../ui/src/vn'
7
+ import { warnLog } from '../../../ui/src/log'
8
+ import XEUtils from 'xe-utils'
9
+
10
+ import type { VxeGlobalRendererOptions } from 'vxe-pc-ui'
11
+ import type { VxeTableConstructor, VxeTableMethods, VxeTablePrivateMethods, VxeColumnPropTypes, VxeTableDefines } from '../../../../types'
12
+
13
+ const { getI18n, getIcon, renderer, renderEmptyElement } = VxeUI
14
+
15
+ export default defineVxeComponent({
16
+ name: 'VxeTableFilterPanel',
17
+ props: {
18
+ filterStore: {
19
+ type: Object as PropType<VxeTableDefines.FilterStoreObj>,
20
+ default: () => ({} as VxeTableDefines.FilterStoreObj)
21
+ }
22
+ },
23
+ setup (props, context) {
24
+ const xID = XEUtils.uniqueId()
25
+
26
+ const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods)
27
+ const { reactData: tableReactData, internalData: tableInternalData, getComputeMaps } = $xeTable
28
+ const { computeFilterOpts } = getComputeMaps()
29
+
30
+ const refElem = ref<HTMLDivElement>()
31
+
32
+ const refMaps = {
33
+ refElem
34
+ }
35
+
36
+ const $xeFilterPanel: any = {
37
+ xID,
38
+ props,
39
+ context,
40
+ getRefMaps: () => refMaps
41
+ }
42
+
43
+ const computeHasCheckOption = computed(() => {
44
+ const { filterStore } = props
45
+ const { column } = filterStore
46
+ return column && column.filters && column.filters.some((option) => option.checked)
47
+ })
48
+
49
+ // 全部筛选事件
50
+ const filterCheckAllEvent = (evnt: Event, value: any) => {
51
+ const { filterStore } = props
52
+ const { column } = filterStore
53
+ if (column && column.filters) {
54
+ column.filters.forEach((option: any) => {
55
+ option._checked = value
56
+ option.checked = value
57
+ })
58
+ }
59
+ filterStore.isAllSelected = value
60
+ filterStore.isIndeterminate = false
61
+ }
62
+
63
+ /*************************
64
+ * Publish methods
65
+ *************************/
66
+ // 确认筛选
67
+ const confirmFilter = (evnt: Event) => {
68
+ const { filterStore } = props
69
+ if (!evnt) {
70
+ warnLog('vxe.error.delFunc', ['confirmFilter', 'saveFilterPanelByEvent'])
71
+ }
72
+ $xeTable.handleFilterConfirmFilter(evnt || new Event('click'), filterStore.column || null)
73
+ }
74
+
75
+ // (单选)筛选发生改变
76
+ const changeRadioOption = (evnt: Event, checked: boolean, item: any) => {
77
+ $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
78
+ }
79
+
80
+ /**
81
+ * 重置筛选
82
+ * 当筛选面板中的重置按钮被按下时触发
83
+ * @param {Event} evnt 事件
84
+ */
85
+ const resetFilter = (evnt: Event) => {
86
+ const { filterStore } = props
87
+ $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
88
+ }
89
+
90
+ // (多选)筛选发生改变
91
+ const changeMultipleOption = (evnt: Event, checked: boolean, item: any) => {
92
+ $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
93
+ }
94
+
95
+ // 筛选发生改变
96
+ const changeOption = (evnt: Event, checked: boolean, item: any) => {
97
+ $xeTable.handleFilterChangeOption(evnt, checked, item)
98
+ }
99
+
100
+ const changeAllOption = (evnt: Event, checked: boolean) => {
101
+ const { filterStore } = props
102
+ const { column } = filterStore
103
+ if (column && column.filterMultiple) {
104
+ filterCheckAllEvent(evnt, checked)
105
+ } else {
106
+ resetFilter(evnt)
107
+ }
108
+ }
109
+ /*************************
110
+ * Publish methods
111
+ *************************/
112
+
113
+ const filterPanelMethods = {
114
+ changeRadioOption,
115
+ changeMultipleOption,
116
+ changeAllOption,
117
+ changeOption,
118
+ confirmFilter,
119
+ resetFilter
120
+ }
121
+ Object.assign($xeFilterPanel, filterPanelMethods)
122
+
123
+ const renderOptions = (filterRender: VxeColumnPropTypes.FilterRender | null, compConf: VxeGlobalRendererOptions | null) => {
124
+ const { filterStore } = props
125
+ const { column, maxHeight } = filterStore
126
+ if (!column) {
127
+ return []
128
+ }
129
+ const { filterMultiple, filters, slots } = column
130
+ const filterOptions = (filters || []) as VxeTableDefines.FilterOption[]
131
+ const filterSlot = slots ? slots.filter : null
132
+ const params = Object.assign({}, tableInternalData._currFilterParams, { option: filterOptions[0], $panel: $xeFilterPanel, $table: $xeTable })
133
+ const rtFilter = compConf ? (compConf.renderTableFilter || compConf.renderFilter) : null
134
+ if (filterSlot) {
135
+ return [
136
+ h('div', {
137
+ class: 'vxe-table--filter-template',
138
+ style: maxHeight
139
+ ? {
140
+ maxHeight: toCssUnit(maxHeight)
141
+ }
142
+ : {}
143
+ }, $xeTable.callSlot(filterSlot, params))
144
+ ]
145
+ } else if (filterRender && rtFilter) {
146
+ return [
147
+ h('div', {
148
+ class: 'vxe-table--filter-template',
149
+ style: maxHeight
150
+ ? {
151
+ maxHeight: toCssUnit(maxHeight)
152
+ }
153
+ : {}
154
+ }, getSlotVNs(rtFilter(filterRender, params)))
155
+ ]
156
+ }
157
+ const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked)
158
+ const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate
159
+ return [
160
+ h('ul', {
161
+ class: 'vxe-table--filter-header'
162
+ }, [
163
+ h('li', {
164
+ class: ['vxe-table--filter-option', {
165
+ 'is--checked': isAllChecked,
166
+ 'is--indeterminate': isAllIndeterminate
167
+ }],
168
+ title: getI18n(filterMultiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter'),
169
+ onClick: (evnt: MouseEvent) => {
170
+ changeAllOption(evnt, !filterStore.isAllSelected)
171
+ }
172
+ }, (filterMultiple
173
+ ? [
174
+ h('span', {
175
+ class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
176
+ })
177
+ ]
178
+ : []).concat([
179
+ h('span', {
180
+ class: 'vxe-checkbox--label'
181
+ }, getI18n('vxe.table.allFilter'))
182
+ ]))
183
+ ]),
184
+ h('ul', {
185
+ class: 'vxe-table--filter-body',
186
+ style: maxHeight
187
+ ? {
188
+ maxHeight: toCssUnit(maxHeight)
189
+ }
190
+ : {}
191
+ }, filterOptions.map((item: any) => {
192
+ const isChecked = item._checked
193
+ const isIndeterminate = false
194
+ return h('li', {
195
+ class: ['vxe-table--filter-option', {
196
+ 'is--checked': item._checked
197
+ }],
198
+ title: item.label,
199
+ onClick: (evnt: MouseEvent) => {
200
+ changeOption(evnt, !item._checked, item)
201
+ }
202
+ }, (filterMultiple
203
+ ? [
204
+ h('span', {
205
+ class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
206
+ })
207
+ ]
208
+ : []).concat([
209
+ h('span', {
210
+ class: 'vxe-checkbox--label'
211
+ }, formatText(item.label, 1))
212
+ ]))
213
+ }))
214
+ ]
215
+ }
216
+
217
+ const renderFooters = () => {
218
+ const { filterStore } = props
219
+ const { column } = filterStore
220
+ if (!column) {
221
+ return []
222
+ }
223
+ const filterOpts = computeFilterOpts.value
224
+ const hasCheckOption = computeHasCheckOption.value
225
+ const { filterRender, filterMultiple } = column
226
+ const { confirmButtonText, resetButtonText, showFooter } = filterOpts
227
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
228
+ const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate
229
+ let showFlFoot = !!filterMultiple
230
+ if (XEUtils.isBoolean(showFooter)) {
231
+ showFlFoot = showFooter
232
+ } else if (compConf) {
233
+ showFlFoot = !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false)
234
+ }
235
+ return showFlFoot
236
+ ? [
237
+ h('div', {
238
+ class: 'vxe-table--filter-footer'
239
+ }, [
240
+ h('button', {
241
+ class: {
242
+ 'is--disabled': isDisabled
243
+ },
244
+ disabled: isDisabled,
245
+ onClick: confirmFilter
246
+ }, confirmButtonText || getI18n('vxe.table.confirmFilter')),
247
+ h('button', {
248
+ onClick: resetFilter
249
+ }, resetButtonText || getI18n('vxe.table.resetFilter'))
250
+ ])
251
+ ]
252
+ : []
253
+ }
254
+
255
+ const renderVN = () => {
256
+ const { filterStore } = props
257
+ const { initStore } = tableReactData
258
+ const { visible, column } = filterStore
259
+ if (!column) {
260
+ return renderEmptyElement($xeFilterPanel)
261
+ }
262
+ const filterRender = column ? column.filterRender : null
263
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
264
+ const filterClassName = compConf ? (compConf.tableFilterClassName || compConf.filterClassName) : ''
265
+ const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable })
266
+ const tableProps = $xeTable.props
267
+ const { computeSize } = $xeTable.getComputeMaps()
268
+ const vSize = computeSize.value
269
+ const filterOpts = computeFilterOpts.value
270
+ const { transfer, destroyOnClose, className } = filterOpts
271
+ return h(Teleport, {
272
+ to: 'body',
273
+ disabled: !transfer
274
+ }, [
275
+ h('div', {
276
+ ref: refElem,
277
+ class: [
278
+ 'vxe-table--filter-wrapper',
279
+ 'filter--prevent-default',
280
+ className,
281
+ getPropClass(filterClassName, params),
282
+ {
283
+ [`size--${vSize}`]: vSize,
284
+ 'is--animat': tableProps.animat,
285
+ 'is--multiple': column.filterMultiple,
286
+ 'is--active': visible
287
+ }
288
+ ],
289
+ style: filterStore.style
290
+ }, initStore.filter && (destroyOnClose ? visible : true) && column ? renderOptions(filterRender, compConf).concat(renderFooters()) : [])
291
+ ])
292
+ }
293
+
294
+ $xeFilterPanel.renderVN = renderVN
295
+
296
+ return $xeFilterPanel
297
+ },
298
+ render () {
299
+ return this.renderVN()
300
+ }
301
+ })