vxe-table 4.16.20 → 4.17.0-beta.1
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.
- package/README.md +2 -0
- package/es/grid/src/grid.js +8 -0
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/filter/hook.js +109 -59
- package/es/table/module/filter/panel.js +46 -26
- package/es/table/render/index.js +93 -9
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +14 -6
- package/es/table/src/header.js +118 -3
- package/es/table/src/props.js +2 -0
- package/es/table/src/table.js +31 -28
- package/es/table/src/util.js +8 -5
- package/es/table/style.css +2 -1
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +4 -1
- package/es/ui/src/log.js +1 -1
- package/es/ui/src/vn.js +11 -0
- package/es/vxe-table/style.css +2 -1
- package/es/vxe-table/style.min.css +1 -1
- package/lib/grid/src/grid.js +12 -0
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +513 -136
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/filter/hook.js +124 -67
- package/lib/table/module/filter/hook.min.js +1 -1
- package/lib/table/module/filter/panel.js +60 -26
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/render/index.js +109 -8
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/column.js +2 -0
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +18 -5
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/header.js +133 -3
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/props.js +2 -0
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +11 -11
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +18 -14
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +2 -1
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +4 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/ui/src/vn.js +12 -0
- package/lib/ui/src/vn.min.js +1 -1
- package/lib/vxe-table/style/style.css +2 -1
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/grid/src/grid.ts +8 -0
- package/packages/table/module/filter/hook.ts +111 -65
- package/packages/table/module/filter/panel.ts +57 -29
- package/packages/table/render/index.ts +110 -15
- package/packages/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +19 -7
- package/packages/table/src/header.ts +137 -8
- package/packages/table/src/props.ts +2 -0
- package/packages/table/src/table.ts +32 -28
- package/packages/table/src/util.ts +8 -5
- package/packages/ui/index.ts +3 -0
- package/packages/ui/src/vn.ts +12 -0
- package/styles/components/table-module/filter.scss +4 -1
- /package/es/{iconfont.1758850674944.ttf → iconfont.1759043328183.ttf} +0 -0
- /package/es/{iconfont.1758850674944.woff → iconfont.1759043328183.woff} +0 -0
- /package/es/{iconfont.1758850674944.woff2 → iconfont.1759043328183.woff2} +0 -0
- /package/lib/{iconfont.1758850674944.ttf → iconfont.1759043328183.ttf} +0 -0
- /package/lib/{iconfont.1758850674944.woff → iconfont.1759043328183.woff} +0 -0
- /package/lib/{iconfont.1758850674944.woff2 → iconfont.1759043328183.woff2} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vxe-table",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.17.0-beta.1",
|
|
4
4
|
"description": "A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"update": "npm install --legacy-peer-deps",
|
|
@@ -1385,6 +1385,10 @@ export default defineVxeComponent({
|
|
|
1385
1385
|
$pager.endPageByEvent(evnt)
|
|
1386
1386
|
}
|
|
1387
1387
|
},
|
|
1388
|
+
getCurrentPage () {
|
|
1389
|
+
const { tablePage } = reactData
|
|
1390
|
+
return tablePage.currentPage
|
|
1391
|
+
},
|
|
1388
1392
|
setCurrentPage (currentPage) {
|
|
1389
1393
|
const { tablePage } = reactData
|
|
1390
1394
|
const pageCount = computePageCount.value
|
|
@@ -1397,6 +1401,10 @@ export default defineVxeComponent({
|
|
|
1397
1401
|
$pager.setCurrentPageByEvent(evnt, currentPage)
|
|
1398
1402
|
}
|
|
1399
1403
|
},
|
|
1404
|
+
getPageSize () {
|
|
1405
|
+
const { tablePage } = reactData
|
|
1406
|
+
return tablePage.pageSize
|
|
1407
|
+
},
|
|
1400
1408
|
setPageSize (pageSize) {
|
|
1401
1409
|
const { tablePage } = reactData
|
|
1402
1410
|
tablePage.pageSize = Math.max(1, XEUtils.toNumber(pageSize))
|
|
@@ -9,7 +9,7 @@ import type { TableFilterMethods, TableFilterPrivateMethods, VxeTableDefines } f
|
|
|
9
9
|
|
|
10
10
|
const { renderer, hooks } = VxeUI
|
|
11
11
|
|
|
12
|
-
const tableFilterMethodKeys: (keyof TableFilterMethods)[] = ['openFilter', 'setFilter', 'clearFilter', 'saveFilterPanel', 'saveFilterPanelByEvent', 'resetFilterPanel', 'resetFilterPanelByEvent', 'getCheckedFilters', 'updateFilterOptionStatus']
|
|
12
|
+
const tableFilterMethodKeys: (keyof TableFilterMethods)[] = ['openFilter', 'setFilter', 'clearFilter', 'saveFilter', 'saveFilterByEvent', 'saveFilterPanel', 'saveFilterPanelByEvent', 'resetFilter', 'resetFilterByEvent', 'resetFilterPanel', 'resetFilterPanelByEvent', 'getCheckedFilters', 'updateFilterOptionStatus']
|
|
13
13
|
|
|
14
14
|
hooks.add('tableFilterModule', {
|
|
15
15
|
setupTable ($xeTable) {
|
|
@@ -21,51 +21,15 @@ hooks.add('tableFilterModule', {
|
|
|
21
21
|
const { refElem, refTableFilter } = $xeTable.getRefMaps()
|
|
22
22
|
const { computeFilterOpts, computeMouseOpts } = $xeTable.getComputeMaps()
|
|
23
23
|
|
|
24
|
-
// 确认筛选
|
|
25
|
-
const handleFilterConfirmFilter = (evnt: Event | null) => {
|
|
26
|
-
const { filterStore } = reactData
|
|
27
|
-
filterStore.options.forEach((option: any) => {
|
|
28
|
-
option.checked = option._checked
|
|
29
|
-
})
|
|
30
|
-
$xeTable.confirmFilterEvent(evnt)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// (单选)筛选发生改变
|
|
34
|
-
const changeRadioOption = (evnt: Event, checked: boolean, item: any) => {
|
|
35
|
-
const { filterStore } = reactData
|
|
36
|
-
filterStore.options.forEach((option: any) => {
|
|
37
|
-
option._checked = false
|
|
38
|
-
})
|
|
39
|
-
item._checked = checked
|
|
40
|
-
$xeTable.checkFilterOptions()
|
|
41
|
-
handleFilterConfirmFilter(evnt)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// (多选)筛选发生改变
|
|
45
|
-
const changeMultipleOption = (evnt: Event, checked: boolean, item: any) => {
|
|
46
|
-
item._checked = checked
|
|
47
|
-
$xeTable.checkFilterOptions()
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 重置筛选
|
|
52
|
-
* 当筛选面板中的重置按钮被按下时触发
|
|
53
|
-
* @param {Event} evnt 事件
|
|
54
|
-
*/
|
|
55
|
-
const handleFilterResetFilter = (evnt: Event | null) => {
|
|
56
|
-
const { filterStore } = reactData
|
|
57
|
-
$xeTable.handleClearFilter(filterStore.column)
|
|
58
|
-
$xeTable.confirmFilterEvent(evnt)
|
|
59
|
-
if (evnt) {
|
|
60
|
-
$xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
24
|
const filterPrivateMethods: TableFilterPrivateMethods = {
|
|
65
25
|
checkFilterOptions () {
|
|
66
26
|
const { filterStore } = reactData
|
|
67
|
-
|
|
68
|
-
|
|
27
|
+
const { column } = filterStore
|
|
28
|
+
if (column) {
|
|
29
|
+
const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
|
|
30
|
+
filterStore.isAllSelected = filterOptions.every((item) => item._checked)
|
|
31
|
+
filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some((item) => item._checked)
|
|
32
|
+
}
|
|
69
33
|
},
|
|
70
34
|
/**
|
|
71
35
|
* 点击筛选事件
|
|
@@ -177,10 +141,11 @@ hooks.add('tableFilterModule', {
|
|
|
177
141
|
const { scrollXLoad: oldScrollXLoad, scrollYLoad: oldScrollYLoad } = reactData
|
|
178
142
|
const filterOpts = computeFilterOpts.value
|
|
179
143
|
const mouseOpts = computeMouseOpts.value
|
|
180
|
-
const { field } = column
|
|
144
|
+
const { field, filters } = column
|
|
145
|
+
const filterOptions = filters || []
|
|
181
146
|
const values: any[] = []
|
|
182
147
|
const datas: any[] = []
|
|
183
|
-
|
|
148
|
+
filterOptions.forEach((item) => {
|
|
184
149
|
if (item.checked) {
|
|
185
150
|
values.push(item.value)
|
|
186
151
|
datas.push(item.data)
|
|
@@ -222,26 +187,74 @@ hooks.add('tableFilterModule', {
|
|
|
222
187
|
/**
|
|
223
188
|
* 确认筛选
|
|
224
189
|
* 当筛选面板中的确定按钮被按下时触发
|
|
225
|
-
* @param {Event} evnt 事件
|
|
226
190
|
*/
|
|
227
|
-
confirmFilterEvent (evnt
|
|
191
|
+
confirmFilterEvent (evnt, column) {
|
|
192
|
+
if (column) {
|
|
193
|
+
$xeTable.handleColumnConfirmFilter(column, evnt)
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
// (单选)筛选发生改变
|
|
197
|
+
handleFilterChangeRadioOption (evnt, checked, item) {
|
|
228
198
|
const { filterStore } = reactData
|
|
229
199
|
const { column } = filterStore
|
|
230
|
-
|
|
200
|
+
if (column) {
|
|
201
|
+
const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
|
|
202
|
+
filterOptions.forEach((option) => {
|
|
203
|
+
option._checked = false
|
|
204
|
+
})
|
|
205
|
+
item._checked = checked
|
|
206
|
+
$xeTable.checkFilterOptions()
|
|
207
|
+
$xeTable.handleFilterConfirmFilter(evnt, column)
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
// (多选)筛选发生改变
|
|
211
|
+
handleFilterChangeMultipleOption (evnt, checked, item) {
|
|
212
|
+
item._checked = checked
|
|
213
|
+
$xeTable.checkFilterOptions()
|
|
231
214
|
},
|
|
232
|
-
handleFilterChangeRadioOption: changeRadioOption,
|
|
233
|
-
handleFilterChangeMultipleOption: changeMultipleOption,
|
|
234
215
|
// 筛选发生改变
|
|
235
|
-
handleFilterChangeOption (evnt
|
|
216
|
+
handleFilterChangeOption (evnt, checked, item) {
|
|
236
217
|
const { filterStore } = reactData
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
218
|
+
const { fullColumnIdData } = internalData
|
|
219
|
+
let column = filterStore.column
|
|
220
|
+
if (!column) {
|
|
221
|
+
const colRest = fullColumnIdData[item._colId]
|
|
222
|
+
if (colRest) {
|
|
223
|
+
column = colRest.column
|
|
224
|
+
filterStore.column = column
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (column) {
|
|
228
|
+
if (column.filterMultiple) {
|
|
229
|
+
$xeTable.handleFilterChangeMultipleOption(evnt, checked, item)
|
|
230
|
+
} else {
|
|
231
|
+
$xeTable.handleFilterChangeRadioOption(evnt, checked, item)
|
|
232
|
+
}
|
|
241
233
|
}
|
|
242
234
|
},
|
|
243
|
-
|
|
244
|
-
|
|
235
|
+
// 确认筛选
|
|
236
|
+
handleFilterConfirmFilter (evnt, column) {
|
|
237
|
+
if (column) {
|
|
238
|
+
const filterOptions = (column.filters || []) as VxeTableDefines.FilterOption[]
|
|
239
|
+
filterOptions.forEach((option) => {
|
|
240
|
+
option.checked = option._checked
|
|
241
|
+
})
|
|
242
|
+
$xeTable.confirmFilterEvent(evnt, column)
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
/**
|
|
246
|
+
* 重置筛选
|
|
247
|
+
* 当筛选面板中的重置按钮被按下时触发
|
|
248
|
+
*/
|
|
249
|
+
handleFilterResetFilter (evnt: Event, column) {
|
|
250
|
+
if (column) {
|
|
251
|
+
$xeTable.handleClearFilter(column)
|
|
252
|
+
$xeTable.confirmFilterEvent(evnt, column)
|
|
253
|
+
if (evnt) {
|
|
254
|
+
$xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
245
258
|
}
|
|
246
259
|
|
|
247
260
|
const filterMethods: TableFilterMethods = {
|
|
@@ -273,7 +286,7 @@ hooks.add('tableFilterModule', {
|
|
|
273
286
|
const { filterStore } = reactData
|
|
274
287
|
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
275
288
|
if (column && column.filters) {
|
|
276
|
-
column.filters = toFilters(options || [])
|
|
289
|
+
column.filters = toFilters(options || [], column.id)
|
|
277
290
|
if (isUpdate) {
|
|
278
291
|
return $xeTable.handleColumnConfirmFilter(column, null)
|
|
279
292
|
} else {
|
|
@@ -318,31 +331,64 @@ hooks.add('tableFilterModule', {
|
|
|
318
331
|
}
|
|
319
332
|
return nextTick()
|
|
320
333
|
},
|
|
334
|
+
saveFilter (fieldOrColumn) {
|
|
335
|
+
if (fieldOrColumn) {
|
|
336
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
337
|
+
$xeTable.handleFilterConfirmFilter(null, column)
|
|
338
|
+
}
|
|
339
|
+
return nextTick()
|
|
340
|
+
},
|
|
341
|
+
saveFilterByEvent (evnt, fieldOrColumn) {
|
|
342
|
+
if (fieldOrColumn) {
|
|
343
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
344
|
+
$xeTable.handleFilterConfirmFilter(evnt, column)
|
|
345
|
+
}
|
|
346
|
+
return nextTick()
|
|
347
|
+
},
|
|
348
|
+
resetFilter (fieldOrColumn) {
|
|
349
|
+
if (fieldOrColumn) {
|
|
350
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
351
|
+
$xeTable.handleFilterResetFilter(null, column)
|
|
352
|
+
}
|
|
353
|
+
return nextTick()
|
|
354
|
+
},
|
|
355
|
+
resetFilterByEvent (evnt, fieldOrColumn) {
|
|
356
|
+
if (fieldOrColumn) {
|
|
357
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn)
|
|
358
|
+
$xeTable.handleFilterResetFilter(evnt, column)
|
|
359
|
+
}
|
|
360
|
+
return nextTick()
|
|
361
|
+
},
|
|
321
362
|
saveFilterPanel () {
|
|
322
|
-
|
|
363
|
+
const { filterStore } = reactData
|
|
364
|
+
$xeTable.handleFilterConfirmFilter(null, filterStore.column || null)
|
|
323
365
|
return nextTick()
|
|
324
366
|
},
|
|
325
367
|
saveFilterPanelByEvent (evnt) {
|
|
326
|
-
|
|
368
|
+
const { filterStore } = reactData
|
|
369
|
+
$xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null)
|
|
327
370
|
return nextTick()
|
|
328
371
|
},
|
|
329
372
|
resetFilterPanel () {
|
|
330
|
-
|
|
373
|
+
const { filterStore } = reactData
|
|
374
|
+
$xeTable.handleFilterResetFilter(null, filterStore.column || null)
|
|
331
375
|
return nextTick()
|
|
332
376
|
},
|
|
333
377
|
resetFilterPanelByEvent (evnt) {
|
|
334
|
-
|
|
378
|
+
const { filterStore } = reactData
|
|
379
|
+
$xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
|
|
335
380
|
return nextTick()
|
|
336
381
|
},
|
|
337
382
|
getCheckedFilters () {
|
|
338
383
|
const { tableFullColumn } = internalData
|
|
339
|
-
const filterList:
|
|
384
|
+
const filterList: VxeTableDefines.FilterCheckedParams[] = []
|
|
340
385
|
tableFullColumn.forEach((column) => {
|
|
341
386
|
const { field, filters } = column
|
|
387
|
+
const filterOptions = filters || []
|
|
342
388
|
const valueList: any[] = []
|
|
343
389
|
const dataList: any[] = []
|
|
344
|
-
if (
|
|
345
|
-
|
|
390
|
+
if (filterOptions) {
|
|
391
|
+
filterOptions.forEach((item) => {
|
|
346
392
|
if (item.checked) {
|
|
347
393
|
valueList.push(item.value)
|
|
348
394
|
dataList.push(item.data)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h, ref, computed, inject, Teleport } from 'vue'
|
|
1
|
+
import { h, ref, computed, inject, Teleport, PropType } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../../ui/src/comp'
|
|
3
3
|
import { VxeUI } from '../../../ui'
|
|
4
4
|
import { formatText, isEnableConf } from '../../../ui/src/utils'
|
|
@@ -7,14 +7,25 @@ import { getSlotVNs } from '../../../ui/src/vn'
|
|
|
7
7
|
import { warnLog } from '../../../ui/src/log'
|
|
8
8
|
import XEUtils from 'xe-utils'
|
|
9
9
|
|
|
10
|
-
import type {
|
|
10
|
+
import type { VxeGlobalRendererOptions } from 'vxe-pc-ui'
|
|
11
|
+
import type { VxeTableConstructor, VxeTableMethods, VxeTablePrivateMethods, VxeColumnPropTypes, VxeTableDefines } from '../../../../types'
|
|
11
12
|
|
|
12
|
-
const { getI18n, getIcon, renderer } = VxeUI
|
|
13
|
+
const { getI18n, getIcon, renderer, renderEmptyElement } = VxeUI
|
|
13
14
|
|
|
14
15
|
export default defineVxeComponent({
|
|
15
16
|
name: 'VxeTableFilterPanel',
|
|
16
17
|
props: {
|
|
17
|
-
filterStore:
|
|
18
|
+
filterStore: {
|
|
19
|
+
type: Object as PropType<{
|
|
20
|
+
isAllSelected: boolean
|
|
21
|
+
isIndeterminate: boolean
|
|
22
|
+
style: any
|
|
23
|
+
column: VxeTableDefines.ColumnInfo | null | undefined
|
|
24
|
+
visible: boolean
|
|
25
|
+
maxHeight: number | string | null
|
|
26
|
+
}>,
|
|
27
|
+
default: () => ({})
|
|
28
|
+
}
|
|
18
29
|
},
|
|
19
30
|
setup (props, context) {
|
|
20
31
|
const xID = XEUtils.uniqueId()
|
|
@@ -38,16 +49,20 @@ export default defineVxeComponent({
|
|
|
38
49
|
|
|
39
50
|
const computeHasCheckOption = computed(() => {
|
|
40
51
|
const { filterStore } = props
|
|
41
|
-
|
|
52
|
+
const { column } = filterStore
|
|
53
|
+
return column && column.filters && column.filters.some((option) => option.checked)
|
|
42
54
|
})
|
|
43
55
|
|
|
44
56
|
// 全部筛选事件
|
|
45
57
|
const filterCheckAllEvent = (evnt: Event, value: any) => {
|
|
46
58
|
const { filterStore } = props
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
option
|
|
50
|
-
|
|
59
|
+
const { column } = filterStore
|
|
60
|
+
if (column && column.filters) {
|
|
61
|
+
column.filters.forEach((option: any) => {
|
|
62
|
+
option._checked = value
|
|
63
|
+
option.checked = value
|
|
64
|
+
})
|
|
65
|
+
}
|
|
51
66
|
filterStore.isAllSelected = value
|
|
52
67
|
filterStore.isIndeterminate = false
|
|
53
68
|
}
|
|
@@ -57,10 +72,11 @@ export default defineVxeComponent({
|
|
|
57
72
|
*************************/
|
|
58
73
|
// 确认筛选
|
|
59
74
|
const confirmFilter = (evnt: Event) => {
|
|
75
|
+
const { filterStore } = props
|
|
60
76
|
if (!evnt) {
|
|
61
77
|
warnLog('vxe.error.delFunc', ['confirmFilter', 'saveFilterPanelByEvent'])
|
|
62
78
|
}
|
|
63
|
-
$xeTable.handleFilterConfirmFilter(evnt || new Event('click'))
|
|
79
|
+
$xeTable.handleFilterConfirmFilter(evnt || new Event('click'), filterStore.column || null)
|
|
64
80
|
}
|
|
65
81
|
|
|
66
82
|
// (单选)筛选发生改变
|
|
@@ -74,7 +90,8 @@ export default defineVxeComponent({
|
|
|
74
90
|
* @param {Event} evnt 事件
|
|
75
91
|
*/
|
|
76
92
|
const resetFilter = (evnt: Event) => {
|
|
77
|
-
|
|
93
|
+
const { filterStore } = props
|
|
94
|
+
$xeTable.handleFilterResetFilter(evnt, filterStore.column || null)
|
|
78
95
|
}
|
|
79
96
|
|
|
80
97
|
// (多选)筛选发生改变
|
|
@@ -89,7 +106,8 @@ export default defineVxeComponent({
|
|
|
89
106
|
|
|
90
107
|
const changeAllOption = (evnt: Event, checked: boolean) => {
|
|
91
108
|
const { filterStore } = props
|
|
92
|
-
|
|
109
|
+
const { column } = filterStore
|
|
110
|
+
if (column && column.filterMultiple) {
|
|
93
111
|
filterCheckAllEvent(evnt, checked)
|
|
94
112
|
} else {
|
|
95
113
|
resetFilter(evnt)
|
|
@@ -109,12 +127,16 @@ export default defineVxeComponent({
|
|
|
109
127
|
}
|
|
110
128
|
Object.assign($xeFilterPanel, filterPanelMethods)
|
|
111
129
|
|
|
112
|
-
const renderOptions = (filterRender:
|
|
130
|
+
const renderOptions = (filterRender: VxeColumnPropTypes.FilterRender | null, compConf: VxeGlobalRendererOptions | null) => {
|
|
113
131
|
const { filterStore } = props
|
|
114
|
-
const { column,
|
|
115
|
-
|
|
132
|
+
const { column, maxHeight } = filterStore
|
|
133
|
+
if (!column) {
|
|
134
|
+
return []
|
|
135
|
+
}
|
|
136
|
+
const { filterMultiple, filters, slots } = column
|
|
137
|
+
const filterOptions = (filters || []) as VxeTableDefines.FilterOption[]
|
|
116
138
|
const filterSlot = slots ? slots.filter : null
|
|
117
|
-
const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable })
|
|
139
|
+
const params = Object.assign({}, tableInternalData._currFilterParams, { option: filterOptions[0], $panel: $xeFilterPanel, $table: $xeTable })
|
|
118
140
|
const rtFilter = compConf ? (compConf.renderTableFilter || compConf.renderFilter) : null
|
|
119
141
|
if (filterSlot) {
|
|
120
142
|
return [
|
|
@@ -127,7 +149,7 @@ export default defineVxeComponent({
|
|
|
127
149
|
: {}
|
|
128
150
|
}, $xeTable.callSlot(filterSlot, params))
|
|
129
151
|
]
|
|
130
|
-
} else if (rtFilter) {
|
|
152
|
+
} else if (filterRender && rtFilter) {
|
|
131
153
|
return [
|
|
132
154
|
h('div', {
|
|
133
155
|
class: 'vxe-table--filter-template',
|
|
@@ -139,8 +161,8 @@ export default defineVxeComponent({
|
|
|
139
161
|
}, getSlotVNs(rtFilter(filterRender, params)))
|
|
140
162
|
]
|
|
141
163
|
}
|
|
142
|
-
const isAllChecked =
|
|
143
|
-
const isAllIndeterminate =
|
|
164
|
+
const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some((item) => item._checked)
|
|
165
|
+
const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate
|
|
144
166
|
return [
|
|
145
167
|
h('ul', {
|
|
146
168
|
class: 'vxe-table--filter-header'
|
|
@@ -150,11 +172,11 @@ export default defineVxeComponent({
|
|
|
150
172
|
'is--checked': isAllChecked,
|
|
151
173
|
'is--indeterminate': isAllIndeterminate
|
|
152
174
|
}],
|
|
153
|
-
title: getI18n(
|
|
175
|
+
title: getI18n(filterMultiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter'),
|
|
154
176
|
onClick: (evnt: MouseEvent) => {
|
|
155
177
|
changeAllOption(evnt, !filterStore.isAllSelected)
|
|
156
178
|
}
|
|
157
|
-
}, (
|
|
179
|
+
}, (filterMultiple
|
|
158
180
|
? [
|
|
159
181
|
h('span', {
|
|
160
182
|
class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
@@ -173,7 +195,7 @@ export default defineVxeComponent({
|
|
|
173
195
|
maxHeight: toCssUnit(maxHeight)
|
|
174
196
|
}
|
|
175
197
|
: {}
|
|
176
|
-
},
|
|
198
|
+
}, filterOptions.map((item: any) => {
|
|
177
199
|
const isChecked = item._checked
|
|
178
200
|
const isIndeterminate = false
|
|
179
201
|
return h('li', {
|
|
@@ -184,7 +206,7 @@ export default defineVxeComponent({
|
|
|
184
206
|
onClick: (evnt: MouseEvent) => {
|
|
185
207
|
changeOption(evnt, !item._checked, item)
|
|
186
208
|
}
|
|
187
|
-
}, (
|
|
209
|
+
}, (filterMultiple
|
|
188
210
|
? [
|
|
189
211
|
h('span', {
|
|
190
212
|
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
|
|
@@ -201,13 +223,16 @@ export default defineVxeComponent({
|
|
|
201
223
|
|
|
202
224
|
const renderFooters = () => {
|
|
203
225
|
const { filterStore } = props
|
|
204
|
-
const { column
|
|
226
|
+
const { column } = filterStore
|
|
227
|
+
if (!column) {
|
|
228
|
+
return []
|
|
229
|
+
}
|
|
205
230
|
const filterOpts = computeFilterOpts.value
|
|
206
231
|
const hasCheckOption = computeHasCheckOption.value
|
|
207
|
-
const { filterRender } = column
|
|
232
|
+
const { filterRender, filterMultiple } = column
|
|
208
233
|
const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
|
|
209
234
|
const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate
|
|
210
|
-
return
|
|
235
|
+
return (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : filterMultiple)
|
|
211
236
|
? [
|
|
212
237
|
h('div', {
|
|
213
238
|
class: 'vxe-table--filter-footer'
|
|
@@ -230,9 +255,12 @@ export default defineVxeComponent({
|
|
|
230
255
|
const renderVN = () => {
|
|
231
256
|
const { filterStore } = props
|
|
232
257
|
const { initStore } = tableReactData
|
|
233
|
-
const { visible,
|
|
258
|
+
const { visible, column } = filterStore
|
|
259
|
+
if (!column) {
|
|
260
|
+
return renderEmptyElement($xeFilterPanel)
|
|
261
|
+
}
|
|
234
262
|
const filterRender = column ? column.filterRender : null
|
|
235
|
-
const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
|
|
263
|
+
const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
|
|
236
264
|
const filterClassName = compConf ? (compConf.tableFilterClassName || compConf.filterClassName) : ''
|
|
237
265
|
const params = Object.assign({}, tableInternalData._currFilterParams, { $panel: $xeFilterPanel, $table: $xeTable })
|
|
238
266
|
const tableProps = $xeTable.props
|
|
@@ -254,7 +282,7 @@ export default defineVxeComponent({
|
|
|
254
282
|
{
|
|
255
283
|
[`size--${vSize}`]: vSize,
|
|
256
284
|
'is--animat': tableProps.animat,
|
|
257
|
-
'is--multiple':
|
|
285
|
+
'is--multiple': column.filterMultiple,
|
|
258
286
|
'is--active': visible
|
|
259
287
|
}
|
|
260
288
|
],
|