vxe-table 4.13.26 → 4.13.28

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 (48) hide show
  1. package/es/grid/src/grid.js +1 -1
  2. package/es/index.css +1 -1
  3. package/es/index.min.css +1 -1
  4. package/es/style.css +1 -1
  5. package/es/style.min.css +1 -1
  6. package/es/table/module/filter/hook.js +6 -2
  7. package/es/table/src/emits.js +2 -0
  8. package/es/table/src/table.js +162 -53
  9. package/es/table/style.css +6 -0
  10. package/es/table/style.min.css +1 -1
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-table/style.css +6 -0
  14. package/es/vxe-table/style.min.css +1 -1
  15. package/lib/grid/src/grid.js +1 -1
  16. package/lib/grid/src/grid.min.js +1 -1
  17. package/lib/index.css +1 -1
  18. package/lib/index.min.css +1 -1
  19. package/lib/index.umd.js +23 -16
  20. package/lib/index.umd.min.js +1 -1
  21. package/lib/style.css +1 -1
  22. package/lib/style.min.css +1 -1
  23. package/lib/table/module/filter/hook.js +8 -2
  24. package/lib/table/module/filter/hook.min.js +1 -1
  25. package/lib/table/src/emits.js +1 -1
  26. package/lib/table/src/emits.min.js +1 -1
  27. package/lib/table/src/table.js +11 -10
  28. package/lib/table/src/table.min.js +1 -1
  29. package/lib/table/style/style.css +6 -0
  30. package/lib/table/style/style.min.css +1 -1
  31. package/lib/ui/index.js +1 -1
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/log.js +1 -1
  34. package/lib/ui/src/log.min.js +1 -1
  35. package/lib/vxe-table/style/style.css +6 -0
  36. package/lib/vxe-table/style/style.min.css +1 -1
  37. package/package.json +1 -1
  38. package/packages/grid/src/grid.ts +1 -1
  39. package/packages/table/module/filter/hook.ts +6 -2
  40. package/packages/table/src/emits.ts +2 -0
  41. package/packages/table/src/table.ts +159 -53
  42. package/styles/components/table.scss +14 -0
  43. /package/es/{iconfont.1747094817139.ttf → iconfont.1747194464593.ttf} +0 -0
  44. /package/es/{iconfont.1747094817139.woff → iconfont.1747194464593.woff} +0 -0
  45. /package/es/{iconfont.1747094817139.woff2 → iconfont.1747194464593.woff2} +0 -0
  46. /package/lib/{iconfont.1747094817139.ttf → iconfont.1747194464593.ttf} +0 -0
  47. /package/lib/{iconfont.1747094817139.woff → iconfont.1747194464593.woff} +0 -0
  48. /package/lib/{iconfont.1747094817139.woff2 → iconfont.1747194464593.woff2} +0 -0
@@ -52,6 +52,9 @@ hooks.add('tableFilterModule', {
52
52
  const { filterStore } = reactData
53
53
  $xeTable.handleClearFilter(filterStore.column)
54
54
  $xeTable.confirmFilterEvent(evnt)
55
+ if (evnt) {
56
+ $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt)
57
+ }
55
58
  }
56
59
 
