vxe-table 3.20.7 → 3.20.9

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 (144) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +106 -106
  3. package/es/index.esm.js +2 -1
  4. package/es/style.css +1 -1
  5. package/es/table/src/methods.js +81 -84
  6. package/es/table/src/table.js +20 -1
  7. package/es/table/src/util.js +6 -0
  8. package/es/table/style.css +18 -48
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/dom.js +19 -20
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +18 -48
  13. package/lib/index.common.js +2 -1
  14. package/lib/index.umd.js +1985 -3291
  15. package/lib/index.umd.min.js +1 -1
  16. package/lib/style.css +1 -1
  17. package/lib/table/src/methods.js +17 -15
  18. package/lib/table/src/methods.min.js +1 -1
  19. package/lib/table/src/table.js +19 -1
  20. package/lib/table/src/table.min.js +1 -1
  21. package/lib/table/src/util.js +6 -0
  22. package/lib/table/src/util.min.js +1 -1
  23. package/lib/table/style/style.css +18 -48
  24. package/lib/ui/index.js +1 -1
  25. package/lib/ui/index.min.js +1 -1
  26. package/lib/ui/src/dom.js +21 -20
  27. package/lib/ui/src/dom.min.js +1 -1
  28. package/lib/ui/src/log.js +1 -1
  29. package/lib/ui/src/log.min.js +1 -1
  30. package/lib/v-x-e-table/index.js +2 -1
  31. package/lib/v-x-e-table/index.min.js +1 -1
  32. package/lib/vxe-colgroup/index.js +2 -1
  33. package/lib/vxe-colgroup/index.min.js +1 -1
  34. package/lib/vxe-column/index.js +2 -1
  35. package/lib/vxe-column/index.min.js +1 -1
  36. package/lib/vxe-grid/index.js +2 -1
  37. package/lib/vxe-grid/index.min.js +1 -1
  38. package/lib/vxe-table/index.js +2 -1
  39. package/lib/vxe-table/index.min.js +1 -1
  40. package/lib/vxe-table/style/style.css +18 -48
  41. package/lib/vxe-toolbar/index.js +2 -1
  42. package/lib/vxe-toolbar/index.min.js +1 -1
  43. package/lib/vxe-ui/index.js +2 -1
  44. package/lib/vxe-ui/index.min.js +1 -1
  45. package/lib/vxe-v-x-e-table/index.js +2 -1
  46. package/lib/vxe-v-x-e-table/index.min.js +1 -1
  47. package/package.json +93 -93
  48. package/packages/colgroup/index.ts +22 -22
  49. package/packages/column/index.ts +22 -22
  50. package/packages/components.ts +42 -42
  51. package/packages/grid/index.ts +22 -22
  52. package/packages/grid/src/grid.ts +1935 -1935
  53. package/packages/index.ts +4 -4
  54. package/packages/locale/lang/ar-EG.ts +832 -832
  55. package/packages/locale/lang/de-DE.ts +832 -832
  56. package/packages/locale/lang/en-US.ts +832 -832
  57. package/packages/locale/lang/es-ES.ts +832 -832
  58. package/packages/locale/lang/fr-FR.ts +832 -832
  59. package/packages/locale/lang/hu-HU.ts +832 -832
  60. package/packages/locale/lang/hy-AM.ts +832 -832
  61. package/packages/locale/lang/id-ID.ts +832 -832
  62. package/packages/locale/lang/it-IT.ts +832 -832
  63. package/packages/locale/lang/ja-JP.ts +832 -832
  64. package/packages/locale/lang/ko-KR.ts +832 -832
  65. package/packages/locale/lang/ms-MY.ts +832 -832
  66. package/packages/locale/lang/nb-NO.ts +832 -832
  67. package/packages/locale/lang/pt-BR.ts +832 -832
  68. package/packages/locale/lang/ru-RU.ts +832 -832
  69. package/packages/locale/lang/th-TH.ts +832 -832
  70. package/packages/locale/lang/ug-CN.ts +832 -832
  71. package/packages/locale/lang/uk-UA.ts +832 -832
  72. package/packages/locale/lang/uz-UZ.ts +832 -832
  73. package/packages/locale/lang/vi-VN.ts +832 -832
  74. package/packages/locale/lang/zh-CHT.ts +832 -832
  75. package/packages/locale/lang/zh-CN.ts +832 -832
  76. package/packages/locale/lang/zh-HK.ts +3 -3
  77. package/packages/locale/lang/zh-MO.ts +3 -3
  78. package/packages/locale/lang/zh-TC.ts +3 -3
  79. package/packages/locale/lang/zh-TW.ts +3 -3
  80. package/packages/table/index.ts +49 -49
  81. package/packages/table/module/custom/mixin.ts +369 -369
  82. package/packages/table/module/custom/panel.ts +1461 -1461
  83. package/packages/table/module/edit/mixin.ts +1123 -1123
  84. package/packages/table/module/export/export-panel.ts +658 -658
  85. package/packages/table/module/export/import-panel.ts +319 -319
  86. package/packages/table/module/export/mixin.ts +1693 -1693
  87. package/packages/table/module/export/util.ts +24 -24
  88. package/packages/table/module/filter/mixin.ts +507 -507
  89. package/packages/table/module/filter/panel.ts +329 -329
  90. package/packages/table/module/keyboard/mixin.ts +513 -513
  91. package/packages/table/module/menu/mixin.ts +329 -329
  92. package/packages/table/module/menu/panel.ts +212 -212
  93. package/packages/table/module/validator/mixin.ts +626 -626
  94. package/packages/table/render/index.ts +1456 -1456
  95. package/packages/table/src/body.ts +969 -969
  96. package/packages/table/src/cell.ts +1285 -1285
  97. package/packages/table/src/column.ts +205 -205
  98. package/packages/table/src/columnInfo.ts +228 -228
  99. package/packages/table/src/footer.ts +388 -388
  100. package/packages/table/src/group.ts +51 -51
  101. package/packages/table/src/header.ts +602 -602
  102. package/packages/table/src/methods.ts +12936 -12939
  103. package/packages/table/src/props.ts +311 -311
  104. package/packages/table/src/store.ts +15 -15
  105. package/packages/table/src/table.ts +2523 -2505
  106. package/packages/table/src/util.ts +1018 -1012
  107. package/packages/toolbar/index.ts +18 -18
  108. package/packages/toolbar/src/toolbar.ts +856 -856
  109. package/packages/ui/index.ts +530 -530
  110. package/packages/ui/src/anime.ts +52 -52
  111. package/packages/ui/src/comp.ts +3 -3
  112. package/packages/ui/src/dom.ts +237 -236
  113. package/packages/ui/src/log.ts +8 -8
  114. package/packages/ui/src/utils.ts +56 -56
  115. package/packages/ui/src/vn.ts +65 -65
  116. package/packages/v-x-e-table/index.ts +4 -4
  117. package/styles/all.scss +7 -7
  118. package/styles/base.scss +16 -16
  119. package/styles/components/grid.scss +89 -89
  120. package/styles/components/icon.scss +225 -225
  121. package/styles/components/old-icon.scss +715 -715
  122. package/styles/components/table-module/all.scss +6 -6
  123. package/styles/components/table-module/custom.scss +527 -527
  124. package/styles/components/table-module/export.scss +130 -130
  125. package/styles/components/table-module/filter.scss +130 -130
  126. package/styles/components/table-module/menu.scss +81 -81
  127. package/styles/components/table.scss +2679 -2679
  128. package/styles/components/toolbar.scss +119 -119
  129. package/styles/default.scss +2 -2
  130. package/styles/helpers/baseMixin.scss +95 -95
  131. package/styles/index.scss +3 -3
  132. package/styles/modules.scss +5 -5
  133. package/styles/theme/base.scss +93 -93
  134. package/styles/theme/dark.scss +49 -49
  135. package/styles/theme/light.scss +44 -44
  136. package/styles/variable.scss +43 -43
  137. package/types/all.d.ts +53 -53
  138. package/types/index.d.ts +4 -4
  139. /package/es/{iconfont.1773991883171.ttf → iconfont.1774420912543.ttf} +0 -0
  140. /package/es/{iconfont.1773991883171.woff → iconfont.1774420912543.woff} +0 -0
  141. /package/es/{iconfont.1773991883171.woff2 → iconfont.1774420912543.woff2} +0 -0
  142. /package/lib/{iconfont.1773991883171.ttf → iconfont.1774420912543.ttf} +0 -0
  143. /package/lib/{iconfont.1773991883171.woff → iconfont.1774420912543.woff} +0 -0
  144. /package/lib/{iconfont.1773991883171.woff2 → iconfont.1774420912543.woff2} +0 -0
