vxe-table 4.15.0-beta.1 → 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 (160) hide show
  1. package/es/grid/src/grid.js +88 -1
  2. package/es/locale/lang/ar-EG.js +2 -1
  3. package/es/locale/lang/de-DE.js +2 -1
  4. package/es/locale/lang/en-US.js +2 -1
  5. package/es/locale/lang/es-ES.js +2 -1
  6. package/es/locale/lang/fr-FR.js +2 -1
  7. package/es/locale/lang/hu-HU.js +2 -1
  8. package/es/locale/lang/hy-AM.js +2 -1
  9. package/es/locale/lang/id-ID.js +2 -1
  10. package/es/locale/lang/it-IT.js +2 -1
  11. package/es/locale/lang/ja-JP.js +2 -1
  12. package/es/locale/lang/ko-KR.js +2 -1
  13. package/es/locale/lang/ms-MY.js +2 -1
  14. package/es/locale/lang/nb-NO.js +2 -1
  15. package/es/locale/lang/pt-BR.js +2 -1
  16. package/es/locale/lang/ru-RU.js +2 -1
  17. package/es/locale/lang/th-TH.js +2 -1
  18. package/es/locale/lang/ug-CN.js +2 -1
  19. package/es/locale/lang/uk-UA.js +2 -1
  20. package/es/locale/lang/uz-UZ.js +2 -1
  21. package/es/locale/lang/vi-VN.js +2 -1
  22. package/es/locale/lang/zh-CHT.js +2 -1
  23. package/es/locale/lang/zh-CN.js +2 -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/footer.js +2 -3
  30. package/es/table/src/header.js +2 -2
  31. package/es/table/src/table.js +158 -37
  32. package/es/ui/index.js +2 -1
  33. package/es/ui/src/log.js +1 -1
  34. package/lib/grid/src/grid.js +96 -1
  35. package/lib/grid/src/grid.min.js +1 -1
  36. package/lib/index.umd.js +142 -67
  37. package/lib/index.umd.min.js +1 -1
  38. package/lib/locale/lang/ar-EG.js +2 -1
  39. package/lib/locale/lang/ar-EG.min.js +1 -1
  40. package/lib/locale/lang/ar-EG.umd.js +2 -1
  41. package/lib/locale/lang/de-DE.js +2 -1
  42. package/lib/locale/lang/de-DE.min.js +1 -1
  43. package/lib/locale/lang/de-DE.umd.js +2 -1
  44. package/lib/locale/lang/en-US.js +2 -1
  45. package/lib/locale/lang/en-US.min.js +1 -1
  46. package/lib/locale/lang/en-US.umd.js +2 -1
  47. package/lib/locale/lang/es-ES.js +2 -1
  48. package/lib/locale/lang/es-ES.min.js +1 -1
  49. package/lib/locale/lang/es-ES.umd.js +2 -1
  50. package/lib/locale/lang/fr-FR.js +2 -1
  51. package/lib/locale/lang/fr-FR.min.js +1 -1
  52. package/lib/locale/lang/fr-FR.umd.js +2 -1
  53. package/lib/locale/lang/hu-HU.js +2 -1
  54. package/lib/locale/lang/hu-HU.min.js +1 -1
  55. package/lib/locale/lang/hu-HU.umd.js +2 -1
  56. package/lib/locale/lang/hy-AM.js +2 -1
  57. package/lib/locale/lang/hy-AM.min.js +1 -1
  58. package/lib/locale/lang/hy-AM.umd.js +2 -1
  59. package/lib/locale/lang/id-ID.js +2 -1
  60. package/lib/locale/lang/id-ID.min.js +1 -1
  61. package/lib/locale/lang/id-ID.umd.js +2 -1
  62. package/lib/locale/lang/it-IT.js +2 -1
  63. package/lib/locale/lang/it-IT.min.js +1 -1
  64. package/lib/locale/lang/it-IT.umd.js +2 -1
  65. package/lib/locale/lang/ja-JP.js +2 -1
  66. package/lib/locale/lang/ja-JP.min.js +1 -1
  67. package/lib/locale/lang/ja-JP.umd.js +2 -1
  68. package/lib/locale/lang/ko-KR.js +2 -1
  69. package/lib/locale/lang/ko-KR.min.js +1 -1
  70. package/lib/locale/lang/ko-KR.umd.js +2 -1
  71. package/lib/locale/lang/ms-MY.js +2 -1
  72. package/lib/locale/lang/ms-MY.min.js +1 -1
  73. package/lib/locale/lang/ms-MY.umd.js +2 -1
  74. package/lib/locale/lang/nb-NO.js +2 -1
  75. package/lib/locale/lang/nb-NO.min.js +1 -1
  76. package/lib/locale/lang/nb-NO.umd.js +2 -1
  77. package/lib/locale/lang/pt-BR.js +2 -1
  78. package/lib/locale/lang/pt-BR.min.js +1 -1
  79. package/lib/locale/lang/pt-BR.umd.js +2 -1
  80. package/lib/locale/lang/ru-RU.js +2 -1
  81. package/lib/locale/lang/ru-RU.min.js +1 -1
  82. package/lib/locale/lang/ru-RU.umd.js +2 -1
  83. package/lib/locale/lang/th-TH.js +2 -1
  84. package/lib/locale/lang/th-TH.min.js +1 -1
  85. package/lib/locale/lang/th-TH.umd.js +2 -1
  86. package/lib/locale/lang/ug-CN.js +2 -1
  87. package/lib/locale/lang/ug-CN.min.js +1 -1
  88. package/lib/locale/lang/ug-CN.umd.js +2 -1
  89. package/lib/locale/lang/uk-UA.js +2 -1
  90. package/lib/locale/lang/uk-UA.min.js +1 -1
  91. package/lib/locale/lang/uk-UA.umd.js +2 -1
  92. package/lib/locale/lang/uz-UZ.js +2 -1
  93. package/lib/locale/lang/uz-UZ.min.js +1 -1
  94. package/lib/locale/lang/uz-UZ.umd.js +2 -1
  95. package/lib/locale/lang/vi-VN.js +2 -1
  96. package/lib/locale/lang/vi-VN.min.js +1 -1
  97. package/lib/locale/lang/vi-VN.umd.js +2 -1
  98. package/lib/locale/lang/zh-CHT.js +2 -1
  99. package/lib/locale/lang/zh-CHT.min.js +1 -1
  100. package/lib/locale/lang/zh-CHT.umd.js +2 -1
  101. package/lib/locale/lang/zh-CN.js +2 -1
  102. package/lib/locale/lang/zh-CN.min.js +1 -1
  103. package/lib/locale/lang/zh-CN.umd.js +2 -1
  104. package/lib/style.css +1 -1
  105. package/lib/table/module/filter/hook.js +10 -33
  106. package/lib/table/module/filter/hook.min.js +1 -1
  107. package/lib/table/module/keyboard/hook.js +2 -2
  108. package/lib/table/module/keyboard/hook.min.js +1 -1
  109. package/lib/table/src/body.js +2 -2
  110. package/lib/table/src/body.min.js +1 -1
  111. package/lib/table/src/cell.js +5 -4
  112. package/lib/table/src/cell.min.js +1 -1
  113. package/lib/table/src/footer.js +2 -3
  114. package/lib/table/src/footer.min.js +1 -1
  115. package/lib/table/src/header.js +2 -2
  116. package/lib/table/src/header.min.js +1 -1
  117. package/lib/table/src/table.js +18 -17
  118. package/lib/table/src/table.min.js +1 -1
  119. package/lib/ui/index.js +2 -1
  120. package/lib/ui/index.min.js +1 -1
  121. package/lib/ui/src/log.js +1 -1
  122. package/lib/ui/src/log.min.js +1 -1
  123. package/package.json +1 -1
  124. package/packages/grid/src/grid.ts +90 -1
  125. package/packages/locale/lang/ar-EG.ts +2 -1
  126. package/packages/locale/lang/de-DE.ts +2 -1
  127. package/packages/locale/lang/en-US.ts +2 -1
  128. package/packages/locale/lang/es-ES.ts +2 -1
  129. package/packages/locale/lang/fr-FR.ts +2 -1
  130. package/packages/locale/lang/hu-HU.ts +2 -1
  131. package/packages/locale/lang/hy-AM.ts +2 -1
  132. package/packages/locale/lang/id-ID.ts +2 -1
  133. package/packages/locale/lang/it-IT.ts +2 -1
  134. package/packages/locale/lang/ja-JP.ts +2 -1
  135. package/packages/locale/lang/ko-KR.ts +2 -1
  136. package/packages/locale/lang/ms-MY.ts +2 -1
  137. package/packages/locale/lang/nb-NO.ts +2 -1
  138. package/packages/locale/lang/pt-BR.ts +2 -1
  139. package/packages/locale/lang/ru-RU.ts +2 -1
  140. package/packages/locale/lang/th-TH.ts +2 -1
  141. package/packages/locale/lang/ug-CN.ts +2 -1
  142. package/packages/locale/lang/uk-UA.ts +2 -1
  143. package/packages/locale/lang/uz-UZ.ts +2 -1
  144. package/packages/locale/lang/vi-VN.ts +2 -1
  145. package/packages/locale/lang/zh-CHT.ts +2 -1
  146. package/packages/locale/lang/zh-CN.ts +2 -1
  147. package/packages/table/module/filter/hook.ts +10 -24
  148. package/packages/table/module/keyboard/hook.ts +2 -2
  149. package/packages/table/src/body.ts +2 -2
  150. package/packages/table/src/cell.ts +5 -5
  151. package/packages/table/src/footer.ts +2 -3
  152. package/packages/table/src/header.ts +2 -2
  153. package/packages/table/src/table.ts +168 -37
  154. package/packages/ui/index.ts +1 -0
  155. /package/es/{iconfont.1753080055966.ttf → iconfont.1753519951433.ttf} +0 -0
  156. /package/es/{iconfont.1753080055966.woff → iconfont.1753519951433.woff} +0 -0
  157. /package/es/{iconfont.1753080055966.woff2 → iconfont.1753519951433.woff2} +0 -0
  158. /package/lib/{iconfont.1753080055966.ttf → iconfont.1753519951433.ttf} +0 -0
  159. /package/lib/{iconfont.1753080055966.woff → iconfont.1753519951433.woff} +0 -0
  160. /package/lib/{iconfont.1753080055966.woff2 → iconfont.1753519951433.woff2} +0 -0
