vxe-table 4.15.0-beta.0 → 4.15.0-beta.10

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 (164) hide show
  1. package/es/grid/src/grid.js +88 -1
  2. package/es/locale/lang/ar-EG.js +3 -1
  3. package/es/locale/lang/de-DE.js +3 -1
  4. package/es/locale/lang/en-US.js +3 -1
  5. package/es/locale/lang/es-ES.js +3 -1
  6. package/es/locale/lang/fr-FR.js +3 -1
  7. package/es/locale/lang/hu-HU.js +3 -1
  8. package/es/locale/lang/hy-AM.js +3 -1
  9. package/es/locale/lang/id-ID.js +3 -1
  10. package/es/locale/lang/it-IT.js +3 -1
  11. package/es/locale/lang/ja-JP.js +3 -1
  12. package/es/locale/lang/ko-KR.js +3 -1
  13. package/es/locale/lang/ms-MY.js +3 -1
  14. package/es/locale/lang/nb-NO.js +3 -1
  15. package/es/locale/lang/pt-BR.js +3 -1
  16. package/es/locale/lang/ru-RU.js +3 -1
  17. package/es/locale/lang/th-TH.js +3 -1
  18. package/es/locale/lang/ug-CN.js +3 -1
  19. package/es/locale/lang/uk-UA.js +3 -1
  20. package/es/locale/lang/uz-UZ.js +3 -1
  21. package/es/locale/lang/vi-VN.js +3 -1
  22. package/es/locale/lang/zh-CHT.js +3 -1
  23. package/es/locale/lang/zh-CN.js +3 -1
  24. package/es/style.css +1 -1
  25. package/es/table/module/filter/hook.js +9 -22
  26. package/es/table/module/keyboard/hook.js +2 -2
  27. package/es/table/src/body.js +2 -2
  28. package/es/table/src/cell.js +5 -5
  29. package/es/table/src/columnInfo.js +11 -2
  30. package/es/table/src/footer.js +2 -3
  31. package/es/table/src/header.js +2 -2
  32. package/es/table/src/table.js +158 -37
  33. package/es/ui/index.js +2 -1
  34. package/es/ui/src/log.js +1 -1
  35. package/lib/grid/src/grid.js +96 -1
  36. package/lib/grid/src/grid.min.js +1 -1
  37. package/lib/index.umd.js +157 -69
  38. package/lib/index.umd.min.js +1 -1
  39. package/lib/locale/lang/ar-EG.js +3 -1
  40. package/lib/locale/lang/ar-EG.min.js +1 -1
  41. package/lib/locale/lang/ar-EG.umd.js +3 -1
  42. package/lib/locale/lang/de-DE.js +3 -1
  43. package/lib/locale/lang/de-DE.min.js +1 -1
  44. package/lib/locale/lang/de-DE.umd.js +3 -1
  45. package/lib/locale/lang/en-US.js +3 -1
  46. package/lib/locale/lang/en-US.min.js +1 -1
  47. package/lib/locale/lang/en-US.umd.js +3 -1
  48. package/lib/locale/lang/es-ES.js +3 -1
  49. package/lib/locale/lang/es-ES.min.js +1 -1
  50. package/lib/locale/lang/es-ES.umd.js +3 -1
  51. package/lib/locale/lang/fr-FR.js +3 -1
  52. package/lib/locale/lang/fr-FR.min.js +1 -1
  53. package/lib/locale/lang/fr-FR.umd.js +3 -1
  54. package/lib/locale/lang/hu-HU.js +3 -1
  55. package/lib/locale/lang/hu-HU.min.js +1 -1
  56. package/lib/locale/lang/hu-HU.umd.js +3 -1
  57. package/lib/locale/lang/hy-AM.js +3 -1
  58. package/lib/locale/lang/hy-AM.min.js +1 -1
  59. package/lib/locale/lang/hy-AM.umd.js +3 -1
  60. package/lib/locale/lang/id-ID.js +3 -1
  61. package/lib/locale/lang/id-ID.min.js +1 -1
  62. package/lib/locale/lang/id-ID.umd.js +3 -1
  63. package/lib/locale/lang/it-IT.js +3 -1
  64. package/lib/locale/lang/it-IT.min.js +1 -1
  65. package/lib/locale/lang/it-IT.umd.js +3 -1
  66. package/lib/locale/lang/ja-JP.js +3 -1
  67. package/lib/locale/lang/ja-JP.min.js +1 -1
  68. package/lib/locale/lang/ja-JP.umd.js +3 -1
  69. package/lib/locale/lang/ko-KR.js +3 -1
  70. package/lib/locale/lang/ko-KR.min.js +1 -1
  71. package/lib/locale/lang/ko-KR.umd.js +3 -1
  72. package/lib/locale/lang/ms-MY.js +3 -1
  73. package/lib/locale/lang/ms-MY.min.js +1 -1
  74. package/lib/locale/lang/ms-MY.umd.js +3 -1
  75. package/lib/locale/lang/nb-NO.js +3 -1
  76. package/lib/locale/lang/nb-NO.min.js +1 -1
  77. package/lib/locale/lang/nb-NO.umd.js +3 -1
  78. package/lib/locale/lang/pt-BR.js +3 -1
  79. package/lib/locale/lang/pt-BR.min.js +1 -1
  80. package/lib/locale/lang/pt-BR.umd.js +3 -1
  81. package/lib/locale/lang/ru-RU.js +3 -1
  82. package/lib/locale/lang/ru-RU.min.js +1 -1
  83. package/lib/locale/lang/ru-RU.umd.js +3 -1
  84. package/lib/locale/lang/th-TH.js +3 -1
  85. package/lib/locale/lang/th-TH.min.js +1 -1
  86. package/lib/locale/lang/th-TH.umd.js +3 -1
  87. package/lib/locale/lang/ug-CN.js +3 -1
  88. package/lib/locale/lang/ug-CN.min.js +1 -1
  89. package/lib/locale/lang/ug-CN.umd.js +3 -1
  90. package/lib/locale/lang/uk-UA.js +3 -1
  91. package/lib/locale/lang/uk-UA.min.js +1 -1
  92. package/lib/locale/lang/uk-UA.umd.js +3 -1
  93. package/lib/locale/lang/uz-UZ.js +3 -1
  94. package/lib/locale/lang/uz-UZ.min.js +1 -1
  95. package/lib/locale/lang/uz-UZ.umd.js +3 -1
  96. package/lib/locale/lang/vi-VN.js +3 -1
  97. package/lib/locale/lang/vi-VN.min.js +1 -1
  98. package/lib/locale/lang/vi-VN.umd.js +3 -1
  99. package/lib/locale/lang/zh-CHT.js +3 -1
  100. package/lib/locale/lang/zh-CHT.min.js +1 -1
  101. package/lib/locale/lang/zh-CHT.umd.js +3 -1
  102. package/lib/locale/lang/zh-CN.js +3 -1
  103. package/lib/locale/lang/zh-CN.min.js +1 -1
  104. package/lib/locale/lang/zh-CN.umd.js +3 -1
  105. package/lib/style.css +1 -1
  106. package/lib/table/module/filter/hook.js +10 -33
  107. package/lib/table/module/filter/hook.min.js +1 -1
  108. package/lib/table/module/keyboard/hook.js +2 -2
  109. package/lib/table/module/keyboard/hook.min.js +1 -1
  110. package/lib/table/src/body.js +2 -2
  111. package/lib/table/src/body.min.js +1 -1
  112. package/lib/table/src/cell.js +5 -4
  113. package/lib/table/src/cell.min.js +1 -1
  114. package/lib/table/src/columnInfo.js +14 -2
  115. package/lib/table/src/columnInfo.min.js +1 -1
  116. package/lib/table/src/footer.js +2 -3
  117. package/lib/table/src/footer.min.js +1 -1
  118. package/lib/table/src/header.js +2 -2
  119. package/lib/table/src/header.min.js +1 -1
  120. package/lib/table/src/table.js +18 -17
  121. package/lib/table/src/table.min.js +1 -1
  122. package/lib/ui/index.js +2 -1
  123. package/lib/ui/index.min.js +1 -1
  124. package/lib/ui/src/log.js +1 -1
  125. package/lib/ui/src/log.min.js +1 -1
  126. package/package.json +1 -1
  127. package/packages/grid/src/grid.ts +90 -1
  128. package/packages/locale/lang/ar-EG.ts +3 -1
  129. package/packages/locale/lang/de-DE.ts +3 -1
  130. package/packages/locale/lang/en-US.ts +3 -1
  131. package/packages/locale/lang/es-ES.ts +3 -1
  132. package/packages/locale/lang/fr-FR.ts +3 -1
  133. package/packages/locale/lang/hu-HU.ts +3 -1
  134. package/packages/locale/lang/hy-AM.ts +3 -1
  135. package/packages/locale/lang/id-ID.ts +3 -1
  136. package/packages/locale/lang/it-IT.ts +3 -1
  137. package/packages/locale/lang/ja-JP.ts +3 -1
  138. package/packages/locale/lang/ko-KR.ts +3 -1
  139. package/packages/locale/lang/ms-MY.ts +3 -1
  140. package/packages/locale/lang/nb-NO.ts +3 -1
  141. package/packages/locale/lang/pt-BR.ts +3 -1
  142. package/packages/locale/lang/ru-RU.ts +3 -1
  143. package/packages/locale/lang/th-TH.ts +3 -1
  144. package/packages/locale/lang/ug-CN.ts +3 -1
  145. package/packages/locale/lang/uk-UA.ts +3 -1
  146. package/packages/locale/lang/uz-UZ.ts +3 -1
  147. package/packages/locale/lang/vi-VN.ts +3 -1
  148. package/packages/locale/lang/zh-CHT.ts +3 -1
  149. package/packages/locale/lang/zh-CN.ts +3 -1
  150. package/packages/table/module/filter/hook.ts +10 -24
  151. package/packages/table/module/keyboard/hook.ts +2 -2
  152. package/packages/table/src/body.ts +2 -2
  153. package/packages/table/src/cell.ts +5 -5
  154. package/packages/table/src/columnInfo.ts +13 -2
  155. package/packages/table/src/footer.ts +2 -3
  156. package/packages/table/src/header.ts +2 -2
  157. package/packages/table/src/table.ts +168 -37
  158. package/packages/ui/index.ts +1 -0
  159. /package/es/{iconfont.1752731438597.ttf → iconfont.1753519951433.ttf} +0 -0
  160. /package/es/{iconfont.1752731438597.woff → iconfont.1753519951433.woff} +0 -0
  161. /package/es/{iconfont.1752731438597.woff2 → iconfont.1753519951433.woff2} +0 -0
  162. /package/lib/{iconfont.1752731438597.ttf → iconfont.1753519951433.ttf} +0 -0
  163. /package/lib/{iconfont.1752731438597.woff → iconfont.1753519951433.woff} +0 -0
  164. /package/lib/{iconfont.1752731438597.woff2 → iconfont.1753519951433.woff2} +0 -0