@@ -1,507 +1,507 @@
1
- import XEUtils from 'xe-utils'
2
- import { VxeUI } from '../../../ui'
3
- import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util'
4
- import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom'
5
- import { isEnableConf } from '../../../ui/src/utils'
6
-
7
- import type { VxeTableConstructor, VxeTableDefines, TableReactData, TableInternalData, VxeColumnPropTypes, VxeTablePrivateMethods } from '../../../../types'
8
-
9
- const { renderer } = VxeUI
10
-
11
- const sourceType = 'table'
12
-
13
- export default {
14
- methods: {
15
- /**
16
- * 手动弹出筛选面板
17
- * @param column
18
- */
19
- _openFilter (fieldOrColumn: any) {
20
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
21
- const $xeGrid = $xeTable.$xeGrid
22
- const $xeGantt = $xeTable.$xeGantt
23
-
24
- const column = handleFieldOrColumn(this, fieldOrColumn)
25
- if (column && column.filters) {
26
- const { elemStore } = this
27
- const { fixed, filters } = column
28
- return $xeTable.scrollToColumn(column).then(() => {
29
- const headerWrapperElem = (elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper']) as HTMLElement
30
- if (headerWrapperElem) {
31
- const filterBtnElem = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id} .vxe-cell--filter`)
32
- if (filterBtnElem) {
33
- triggerEvent(filterBtnElem, 'click')
34
- } else {
35
- const colEl = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`)
36
- if (colEl) {
37
- let firstFilterOption: VxeTableDefines.FilterOption | null = null
38
- if (filters) {
39
- firstFilterOption = filters[0] as VxeTableDefines.FilterOption
40
- }
41
- const params = {
42
- $table: $xeTable,
43
- $grid: $xeGrid,
44
- $gantt: $xeGantt,
45
- $rowIndex: -1,
46
- column,
47
- columnIndex: $xeTable.getColumnIndex(column),
48
- $columnIndex: $xeTable.getVMColumnIndex(column),
49
- _columnIndex: $xeTable.getVTColumnIndex(column),
50
- firstFilterOption: firstFilterOption as VxeTableDefines.FilterOption,
51
- fixed,
52
- source: sourceType,
53
- type: 'header'
54
- // isHidden
55
- // hasFilter
56
- }
57
- $xeTable.handleOpenFilterColumn(new Event('click'), null, colEl, column, params)
58
- }
59
- }
60
- }
61
- })
62
- }
63
- return $xeTable.$nextTick()
64
- },
65
- /**
66
- * 修改筛选条件列表
67
- * @param {ColumnInfo} fieldOrColumn 列
68
- * @param {Array} options 选项
69
- */
70
- _setFilter (fieldOrColumn: any, options: any, isUpdate: any) {
71
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
72
- const reactData = $xeTable as unknown as TableReactData
73
-
74
- const { filterStore } = reactData
75
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
76
- if (column && column.filters) {
77
- column.filters = toFilters(options || [], column.id)
78
- if (isUpdate) {
79
- return $xeTable.handleColumnConfirmFilter(column, null)
80
- } else {
81
- if (filterStore.visible) {
82
- $xeTable.handleFilterOptions(column)
83
- }
84
- }
85
- }
86
- return $xeTable.$nextTick()
87
- },
88
- checkFilterOptions () {
89
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
90
- const reactData = $xeTable as unknown as TableReactData
91
-
92
- const { filterStore } = reactData
93
- const { column } = filterStore
94
- if (column) {
95
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
96
- filterStore.isAllSelected = filterOptions.every((item) => item._checked)
97
- filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some((item) => item._checked)
98
- }
99
- },
100
- handleOpenFilterColumn (evnt: MouseEvent, btnEl: HTMLDivElement | null, colEl: HTMLDivElement, column: VxeTableDefines.ColumnInfo, params: any) {
101
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
102
- const $xeGrid = $xeTable.$xeGrid
103
- const $xeGantt = $xeTable.$xeGantt
104
- const reactData = $xeTable as unknown as TableReactData
105
- const internalData = $xeTable as unknown as TableInternalData
106
- const $xeGGWrapper = $xeGrid || $xeGantt
107
-
108
- const { initStore, filterStore } = reactData
109
- const { elemStore } = internalData
110
- if (filterStore.column === column && filterStore.visible) {
111
- filterStore.visible = false
112
- } else {
113
- const tableEl = $xeTable.$refs.refElem as HTMLDivElement
114
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
115
- const filterOpts = $xeTable.computeFilterOpts
116
- const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts
117
- const currEl = btnEl || colEl
118
- const tableRect = tableEl.getBoundingClientRect()
119
- const filterRender = column ? column.filterRender : null
120
- const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
121
- $xeTable.handleFilterOptions(column)
122
- internalData._currFilterParams = params
123
- filterStore.style = null
124
- filterStore.visible = true
125
- initStore.filter = true
126
- $xeTable.$nextTick(() => {
127
- const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
128
- if (!headerScrollElem) {
129
- return
130
- }
131
- const tableFilter = $xeTable.$refs.refTableFilter
132
- const filterWrapperElem = tableFilter ? (tableFilter as any).$el as HTMLDivElement : null
133
- if (!filterWrapperElem) {
134
- return
135
- }
136
- const btnRect = currEl.getBoundingClientRect()
137
- const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
138
- const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
139
- const filterWidth = filterWrapperElem.offsetWidth
140
- const centerWidth = filterWidth / 2
141
- let left = 0
142
- let top = 0
143
- let maxHeight = 0
144
- if (transfer) {
145
- left = btnRect.left - centerWidth + scrollLeft
146
- top = btnRect.top + currEl.clientHeight + scrollTop
147
- 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))
148
- if (left < 16) {
149
- left = 16
150
- } else if (left > (visibleWidth - filterWidth - 16)) {
151
- left = visibleWidth - filterWidth - 16
152
- }
153
- } else {
154
- left = btnRect.left - tableRect.left - centerWidth
155
- top = btnRect.top - tableRect.top + currEl.clientHeight
156
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14)
157
- if (left < 1) {
158
- left = 1
159
- } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
160
- left = tableEl.clientWidth - filterWidth - 1
161
- }
162
- if ($xeGGWrapper) {
163
- const wrapperEl = $xeGGWrapper.$refs.refElem as HTMLDivElement
164
- if (wrapperEl) {
165
- const wrapperRect = wrapperEl.getBoundingClientRect()
166
- top += tableRect.top - wrapperRect.top
167
- }
168
- }
169
- }
170
- const fStys: Record<string, any> = {
171
- top: toCssUnit(top),
172
- left: toCssUnit(left)
173
- }
174
- if (zIndex) {
175
- fStys.zIndex = zIndex
176
- }
177
- filterStore.style = fStys
178
- // 筛选面板是自适应表格高度
179
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
180
- maxHeight = 0
181
- } else {
182
- if (customMaxHeight) {
183
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
184
- }
185
- }
186
- // 判断面板不能大于表格高度
187
- filterStore.maxHeight = maxHeight
188
- })
189
- }
190
- $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt)
191
- },
192
- /**
193
- * 点击筛选事件
194
- * 当筛选图标被点击时触发
195
- * 更新选项是否全部状态
196
- * 打开筛选面板
197
- * @param {Event} evnt 事件
198
- * @param {ColumnInfo} column 列配置
199
- * @param {Object} params 参数
200
- */
201
- triggerFilterEvent (evnt: MouseEvent, column: VxeTableDefines.ColumnInfo, params: any) {
202
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
203
- const internalData = $xeTable as unknown as TableInternalData
204
-
205
- const { elemStore } = internalData
206
- const { fixed } = column
207
- const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
208
- const btnElem = evnt.currentTarget as HTMLDivElement
209
- const colEl = headerWrapperElem ? headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`) : null
210
- $xeTable.handleOpenFilterColumn(evnt, btnElem, colEl || btnElem, column, params)
211
- },
212
- // (单选)筛选发生改变
213
- handleFilterChangeRadioOption (evnt: Event, checked: boolean, item: any) {
214
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
215
- const reactData = $xeTable as unknown as TableReactData
216
-
217
- const { filterStore } = reactData
218
- const { column } = filterStore
219
- if (column) {
220
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
221
- filterOptions.forEach((option) => {
222
- option._checked = false
223
- })
224
- item._checked = checked
225
- $xeTable.checkFilterOptions()
226
- $xeTable.handleFilterConfirmFilter(evnt, column)
227
- }
228
- },
229
- // (多选)筛选发生改变
230
- handleFilterChangeMultipleOption (evnt: Event, checked: boolean, item: any) {
231
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
232
-
233
- item._checked = checked
234
- $xeTable.checkFilterOptions()
235
- },
236
- // 筛选发生改变
237
- handleFilterChangeOption (evnt: Event, checked: boolean, item: any) {
238
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
239
- const reactData = $xeTable as unknown as TableReactData
240
- const internalData = $xeTable as unknown as TableInternalData
241
-
242
- const { filterStore } = reactData
243
- const { fullColumnIdData } = internalData
244
- let column = filterStore.column
245
- if (!column) {
246
- const colRest = fullColumnIdData[item._colId]
247
- if (colRest) {
248
- column = colRest.column
249
- filterStore.column = column
250
- }
251
- }
252
- if (column) {
253
- if (column.filterMultiple) {
254
- $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
255
- } else {
256
- $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
257
- }
258
- }
259
- },
260
- // 确认筛选
261
- handleFilterConfirmFilter (evnt: Event | null, column: VxeTableDefines.ColumnInfo) {
262
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
263
-
264
- if (column) {
265
- const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
266
- filterOptions.forEach((option) => {
267
- option.checked = option._checked
268
- })
269
- $xeTable.confirmFilterEvent(evnt, column)
270
- }
271
- },
272
- _saveFilter (fieldOrColumn?: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
273
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
274
-
275
- if (fieldOrColumn) {
276
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
277
- $xeTable.handleFilterConfirmFilter(null, column)
278
- }
279
- return $xeTable.$nextTick()
280
- },
281
- _saveFilterByEvent (evnt: Event, fieldOrColumn: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
282
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
283
-
284
- if (fieldOrColumn) {
285
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
286
- $xeTable.handleFilterConfirmFilter(evnt, column)
287
- }
288
- return $xeTable.$nextTick()
289
- },
290
- _resetFilter (fieldOrColumn?: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
291
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
292
-
293
- if (fieldOrColumn) {
294
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
295
- $xeTable.handleFilterResetFilter(null, column)
296
- }
297
- return $xeTable.$nextTick()
298
- },
299
- _resetFilterByEvent (evnt: Event, fieldOrColumn: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
300
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
301
-
302
- if (fieldOrColumn) {
303
- const column = handleFieldOrColumn($xeTable, fieldOrColumn)
304
- $xeTable.handleFilterResetFilter(evnt, column)
305
- }
306
- return $xeTable.$nextTick()
307
- },
308
- _saveFilterPanel () {
309
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
310
- const reactData = $xeTable as unknown as TableReactData
311
-
312
- const { filterStore } = reactData
313
- $xeTable.handleFilterConfirmFilter(null, filterStore.column || null)
314
- return $xeTable.$nextTick()
315
- },
316
- _saveFilterPanelByEvent (evnt: Event) {
317
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
318
- const reactData = $xeTable as unknown as TableReactData
319
-
320
- const { filterStore } = reactData
321
- $xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null)
322
- return $xeTable.$nextTick()
323
- },
324
- _resetFilterPanel () {
325
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
326
- const reactData = $xeTable as unknown as TableReactData
327
-
328
- const { filterStore } = reactData
329
- $xeTable.handleFilterResetFilter(null, filterStore.column || null)
330
- return $xeTable.$nextTick()
331
- },
332
- _resetFilterPanelByEvent (evnt: Event) {
333
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
334
- const reactData = $xeTable as unknown as TableReactData
335
-
336
- const { filterStore } = reactData
337
- $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
338
- return $xeTable.$nextTick()
339
- },
340
- _getCheckedFilters () {
341
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
342
- const internalData = $xeTable as unknown as TableInternalData
343
-
344
- const { tableFullColumn } = internalData
345
- const filterList: VxeTableDefines.FilterCheckedParams[] = []
346
- tableFullColumn.forEach((column) => {
347
- const { field, filters } = column
348
- const filterOptions = filters || []
349
- const valueList: any[] = []
350
- const dataList: any[] = []
351
- if (filterOptions) {
352
- filterOptions.forEach((item) => {
353
- if (item.checked) {
354
- valueList.push(item.value)
355
- dataList.push(item.data)
356
- }
357
- })
358
- if (valueList.length) {
359
- filterList.push({ column, field, property: field, values: valueList, datas: dataList })
360
- }
361
- }
362
- })
363
- return filterList
364
- },
365
- handleColumnConfirmFilter (column: VxeTableDefines.ColumnInfo, evnt: Event | null) {
366
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
367
- const props = $xeTable
368
- const reactData = $xeTable as unknown as TableReactData
369
-
370
- const { mouseConfig } = props
371
- const { scrollXLoad: oldScrollXLoad, scrollYLoad: oldScrollYLoad } = reactData
372
- const filterOpts = $xeTable.computeFilterOpts
373
- const mouseOpts = $xeTable.computeMouseOpts
374
- const { field, filters } = column
375
- const filterOptions = filters || []
376
- const values: any[] = []
377
- const datas: any[] = []
378
- filterOptions.forEach((item) => {
379
- if (item.checked) {
380
- values.push(item.value)
381
- datas.push(item.data)
382
- }
383
- })
384
- const filterList = $xeTable.getCheckedFilters()
385
- const params = { $table: $xeTable, $event: evnt as Event, column, field, property: field, values, datas, filters: filterList, filterList }
386
- // 如果是服务端筛选,则跳过本地筛选处理
387
- if (!filterOpts.remote) {
388
- $xeTable.handleTableData(true)
389
- $xeTable.checkSelectionStatus()
390
- }
391
- if (mouseConfig && mouseOpts.area && $xeTable.handleFilterEvent) {
392
- $xeTable.handleFilterEvent(evnt as Event, params)
393
- }
394
- if (evnt) {
395
- $xeTable.dispatchEvent('filter-change', params, evnt)
396
- }
397
- $xeTable.closeFilter()
398
- return $xeTable.updateFooter().then(() => {
399
- const { scrollXLoad, scrollYLoad } = reactData
400
- if ((oldScrollXLoad || scrollXLoad) || (oldScrollYLoad || scrollYLoad)) {
401
- if ((oldScrollXLoad || scrollXLoad)) {
402
- $xeTable.updateScrollXSpace()
403
- }
404
- if ((oldScrollYLoad || scrollYLoad)) {
405
- $xeTable.updateScrollYSpace()
406
- }
407
- return $xeTable.refreshScroll()
408
- }
409
- }).then(() => {
410
- $xeTable.updateCellAreas()
411
- return $xeTable.recalculate(true)
412
- }).then(() => {
413
- // 存在滚动行为未结束情况
414
- setTimeout(() => $xeTable.recalculate(), 50)
415
- })
416
- },
417
- /**
418
- * 确认筛选
419
- * 当筛选面板中的确定按钮被按下时触发
420
- */
421
- confirmFilterEvent (evnt: Event, column: VxeTableDefines.ColumnInfo) {
422
- const $xeTable = this
423
-
424
- if (column) {
425
- $xeTable.handleColumnConfirmFilter(column, evnt)
426
- }
427
- },
428
- handleClearFilter (column: any) {
429
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
430
-
431
- if (column) {
432
- const { filters, filterRender } = column
433
- if (filters) {
434
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
435
- const filterResetMethod = column.filterResetMethod || (compConf ? (compConf.tableFilterResetMethod || compConf.filterResetMethod) : null)
436
- filters.forEach((item: any) => {
437
- item._checked = false
438
- item.checked = false
439
- if (!filterResetMethod) {
440
- item.data = XEUtils.clone(item.resetValue, true)
441
- }
442
- })
443
- if (filterResetMethod) {
444
- filterResetMethod({ options: filters, column, $table: $xeTable })
445
- }
446
- }
447
- }
448
- },
449
- /**
450
- * 重置筛选
451
- * 当筛选面板中的重置按钮被按下时触发
452
- * @param {Event} evnt 事件
453
- */
454
- handleFilterResetFilter (evnt: Event, column: VxeTableDefines.ColumnInfo) {
455
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
456
-
457
- if (column) {
458
- $xeTable.handleClearFilter(column)
459
- $xeTable.confirmFilterEvent(evnt, column)
460
- if (evnt) {
461
- $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
462
- }
463
- }
464
- },
465
- /**
466
- * 清空指定列的筛选条件
467
- * 如果为空则清空所有列的筛选条件
468
- * @param {String} fieldOrColumn 列
469
- */
470
- _clearFilter (fieldOrColumn: string | VxeTableDefines.ColumnInfo<any> | null | undefined) {
471
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
472
- const reactData = $xeTable as unknown as TableReactData
473
- const internalData = $xeTable as unknown as TableInternalData
474
-
475
- const { filterStore } = reactData
476
- const { tableFullColumn } = internalData
477
- let column
478
- if (fieldOrColumn) {
479
- column = handleFieldOrColumn($xeTable, fieldOrColumn)
480
- if (column) {
481
- $xeTable.handleClearFilter(column)
482
- }
483
- } else {
484
- tableFullColumn.forEach($xeTable.handleClearFilter)
485
- }
486
- if (!fieldOrColumn || column !== filterStore.column) {
487
- Object.assign(filterStore, {
488
- isAllSelected: false,
489
- isIndeterminate: false,
490
- style: null,
491
- options: [],
492
- column: null,
493
- multiple: false,
494
- visible: false
495
- })
496
- }
497
- return $xeTable.updateData()
498
- },
499
- _updateFilterOptionStatus (item: any, checked: boolean) {
500
- const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
501
-
502
- item._checked = checked
503
- item.checked = checked
504
- return $xeTable.$nextTick()
505
- }
506
- } as any
507
- }
1
+ import XEUtils from 'xe-utils'
2
+ import { VxeUI } from '../../../ui'
3
+ import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util'
4
+ import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom'
5
+ import { isEnableConf } from '../../../ui/src/utils'
6
+
7
+ import type { VxeTableConstructor, VxeTableDefines, TableReactData, TableInternalData, VxeColumnPropTypes, VxeTablePrivateMethods } from '../../../../types'
8
+
9
+ const { renderer } = VxeUI
10
+
11
+ const sourceType = 'table'
12
+
13
+ export default {
14
+ methods: {
15
+ /**
16
+ * 手动弹出筛选面板
17
+ * @param column
18
+ */
19
+ _openFilter (fieldOrColumn: any) {
20
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
21
+ const $xeGrid = $xeTable.$xeGrid
22
+ const $xeGantt = $xeTable.$xeGantt
23
+
24
+ const column = handleFieldOrColumn(this, fieldOrColumn)
25
+ if (column && column.filters) {
26
+ const { elemStore } = this
27
+ const { fixed, filters } = column
28
+ return $xeTable.scrollToColumn(column).then(() => {
29
+ const headerWrapperElem = (elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper']) as HTMLElement
30
+ if (headerWrapperElem) {
31
+ const filterBtnElem = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id} .vxe-cell--filter`)
32
+ if (filterBtnElem) {
33
+ triggerEvent(filterBtnElem, 'click')
34
+ } else {
35
+ const colEl = headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`)
36
+ if (colEl) {
37
+ let firstFilterOption: VxeTableDefines.FilterOption | null = null
38
+ if (filters) {
39
+ firstFilterOption = filters[0] as VxeTableDefines.FilterOption
40
+ }
41
+ const params = {
42
+ $table: $xeTable,
43
+ $grid: $xeGrid,
44
+ $gantt: $xeGantt,
45
+ $rowIndex: -1,
46
+ column,
47
+ columnIndex: $xeTable.getColumnIndex(column),
48
+ $columnIndex: $xeTable.getVMColumnIndex(column),
49
+ _columnIndex: $xeTable.getVTColumnIndex(column),
50
+ firstFilterOption: firstFilterOption as VxeTableDefines.FilterOption,
51
+ fixed,
52
+ source: sourceType,
53
+ type: 'header'
54
+ // isHidden
55
+ // hasFilter
56
+ }
57
+ $xeTable.handleOpenFilterColumn(new Event('click'), null, colEl, column, params)
58
+ }
59
+ }
60
+ }
61
+ })
62
+ }
63
+ return $xeTable.$nextTick()
64
+ },
65
+ /**
66
+ * 修改筛选条件列表
67
+ * @param {ColumnInfo} fieldOrColumn 列
68
+ * @param {Array} options 选项
69
+ */
70
+ _setFilter (fieldOrColumn: any, options: any, isUpdate: any) {
71
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
72
+ const reactData = $xeTable as unknown as TableReactData
73
+
74
+ const { filterStore } = reactData
75
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
76
+ if (column && column.filters) {
77
+ column.filters = toFilters(options || [], column.id)
78
+ if (isUpdate) {
79
+ return $xeTable.handleColumnConfirmFilter(column, null)
80
+ } else {
81
+ if (filterStore.visible) {
82
+ $xeTable.handleFilterOptions(column)
83
+ }
84
+ }
85
+ }
86
+ return $xeTable.$nextTick()
87
+ },
88
+ checkFilterOptions () {
89
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
90
+ const reactData = $xeTable as unknown as TableReactData
91
+
92
+ const { filterStore } = reactData
93
+ const { column } = filterStore
94
+ if (column) {
95
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
96
+ filterStore.isAllSelected = filterOptions.every((item) => item._checked)
97
+ filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some((item) => item._checked)
98
+ }
99
+ },
100
+ handleOpenFilterColumn (evnt: MouseEvent, btnEl: HTMLDivElement | null, colEl: HTMLDivElement, column: VxeTableDefines.ColumnInfo, params: any) {
101
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
102
+ const $xeGrid = $xeTable.$xeGrid
103
+ const $xeGantt = $xeTable.$xeGantt
104
+ const reactData = $xeTable as unknown as TableReactData
105
+ const internalData = $xeTable as unknown as TableInternalData
106
+ const $xeGGWrapper = $xeGrid || $xeGantt
107
+
108
+ const { initStore, filterStore } = reactData
109
+ const { elemStore } = internalData
110
+ if (filterStore.column === column && filterStore.visible) {
111
+ filterStore.visible = false
112
+ } else {
113
+ const tableEl = $xeTable.$refs.refElem as HTMLDivElement
114
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
115
+ const filterOpts = $xeTable.computeFilterOpts
116
+ const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts
117
+ const currEl = btnEl || colEl
118
+ const tableRect = tableEl.getBoundingClientRect()
119
+ const filterRender = column ? column.filterRender : null
120
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
121
+ $xeTable.handleFilterOptions(column)
122
+ internalData._currFilterParams = params
123
+ filterStore.style = null
124
+ filterStore.visible = true
125
+ initStore.filter = true
126
+ $xeTable.$nextTick(() => {
127
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
128
+ if (!headerScrollElem) {
129
+ return
130
+ }
131
+ const tableFilter = $xeTable.$refs.refTableFilter
132
+ const filterWrapperElem = tableFilter ? (tableFilter as any).$el as HTMLDivElement : null
133
+ if (!filterWrapperElem) {
134
+ return
135
+ }
136
+ const btnRect = currEl.getBoundingClientRect()
137
+ const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
138
+ const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
139
+ const filterWidth = filterWrapperElem.offsetWidth
140
+ const centerWidth = filterWidth / 2
141
+ let left = 0
142
+ let top = 0
143
+ let maxHeight = 0
144
+ if (transfer) {
145
+ left = btnRect.left - centerWidth + scrollLeft
146
+ top = btnRect.top + currEl.clientHeight + scrollTop
147
+ 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))
148
+ if (left < 16) {
149
+ left = 16
150
+ } else if (left > (visibleWidth - filterWidth - 16)) {
151
+ left = visibleWidth - filterWidth - 16
152
+ }
153
+ } else {
154
+ left = btnRect.left - tableRect.left - centerWidth
155
+ top = btnRect.top - tableRect.top + currEl.clientHeight
156
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14)
157
+ if (left < 1) {
158
+ left = 1
159
+ } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
160
+ left = tableEl.clientWidth - filterWidth - 1
161
+ }
162
+ if ($xeGGWrapper) {
163
+ const wrapperEl = $xeGGWrapper.$refs.refElem as HTMLDivElement
164
+ if (wrapperEl) {
165
+ const wrapperRect = wrapperEl.getBoundingClientRect()
166
+ top += tableRect.top - wrapperRect.top
167
+ }
168
+ }
169
+ }
170
+ const fStys: Record<string, any> = {
171
+ top: toCssUnit(top),
172
+ left: toCssUnit(left)
173
+ }
174
+ if (zIndex) {
175
+ fStys.zIndex = zIndex
176
+ }
177
+ filterStore.style = fStys
178
+ // 筛选面板是自适应表格高度
179
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
180
+ maxHeight = 0
181
+ } else {
182
+ if (customMaxHeight) {
183
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
184
+ }
185
+ }
186
+ // 判断面板不能大于表格高度
187
+ filterStore.maxHeight = maxHeight
188
+ })
189
+ }
190
+ $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt)
191
+ },
192
+ /**
193
+ * 点击筛选事件
194
+ * 当筛选图标被点击时触发
195
+ * 更新选项是否全部状态
196
+ * 打开筛选面板
197
+ * @param {Event} evnt 事件
198
+ * @param {ColumnInfo} column 列配置
199
+ * @param {Object} params 参数
200
+ */
201
+ triggerFilterEvent (evnt: MouseEvent, column: VxeTableDefines.ColumnInfo, params: any) {
202
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
203
+ const internalData = $xeTable as unknown as TableInternalData
204
+
205
+ const { elemStore } = internalData
206
+ const { fixed } = column
207
+ const headerWrapperElem = getRefElem(elemStore[`${fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
208
+ const btnElem = evnt.currentTarget as HTMLDivElement
209
+ const colEl = headerWrapperElem ? headerWrapperElem.querySelector<HTMLElement>(`.vxe-header--column.${column.id}`) : null
210
+ $xeTable.handleOpenFilterColumn(evnt, btnElem, colEl || btnElem, column, params)
211
+ },
212
+ // (单选)筛选发生改变
213
+ handleFilterChangeRadioOption (evnt: Event, checked: boolean, item: any) {
214
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
215
+ const reactData = $xeTable as unknown as TableReactData
216
+
217
+ const { filterStore } = reactData
218
+ const { column } = filterStore
219
+ if (column) {
220
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
221
+ filterOptions.forEach((option) => {
222
+ option._checked = false
223
+ })
224
+ item._checked = checked
225
+ $xeTable.checkFilterOptions()
226
+ $xeTable.handleFilterConfirmFilter(evnt, column)
227
+ }
228
+ },
229
+ // (多选)筛选发生改变
230
+ handleFilterChangeMultipleOption (evnt: Event, checked: boolean, item: any) {
231
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
232
+
233
+ item._checked = checked
234
+ $xeTable.checkFilterOptions()
235
+ },
236
+ // 筛选发生改变
237
+ handleFilterChangeOption (evnt: Event, checked: boolean, item: any) {
238
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
239
+ const reactData = $xeTable as unknown as TableReactData
240
+ const internalData = $xeTable as unknown as TableInternalData
241
+
242
+ const { filterStore } = reactData
243
+ const { fullColumnIdData } = internalData
244
+ let column = filterStore.column
245
+ if (!column) {
246
+ const colRest = fullColumnIdData[item._colId]
247
+ if (colRest) {
248
+ column = colRest.column
249
+ filterStore.column = column
250
+ }
251
+ }
252
+ if (column) {
253
+ if (column.filterMultiple) {
254
+ $xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
255
+ } else {
256
+ $xeTable.handleFilterChangeRadioOption(evnt, checked, item)
257
+ }
258
+ }
259
+ },
260
+ // 确认筛选
261
+ handleFilterConfirmFilter (evnt: Event | null, column: VxeTableDefines.ColumnInfo) {
262
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
263
+
264
+ if (column) {
265
+ const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
266
+ filterOptions.forEach((option) => {
267
+ option.checked = option._checked
268
+ })
269
+ $xeTable.confirmFilterEvent(evnt, column)
270
+ }
271
+ },
272
+ _saveFilter (fieldOrColumn?: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
273
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
274
+
275
+ if (fieldOrColumn) {
276
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
277
+ $xeTable.handleFilterConfirmFilter(null, column)
278
+ }
279
+ return $xeTable.$nextTick()
280
+ },
281
+ _saveFilterByEvent (evnt: Event, fieldOrColumn: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
282
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
283
+
284
+ if (fieldOrColumn) {
285
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
286
+ $xeTable.handleFilterConfirmFilter(evnt, column)
287
+ }
288
+ return $xeTable.$nextTick()
289
+ },
290
+ _resetFilter (fieldOrColumn?: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
291
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
292
+
293
+ if (fieldOrColumn) {
294
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
295
+ $xeTable.handleFilterResetFilter(null, column)
296
+ }
297
+ return $xeTable.$nextTick()
298
+ },
299
+ _resetFilterByEvent (evnt: Event, fieldOrColumn: VxeColumnPropTypes.Field | VxeTableDefines.ColumnInfo | null) {
300
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
301
+
302
+ if (fieldOrColumn) {
303
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
304
+ $xeTable.handleFilterResetFilter(evnt, column)
305
+ }
306
+ return $xeTable.$nextTick()
307
+ },
308
+ _saveFilterPanel () {
309
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
310
+ const reactData = $xeTable as unknown as TableReactData
311
+
312
+ const { filterStore } = reactData
313
+ $xeTable.handleFilterConfirmFilter(null, filterStore.column || null)
314
+ return $xeTable.$nextTick()
315
+ },
316
+ _saveFilterPanelByEvent (evnt: Event) {
317
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
318
+ const reactData = $xeTable as unknown as TableReactData
319
+
320
+ const { filterStore } = reactData
321
+ $xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null)
322
+ return $xeTable.$nextTick()
323
+ },
324
+ _resetFilterPanel () {
325
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
326
+ const reactData = $xeTable as unknown as TableReactData
327
+
328
+ const { filterStore } = reactData
329
+ $xeTable.handleFilterResetFilter(null, filterStore.column || null)
330
+ return $xeTable.$nextTick()
331
+ },
332
+ _resetFilterPanelByEvent (evnt: Event) {
333
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
334
+ const reactData = $xeTable as unknown as TableReactData
335
+
336
+ const { filterStore } = reactData
337
+ $xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
338
+ return $xeTable.$nextTick()
339
+ },
340
+ _getCheckedFilters () {
341
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
342
+ const internalData = $xeTable as unknown as TableInternalData
343
+
344
+ const { tableFullColumn } = internalData
345
+ const filterList: VxeTableDefines.FilterCheckedParams[] = []
346
+ tableFullColumn.forEach((column) => {
347
+ const { field, filters } = column
348
+ const filterOptions = filters || []
349
+ const valueList: any[] = []
350
+ const dataList: any[] = []
351
+ if (filterOptions) {
352
+ filterOptions.forEach((item) => {
353
+ if (item.checked) {
354
+ valueList.push(item.value)
355
+ dataList.push(item.data)
356
+ }
357
+ })
358
+ if (valueList.length) {
359
+ filterList.push({ column, field, property: field, values: valueList, datas: dataList })
360
+ }
361
+ }
362
+ })
363
+ return filterList
364
+ },
365
+ handleColumnConfirmFilter (column: VxeTableDefines.ColumnInfo, evnt: Event | null) {
366
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
367
+ const props = $xeTable
368
+ const reactData = $xeTable as unknown as TableReactData
369
+
370
+ const { mouseConfig } = props
371
+ const { scrollXLoad: oldScrollXLoad, scrollYLoad: oldScrollYLoad } = reactData
372
+ const filterOpts = $xeTable.computeFilterOpts
373
+ const mouseOpts = $xeTable.computeMouseOpts
374
+ const { field, filters } = column
375
+ const filterOptions = filters || []
376
+ const values: any[] = []
377
+ const datas: any[] = []
378
+ filterOptions.forEach((item) => {
379
+ if (item.checked) {
380
+ values.push(item.value)
381
+ datas.push(item.data)
382
+ }
383
+ })
384
+ const filterList = $xeTable.getCheckedFilters()
385
+ const params = { $table: $xeTable, $event: evnt as Event, column, field, property: field, values, datas, filters: filterList, filterList }
386
+ // 如果是服务端筛选,则跳过本地筛选处理
387
+ if (!filterOpts.remote) {
388
+ $xeTable.handleTableData(true)
389
+ $xeTable.checkSelectionStatus()
390
+ }
391
+ if (mouseConfig && mouseOpts.area && $xeTable.handleFilterEvent) {
392
+ $xeTable.handleFilterEvent(evnt as Event, params)
393
+ }
394
+ if (evnt) {
395
+ $xeTable.dispatchEvent('filter-change', params, evnt)
396
+ }
397
+ $xeTable.closeFilter()
398
+ return $xeTable.updateFooter().then(() => {
399
+ const { scrollXLoad, scrollYLoad } = reactData
400
+ if ((oldScrollXLoad || scrollXLoad) || (oldScrollYLoad || scrollYLoad)) {
401
+ if ((oldScrollXLoad || scrollXLoad)) {
402
+ $xeTable.updateScrollXSpace()
403
+ }
404
+ if ((oldScrollYLoad || scrollYLoad)) {
405
+ $xeTable.updateScrollYSpace()
406
+ }
407
+ return $xeTable.refreshScroll()
408
+ }
409
+ }).then(() => {
410
+ $xeTable.updateCellAreas()
411
+ return $xeTable.recalculate(true)
412
+ }).then(() => {
413
+ // 存在滚动行为未结束情况
414
+ setTimeout(() => $xeTable.recalculate(), 50)
415
+ })
416
+ },
417
+ /**
418
+ * 确认筛选
419
+ * 当筛选面板中的确定按钮被按下时触发
420
+ */
421
+ confirmFilterEvent (evnt: Event, column: VxeTableDefines.ColumnInfo) {
422
+ const $xeTable = this
423
+
424
+ if (column) {
425
+ $xeTable.handleColumnConfirmFilter(column, evnt)
426
+ }
427
+ },
428
+ handleClearFilter (column: any) {
429
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
430
+
431
+ if (column) {
432
+ const { filters, filterRender } = column
433
+ if (filters) {
434
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
435
+ const filterResetMethod = column.filterResetMethod || (compConf ? (compConf.tableFilterResetMethod || compConf.filterResetMethod) : null)
436
+ filters.forEach((item: any) => {
437
+ item._checked = false
438
+ item.checked = false
439
+ if (!filterResetMethod) {
440
+ item.data = XEUtils.clone(item.resetValue, true)
441
+ }
442
+ })
443
+ if (filterResetMethod) {
444
+ filterResetMethod({ options: filters, column, $table: $xeTable })
445
+ }
446
+ }
447
+ }
448
+ },
449
+ /**
450
+ * 重置筛选
451
+ * 当筛选面板中的重置按钮被按下时触发
452
+ * @param {Event} evnt 事件
453
+ */
454
+ handleFilterResetFilter (evnt: Event, column: VxeTableDefines.ColumnInfo) {
455
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
456
+
457
+ if (column) {
458
+ $xeTable.handleClearFilter(column)
459
+ $xeTable.confirmFilterEvent(evnt, column)
460
+ if (evnt) {
461
+ $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
462
+ }
463
+ }
464
+ },
465
+ /**
466
+ * 清空指定列的筛选条件
467
+ * 如果为空则清空所有列的筛选条件
468
+ * @param {String} fieldOrColumn 列
469
+ */
470
+ _clearFilter (fieldOrColumn: string | VxeTableDefines.ColumnInfo<any> | null | undefined) {
471
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
472
+ const reactData = $xeTable as unknown as TableReactData
473
+ const internalData = $xeTable as unknown as TableInternalData
474
+
475
+ const { filterStore } = reactData
476
+ const { tableFullColumn } = internalData
477
+ let column
478
+ if (fieldOrColumn) {
479
+ column = handleFieldOrColumn($xeTable, fieldOrColumn)
480
+ if (column) {
481
+ $xeTable.handleClearFilter(column)
482
+ }
483
+ } else {
484
+ tableFullColumn.forEach($xeTable.handleClearFilter)
485
+ }
486
+ if (!fieldOrColumn || column !== filterStore.column) {
487
+ Object.assign(filterStore, {
488
+ isAllSelected: false,
489
+ isIndeterminate: false,
490
+ style: null,
491
+ options: [],
492
+ column: null,
493
+ multiple: false,
494
+ visible: false
495
+ })
496
+ }
497
+ return $xeTable.updateData()
498
+ },
499
+ _updateFilterOptionStatus (item: any, checked: boolean) {
500
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
501
+
502
+ item._checked = checked
503
+ item.checked = checked
504
+ return $xeTable.$nextTick()
505
+ }
506
+ } as any
507
+ }