@@ -75,27 +75,9 @@ hooks.add('tableFilterModule', {
75
75
  const { transfer } = filterOpts;
76
76
  const tableRect = el.getBoundingClientRect();
77
77
  const btnElem = evnt.currentTarget;
78
- const { filters, filterMultiple, filterRender } = column;
79
- const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
80
- const frMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null);
78
+ $xeTable.handleFilterOptions(column);
81
79
  internalData._currFilterParams = params;
82
- Object.assign(filterStore, {
83
- multiple: filterMultiple,
84
- options: filters,
85
- column,
86
- style: null
87
- });
88
- // 复原状态
89
- filterStore.options.forEach((option) => {
90
- const { _checked, checked } = option;
91
- option._checked = checked;
92
- if (!checked && _checked !== checked) {
93
- if (frMethod) {
94
- frMethod({ option, column, $table: $xeTable });
95
- }
96
- }
97
- });
98
- this.checkFilterOptions();
80
+ filterStore.style = null;
99
81
  filterStore.visible = true;
100
82
  initStore.filter = true;
101
83
  nextTick(() => {
@@ -265,12 +247,17 @@ hooks.add('tableFilterModule', {
265
247
  * @param {Array} options 选项
266
248
  */
267
249
  setFilter(fieldOrColumn, options, isUpdate) {
250
+ const { filterStore } = reactData;
268
251
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
269
252
  if (column && column.filters) {
270
253
  column.filters = toFilters(options || []);
271
254
  if (isUpdate) {
272
- // 已废弃,即将去掉事件触发 new Event('click') -> null
273
- return $xeTable.handleColumnConfirmFilter(column, new Event('click'));
255
+ return $xeTable.handleColumnConfirmFilter(column, null);
256
+ }
257
+ else {
258
+ if (filterStore.visible) {
259
+ $xeTable.handleFilterOptions(column);
260
+ }
274
261
  }
275
262
  }
276
263
  return nextTick();
@@ -272,8 +272,8 @@ hooks.add('tableKeyboardModule', {
272
272
  const checkboxOpts = computeCheckboxOpts.value;
273
273
  const mouseOpts = computeMouseOpts.value;
274
274
  const editOpts = computeEditOpts.value;
275
- if (mouseConfig && mouseOpts.area && $xeTable.triggerCellAreaMousednEvent) {
276
- return $xeTable.triggerCellAreaMousednEvent(evnt, params);
275
+ if (mouseConfig && mouseOpts.area && $xeTable.triggerCellAreaModownEvent) {
276
+ return $xeTable.triggerCellAreaModownEvent(evnt, params);
277
277
  }
278
278
  else {
279
279
  if (checkboxConfig && checkboxOpts.range) {
@@ -115,7 +115,7 @@ export default defineVxeComponent({
115
115
  const _columnIndex = colRest._index;
116
116
  const isEdit = isEnableConf(editRender);
117
117
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
118
- let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX;
118
+ let fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
119
119
  const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding;
120
120
  const cellOverflow = XEUtils.eqNull(showOverflow) ? allShowOverflow : showOverflow;
121
121
  const showEllipsis = cellOverflow === 'ellipsis';
@@ -263,7 +263,7 @@ export default defineVxeComponent({
263
263
  const isLastColumn = $columnIndex === columns.length - 1;
264
264
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
265
265
  let isVNPreEmptyStatus = false;
266
- if (!isMergeCell) {
266
+ if (overflowX && !isMergeCell) {
267
267
  if (!dragRow || getRowid($xeTable, dragRow) !== rowid) {
268
268
  if (scrollYLoad && !treeConfig && !virtualYOpts.immediate && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
269
269
  isVNPreEmptyStatus = true;
@@ -389,7 +389,7 @@ export const Cell = {
389
389
  const { computeAggregateOpts } = $table.getComputeMaps();
390
390
  const aggregateOpts = computeAggregateOpts.value;
391
391
  const { mode, showTotal, totalMethod, countFields, contentMethod, mapChildrenField } = aggregateOpts;
392
- const aggMethod = aggregateOpts.aggregateMethod || aggregateOpts.countMethod;
392
+ const aggCalcMethod = aggregateOpts.calcValuesMethod || aggregateOpts.countMethod || aggregateOpts.aggregateMethod;
393
393
  const groupField = aggRow.groupField;
394
394
  const groupContent = aggRow.groupContent;
395
395
  const childList = mapChildrenField ? (aggRow[mapChildrenField] || []) : [];
@@ -423,9 +423,9 @@ export const Cell = {
423
423
  cellValue = $table.getPivotTableAggregateCellAggValue(params);
424
424
  }
425
425
  else if (aggFunc === true || (countFields && countFields.includes(field))) {
426
- if (aggMethod) {
426
+ if (aggCalcMethod) {
427
427
  ctParams.aggValue = childCount;
428
- cellValue = `${aggMethod(ctParams)}`;
428
+ cellValue = `${aggCalcMethod(ctParams)}`;
429
429
  }
430
430
  }
431
431
  }
@@ -478,14 +478,14 @@ export const Cell = {
478
478
  const { rowGroupExpandedFlag } = tableReactData;
479
479
  const { rowGroupExpandedMaps } = tableInternalData;
480
480
  const aggregateOpts = computeAggregateOpts.value;
481
- const { padding, indent } = aggregateOpts;
481
+ const { mode, padding, indent } = aggregateOpts;
482
482
  const rowid = getRowid($table, row);
483
483
  const isExpand = !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[rowid];
484
484
  return h('div', {
485
485
  class: ['vxe-row-group--tree-node', {
486
486
  'is--expanded': isExpand
487
487
  }],
488
- style: padding && indent
488
+ style: mode !== 'column' && padding && indent
489
489
  ? {
490
490
  paddingLeft: `${level * indent}px`
491
491
  }
@@ -58,8 +58,7 @@ export default defineVxeComponent({
58
58
  const renderOpts = editRender || cellRender;
59
59
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
60
60
  const showAllTip = tooltipOpts.showAll;
61
- const isColGroup = column.children && column.children.length;
62
- const fixedHiddenColumn = fixedType ? column.fixed !== fixedType && !isColGroup : column.fixed && overflowX;
61
+ const fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
63
62
  const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding;
64
63
  const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
65
64
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
@@ -148,7 +147,7 @@ export default defineVxeComponent({
148
147
  const isLastColumn = $columnIndex === tableColumn.length - 1;
149
148
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
150
149
  let isVNPreEmptyStatus = false;
151
- if (isOptimizeMode && !isMergeCell) {
150
+ if (isOptimizeMode && overflowX && !isMergeCell) {
152
151
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
153
152
  isVNPreEmptyStatus = true;
154
153
  }
@@ -54,7 +54,7 @@ export default defineVxeComponent({
54
54
  const renderOpts = editRender || cellRender;
55
55
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
56
56
  const isColGroup = column.children && column.children.length;
57
- const fixedHiddenColumn = fixedType ? (column.fixed !== fixedType && !isColGroup) : !!column.fixed && overflowX;
57
+ const fixedHiddenColumn = overflowX && !isColGroup && (fixedType ? column.fixed !== fixedType : !!column.fixed);
58
58
  const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding;
59
59
  const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
60
60
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
@@ -115,7 +115,7 @@ export default defineVxeComponent({
115
115
  const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable));
116
116
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
117
117
  let isVNPreEmptyStatus = false;
118
- if (isOptimizeMode && !isGroup) {
118
+ if (isOptimizeMode && overflowX && !isGroup) {
119
119
  if (!dragCol || dragCol.id !== colid) {
120
120
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
121
121
  isVNPreEmptyStatus = true;
@@ -1327,16 +1327,23 @@ export default defineVxeComponent({
1327
1327
  return rest;
1328
1328
  };
1329
1329
  const handleSortEvent = (evnt, sortConfs, isUpdate) => {
1330
+ const { tableFullColumn } = internalData;
1330
1331
  const sortOpts = computeSortOpts.value;
1331
1332
  const { multiple, remote, orders } = sortOpts;
1332
1333
  if (!XEUtils.isArray(sortConfs)) {
1333
1334
  sortConfs = [sortConfs];
1334
1335
  }
1335
1336
  if (sortConfs && sortConfs.length) {
1337
+ const orderActiveMaps = {};
1336
1338
  if (!multiple) {
1337
1339
  sortConfs = [sortConfs[0]];
1338
- clearAllSort();
1340
+ tableFullColumn.forEach((column) => {
1341
+ if (column.order) {
1342
+ orderActiveMaps[column.id] = column;
1343
+ }
1344
+ });
1339
1345
  }
1346
+ const sortColMpps = {};
1340
1347
  let firstColumn = null;
1341
1348
  sortConfs.forEach((confs, index) => {
1342
1349
  let { field, order } = confs;
@@ -1355,8 +1362,16 @@ export default defineVxeComponent({
1355
1362
  column.order = order;
1356
1363
  }
1357
1364
  column.sortTime = Date.now() + index;
1365
+ sortColMpps[column.id] = column;
1358
1366
  }
1359
1367
  });
1368
+ if (!multiple) {
1369
+ XEUtils.each(orderActiveMaps, (oaCol, oaId) => {
1370
+ if (!sortColMpps[oaId]) {
1371
+ oaCol.order = null;
1372
+ }
1373
+ });
1374
+ }
1360
1375
  if (isUpdate) {
1361
1376
  if (!remote) {
1362
1377
  $xeTable.handleTableData(true);
@@ -2767,20 +2782,18 @@ export default defineVxeComponent({
2767
2782
  const handleDefaultTreeExpand = () => {
2768
2783
  const { treeConfig } = props;
2769
2784
  if (treeConfig) {
2770
- const { tableFullData } = internalData;
2785
+ const { fullAllDataRowIdData } = internalData;
2771
2786
  const treeOpts = computeTreeOpts.value;
2772
2787
  const { expandAll, expandRowKeys } = treeOpts;
2773
- const childrenField = treeOpts.children || treeOpts.childrenField;
2774
2788
  if (expandAll) {
2775
2789
  $xeTable.setAllTreeExpand(true);
2776
2790
  }
2777
2791
  else if (expandRowKeys) {
2778
2792
  const defExpandeds = [];
2779
- const rowkey = getRowkey($xeTable);
2780
2793
  expandRowKeys.forEach((rowid) => {
2781
- const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
2782
- if (matchObj) {
2783
- defExpandeds.push(matchObj.item);
2794
+ const rowRest = fullAllDataRowIdData[rowid];
2795
+ if (rowRest) {
2796
+ defExpandeds.push(rowRest.row);
2784
2797
  }
2785
2798
  });
2786
2799
  $xeTable.setTreeExpand(defExpandeds, true);
@@ -3367,6 +3380,13 @@ export default defineVxeComponent({
3367
3380
  }
3368
3381
  reactData.isRowLoading = false;
3369
3382
  handleRecalculateStyle(false, false, false);
3383
+ // 如果是自动行高,特殊情况需调用 recalculate 手动刷新
3384
+ if (!props.showOverflow) {
3385
+ setTimeout(() => {
3386
+ handleLazyRecalculate(false, true, true);
3387
+ setTimeout(() => handleLazyRecalculate(false, true, true), 3000);
3388
+ }, 2000);
3389
+ }
3370
3390
  // 是否变更虚拟滚动
3371
3391
  if (oldScrollYLoad === sYLoad) {
3372
3392
  restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop)
@@ -3399,6 +3419,7 @@ export default defineVxeComponent({
3399
3419
  handleDefaultRadioChecked();
3400
3420
  handleDefaultRowExpand();
3401
3421
  handleDefaultTreeExpand();
3422
+ handleDefaultRowGroupExpand();
3402
3423
  handleDefaultMergeCells();
3403
3424
  handleDefaultMergeFooterItems();
3404
3425
  nextTick(() => setTimeout(() => $xeTable.recalculate()));
@@ -3814,6 +3835,22 @@ export default defineVxeComponent({
3814
3835
  }, 30);
3815
3836
  });
3816
3837
  };
3838
+ /**
3839
+ * 处理默认展开分组行
3840
+ */
3841
+ const handleDefaultRowGroupExpand = () => {
3842
+ const { isRowGroupStatus } = reactData;
3843
+ if (isRowGroupStatus) {
3844
+ const aggregateOpts = computeAggregateOpts.value;
3845
+ const { expandAll, expandGroupFields } = aggregateOpts;
3846
+ if (expandAll) {
3847
+ $xeTable.setAllRowGroupExpand(true);
3848
+ }
3849
+ else if (expandGroupFields && expandGroupFields.length) {
3850
+ $xeTable.setRowGroupExpandByField(expandGroupFields, true);
3851
+ }
3852
+ }
3853
+ };
3817
3854
  const handleCheckAllEvent = (evnt, value) => {
3818
3855
  handleCheckedAllCheckboxRow(value);
3819
3856
  if (evnt) {
@@ -5772,11 +5809,10 @@ export default defineVxeComponent({
5772
5809
  return nextTick();
5773
5810
  },
5774
5811
  setSort(sortConfs, isUpdate) {
5775
- // 已废弃,即将去掉事件触发 new Event('click') -> null
5776
- return handleSortEvent(new Event('click'), sortConfs, isUpdate);
5812
+ return handleSortEvent(null, sortConfs, isUpdate);
5777
5813
  },
5778
- setSortByEvent(evnt, sortConfs, isUpdate) {
5779
- return handleSortEvent(evnt, sortConfs, isUpdate);
5814
+ setSortByEvent(evnt, sortConfs) {
5815
+ return handleSortEvent(evnt, sortConfs, true);
5780
5816
  },
5781
5817
  /**
5782
5818
  * 清空指定列的排序条件
@@ -5805,6 +5841,7 @@ export default defineVxeComponent({
5805
5841
  clearSortByEvent(evnt, fieldOrColumn) {
5806
5842
  const { tableFullColumn } = internalData;
5807
5843
  const sortOpts = computeSortOpts.value;
5844
+ const { multiple } = sortOpts;
5808
5845
  const sortCols = [];
5809
5846
  let column = null;
5810
5847
  if (evnt) {
@@ -5825,13 +5862,16 @@ export default defineVxeComponent({
5825
5862
  if (!sortOpts.remote) {
5826
5863
  $xeTable.handleTableData(true);
5827
5864
  }
5828
- if (sortCols.length) {
5829
- const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] };
5830
- dispatchEvent('clear-all-sort', params, evnt);
5865
+ if (!multiple) {
5866
+ column = sortCols[0];
5831
5867
  }
5832
- else if (column) {
5868
+ if (column) {
5833
5869
  $xeTable.handleColumnSortEvent(evnt, column);
5834
5870
  }
5871
+ if (multiple && sortCols.length) {
5872
+ const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] };
5873
+ dispatchEvent('clear-all-sort', params, evnt);
5874
+ }
5835
5875
  }
5836
5876
  return nextTick().then(() => {
5837
5877
  updateRowOffsetTop();
@@ -5861,13 +5901,11 @@ export default defineVxeComponent({
5861
5901
  }
5862
5902
  return sortList;
5863
5903
  },
5864
- setFilterByEvent(evnt, fieldOrColumn, options, isUpdate) {
5904
+ setFilterByEvent(evnt, fieldOrColumn, options) {
5865
5905
  const column = handleFieldOrColumn($xeTable, fieldOrColumn);
5866
5906
  if (column && column.filters) {
5867
5907
  column.filters = toFilters(options || []);
5868
- if (isUpdate) {
5869
- return $xeTable.handleColumnConfirmFilter(column, evnt);
5870
- }
5908
+ return $xeTable.handleColumnConfirmFilter(column, evnt);
5871
5909
  }
5872
5910
  return nextTick();
5873
5911
  },
@@ -5911,6 +5949,7 @@ export default defineVxeComponent({
5911
5949
  const { filterStore } = reactData;
5912
5950
  const { tableFullColumn } = internalData;
5913
5951
  const filterOpts = computeFilterOpts.value;
5952
+ const { multiple } = filterOpts;
5914
5953
  const filterCols = [];
5915
5954
  let column = null;
5916
5955
  if (fieldOrColumn) {
@@ -5941,13 +5980,37 @@ export default defineVxeComponent({
5941
5980
  if (!filterOpts.remote) {
5942
5981
  $xeTable.updateData();
5943
5982
  }
5944
- if (filterCols.length) {
5983
+ if (!multiple) {
5984
+ column = filterCols[0];
5985
+ }
5986
+ if (column) {
5987
+ const filterList = () => $xeTable.getCheckedFilters();
5988
+ const values = [];
5989
+ const datas = [];
5990
+ column.filters.forEach((item) => {
5991
+ if (item.checked) {
5992
+ values.push(item.value);
5993
+ datas.push(item.data);
5994
+ }
5995
+ });
5996
+ const params = {
5997
+ $table: $xeTable,
5998
+ $event: evnt,
5999
+ column,
6000
+ field: column.field,
6001
+ property: column.field,
6002
+ values,
6003
+ datas,
6004
+ filters: filterList,
6005
+ filterList
6006
+ };
6007
+ $xeTable.dispatchEvent('filter-change', params, evnt);
6008
+ $xeTable.dispatchEvent('clear-filter', params, evnt);
6009
+ }
6010
+ if (multiple && filterCols.length) {
5945
6011
  const params = { $table: $xeTable, $event: evnt, cols: filterCols, filterList: [] };
5946
6012
  dispatchEvent('clear-all-filter', params, evnt);
5947
6013
  }
5948
- else if (column) {
5949
- $xeTable.dispatchEvent('clear-filter', { filterList: () => $xeTable.getCheckedFilters() }, evnt);
5950
- }
5951
6014
  return nextTick();
5952
6015
  },
5953
6016
  /**
@@ -6207,6 +6270,32 @@ export default defineVxeComponent({
6207
6270
  }
6208
6271
  return nextTick();
6209
6272
  },
6273
+ setRowGroupExpandByField(groupFields, expanded) {
6274
+ const { isRowGroupStatus } = reactData;
6275
+ const aggregateOpts = computeAggregateOpts.value;
6276
+ const { childrenField } = aggregateOpts;
6277
+ if (groupFields) {
6278
+ if (!XEUtils.isArray(groupFields)) {
6279
+ groupFields = [groupFields];
6280
+ }
6281
+ if (isRowGroupStatus) {
6282
+ const rows = [];
6283
+ const gfKeys = {};
6284
+ groupFields.forEach(groupField => {
6285
+ gfKeys[groupField] = true;
6286
+ });
6287
+ XEUtils.eachTree(internalData.afterGroupFullData, (row) => {
6288
+ if (row.isAggregate && gfKeys[row.groupField]) {
6289
+ rows.push(row);
6290
+ }
6291
+ }, { children: childrenField });
6292
+ if (rows.length) {
6293
+ return handleRowGroupVirtualExpand(rows, expanded);
6294
+ }
6295
+ }
6296
+ }
6297
+ return nextTick();
6298
+ },
6210
6299
  setAllRowGroupExpand(expanded) {
6211
6300
  const { tableFullGroupData } = internalData;
6212
6301
  const aggregateOpts = computeAggregateOpts.value;
@@ -6424,8 +6513,6 @@ export default defineVxeComponent({
6424
6513
  },
6425
6514
  /**
6426
6515
  * 如果有滚动条,则滚动到对应的位置
6427
- * @param {Number} scrollLeft 左距离
6428
- * @param {Number} scrollTop 上距离
6429
6516
  */
6430
6517
  scrollTo(scrollLeft, scrollTop) {
6431
6518
  const { elemStore } = internalData;
@@ -6437,6 +6524,12 @@ export default defineVxeComponent({
6437
6524
  const xHandleEl = refScrollXHandleElem.value;
6438
6525
  const yHandleEl = refScrollYHandleElem.value;
6439
6526
  internalData.intoRunScroll = true;
6527
+ if (scrollLeft) {
6528
+ if (!XEUtils.isNumber(scrollLeft)) {
6529
+ scrollTop = scrollLeft.top;
6530
+ scrollLeft = scrollLeft.left;
6531
+ }
6532
+ }
6440
6533
  if (XEUtils.isNumber(scrollLeft)) {
6441
6534
  setScrollLeft(xHandleEl, scrollLeft);
6442
6535
  setScrollLeft(bodyScrollElem, scrollLeft);
@@ -7865,7 +7958,7 @@ export default defineVxeComponent({
7865
7958
  evnt.preventDefault();
7866
7959
  const { column } = params;
7867
7960
  const { columnStore, overflowX, scrollbarHeight } = reactData;
7868
- const { elemStore, visibleColumn } = internalData;
7961
+ const { visibleColumn } = internalData;
7869
7962
  const { leftList, rightList } = columnStore;
7870
7963
  const resizableOpts = computeResizableOpts.value;
7871
7964
  const osbHeight = overflowX ? scrollbarHeight : 0;
@@ -7883,24 +7976,29 @@ export default defineVxeComponent({
7883
7976
  const { clientX: dragClientX } = evnt;
7884
7977
  const dragBtnElem = evnt.target;
7885
7978
  let resizeColumn = column;
7886
- if (column.children && column.children.length) {
7979
+ const isDragGroupCol = column.children && column.children.length;
7980
+ if (isDragGroupCol) {
7887
7981
  XEUtils.eachTree(column.children, childColumn => {
7888
7982
  resizeColumn = childColumn;
7889
7983
  });
7890
7984
  }
7891
- const cell = dragBtnElem.parentNode;
7892
- const cellParams = Object.assign(params, { cell });
7893
- let dragLeft = 0;
7894
- const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
7895
- if (!bodyScrollElem) {
7985
+ let cell = dragBtnElem.parentElement;
7986
+ if (isDragGroupCol) {
7987
+ const trEl = cell ? cell.parentElement : null;
7988
+ const theadEl = trEl ? trEl.parentElement : null;
7989
+ cell = theadEl ? theadEl.querySelector(`.vxe-header--column[colid="${resizeColumn.id}"]`) : null;
7990
+ }
7991
+ if (!cell) {
7896
7992
  return;
7897
7993
  }
7994
+ const cellParams = XEUtils.assign(params, { cell });
7995
+ let dragLeft = 0;
7898
7996
  const tableRect = tableEl.getBoundingClientRect();
7899
7997
  const rightContainerRect = rightContainerElem ? rightContainerElem.getBoundingClientRect() : null;
7900
7998
  const cellRect = cell.getBoundingClientRect();
7901
7999
  const dragBtnRect = dragBtnElem.getBoundingClientRect();
7902
8000
  const dragBtnWidth = dragBtnElem.clientWidth;
7903
- const dragBtnOffsetWidth = Math.floor(dragBtnWidth / 2);
8001
+ const dragBtnOffsetWidth = XEUtils.floor(dragBtnWidth / 2);
7904
8002
  const dragPosLeft = dragBtnRect.x - tableRect.x + dragBtnOffsetWidth;
7905
8003
  const minInterval = getColReMinWidth(cellParams) - dragBtnOffsetWidth; // 列之间的最小间距
7906
8004
  const dragMinLeft = isRightFixed ? 0 : (cellRect.x - tableRect.x + dragBtnWidth + minInterval);
@@ -8248,6 +8346,26 @@ export default defineVxeComponent({
8248
8346
  handleRefreshColumnQueue() {
8249
8347
  reactData.reColumnFlag++;
8250
8348
  },
8349
+ handleFilterOptions(column) {
8350
+ const { filterStore } = reactData;
8351
+ const { filters, filterMultiple, filterRender } = column;
8352
+ const compConf = isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
8353
+ const frMethod = column.filterRecoverMethod || (compConf ? (compConf.tableFilterRecoverMethod || compConf.filterRecoverMethod) : null);
8354
+ filterStore.multiple = filterMultiple;
8355
+ filterStore.options = filters;
8356
+ filterStore.column = column;
8357
+ // 复原状态
8358
+ filterStore.options.forEach((option) => {
8359
+ const { _checked, checked } = option;
8360
+ option._checked = checked;
8361
+ if (!checked && _checked !== checked) {
8362
+ if (frMethod) {
8363
+ frMethod({ option, column, $table: $xeTable });
8364
+ }
8365
+ }
8366
+ });
8367
+ $xeTable.checkFilterOptions();
8368
+ },
8251
8369
  preventEvent(evnt, type, args, next, end) {
8252
8370
  let evntList = interceptor.get(type);
8253
8371
  // 兼容老版本
@@ -9215,8 +9333,8 @@ export default defineVxeComponent({
9215
9333
  $xeTable.handleHeaderCellDragMousedownEvent(evnt, params);
9216
9334
  }
9217
9335
  }
9218
- if (!triggerDrag && mouseConfig && mouseOpts.area && $xeTable.handleHeaderCellAreaEvent) {
9219
- $xeTable.handleHeaderCellAreaEvent(evnt, Object.assign({ cell, triggerSort, triggerFilter }, params));
9336
+ if (!triggerDrag && mouseConfig && mouseOpts.area && $xeTable.handleHeaderCellAreaModownEvent) {
9337
+ $xeTable.handleHeaderCellAreaModownEvent(evnt, Object.assign({ cell, triggerSort, triggerFilter }, params));
9220
9338
  }
9221
9339
  $xeTable.focus();
9222
9340
  if ($xeTable.closeMenu) {
@@ -11697,7 +11815,7 @@ export default defineVxeComponent({
11697
11815
  if (rowOpts.height && !props.showOverflow) {
11698
11816
  warnLog('vxe.error.notProp', ['table.show-overflow']);
11699
11817
  }
11700
- if (!$xeTable.triggerCellAreaMousednEvent) {
11818
+ if (!$xeTable.triggerCellAreaModownEvent) {
11701
11819
  if (props.areaConfig) {
11702
11820
  warnLog('vxe.error.notProp', ['area-config']);
11703
11821
  }
@@ -11735,7 +11853,10 @@ export default defineVxeComponent({
11735
11853
  warnLog('vxe.error.delProp', ['row-group-config.countFields', 'column.agg-func']);
11736
11854
  }
11737
11855
  if (aggregateOpts.aggregateMethod) {
11738
- warnLog('vxe.error.delProp', ['row-group-config.aggregateMethod', 'aggregate-config.countMethod']);
11856
+ warnLog('vxe.error.delProp', ['row-group-config.aggregateMethod', 'aggregate-config.calcValuesMethod']);
11857
+ }
11858
+ if (aggregateOpts.countMethod) {
11859
+ warnLog('vxe.error.delProp', ['aggregate-config.countMethod', 'aggregate-config.calcValuesMethod']);
11739
11860
  }
11740
11861
  if (props.treeConfig && treeOpts.children) {
11741
11862
  warnLog('vxe.error.delProp', ['tree-config.children', 'tree-config.childrenField']);
package/es/ui/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { getFuncText } from './src/utils';
3
- export const version = "4.15.0-beta.1";
3
+ export const version = "4.15.0-beta.10";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
@@ -138,6 +138,7 @@ VxeUI.setConfig({
138
138
  // filterMethod: null,
139
139
  // destroyOnClose: false,
140
140
  // isEvery: false,
141
+ multiple: true,
141
142
  showIcon: true
142
143
  },
143
144
  aggregateConfig: {
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"4.15.0-beta.1"}`;
3
+ const version = `table v${"4.15.0-beta.10"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);