@@ -17,6 +17,7 @@ export default {
17
17
  groupTag: 'Nhóm tiêu đề nhóm nên sử dụng "{0}" thay vì "{1}", có thể gây ra lỗi',
18
18
  scrollErrProp: 'Tham số này "{0}" không được hỗ trợ sau khi cuộn ảo được bật',
19
19
  errConflicts: 'Tham số "{0}" Xung đột với "{1}"',
20
+ modelConflicts: '绑定的字段值 "{0}" 与 "{1}" 存在冲突,将会出现错误',
20
21
  notSupportProp: '"{1}" không được hỗ trợ khi tham số "{0}" được bật, nó phải là "{2}", nếu không sẽ xảy ra lỗi',
21
22
  notConflictProp: 'Khi sử dụng "{0}", "{1}" nên được đặt, nếu không có thể có xung đột chức năng',
22
23
  unableInsert: 'Không thể được chèn vào vị trí đã chỉ định, vui lòng kiểm tra xem các tham số có đúng không',
@@ -54,7 +55,8 @@ export default {
54
55
  treeCrossDrag: 'Chỉ kéo cấp độ đầu tiên',
55
56
  treeDragChild: 'Cha mẹ không thể kéo đến con cái của họ',
56
57
  reqPlugin: '"{1}" không được cài đặt tại https://vxeui.com/other/khác',
57
- errMaxRow: 'Vượt quá khối lượng dữ liệu được hỗ trợ tối đa {0}, điều này có thể gây ra lỗi'
58
+ errMaxRow: 'Vượt quá khối lượng dữ liệu được hỗ trợ tối đa {0}, điều này có thể gây ra lỗi',
59
+ useNew: '不建议使用 {0},请使用 {1}'
58
60
  },
59
61
  table: {
60
62
  emptyText: 'Chưa có dữ liệu',
@@ -17,6 +17,7 @@ export default {
17
17
  groupTag: '分組列頭應該使用 "{0}" 而不是 "{1}",這可能會出現錯誤',
18
18
  scrollErrProp: '啟用虛擬滾動後不支持該參數 "{0}"',
19
19
  errConflicts: '參數 "{0}" 與 "{1}" 有衝突',
20
+ modelConflicts: '绑定的字段值 "{0}" 与 "{1}" 存在冲突,将会出现错误',
20
21
  notSupportProp: '當啟用參數 "{0}" 時不支持 "{1}",應該為 "{2}",否則將會出現錯誤',
21
22
  notConflictProp: '當使用 "{0}" 時,應該設置 "{1}",否則可能會存在功能衝突',
22
23
  unableInsert: '無法插入到指定位置,請檢查參數是否正確',
@@ -54,7 +55,8 @@ export default {
54
55
  treeCrossDrag: '只能拖拽第一層級',
55
56
  treeDragChild: '父級不能拖拽到自己的子級中',
56
57
  reqPlugin: '擴展插件未安裝 "{1}" https://vxeui.com/other{0}/#/{1}/install',
57
- errMaxRow: '超過支持的最大數據量 {0} 行,這可能會導致出現錯誤'
58
+ errMaxRow: '超過支持的最大數據量 {0} 行,這可能會導致出現錯誤',
59
+ useNew: '不建议使用 {0},请使用 {1}'
58
60
  },
59
61
  table: {
60
62
  emptyText: '暫無數據',
@@ -17,6 +17,7 @@ export default {
17
17
  groupTag: '分组列头应该使用 "{0}" 而不是 "{1}",这可能会出现错误',
18
18
  scrollErrProp: '启用虚拟滚动后不支持该参数 "{0}"',
19
19
  errConflicts: '参数 "{0}" 与 "{1}" 有冲突',
20
+ modelConflicts: '绑定的字段值 "{0}" 与 "{1}" 存在冲突,将会出现错误',
20
21
  notSupportProp: '当启用参数 "{0}" 时不支持 "{1}",应该为 "{2}",否则将会出现错误',
21
22
  notConflictProp: '当使用 "{0}" 时,应该设置 "{1}",否则可能会存在功能冲突',
22
23
  unableInsert: '无法插入到指定位置,请检查参数是否正确',
@@ -54,7 +55,8 @@ export default {
54
55
  treeCrossDrag: '只能拖拽第一层级',
55
56
  treeDragChild: '父级不能拖拽到自己的子级中',
56
57
  reqPlugin: '扩展插件未安装 "{1}" https://vxeui.com/other{0}/#/{1}/install',
57
- errMaxRow: '超过支持的最大数据量 {0} 行,这可能会导致出现错误'
58
+ errMaxRow: '超过支持的最大数据量 {0} 行,这可能会导致出现错误',
59
+ useNew: '不建议使用 {0},请使用 {1}'
58
60
  },
59
61
  table: {
60
62
  emptyText: '暂无数据',
@@ -5,7 +5,7 @@ import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util'
5
5
  import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom'
6
6
  import { isEnableConf } from '../../../ui/src/utils'
7
7
 
8
- import type { TableFilterMethods, TableFilterPrivateMethods } from '../../../../types'
8
+ import type { TableFilterMethods, TableFilterPrivateMethods, VxeTableDefines } from '../../../../types'
9
9
 
10
10
  const { renderer, hooks } = VxeUI
11
11
 
@@ -72,7 +72,7 @@ hooks.add('tableFilterModule', {
72
72
  * @param {ColumnInfo} column 列配置
73
73
  * @param {Object} params 参数
74
74
  */
75
- triggerFilterEvent (evnt: MouseEvent, column, params) {
75
+ triggerFilterEvent (evnt: MouseEvent, column: VxeTableDefines.ColumnInfo, params) {
76
76
  const { initStore, filterStore } = reactData
77
77
  const { elemStore } = internalData
78
78
  if (filterStore.column === column && filterStore.visible) {
@@ -84,27 +84,9 @@ hooks.add('tableFilterModule', {
84
84
  const { transfer } = filterOpts
85
85
  const tableRect = el.getBoundingClientRect()
86
86
  const btnElem = evnt.currentTarget as HTMLDivElement
87
- const { filters, filterMultiple, filterRender } = column
88
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
89
- const frMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null)
87
+ $xeTable.handleFilterOptions(column)
90
88
  internalData._currFilterParams = params
91
- Object.assign(filterStore, {
92
- multiple: filterMultiple,
93
- options: filters,
94
- column,
95
- style: null
96
- })
97
- // 复原状态
98
- filterStore.options.forEach((option: any) => {
99
- const { _checked, checked } = option
100
- option._checked = checked
101
- if (!checked && _checked !== checked) {
102
- if (frMethod) {
103
- frMethod({ option, column, $table: $xeTable })
104
- }
105
- }
106
- })
107
- this.checkFilterOptions()
89
+ filterStore.style = null
108
90
  filterStore.visible = true
109
91
  initStore.filter = true
110
92
  nextTick(() => {
@@ -271,12 +253,16 @@ hooks.add('tableFilterModule', {
271
253
  * @param {Array} options 选项
272
254
  */
273
255
  setFilter (fieldOrColumn, options, isUpdate) {
256
+ const { filterStore } = reactData
274
257
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
275
258
  if (column && column.filters) {
276
259
  column.filters = toFilters(options || [])
277
260
  if (isUpdate) {
278
- // 已废弃,即将去掉事件触发 new Event('click') -> null
279
- return $xeTable.handleColumnConfirmFilter(column, new Event('click'))
261
+ return $xeTable.handleColumnConfirmFilter(column, null)
262
+ } else {
263
+ if (filterStore.visible) {
264
+ $xeTable.handleFilterOptions(column)
265
+ }
280
266
  }
281
267
  }
282
268
  return nextTick()
@@ -268,8 +268,8 @@ hooks.add('tableKeyboardModule', {
268
268
  const checkboxOpts = computeCheckboxOpts.value
269
269
  const mouseOpts = computeMouseOpts.value
270
270
  const editOpts = computeEditOpts.value
271
- if (mouseConfig && mouseOpts.area && $xeTable.triggerCellAreaMousednEvent) {
272
- return $xeTable.triggerCellAreaMousednEvent(evnt, params)
271
+ if (mouseConfig && mouseOpts.area && $xeTable.triggerCellAreaModownEvent) {
272
+ return $xeTable.triggerCellAreaModownEvent(evnt, params)
273
273
  } else {
274
274
  if (checkboxConfig && checkboxOpts.range) {
275
275
  handleCheckboxRangeEvent(evnt, params)
@@ -140,7 +140,7 @@ export default defineVxeComponent({
140
140
  const _columnIndex = colRest._index
141
141
  const isEdit = isEnableConf(editRender)
142
142
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0
143
- let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX
143
+ let fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed)
144
144
  const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding
145
145
  const cellOverflow = XEUtils.eqNull(showOverflow) ? allShowOverflow : showOverflow
146
146
  const showEllipsis = cellOverflow === 'ellipsis'
@@ -291,7 +291,7 @@ export default defineVxeComponent({
291
291
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
292
292
 
293
293
  let isVNPreEmptyStatus = false
294
- if (!isMergeCell) {
294
+ if (overflowX && !isMergeCell) {
295
295
  if (!dragRow || getRowid($xeTable, dragRow) !== rowid) {
296
296
  if (scrollYLoad && !treeConfig && !virtualYOpts.immediate && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
297
297
  isVNPreEmptyStatus = true
@@ -419,7 +419,7 @@ export const Cell = {
419
419
  const { computeAggregateOpts } = $table.getComputeMaps()
420
420
  const aggregateOpts = computeAggregateOpts.value
421
421
  const { mode, showTotal, totalMethod, countFields, contentMethod, mapChildrenField } = aggregateOpts
422
- const aggMethod = aggregateOpts.aggregateMethod || aggregateOpts.countMethod
422
+ const aggCalcMethod = aggregateOpts.calcValuesMethod || aggregateOpts.countMethod || aggregateOpts.aggregateMethod
423
423
  const groupField = aggRow.groupField
424
424
  const groupContent = aggRow.groupContent
425
425
  const childList = mapChildrenField ? (aggRow[mapChildrenField] || []) : []
@@ -452,9 +452,9 @@ export const Cell = {
452
452
  } else if ($table.getPivotTableAggregateCellAggValue) {
453
453
  cellValue = $table.getPivotTableAggregateCellAggValue(params)
454
454
  } else if (aggFunc === true || (countFields && countFields.includes(field))) {
455
- if (aggMethod) {
455
+ if (aggCalcMethod) {
456
456
  ctParams.aggValue = childCount
457
- cellValue = `${aggMethod(ctParams)}`
457
+ cellValue = `${aggCalcMethod(ctParams)}`
458
458
  }
459
459
  }
460
460
  } else {
@@ -508,14 +508,14 @@ export const Cell = {
508
508
  const { rowGroupExpandedFlag } = tableReactData
509
509
  const { rowGroupExpandedMaps } = tableInternalData
510
510
  const aggregateOpts = computeAggregateOpts.value
511
- const { padding, indent } = aggregateOpts
511
+ const { mode, padding, indent } = aggregateOpts
512
512
  const rowid = getRowid($table, row)
513
513
  const isExpand = !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[rowid]
514
514
  return h('div', {
515
515
  class: ['vxe-row-group--tree-node', {
516
516
  'is--expanded': isExpand
517
517
  }],
518
- style: padding && indent
518
+ style: mode !== 'column' && padding && indent
519
519
  ? {
520
520
  paddingLeft: `${level * indent}px`
521
521
  }
@@ -13,6 +13,8 @@ export class ColumnInfo {
13
13
  const tableProps = $xeTable.props
14
14
  const $xeGrid = $xeTable.xeGrid
15
15
 
16
+ const { field, editRender } = _vm
17
+
16
18
  const formatter: string | any[] = _vm.formatter
17
19
  const visible = XEUtils.isBoolean(_vm.visible) ? _vm.visible : true
18
20
 
@@ -53,11 +55,20 @@ export class ColumnInfo {
53
55
  }
54
56
  }
55
57
 
58
+ if (field && editRender) {
59
+ if (editRender.startField && `${editRender.startField}`.indexOf(field) >= 0) {
60
+ errLog('vxe.error.modelConflicts', [`field=${field}`, `edit-render.startField=${editRender.startField}`])
61
+ }
62
+ if (editRender.endField && `${editRender.endField}`.indexOf(field) >= 0) {
63
+ errLog('vxe.error.modelConflicts', [`field=${field}`, `edit-render.endField=${editRender.endField}`])
64
+ }
65
+ }
66
+
56
67
  Object.assign(this, {
57
68
  // 基本属性
58
69
  type: _vm.type,
59
70
  property: _vm.field,
60
- field: _vm.field,
71
+ field: field,
61
72
  title: _vm.title,
62
73
  width: _vm.width,
63
74
  minWidth: _vm.minWidth,
@@ -92,7 +103,7 @@ export class ColumnInfo {
92
103
  rowResize: _vm.rowResize,
93
104
  cellType: _vm.cellType,
94
105
  cellRender: _vm.cellRender,
95
- editRender: _vm.editRender,
106
+ editRender: editRender,
96
107
  contentRender: _vm.contentRender,
97
108
  headerExportMethod: _vm.headerExportMethod,
98
109
  exportMethod: _vm.exportMethod,
@@ -68,8 +68,7 @@ export default defineVxeComponent({
68
68
  const renderOpts = editRender || cellRender
69
69
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
70
70
  const showAllTip = tooltipOpts.showAll
71
- const isColGroup = column.children && column.children.length
72
- const fixedHiddenColumn = fixedType ? column.fixed !== fixedType && !isColGroup : column.fixed && overflowX
71
+ const fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed)
73
72
  const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding
74
73
  const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow
75
74
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
@@ -159,7 +158,7 @@ export default defineVxeComponent({
159
158
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
160
159
 
161
160
  let isVNPreEmptyStatus = false
162
- if (isOptimizeMode && !isMergeCell) {
161
+ if (isOptimizeMode && overflowX && !isMergeCell) {
163
162
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
164
163
  isVNPreEmptyStatus = true
165
164
  }
@@ -66,7 +66,7 @@ export default defineVxeComponent({
66
66
  const renderOpts = editRender || cellRender
67
67
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
68
68
  const isColGroup = column.children && column.children.length
69
- const fixedHiddenColumn = fixedType ? (column.fixed !== fixedType && !isColGroup) : !!column.fixed && overflowX
69
+ const fixedHiddenColumn = overflowX && !isColGroup && (fixedType ? column.fixed !== fixedType : !!column.fixed)
70
70
  const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding
71
71
  const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow
72
72
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
@@ -130,7 +130,7 @@ export default defineVxeComponent({
130
130
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
131
131
 
132
132
  let isVNPreEmptyStatus = false
133
- if (isOptimizeMode && !isGroup) {
133
+ if (isOptimizeMode && overflowX && !isGroup) {
134
134
  if (!dragCol || dragCol.id !== colid) {
135
135
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
136
136
  isVNPreEmptyStatus = true
@@ -1443,16 +1443,23 @@ export default defineVxeComponent({
1443
1443
  }
1444
1444
 
1445
1445
  const handleSortEvent = (evnt: Event | null, sortConfs: VxeTableDefines.SortConfs | VxeTableDefines.SortConfs[], isUpdate?: boolean) => {
1446
+ const { tableFullColumn } = internalData
1446
1447
  const sortOpts = computeSortOpts.value
1447
1448
  const { multiple, remote, orders } = sortOpts
1448
1449
  if (!XEUtils.isArray(sortConfs)) {
1449
1450
  sortConfs = [sortConfs]
1450
1451
  }
1451
1452
  if (sortConfs && sortConfs.length) {
1453
+ const orderActiveMaps: Record<string, VxeTableDefines.ColumnInfo> = {}
1452
1454
  if (!multiple) {
1453
1455
  sortConfs = [sortConfs[0]]
1454
- clearAllSort()
1456
+ tableFullColumn.forEach((column) => {
1457
+ if (column.order) {
1458
+ orderActiveMaps[column.id] = column
1459
+ }
1460
+ })
1455
1461
  }
1462
+ const sortColMpps: Record<string, VxeTableDefines.ColumnInfo> = {}
1456
1463
  let firstColumn: any = null
1457
1464
  sortConfs.forEach((confs: any, index: number) => {
1458
1465
  let { field, order } = confs
@@ -1471,8 +1478,16 @@ export default defineVxeComponent({
1471
1478
  column.order = order
1472
1479
  }
1473
1480
  column.sortTime = Date.now() + index
1481
+ sortColMpps[column.id] = column
1474
1482
  }
1475
1483
  })
1484
+ if (!multiple) {
1485
+ XEUtils.each(orderActiveMaps, (oaCol: VxeTableDefines.ColumnInfo, oaId) => {
1486
+ if (!sortColMpps[oaId]) {
1487
+ oaCol.order = null
1488
+ }
1489
+ })
1490
+ }
1476
1491
  if (isUpdate) {
1477
1492
  if (!remote) {
1478
1493
  $xeTable.handleTableData(true)
@@ -2907,19 +2922,17 @@ export default defineVxeComponent({
2907
2922
  const handleDefaultTreeExpand = () => {
2908
2923
  const { treeConfig } = props
2909
2924
  if (treeConfig) {
2910
- const { tableFullData } = internalData
2925
+ const { fullAllDataRowIdData } = internalData
2911
2926
  const treeOpts = computeTreeOpts.value
2912
2927
  const { expandAll, expandRowKeys } = treeOpts
2913
- const childrenField = treeOpts.children || treeOpts.childrenField
2914
2928
  if (expandAll) {
2915
2929
  $xeTable.setAllTreeExpand(true)
2916
2930
  } else if (expandRowKeys) {
2917
2931
  const defExpandeds: any[] = []
2918
- const rowkey = getRowkey($xeTable)
2919
- expandRowKeys.forEach((rowid: any) => {
2920
- const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField })
2921
- if (matchObj) {
2922
- defExpandeds.push(matchObj.item)
2932
+ expandRowKeys.forEach((rowid) => {
2933
+ const rowRest = fullAllDataRowIdData[rowid]
2934
+ if (rowRest) {
2935
+ defExpandeds.push(rowRest.row)
2923
2936
  }
2924
2937
  })
2925
2938
  $xeTable.setTreeExpand(defExpandeds, true)
@@ -3525,6 +3538,13 @@ export default defineVxeComponent({
3525
3538
  }
3526
3539
  reactData.isRowLoading = false
3527
3540
  handleRecalculateStyle(false, false, false)
3541
+ // 如果是自动行高,特殊情况需调用 recalculate 手动刷新
3542
+ if (!props.showOverflow) {
3543
+ setTimeout(() => {
3544
+ handleLazyRecalculate(false, true, true)
3545
+ setTimeout(() => handleLazyRecalculate(false, true, true), 3000)
3546
+ }, 2000)
3547
+ }
3528
3548
  // 是否变更虚拟滚动
3529
3549
  if (oldScrollYLoad === sYLoad) {
3530
3550
  restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop)
@@ -3557,6 +3577,7 @@ export default defineVxeComponent({
3557
3577
  handleDefaultRadioChecked()
3558
3578
  handleDefaultRowExpand()
3559
3579
  handleDefaultTreeExpand()
3580
+ handleDefaultRowGroupExpand()
3560
3581
  handleDefaultMergeCells()
3561
3582
  handleDefaultMergeFooterItems()
3562
3583
  nextTick(() => setTimeout(() => $xeTable.recalculate()))
@@ -3980,6 +4001,22 @@ export default defineVxeComponent({
3980
4001
  })
3981
4002
  }
3982
4003
 
4004
+ /**
4005
+ * 处理默认展开分组行
4006
+ */
4007
+ const handleDefaultRowGroupExpand = () => {
4008
+ const { isRowGroupStatus } = reactData
4009
+ if (isRowGroupStatus) {
4010
+ const aggregateOpts = computeAggregateOpts.value
4011
+ const { expandAll, expandGroupFields } = aggregateOpts
4012
+ if (expandAll) {
4013
+ $xeTable.setAllRowGroupExpand(true)
4014
+ } else if (expandGroupFields && expandGroupFields.length) {
4015
+ $xeTable.setRowGroupExpandByField(expandGroupFields, true)
4016
+ }
4017
+ }
4018
+ }
4019
+
3983
4020
  const handleCheckAllEvent = (evnt: Event | null, value: any) => {
3984
4021
  handleCheckedAllCheckboxRow(value)
3985
4022
  if (evnt) {
@@ -5933,11 +5970,10 @@ export default defineVxeComponent({
5933
5970
  return nextTick()
5934
5971
  },
5935
5972
  setSort (sortConfs, isUpdate) {
5936
- // 已废弃,即将去掉事件触发 new Event('click') -> null
5937
- return handleSortEvent(new Event('click'), sortConfs, isUpdate)
5973
+ return handleSortEvent(null, sortConfs, isUpdate)
5938
5974
  },
5939
- setSortByEvent (evnt, sortConfs, isUpdate) {
5940
- return handleSortEvent(evnt, sortConfs, isUpdate)
5975
+ setSortByEvent (evnt, sortConfs) {
5976
+ return handleSortEvent(evnt, sortConfs, true)
5941
5977
  },
5942
5978
  /**
5943
5979
  * 清空指定列的排序条件
@@ -5965,6 +6001,7 @@ export default defineVxeComponent({
5965
6001
  clearSortByEvent (evnt, fieldOrColumn) {
5966
6002
  const { tableFullColumn } = internalData
5967
6003
  const sortOpts = computeSortOpts.value
6004
+ const { multiple } = sortOpts
5968
6005
  const sortCols: VxeTableDefines.ColumnInfo[] = []
5969
6006
  let column: VxeTableDefines.ColumnInfo<any> | null = null
5970
6007
  if (evnt) {
@@ -5984,11 +6021,18 @@ export default defineVxeComponent({
5984
6021
  if (!sortOpts.remote) {
5985
6022
  $xeTable.handleTableData(true)
5986
6023
  }
5987
- if (sortCols.length) {
6024
+
6025
+ if (!multiple) {
6026
+ column = sortCols[0]
6027
+ }
6028
+
6029
+ if (column) {
6030
+ $xeTable.handleColumnSortEvent(evnt, column)
6031
+ }
6032
+
6033
+ if (multiple && sortCols.length) {
5988
6034
  const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] }
5989
6035
  dispatchEvent('clear-all-sort', params, evnt)
5990
- } else if (column) {
5991
- $xeTable.handleColumnSortEvent(evnt, column)
5992
6036
  }
5993
6037
  }
5994
6038
  return nextTick().then(() => {
@@ -6019,13 +6063,11 @@ export default defineVxeComponent({
6019
6063
  }
6020
6064
  return sortList
6021
6065
  },
6022
- setFilterByEvent (evnt, fieldOrColumn, options, isUpdate) {
6066
+ setFilterByEvent (evnt, fieldOrColumn, options) {
6023
6067
  const column = handleFieldOrColumn($xeTable, fieldOrColumn)
6024
6068
  if (column && column.filters) {
6025
6069
  column.filters = toFilters(options || [])
6026
- if (isUpdate) {
6027
- return $xeTable.handleColumnConfirmFilter(column, evnt)
6028
- }
6070
+ return $xeTable.handleColumnConfirmFilter(column, evnt)
6029
6071
  }
6030
6072
  return nextTick()
6031
6073
  },
@@ -6069,6 +6111,7 @@ export default defineVxeComponent({
6069
6111
  const { filterStore } = reactData
6070
6112
  const { tableFullColumn } = internalData
6071
6113
  const filterOpts = computeFilterOpts.value
6114
+ const { multiple } = filterOpts
6072
6115
  const filterCols: VxeTableDefines.ColumnInfo[] = []
6073
6116
  let column: VxeTableDefines.ColumnInfo<any> | null = null
6074
6117
  if (fieldOrColumn) {
@@ -6091,19 +6134,49 @@ export default defineVxeComponent({
6091
6134
  style: null,
6092
6135
  options: [],
6093
6136
  column: null,
6094
- multiple: false,
6137
+ multiple: false, // 选项是覅多选
6095
6138
  visible: false
6096
6139
  })
6097
6140
  }
6141
+
6098
6142
  if (!filterOpts.remote) {
6099
6143
  $xeTable.updateData()
6100
6144
  }
6101
- if (filterCols.length) {
6145
+
6146
+ if (!multiple) {
6147
+ column = filterCols[0]
6148
+ }
6149
+
6150
+ if (column) {
6151
+ const filterList = () => $xeTable.getCheckedFilters()
6152
+ const values: any[] = []
6153
+ const datas: any[] = []
6154
+ column.filters.forEach((item: any) => {
6155
+ if (item.checked) {
6156
+ values.push(item.value)
6157
+ datas.push(item.data)
6158
+ }
6159
+ })
6160
+ const params = {
6161
+ $table: $xeTable,
6162
+ $event: evnt as Event,
6163
+ column,
6164
+ field: column.field,
6165
+ property: column.field,
6166
+ values,
6167
+ datas,
6168
+ filters: filterList,
6169
+ filterList
6170
+ }
6171
+ $xeTable.dispatchEvent('filter-change', params, evnt)
6172
+ $xeTable.dispatchEvent('clear-filter', params, evnt)
6173
+ }
6174
+
6175
+ if (multiple && filterCols.length) {
6102
6176
  const params = { $table: $xeTable, $event: evnt, cols: filterCols, filterList: [] }
6103
6177
  dispatchEvent('clear-all-filter', params, evnt)
6104
- } else if (column) {
6105
- $xeTable.dispatchEvent('clear-filter', { filterList: () => $xeTable.getCheckedFilters() }, evnt)
6106
6178
  }
6179
+
6107
6180
  return nextTick()
6108
6181
  },
6109
6182
  /**
@@ -6361,6 +6434,32 @@ export default defineVxeComponent({
6361
6434
  }
6362
6435
  return nextTick()
6363
6436
  },
6437
+ setRowGroupExpandByField (groupFields, expanded) {
6438
+ const { isRowGroupStatus } = reactData
6439
+ const aggregateOpts = computeAggregateOpts.value
6440
+ const { childrenField } = aggregateOpts
6441
+ if (groupFields) {
6442
+ if (!XEUtils.isArray(groupFields)) {
6443
+ groupFields = [groupFields]
6444
+ }
6445
+ if (isRowGroupStatus) {
6446
+ const rows: any[] = []
6447
+ const gfKeys: Record<string, boolean> = {}
6448
+ groupFields.forEach(groupField => {
6449
+ gfKeys[groupField] = true
6450
+ })
6451
+ XEUtils.eachTree(internalData.afterGroupFullData, (row) => {
6452
+ if (row.isAggregate && gfKeys[row.groupField]) {
6453
+ rows.push(row)
6454
+ }
6455
+ }, { children: childrenField })
6456
+ if (rows.length) {
6457
+ return handleRowGroupVirtualExpand(rows, expanded)
6458
+ }
6459
+ }
6460
+ }
6461
+ return nextTick()
6462
+ },
6364
6463
  setAllRowGroupExpand (expanded) {
6365
6464
  const { tableFullGroupData } = internalData
6366
6465
  const aggregateOpts = computeAggregateOpts.value
@@ -6576,8 +6675,6 @@ export default defineVxeComponent({
6576
6675
  },
6577
6676
  /**
6578
6677
  * 如果有滚动条,则滚动到对应的位置
6579
- * @param {Number} scrollLeft 左距离
6580
- * @param {Number} scrollTop 上距离
6581
6678
  */
6582
6679
  scrollTo (scrollLeft, scrollTop) {
6583
6680
  const { elemStore } = internalData
@@ -6591,6 +6688,12 @@ export default defineVxeComponent({
6591
6688
 
6592
6689
  internalData.intoRunScroll = true
6593
6690
 
6691
+ if (scrollLeft) {
6692
+ if (!XEUtils.isNumber(scrollLeft)) {
6693
+ scrollTop = scrollLeft.top
6694
+ scrollLeft = scrollLeft.left
6695
+ }
6696
+ }
6594
6697
  if (XEUtils.isNumber(scrollLeft)) {
6595
6698
  setScrollLeft(xHandleEl, scrollLeft)
6596
6699
  setScrollLeft(bodyScrollElem, scrollLeft)
@@ -7998,7 +8101,7 @@ export default defineVxeComponent({
7998
8101
  evnt.preventDefault()
7999
8102
  const { column } = params
8000
8103
  const { columnStore, overflowX, scrollbarHeight } = reactData
8001
- const { elemStore, visibleColumn } = internalData
8104
+ const { visibleColumn } = internalData
8002
8105
  const { leftList, rightList } = columnStore
8003
8106
  const resizableOpts = computeResizableOpts.value
8004
8107
  const osbHeight = overflowX ? scrollbarHeight : 0
@@ -8016,25 +8119,30 @@ export default defineVxeComponent({
8016
8119
  const { clientX: dragClientX } = evnt
8017
8120
  const dragBtnElem = evnt.target as HTMLDivElement
8018
8121
  let resizeColumn = column
8019
- if (column.children && column.children.length) {
8122
+ const isDragGroupCol = column.children && column.children.length
8123
+ if (isDragGroupCol) {
8020
8124
  XEUtils.eachTree(column.children, childColumn => {
8021
8125
  resizeColumn = childColumn
8022
8126
  })
8023
8127
  }
8024
- const cell = dragBtnElem.parentNode as HTMLTableCellElement
8025
- const cellParams = Object.assign(params, { cell })
8026
- let dragLeft = 0
8027
- const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
8028
- if (!bodyScrollElem) {
8128
+ let cell = dragBtnElem.parentElement as HTMLTableCellElement | null
8129
+ if (isDragGroupCol) {
8130
+ const trEl = cell ? cell.parentElement as HTMLTableRowElement : null
8131
+ const theadEl = trEl ? trEl.parentElement as HTMLTableElement : null
8132
+ cell = theadEl ? theadEl.querySelector<HTMLTableCellElement>(`.vxe-header--column[colid="${resizeColumn.id}"]`) : null
8133
+ }
8134
+ if (!cell) {
8029
8135
  return
8030
8136
  }
8137
+ const cellParams = XEUtils.assign(params, { cell })
8138
+ let dragLeft = 0
8031
8139
  const tableRect = tableEl.getBoundingClientRect()
8032
8140
  const rightContainerRect = rightContainerElem ? rightContainerElem.getBoundingClientRect() : null
8033
8141
  const cellRect = cell.getBoundingClientRect()
8034
8142
  const dragBtnRect = dragBtnElem.getBoundingClientRect()
8035
8143
 
8036
8144
  const dragBtnWidth = dragBtnElem.clientWidth
8037
- const dragBtnOffsetWidth = Math.floor(dragBtnWidth / 2)
8145
+ const dragBtnOffsetWidth = XEUtils.floor(dragBtnWidth / 2)
8038
8146
  const dragPosLeft = dragBtnRect.x - tableRect.x + dragBtnOffsetWidth
8039
8147
 
8040
8148
  const minInterval = getColReMinWidth(cellParams) - dragBtnOffsetWidth // 列之间的最小间距
@@ -8387,6 +8495,26 @@ export default defineVxeComponent({
8387
8495
  handleRefreshColumnQueue () {
8388
8496
  reactData.reColumnFlag++
8389
8497
  },
8498
+ handleFilterOptions (column) {
8499
+ const { filterStore } = reactData
8500
+ const { filters, filterMultiple, filterRender } = column
8501
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
8502
+ const frMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null)
8503
+ filterStore.multiple = filterMultiple
8504
+ filterStore.options = filters
8505
+ filterStore.column = column
8506
+ // 复原状态
8507
+ filterStore.options.forEach((option: any) => {
8508
+ const { _checked, checked } = option
8509
+ option._checked = checked
8510
+ if (!checked && _checked !== checked) {
8511
+ if (frMethod) {
8512
+ frMethod({ option, column, $table: $xeTable })
8513
+ }
8514
+ }
8515
+ })
8516
+ $xeTable.checkFilterOptions()
8517
+ },
8390
8518
  preventEvent (evnt, type, args, next, end) {
8391
8519
  let evntList = interceptor.get(type)
8392
8520
 
@@ -9337,8 +9465,8 @@ export default defineVxeComponent({
9337
9465
  $xeTable.handleHeaderCellDragMousedownEvent(evnt, params)
9338
9466
  }
9339
9467
  }
9340
- if (!triggerDrag && mouseConfig && mouseOpts.area && $xeTable.handleHeaderCellAreaEvent) {
9341
- $xeTable.handleHeaderCellAreaEvent(evnt, Object.assign({ cell, triggerSort, triggerFilter }, params))
9468
+ if (!triggerDrag && mouseConfig && mouseOpts.area && $xeTable.handleHeaderCellAreaModownEvent) {
9469
+ $xeTable.handleHeaderCellAreaModownEvent(evnt, Object.assign({ cell, triggerSort, triggerFilter }, params))
9342
9470
  }
9343
9471
  $xeTable.focus()
9344
9472
  if ($xeTable.closeMenu) {
@@ -11897,7 +12025,7 @@ export default defineVxeComponent({
11897
12025
  if (rowOpts.height && !props.showOverflow) {
11898
12026
  warnLog('vxe.error.notProp', ['table.show-overflow'])
11899
12027
  }
11900
- if (!$xeTable.triggerCellAreaMousednEvent) {
12028
+ if (!$xeTable.triggerCellAreaModownEvent) {
11901
12029
  if (props.areaConfig) {
11902
12030
  warnLog('vxe.error.notProp', ['area-config'])
11903
12031
  }
@@ -11935,7 +12063,10 @@ export default defineVxeComponent({
11935
12063
  warnLog('vxe.error.delProp', ['row-group-config.countFields', 'column.agg-func'])
11936
12064
  }
11937
12065
  if (aggregateOpts.aggregateMethod) {
11938
- warnLog('vxe.error.delProp', ['row-group-config.aggregateMethod', 'aggregate-config.countMethod'])
12066
+ warnLog('vxe.error.delProp', ['row-group-config.aggregateMethod', 'aggregate-config.calcValuesMethod'])
12067
+ }
12068
+ if (aggregateOpts.countMethod) {
12069
+ warnLog('vxe.error.delProp', ['aggregate-config.countMethod', 'aggregate-config.calcValuesMethod'])
11939
12070
  }
11940
12071
  if (props.treeConfig && treeOpts.children) {
11941
12072
  warnLog('vxe.error.delProp', ['tree-config.children', 'tree-config.childrenField'])