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