57
60
  const filterPrivateMethods: TableFilterPrivateMethods = {
@@ -272,6 +275,7 @@ hooks.add('tableFilterModule', {
272
275
  if (column && column.filters) {
273
276
  column.filters = toFilters(options || [])
274
277
  if (isUpdate) {
278
+ // 已废弃,即将去掉事件触发 new Event('click') -> null
275
279
  return $xeTable.handleColumnConfirmFilter(column, new Event('click'))
276
280
  }
277
281
  }
@@ -290,10 +294,10 @@ hooks.add('tableFilterModule', {
290
294
  if (fieldOrColumn) {
291
295
  column = handleFieldOrColumn($xeTable, fieldOrColumn)
292
296
  if (column) {
293
- filterPrivateMethods.handleClearFilter(column)
297
+ $xeTable.handleClearFilter(column)
294
298
  }
295
299
  } else {
296
- tableFullColumn.forEach(filterPrivateMethods.handleClearFilter)
300
+ tableFullColumn.forEach($xeTable.handleClearFilter)
297
301
  }
298
302
  if (!fieldOrColumn || column !== filterStore.column) {
299
303
  Object.assign(filterStore, {
@@ -39,9 +39,11 @@ export default [
39
39
  'clear-merge',
40
40
  'sort-change',
41
41
  'clear-sort',
42
+ 'clear-all-sort',
42
43
  'filter-change',
43
44
  'filter-visible',
44
45
  'clear-filter',
46
+ 'clear-all-filter',
45
47
 
46
48
  'resizable-change', // 废弃
47
49
 
@@ -9,7 +9,7 @@ import TableHeaderComponent from './header'
9
9
  import TableFooterComponent from './footer'
10
10
  import tableProps from './props'
11
11
  import tableEmits from './emits'
12
- import { getRowUniqueId, clearTableAllStatus, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getCellHeight } from './util'
12
+ import { getRowUniqueId, clearTableAllStatus, toFilters, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getCellHeight } from './util'
13
13
  import { getSlotVNs } from '../../ui/src/vn'
14
14
  import { warnLog, errLog } from '../../ui/src/log'
15
15
  import TableCustomPanelComponent from '../module/custom/panel'
@@ -987,7 +987,7 @@ export default defineComponent({
987
987
 
988
988
  const getNextSortOrder = (column: VxeTableDefines.ColumnInfo) => {
989
989
  const sortOpts = computeSortOpts.value
990
- const { orders } = sortOpts
990
+ const { orders = [] } = sortOpts
991
991
  const currOrder = column.order || null
992
992
  const oIndex = orders.indexOf(currOrder) + 1
993
993
  return orders[oIndex < orders.length ? oIndex : 0]
@@ -1399,6 +1399,54 @@ export default defineComponent({
1399
1399
  return rest
1400
1400
  }
1401
1401
 
1402
+ const handleSortEvent = (evnt: Event | null, sortConfs: VxeTableDefines.SortConfs | VxeTableDefines.SortConfs[], isUpdate?: boolean) => {
1403
+ const sortOpts = computeSortOpts.value
1404
+ const { multiple, remote, orders } = sortOpts
1405
+ if (!XEUtils.isArray(sortConfs)) {
1406
+ sortConfs = [sortConfs]
1407
+ }
1408
+ if (sortConfs && sortConfs.length) {
1409
+ if (!multiple) {
1410
+ sortConfs = [sortConfs[0]]
1411
+ clearAllSort()
1412
+ }
1413
+ let firstColumn: any = null
1414
+ sortConfs.forEach((confs: any, index: number) => {
1415
+ let { field, order } = confs
1416
+ let column = field
1417
+ if (XEUtils.isString(field)) {
1418
+ column = $xeTable.getColumnByField(field)
1419
+ }
1420
+ if (!firstColumn) {
1421
+ firstColumn = column
1422
+ }
1423
+ if (column && column.sortable) {
1424
+ if (orders && orders.indexOf(order) === -1) {
1425
+ order = getNextSortOrder(column)
1426
+ }
1427
+ if (column.order !== order) {
1428
+ column.order = order
1429
+ }
1430
+ column.sortTime = Date.now() + index
1431
+ }
1432
+ })
1433
+ if (isUpdate) {
1434
+ if (!remote) {
1435
+ $xeTable.handleTableData(true)
1436
+ }
1437
+ }
1438
+ if (evnt) {
1439
+ $xeTable.handleColumnSortEvent(evnt, firstColumn)
1440
+ }
1441
+ return nextTick().then(() => {
1442
+ updateRowOffsetTop()
1443
+ $xeTable.updateCellAreas()
1444
+ return updateStyle()
1445
+ })
1446
+ }
1447
+ return nextTick()
1448
+ }
1449
+
1402
1450
  const clearAllSort = () => {
1403
1451
  const { tableFullColumn } = internalData
1404
1452
  tableFullColumn.forEach((column) => {
@@ -5723,49 +5771,11 @@ export default defineComponent({
5723
5771
  return nextTick()
5724
5772
  },
5725
5773
  setSort (sortConfs, isUpdate) {
5726
- const sortOpts = computeSortOpts.value
5727
- const { multiple, remote, orders } = sortOpts
5728
- if (!XEUtils.isArray(sortConfs)) {
5729
- sortConfs = [sortConfs]
5730
- }
5731
- if (sortConfs && sortConfs.length) {
5732
- if (!multiple) {
5733
- sortConfs = [sortConfs[0]]
5734
- clearAllSort()
5735
- }
5736
- let firstColumn: any = null
5737
- sortConfs.forEach((confs: any, index: number) => {
5738
- let { field, order } = confs
5739
- let column = field
5740
- if (XEUtils.isString(field)) {
5741
- column = tableMethods.getColumnByField(field)
5742
- }
5743
- if (!firstColumn) {
5744
- firstColumn = column
5745
- }
5746
- if (column && column.sortable) {
5747
- if (orders && orders.indexOf(order) === -1) {
5748
- order = getNextSortOrder(column)
5749
- }
5750
- if (column.order !== order) {
5751
- column.order = order
5752
- }
5753
- column.sortTime = Date.now() + index
5754
- }
5755
- })
5756
- if (isUpdate) {
5757
- if (!remote) {
5758
- $xeTable.handleTableData(true)
5759
- }
5760
- $xeTable.handleColumnSortEvent(new Event('click'), firstColumn)
5761
- }
5762
- return nextTick().then(() => {
5763
- updateRowOffsetTop()
5764
- tableMethods.updateCellAreas()
5765
- return updateStyle()
5766
- })
5767
- }
5768
- return nextTick()
5774
+ // 已废弃,即将去掉事件触发 new Event('click') -> null
5775
+ return handleSortEvent(new Event('click'), sortConfs, isUpdate)
5776
+ },
5777
+ setSortByEvent (evnt, sortConfs, isUpdate) {
5778
+ return handleSortEvent(evnt, sortConfs, isUpdate)
5769
5779
  },
5770
5780
  /**
5771
5781
  * 清空指定列的排序条件
@@ -5790,6 +5800,40 @@ export default defineComponent({
5790
5800
  return updateStyle()
5791
5801
  })
5792
5802
  },
5803
+ clearSortByEvent (evnt, fieldOrColumn) {
5804
+ const { tableFullColumn } = internalData
5805
+ const sortOpts = computeSortOpts.value
5806
+ const sortCols: VxeTableDefines.ColumnInfo[] = []
5807
+ let column: VxeTableDefines.ColumnInfo<any> | null = null
5808
+ if (evnt) {
5809
+ if (fieldOrColumn) {
5810
+ column = handleFieldOrColumn($xeTable, fieldOrColumn)
5811
+ if (column) {
5812
+ column.order = null
5813
+ }
5814
+ } else {
5815
+ tableFullColumn.forEach((column) => {
5816
+ if (column.order) {
5817
+ column.order = null
5818
+ sortCols.push(column)
5819
+ }
5820
+ })
5821
+ }
5822
+ if (!sortOpts.remote) {
5823
+ $xeTable.handleTableData(true)
5824
+ }
5825
+ if (sortCols.length) {
5826
+ const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] }
5827
+ dispatchEvent('clear-all-sort', params, evnt)
5828
+ } else if (column) {
5829
+ $xeTable.handleColumnSortEvent(evnt, column)
5830
+ }
5831
+ }
5832
+ return nextTick().then(() => {
5833
+ updateRowOffsetTop()
5834
+ return updateStyle()
5835
+ })
5836
+ },
5793
5837
  isSort (fieldOrColumn) {
5794
5838
  if (fieldOrColumn) {
5795
5839
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
@@ -5813,6 +5857,16 @@ export default defineComponent({
5813
5857
  }
5814
5858
  return sortList
5815
5859
  },
5860
+ setFilterByEvent (evnt, fieldOrColumn, options, isUpdate) {
5861
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn)
5862
+ if (column && column.filters) {
5863
+ column.filters = toFilters(options || [])
5864
+ if (isUpdate) {
5865
+ return $xeTable.handleColumnConfirmFilter(column, evnt)
5866
+ }
5867
+ }
5868
+ return nextTick()
5869
+ },
5816
5870
  /**
5817
5871
  * 关闭筛选
5818
5872
  * @param {Event} evnt 事件
@@ -5849,6 +5903,47 @@ export default defineComponent({
5849
5903
  isFilter (fieldOrColumn) {
5850
5904
  return tableMethods.isActiveFilterByColumn(fieldOrColumn)
5851
5905
  },
5906
+ clearFilterByEvent (evnt, fieldOrColumn) {
5907
+ const { filterStore } = reactData
5908
+ const { tableFullColumn } = internalData
5909
+ const filterOpts = computeFilterOpts.value
5910
+ const filterCols: VxeTableDefines.ColumnInfo[] = []
5911
+ let column: VxeTableDefines.ColumnInfo<any> | null = null
5912
+ if (fieldOrColumn) {
5913
+ column = handleFieldOrColumn($xeTable, fieldOrColumn)
5914
+ if (column) {
5915
+ $xeTable.handleClearFilter(column)
5916
+ }
5917
+ } else {
5918
+ tableFullColumn.forEach(column => {
5919
+ if (column.filters) {
5920
+ filterCols.push(column)
5921
+ $xeTable.handleClearFilter(column)
5922
+ }
5923
+ })
5924
+ }
5925
+ if (!fieldOrColumn || column !== filterStore.column) {
5926
+ Object.assign(filterStore, {
5927
+ isAllSelected: false,
5928
+ isIndeterminate: false,
5929
+ style: null,
5930
+ options: [],
5931
+ column: null,
5932
+ multiple: false,
5933
+ visible: false
5934
+ })
5935
+ }
5936
+ if (!filterOpts.remote) {
5937
+ $xeTable.updateData()
5938
+ }
5939
+ if (filterCols.length) {
5940
+ const params = { $table: $xeTable, $event: evnt, cols: filterCols, filterList: [] }
5941
+ dispatchEvent('clear-all-filter', params, evnt)
5942
+ } else if (column) {
5943
+ $xeTable.dispatchEvent('clear-filter', { filterList: () => $xeTable.getCheckedFilters() }, evnt)
5944
+ }
5945
+ return nextTick()
5946
+ },
5852
5947
  /**
5853
5948
  * 判断展开行是否懒加载完成
5854
5949
  * @param {Row} row 行对象
@@ -8481,7 +8576,12 @@ export default defineComponent({
8481
8576
  }
8482
8577
  }
8483
8578
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
8484
- handleTooltip(evnt, tdEl, tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
8579
+ const ctEl = tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper')
8580
+ let ovEl = null
8581
+ if (column.treeNode) {
8582
+ ovEl = tdEl.querySelector<HTMLElement>('.vxe-tree-cell')
8583
+ }
8584
+ handleTooltip(evnt, tdEl, ovEl || ctEl, tdEl.querySelector<HTMLElement>('.vxe-cell--label') || tdEl.querySelector<HTMLElement>('.vxe-cell--wrapper'), params)
8485
8585
  }
8486
8586
  },
8487
8587
  /**
@@ -8905,12 +9005,15 @@ export default defineComponent({
8905
9005
  handleColumnSortEvent (evnt, column) {
8906
9006
  const { mouseConfig } = props
8907
9007
  const mouseOpts = computeMouseOpts.value
8908
- const { field, sortable } = column
9008
+ const { field, sortable, order } = column
8909
9009
  if (sortable) {
8910
- const params = { $table: $xeTable, $event: evnt, column, field, property: field, order: column.order, sortList: tableMethods.getSortColumns(), sortTime: column.sortTime }
9010
+ const params = { $table: $xeTable, $event: evnt, column, field, property: field, order, sortList: tableMethods.getSortColumns(), sortTime: column.sortTime }
8911
9011
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
8912
9012
  $xeTable.handleSortEvent(evnt, params)
8913
9013
  }
9014
+ if (!order) {
9015
+ dispatchEvent('clear-sort', params, evnt)
9016
+ }
8914
9017
  dispatchEvent('sort-change', params, evnt)
8915
9018
  }
8916
9019
  },
@@ -8924,10 +9027,10 @@ export default defineComponent({
8924
9027
  if (sortable) {
8925
9028
  if (!order || column.order === order) {
8926
9029
  if (allowClear) {
8927
- tableMethods.clearSort(multiple ? column : null)
9030
+ $xeTable.clearSort(multiple ? column : null)
8928
9031
  }
8929
9032
  } else {
8930
- tableMethods.sort({ field, order })
9033
+ $xeTable.sort({ field, order })
8931
9034
  }
8932
9035
  $xeTable.handleColumnSortEvent(evnt, column)
8933
9036
  }
@@ -11282,6 +11385,7 @@ export default defineComponent({
11282
11385
  const rowOpts = computeRowOpts.value
11283
11386
  const customOpts = computeCustomOpts.value
11284
11387
  const rowGroupOpts = computeRowGroupOpts.value
11388
+ const virtualYOpts = computeVirtualYOpts.value
11285
11389
  const { groupFields } = rowGroupOpts
11286
11390
 
11287
11391
  if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
@@ -11497,9 +11601,11 @@ export default defineComponent({
11497
11601
  }
11498
11602
  })
11499
11603
 
11500
- const tableViewportEl = refTableViewportElem.value
11501
- if (tableViewportEl) {
11502
- tableViewportEl.addEventListener('wheel', $xeTable.triggerBodyWheelEvent, { passive: false })
11604
+ if (virtualYOpts.mode !== 'scroll') {
11605
+ const tableViewportEl = refTableViewportElem.value
11606
+ if (tableViewportEl) {
11607
+ tableViewportEl.addEventListener('wheel', $xeTable.triggerBodyWheelEvent, { passive: false })
11608
+ }
11503
11609
  }
11504
11610
 
11505
11611
  globalEvents.on($xeTable, 'paste', handleGlobalPasteEvent)
@@ -1050,6 +1050,20 @@ $btnThemeList: (
1050
1050
  }
1051
1051
  }
1052
1052
  }
1053
+ .vxe-header--column {
1054
+ &.col--ellipsis {
1055
+ &.col--center {
1056
+ .vxe-cell--wrapper {
1057
+ justify-content: center;
1058
+ }
1059
+ }
1060
+ &.col--right {
1061
+ .vxe-cell--wrapper {
1062
+ justify-content: right;
1063
+ }
1064
+ }
1065
+ }
1066
+ }
1053
1067
  .vxe-header--column,
1054
1068
  .vxe-footer--column {
1055
1069
  &.col--ellipsis {