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,468 +1,468 @@
1
- import { nextTick } from 'vue'
2
- import XEUtils from 'xe-utils'
3
- import { VxeUI } from '../../../ui'
4
- import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util'
5
- import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom'
6
- import { isEnableConf } from '../../../ui/src/utils'
7
-
8
- import type { TableFilterMethods, TableFilterPrivateMethods, VxeTableDefines } from '../../../../types'
9
-
10
- const { renderer, hooks } = VxeUI
11
-
12
- const tableFilterMethodKeys: (keyof TableFilterMethods)[] = ['openFilter', 'setFilter', 'clearFilter', 'saveFilter', 'saveFilterByEvent', 'saveFilterPanel', 'saveFilterPanelByEvent', 'resetFilter', 'resetFilterByEvent', 'resetFilterPanel', 'resetFilterPanelByEvent', 'getCheckedFilters', 'updateFilterOptionStatus']
13
-
14
- const sourceType = 'table'
15
-
16
- hooks.add('tableFilterModule', {
17
- setupTable ($xeTable) {
18
- const $xeGrid = $xeTable.xeGrid
19
- const $xeGantt = $xeTable.xeGantt
20
- const $xeGGWrapper = $xeGrid || $xeGantt
21
-
22
- const { props, reactData, internalData } = $xeTable
23
- const { refElem, refTableFilter } = $xeTable.getRefMaps()
24
- const { computeFilterOpts, computeMouseOpts } = $xeTable.getComputeMaps()
25
-
26
- const filterPrivateMethods: TableFilterPrivateMethods = {
27
- checkFilterOptions () {
28
- const { filterStore } = reactData
29
- const { column } = filterStore
30
- if (column) {
31
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
32
- filterStore.isAllSelected = filterOptions.every((item) => item._checked)
33
- filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some((item) => item._checked)
34
- }
35
- },
36
- handleOpenFilterColumn (evnt: MouseEvent, btnEl: HTMLDivElement | null, colEl: HTMLDivElement, column: VxeTableDefines.ColumnInfo, params: any) {
37
- const { initStore, filterStore } = reactData
38
- const { elemStore } = internalData
39
- if (filterStore.column === column && filterStore.visible) {
40
- filterStore.visible = false
41
- } else {
42
- const tableEl = refElem.value
43
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
44
- const filterOpts = computeFilterOpts.value
45
- const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts
46
- const currEl = btnEl || colEl
47
- const tableRect = tableEl.getBoundingClientRect()
48
- const filterRender = column ? column.filterRender : null
49
- const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
50
- $xeTable.handleFilterOptions(column)
51
- internalData._currFilterParams = params
52
- filterStore.style = null
53
- filterStore.visible = true
54
- initStore.filter = true
55
- nextTick(() => {
56
- const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
57
- if (!headerScrollElem) {
58
- return
59
- }
60
- const tableFilter = refTableFilter.value
61
- const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value as HTMLDivElement : null
62
- if (!filterWrapperElem) {
63
- return
64
- }
65
- const btnRect = currEl.getBoundingClientRect()
66
- const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
67
- const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
68
- const filterWidth = filterWrapperElem.offsetWidth
69
- const centerWidth = btnEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2)
70
- let left = 0
71
- let top = 0
72
- let maxHeight: number = 0
73
- /**
74
- * 是否显示筛选按钮图标
75
- * 如果不存在图标,则相对单元格居中显示
76
- */
77
- if (transfer) {
78
- left = btnRect.left - centerWidth + scrollLeft
79
- top = btnRect.top + currEl.clientHeight + scrollTop
80
- 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))
81
- if (left < 16) {
82
- left = 16
83
- } else if (left > (visibleWidth - filterWidth - 16)) {
84
- left = visibleWidth - filterWidth - 16
85
- }
86
- } else {
87
- left = btnRect.left - tableRect.left - centerWidth
88
- top = btnRect.top - tableRect.top + currEl.clientHeight
89
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14)
90
- if (left < 1) {
91
- left = 1
92
- } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
93
- left = tableEl.clientWidth - filterWidth - 1
94
- }
95
- if ($xeGGWrapper) {
96
- const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value
97
- if (wrapperEl) {
98
- const wrapperRect = wrapperEl.getBoundingClientRect()
99
- top += tableRect.top - wrapperRect.top
100
- }
101
- }
102
- }
103
- const fStys: Record<string, any> = {
104
- top: toCssUnit(top),
105
- left: toCssUnit(left)
106
- }
107
- if (zIndex) {
108
- fStys.zIndex = zIndex
109
- }
110
- filterStore.style = fStys
111
- // 筛选面板是自适应表格高度
112
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
113
- maxHeight = 0
114
- } else {
115
- if (customMaxHeight) {
116
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
117
- }
118
- }
119
- // 判断面板不能大于表格高度
120
- filterStore.maxHeight = maxHeight
121
- })
122
- }
123
- $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt)
124
- },
125
- /**
126
- * 点击筛选事件
127
- * 当筛选图标被点击时触发
128
- * 更新选项是否全部状态
129
- * 打开筛选面板
130
- * @param {Event} evnt 事件
131
- * @param {ColumnInfo} column 列配置
132
- * @param {Object} params 参数
133
- */
134
- triggerFilterEvent (evnt: MouseEvent, column: VxeTableDefines.ColumnInfo, params) {
135
- const { elemStore } = internalData
136
- const { fixed } = column
137
- const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
138
- const btnElem = evnt.currentTarget as HTMLDivElement
139
- const colEl = headerWrapperElem ? headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`) : null
140
- $xeTable.handleOpenFilterColumn(evnt, btnElem, colEl || btnElem, column, params)
141
- },
142
- handleClearFilter (column) {
143
- if (column) {
144
- const { filters, filterRender } = column
145
- if (filters) {
146
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
147
- const frMethod = column.filterResetMethod || (compConf ? (compConf.tableFilterResetMethod || compConf.filterResetMethod) : null)
148
- filters.forEach((item: any) => {
149
- item._checked = false
150
- item.checked = false
151
- if (!frMethod) {
152
- item.data = XEUtils.clone(item.resetValue, true)
153
- }
154
- })
155
- if (frMethod) {
156
- frMethod({ options: filters, column, $table: $xeTable })
157
- }
158
- }
159
- }
160
- },
161
- handleColumnConfirmFilter (column, evnt) {
162
- const { mouseConfig } = props
163
- const { scrollXLoad: oldScrollXLoad, scrollYLoad: oldScrollYLoad } = reactData
164
- const filterOpts = computeFilterOpts.value
165
- const mouseOpts = computeMouseOpts.value
166
- const { field, filters } = column
167
- const filterOptions = filters || []
168
- const values: any[] = []
169
- const datas: any[] = []
170
- filterOptions.forEach((item) => {
171
- if (item.checked) {
172
- values.push(item.value)
173
- datas.push(item.data)
174
- }
175
- })
176
- const filterList = $xeTable.getCheckedFilters()
177
- const params = { $table: $xeTable, $event: evnt as Event, column, field, property: field, values, datas, filters: filterList, filterList }
178
- // 如果是服务端筛选,则跳过本地筛选处理
179
- if (!filterOpts.remote) {
180
- $xeTable.handleTableData(true)
181
- $xeTable.checkSelectionStatus()
182
- }
183
- if (mouseConfig && mouseOpts.area && $xeTable.handleFilterEvent) {
184
- $xeTable.handleFilterEvent(evnt as Event, params)
185
- }
186
- if (evnt) {
187
- $xeTable.dispatchEvent('filter-change', params, evnt)
188
- }
189
- $xeTable.closeFilter()
190
- return $xeTable.updateFooter().then(() => {
191
- const { scrollXLoad, scrollYLoad } = reactData
192
- if ((oldScrollXLoad || scrollXLoad) || (oldScrollYLoad || scrollYLoad)) {
193
- if (oldScrollXLoad || scrollXLoad) {
194
- $xeTable.updateScrollXSpace()
195
- }
196
- if (oldScrollYLoad || scrollYLoad) {
197
- $xeTable.updateScrollYSpace()
198
- }
199
- return $xeTable.refreshScroll()
200
- }
201
- }).then(() => {
202
- $xeTable.updateCellAreas()
203
- return $xeTable.recalculate(true)
204
- }).then(() => {
205
- // 存在滚动行为未结束情况
206
- setTimeout(() => $xeTable.recalculate(), 50)
207
- })
208
- },
209
- /**
210
- * 确认筛选
211
- * 当筛选面板中的确定按钮被按下时触发
212
- */
213
- confirmFilterEvent (evnt, column) {
214
- if (column) {
215
- $xeTable.handleColumnConfirmFilter(column, evnt)
216
- }
217
- },
218
- // (单选)筛选发生改变
219
- handleFilterChangeRadioOption (evnt, checked, item) {
220
- const { filterStore } = reactData
221
- const { column } = filterStore
222
- if (column) {
223
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
224
- filterOptions.forEach((option) => {
225
- option._checked = false
226
- })
227
- item._checked = checked
228
- $xeTable.checkFilterOptions()
229
- $xeTable.handleFilterConfirmFilter(evnt, column)
230
- }
231
- },
232
- // (多选)筛选发生改变
233
- handleFilterChangeMultipleOption (evnt, checked, item) {
234
- item._checked = checked
235
- $xeTable.checkFilterOptions()
236
- },
237
- // 筛选发生改变
238
- handleFilterChangeOption (evnt, checked, item) {
239
- const { filterStore } = reactData
240
- const { fullColumnIdData } = internalData
241
- let column = filterStore.column
242
- if (!column) {
243
- const colRest = fullColumnIdData[item._colId]
244
- if (colRest) {
245
- column = colRest.column
246
- filterStore.column = column
247
- }
248
- }
249
- if (column) {
250
- if (column.filterMultiple) {
251
- $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
252
- } else {
253
- $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
254
- }
255
- }
256
- },
257
- // 确认筛选
258
- handleFilterConfirmFilter (evnt, column) {
259
- if (column) {
260
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
261
- filterOptions.forEach((option) => {
262
- option.checked = option._checked
263
- })
264
- $xeTable.confirmFilterEvent(evnt, column)
265
- }
266
- },
267
- /**
268
- * 重置筛选
269
- * 当筛选面板中的重置按钮被按下时触发
270
- */
271
- handleFilterResetFilter (evnt: Event, column) {
272
- if (column) {
273
- $xeTable.handleClearFilter(column)
274
- $xeTable.confirmFilterEvent(evnt, column)
275
- if (evnt) {
276
- $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
277
- }
278
- }
279
- }
280
- }
281
-
282
- const filterMethods: TableFilterMethods = {
283
- /**
284
- * 手动弹出筛选面板
285
- * @param column
286
- */
287
- openFilter (fieldOrColumn) {
288
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
289
- if (column && column.filters) {
290
- const { elemStore } = internalData
291
- const { fixed, filters } = column
292
- return $xeTable.scrollToColumn(column).then(() => {
293
- const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
294
- if (headerWrapperElem) {
295
- const filterBtnElem = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id} .vxe-cell--filter`)
296
- if (filterBtnElem) {
297
- triggerEvent(filterBtnElem, 'click')
298
- } else {
299
- const colEl = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`)
300
- if (colEl) {
301
- let firstFilterOption: VxeTableDefines.FilterOption | null = null
302
- if (filters) {
303
- firstFilterOption = filters[0] as VxeTableDefines.FilterOption
304
- }
305
- const params = {
306
- $table: $xeTable,
307
- $grid: $xeGrid,
308
- $gantt: $xeGantt,
309
- $rowIndex: -1,
310
- column,
311
- columnIndex: $xeTable.getColumnIndex(column),
312
- $columnIndex: $xeTable.getVMColumnIndex(column),
313
- _columnIndex: $xeTable.getVTColumnIndex(column),
314
- firstFilterOption: firstFilterOption as VxeTableDefines.FilterOption,
315
- fixed,
316
- source: sourceType,
317
- type: 'header'
318
- // isHidden
319
- // hasFilter
320
- }
321
- $xeTable.handleOpenFilterColumn(new Event('click'), null, colEl, column, params)
322
- }
323
- }
324
- }
325
- })
326
- }
327
- return nextTick()
328
- },
329
- /**
330
- * 修改筛选条件列表
331
- * @param {ColumnInfo} fieldOrColumn 列或字段名
332
- * @param {Array} options 选项
333
- */
334
- setFilter (fieldOrColumn, options, isUpdate) {
335
- const { filterStore } = reactData
336
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
337
- if (column && column.filters) {
338
- column.filters = toFilters(options || [], column.id)
339
- if (isUpdate) {
340
- return $xeTable.handleColumnConfirmFilter(column, null)
341
- } else {
342
- if (filterStore.visible) {
343
- $xeTable.handleFilterOptions(column)
344
- }
345
- }
346
- }
347
- return nextTick()
348
- },
349
- /**
350
- * 清空指定列的筛选条件
351
- * 如果为空则清空所有列的筛选条件
352
- * @param {String} fieldOrColumn 列或字段名
353
- */
354
- clearFilter (fieldOrColumn) {
355
- const { filterStore } = reactData
356
- const { tableFullColumn } = internalData
357
- const filterOpts = computeFilterOpts.value
358
- let column
359
- if (fieldOrColumn) {
360
- column = handleFieldOrColumn($xeTable, fieldOrColumn)
361
- if (column) {
362
- $xeTable.handleClearFilter(column)
363
- }
364
- } else {
365
- tableFullColumn.forEach($xeTable.handleClearFilter)
366
- }
367
- if (!fieldOrColumn || column !== filterStore.column) {
368
- Object.assign(filterStore, {
369
- isAllSelected: false,
370
- isIndeterminate: false,
371
- style: null,
372
- options: [],
373
- column: null,
374
- multiple: false,
375
- visible: false
376
- })
377
- }
378
- if (!filterOpts.remote) {
379
- return $xeTable.updateData()
380
- }
381
- return nextTick()
382
- },
383
- saveFilter (fieldOrColumn) {
384
- if (fieldOrColumn) {
385
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
386
- $xeTable.handleFilterConfirmFilter(null, column)
387
- }
388
- return nextTick()
389
- },
390
- saveFilterByEvent (evnt, fieldOrColumn) {
391
- if (fieldOrColumn) {
392
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
393
- $xeTable.handleFilterConfirmFilter(evnt, column)
394
- }
395
- return nextTick()
396
- },
397
- resetFilter (fieldOrColumn) {
398
- if (fieldOrColumn) {
399
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
400
- $xeTable.handleFilterResetFilter(null, column)
401
- }
402
- return nextTick()
403
- },
404
- resetFilterByEvent (evnt, fieldOrColumn) {
405
- if (fieldOrColumn) {
406
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
407
- $xeTable.handleFilterResetFilter(evnt, column)
408
- }
409
- return nextTick()
410
- },
411
- saveFilterPanel () {
412
- const { filterStore } = reactData
413
- $xeTable.handleFilterConfirmFilter(null, filterStore.column || null)
414
- return nextTick()
415
- },
416
- saveFilterPanelByEvent (evnt) {
417
- const { filterStore } = reactData
418
- $xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null)
419
- return nextTick()
420
- },
421
- resetFilterPanel () {
422
- const { filterStore } = reactData
423
- $xeTable.handleFilterResetFilter(null, filterStore.column || null)
424
- return nextTick()
425
- },
426
- resetFilterPanelByEvent (evnt) {
427
- const { filterStore } = reactData
428
- $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
429
- return nextTick()
430
- },
431
- getCheckedFilters () {
432
- const { tableFullColumn } = internalData
433
- const filterList: VxeTableDefines.FilterCheckedParams[] = []
434
- tableFullColumn.forEach((column) => {
435
- const { field, filters } = column
436
- const filterOptions = filters || []
437
- const valueList: any[] = []
438
- const dataList: any[] = []
439
- if (filterOptions) {
440
- filterOptions.forEach((item) => {
441
- if (item.checked) {
442
- valueList.push(item.value)
443
- dataList.push(item.data)
444
- }
445
- })
446
- if (valueList.length) {
447
- filterList.push({ column, field, property: field, values: valueList, datas: dataList })
448
- }
449
- }
450
- })
451
- return filterList
452
- },
453
- updateFilterOptionStatus (item: any, checked: boolean) {
454
- item._checked = checked
455
- item.checked = checked
456
- return nextTick()
457
- }
458
- }
459
-
460
- return { ...filterMethods, ...filterPrivateMethods }
461
- },
462
- setupGrid ($xeGrid) {
463
- return $xeGrid.extendTableMethods(tableFilterMethodKeys)
464
- },
465
- setupGantt ($xeGantt) {
466
- return $xeGantt.extendTableMethods(tableFilterMethodKeys)
467
- }
468
- })
1
+ import { nextTick } from 'vue'
2
+ import XEUtils from 'xe-utils'
3
+ import { VxeUI } from '../../../ui'
4
+ import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util'
5
+ import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom'
6
+ import { isEnableConf } from '../../../ui/src/utils'
7
+
8
+ import type { TableFilterMethods, TableFilterPrivateMethods, VxeTableDefines } from '../../../../types'
9
+
10
+ const { renderer, hooks } = VxeUI
11
+
12
+ const tableFilterMethodKeys: (keyof TableFilterMethods)[] = ['openFilter', 'setFilter', 'clearFilter', 'saveFilter', 'saveFilterByEvent', 'saveFilterPanel', 'saveFilterPanelByEvent', 'resetFilter', 'resetFilterByEvent', 'resetFilterPanel', 'resetFilterPanelByEvent', 'getCheckedFilters', 'updateFilterOptionStatus']
13
+
14
+ const sourceType = 'table'
15
+
16
+ hooks.add('tableFilterModule', {
17
+ setupTable ($xeTable) {
18
+ const $xeGrid = $xeTable.xeGrid
19
+ const $xeGantt = $xeTable.xeGantt
20
+ const $xeGGWrapper = $xeGrid || $xeGantt
21
+
22
+ const { props, reactData, internalData } = $xeTable
23
+ const { refElem, refTableFilter } = $xeTable.getRefMaps()
24
+ const { computeFilterOpts, computeMouseOpts } = $xeTable.getComputeMaps()
25
+
26
+ const filterPrivateMethods: TableFilterPrivateMethods = {
27
+ checkFilterOptions () {
28
+ const { filterStore } = reactData
29
+ const { column } = filterStore
30
+ if (column) {
31
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
32
+ filterStore.isAllSelected = filterOptions.every((item) => item._checked)
33
+ filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some((item) => item._checked)
34
+ }
35
+ },
36
+ handleOpenFilterColumn (evnt: MouseEvent, btnEl: HTMLDivElement | null, colEl: HTMLDivElement, column: VxeTableDefines.ColumnInfo, params: any) {
37
+ const { initStore, filterStore } = reactData
38
+ const { elemStore } = internalData
39
+ if (filterStore.column === column && filterStore.visible) {
40
+ filterStore.visible = false
41
+ } else {
42
+ const tableEl = refElem.value
43
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
44
+ const filterOpts = computeFilterOpts.value
45
+ const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts
46
+ const currEl = btnEl || colEl
47
+ const tableRect = tableEl.getBoundingClientRect()
48
+ const filterRender = column ? column.filterRender : null
49
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
50
+ $xeTable.handleFilterOptions(column)
51
+ internalData._currFilterParams = params
52
+ filterStore.style = null
53
+ filterStore.visible = true
54
+ initStore.filter = true
55
+ nextTick(() => {
56
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
57
+ if (!headerScrollElem) {
58
+ return
59
+ }
60
+ const tableFilter = refTableFilter.value
61
+ const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value as HTMLDivElement : null
62
+ if (!filterWrapperElem) {
63
+ return
64
+ }
65
+ const btnRect = currEl.getBoundingClientRect()
66
+ const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
67
+ const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
68
+ const filterWidth = filterWrapperElem.offsetWidth
69
+ const centerWidth = btnEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2)
70
+ let left = 0
71
+ let top = 0
72
+ let maxHeight: number = 0
73
+ /**
74
+ * 是否显示筛选按钮图标
75
+ * 如果不存在图标,则相对单元格居中显示
76
+ */
77
+ if (transfer) {
78
+ left = btnRect.left - centerWidth + scrollLeft
79
+ top = btnRect.top + currEl.clientHeight + scrollTop
80
+ 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))
81
+ if (left < 16) {
82
+ left = 16
83
+ } else if (left > (visibleWidth - filterWidth - 16)) {
84
+ left = visibleWidth - filterWidth - 16
85
+ }
86
+ } else {
87
+ left = btnRect.left - tableRect.left - centerWidth
88
+ top = btnRect.top - tableRect.top + currEl.clientHeight
89
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14)
90
+ if (left < 1) {
91
+ left = 1
92
+ } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
93
+ left = tableEl.clientWidth - filterWidth - 1
94
+ }
95
+ if ($xeGGWrapper) {
96
+ const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value
97
+ if (wrapperEl) {
98
+ const wrapperRect = wrapperEl.getBoundingClientRect()
99
+ top += tableRect.top - wrapperRect.top
100
+ }
101
+ }
102
+ }
103
+ const fStys: Record<string, any> = {
104
+ top: toCssUnit(top),
105
+ left: toCssUnit(left)
106
+ }
107
+ if (zIndex) {
108
+ fStys.zIndex = zIndex
109
+ }
110
+ filterStore.style = fStys
111
+ // 筛选面板是自适应表格高度
112
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
113
+ maxHeight = 0
114
+ } else {
115
+ if (customMaxHeight) {
116
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
117
+ }
118
+ }
119
+ // 判断面板不能大于表格高度
120
+ filterStore.maxHeight = maxHeight
121
+ })
122
+ }
123
+ $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt)
124
+ },
125
+ /**
126
+ * 点击筛选事件
127
+ * 当筛选图标被点击时触发
128
+ * 更新选项是否全部状态
129
+ * 打开筛选面板
130
+ * @param {Event} evnt 事件
131
+ * @param {ColumnInfo} column 列配置
132
+ * @param {Object} params 参数
133
+ */
134
+ triggerFilterEvent (evnt: MouseEvent, column: VxeTableDefines.ColumnInfo, params) {
135
+ const { elemStore } = internalData
136
+ const { fixed } = column
137
+ const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
138
+ const btnElem = evnt.currentTarget as HTMLDivElement
139
+ const colEl = headerWrapperElem ? headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`) : null
140
+ $xeTable.handleOpenFilterColumn(evnt, btnElem, colEl || btnElem, column, params)
141
+ },
142
+ handleClearFilter (column) {
143
+ if (column) {
144
+ const { filters, filterRender } = column
145
+ if (filters) {
146
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
147
+ const frMethod = column.filterResetMethod || (compConf ? (compConf.tableFilterResetMethod || compConf.filterResetMethod) : null)
148
+ filters.forEach((item: any) => {
149
+ item._checked = false
150
+ item.checked = false
151
+ if (!frMethod) {
152
+ item.data = XEUtils.clone(item.resetValue, true)
153
+ }
154
+ })
155
+ if (frMethod) {
156
+ frMethod({ options: filters, column, $table: $xeTable })
157
+ }
158
+ }
159
+ }
160
+ },
161
+ handleColumnConfirmFilter (column, evnt) {
162
+ const { mouseConfig } = props
163
+ const { scrollXLoad: oldScrollXLoad, scrollYLoad: oldScrollYLoad } = reactData
164
+ const filterOpts = computeFilterOpts.value
165
+ const mouseOpts = computeMouseOpts.value
166
+ const { field, filters } = column
167
+ const filterOptions = filters || []
168
+ const values: any[] = []
169
+ const datas: any[] = []
170
+ filterOptions.forEach((item) => {
171
+ if (item.checked) {
172
+ values.push(item.value)
173
+ datas.push(item.data)
174
+ }
175
+ })
176
+ const filterList = $xeTable.getCheckedFilters()
177
+ const params = { $table: $xeTable, $event: evnt as Event, column, field, property: field, values, datas, filters: filterList, filterList }
178
+ // 如果是服务端筛选,则跳过本地筛选处理
179
+ if (!filterOpts.remote) {
180
+ $xeTable.handleTableData(true)
181
+ $xeTable.checkSelectionStatus()
182
+ }
183
+ if (mouseConfig && mouseOpts.area && $xeTable.handleFilterEvent) {
184
+ $xeTable.handleFilterEvent(evnt as Event, params)
185
+ }
186
+ if (evnt) {
187
+ $xeTable.dispatchEvent('filter-change', params, evnt)
188
+ }
189
+ $xeTable.closeFilter()
190
+ return $xeTable.updateFooter().then(() => {
191
+ const { scrollXLoad, scrollYLoad } = reactData
192
+ if ((oldScrollXLoad || scrollXLoad) || (oldScrollYLoad || scrollYLoad)) {
193
+ if (oldScrollXLoad || scrollXLoad) {
194
+ $xeTable.updateScrollXSpace()
195
+ }
196
+ if (oldScrollYLoad || scrollYLoad) {
197
+ $xeTable.updateScrollYSpace()
198
+ }
199
+ return $xeTable.refreshScroll()
200
+ }
201
+ }).then(() => {
202
+ $xeTable.updateCellAreas()
203
+ return $xeTable.recalculate(true)
204
+ }).then(() => {
205
+ // 存在滚动行为未结束情况
206
+ setTimeout(() => $xeTable.recalculate(), 50)
207
+ })
208
+ },
209
+ /**
210
+ * 确认筛选
211
+ * 当筛选面板中的确定按钮被按下时触发
212
+ */
213
+ confirmFilterEvent (evnt, column) {
214
+ if (column) {
215
+ $xeTable.handleColumnConfirmFilter(column, evnt)
216
+ }
217
+ },
218
+ // (单选)筛选发生改变
219
+ handleFilterChangeRadioOption (evnt, checked, item) {
220
+ const { filterStore } = reactData
221
+ const { column } = filterStore
222
+ if (column) {
223
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
224
+ filterOptions.forEach((option) => {
225
+ option._checked = false
226
+ })
227
+ item._checked = checked
228
+ $xeTable.checkFilterOptions()
229
+ $xeTable.handleFilterConfirmFilter(evnt, column)
230
+ }
231
+ },
232
+ // (多选)筛选发生改变
233
+ handleFilterChangeMultipleOption (evnt, checked, item) {
234
+ item._checked = checked
235
+ $xeTable.checkFilterOptions()
236
+ },
237
+ // 筛选发生改变
238
+ handleFilterChangeOption (evnt, checked, item) {
239
+ const { filterStore } = reactData
240
+ const { fullColumnIdData } = internalData
241
+ let column = filterStore.column
242
+ if (!column) {
243
+ const colRest = fullColumnIdData[item._colId]
244
+ if (colRest) {
245
+ column = colRest.column
246
+ filterStore.column = column
247
+ }
248
+ }
249
+ if (column) {
250
+ if (column.filterMultiple) {
251
+ $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
252
+ } else {
253
+ $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
254
+ }
255
+ }
256
+ },
257
+ // 确认筛选
258
+ handleFilterConfirmFilter (evnt, column) {
259
+ if (column) {
260
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
261
+ filterOptions.forEach((option) => {
262
+ option.checked = option._checked
263
+ })
264
+ $xeTable.confirmFilterEvent(evnt, column)
265
+ }
266
+ },
267
+ /**
268
+ * 重置筛选
269
+ * 当筛选面板中的重置按钮被按下时触发
270
+ */
271
+ handleFilterResetFilter (evnt: Event, column) {
272
+ if (column) {
273
+ $xeTable.handleClearFilter(column)
274
+ $xeTable.confirmFilterEvent(evnt, column)
275
+ if (evnt) {
276
+ $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
277
+ }
278
+ }
279
+ }
280
+ }
281
+
282
+ const filterMethods: TableFilterMethods = {
283
+ /**
284
+ * 手动弹出筛选面板
285
+ * @param column
286
+ */
287
+ openFilter (fieldOrColumn) {
288
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
289
+ if (column && column.filters) {
290
+ const { elemStore } = internalData
291
+ const { fixed, filters } = column
292
+ return $xeTable.scrollToColumn(column).then(() => {
293
+ const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
294
+ if (headerWrapperElem) {
295
+ const filterBtnElem = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id} .vxe-cell--filter`)
296
+ if (filterBtnElem) {
297
+ triggerEvent(filterBtnElem, 'click')
298
+ } else {
299
+ const colEl = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`)
300
+ if (colEl) {
301
+ let firstFilterOption: VxeTableDefines.FilterOption | null = null
302
+ if (filters) {
303
+ firstFilterOption = filters[0] as VxeTableDefines.FilterOption
304
+ }
305
+ const params = {
306
+ $table: $xeTable,
307
+ $grid: $xeGrid,
308
+ $gantt: $xeGantt,
309
+ $rowIndex: -1,
310
+ column,
311
+ columnIndex: $xeTable.getColumnIndex(column),
312
+ $columnIndex: $xeTable.getVMColumnIndex(column),
313
+ _columnIndex: $xeTable.getVTColumnIndex(column),
314
+ firstFilterOption: firstFilterOption as VxeTableDefines.FilterOption,
315
+ fixed,
316
+ source: sourceType,
317
+ type: 'header'
318
+ // isHidden
319
+ // hasFilter
320
+ }
321
+ $xeTable.handleOpenFilterColumn(new Event('click'), null, colEl, column, params)
322
+ }
323
+ }
324
+ }
325
+ })
326
+ }
327
+ return nextTick()
328
+ },
329
+ /**
330
+ * 修改筛选条件列表
331
+ * @param {ColumnInfo} fieldOrColumn 列或字段名
332
+ * @param {Array} options 选项
333
+ */
334
+ setFilter (fieldOrColumn, options, isUpdate) {
335
+ const { filterStore } = reactData
336
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
337
+ if (column && column.filters) {
338
+ column.filters = toFilters(options || [], column.id)
339
+ if (isUpdate) {
340
+ return $xeTable.handleColumnConfirmFilter(column, null)
341
+ } else {
342
+ if (filterStore.visible) {
343
+ $xeTable.handleFilterOptions(column)
344
+ }
345
+ }
346
+ }
347
+ return nextTick()
348
+ },
349
+ /**
350
+ * 清空指定列的筛选条件
351
+ * 如果为空则清空所有列的筛选条件
352
+ * @param {String} fieldOrColumn 列或字段名
353
+ */
354
+ clearFilter (fieldOrColumn) {
355
+ const { filterStore } = reactData
356
+ const { tableFullColumn } = internalData
357
+ const filterOpts = computeFilterOpts.value
358
+ let column
359
+ if (fieldOrColumn) {
360
+ column = handleFieldOrColumn($xeTable, fieldOrColumn)
361
+ if (column) {
362
+ $xeTable.handleClearFilter(column)
363
+ }
364
+ } else {
365
+ tableFullColumn.forEach($xeTable.handleClearFilter)
366
+ }
367
+ if (!fieldOrColumn || column !== filterStore.column) {
368
+ Object.assign(filterStore, {
369
+ isAllSelected: false,
370
+ isIndeterminate: false,
371
+ style: null,
372
+ options: [],
373
+ column: null,
374
+ multiple: false,
375
+ visible: false
376
+ })
377
+ }
378
+ if (!filterOpts.remote) {
379
+ return $xeTable.updateData()
380
+ }
381
+ return nextTick()
382
+ },
383
+ saveFilter (fieldOrColumn) {
384
+ if (fieldOrColumn) {
385
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
386
+ $xeTable.handleFilterConfirmFilter(null, column)
387
+ }
388
+ return nextTick()
389
+ },
390
+ saveFilterByEvent (evnt, fieldOrColumn) {
391
+ if (fieldOrColumn) {
392
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
393
+ $xeTable.handleFilterConfirmFilter(evnt, column)
394
+ }
395
+ return nextTick()
396
+ },
397
+ resetFilter (fieldOrColumn) {
398
+ if (fieldOrColumn) {
399
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
400
+ $xeTable.handleFilterResetFilter(null, column)
401
+ }
402
+ return nextTick()
403
+ },
404
+ resetFilterByEvent (evnt, fieldOrColumn) {
405
+ if (fieldOrColumn) {
406
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
407
+ $xeTable.handleFilterResetFilter(evnt, column)
408
+ }
409
+ return nextTick()
410
+ },
411
+ saveFilterPanel () {
412
+ const { filterStore } = reactData
413
+ $xeTable.handleFilterConfirmFilter(null, filterStore.column || null)
414
+ return nextTick()
415
+ },
416
+ saveFilterPanelByEvent (evnt) {
417
+ const { filterStore } = reactData
418
+ $xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null)
419
+ return nextTick()
420
+ },
421
+ resetFilterPanel () {
422
+ const { filterStore } = reactData
423
+ $xeTable.handleFilterResetFilter(null, filterStore.column || null)
424
+ return nextTick()
425
+ },
426
+ resetFilterPanelByEvent (evnt) {
427
+ const { filterStore } = reactData
428
+ $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
429
+ return nextTick()
430
+ },
431
+ getCheckedFilters () {
432
+ const { tableFullColumn } = internalData
433
+ const filterList: VxeTableDefines.FilterCheckedParams[] = []
434
+ tableFullColumn.forEach((column) => {
435
+ const { field, filters } = column
436
+ const filterOptions = filters || []
437
+ const valueList: any[] = []
438
+ const dataList: any[] = []
439
+ if (filterOptions) {
440
+ filterOptions.forEach((item) => {
441
+ if (item.checked) {
442
+ valueList.push(item.value)
443
+ dataList.push(item.data)
444
+ }
445
+ })
446
+ if (valueList.length) {
447
+ filterList.push({ column, field, property: field, values: valueList, datas: dataList })
448
+ }
449
+ }
450
+ })
451
+ return filterList
452
+ },
453
+ updateFilterOptionStatus (item: any, checked: boolean) {
454
+ item._checked = checked
455
+ item.checked = checked
456
+ return nextTick()
457
+ }
458
+ }
459
+
460
+ return { ...filterMethods, ...filterPrivateMethods }
461
+ },
462
+ setupGrid ($xeGrid) {
463
+ return $xeGrid.extendTableMethods(tableFilterMethodKeys)
464
+ },
465
+ setupGantt ($xeGantt) {
466
+ return $xeGantt.extendTableMethods(tableFilterMethodKeys)
467
+ }
468
+ })