vxe-table 4.21.1 → 4.21.3

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 (76) hide show
  1. package/dist/all.esm.js +166 -102
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/index.css +1 -1
  5. package/es/index.min.css +1 -1
  6. package/es/style.css +1 -1
  7. package/es/style.min.css +1 -1
  8. package/es/table/module/custom/hook.js +4 -0
  9. package/es/table/module/export/export-panel.js +3 -2
  10. package/es/table/module/export/hook.js +13 -7
  11. package/es/table/module/filter/hook.js +97 -79
  12. package/es/table/src/body.js +12 -4
  13. package/es/table/src/footer.js +12 -3
  14. package/es/table/src/header.js +12 -4
  15. package/es/table/src/table.js +12 -2
  16. package/es/table/src/util.js +1 -0
  17. package/es/table/style.css +35 -60
  18. package/es/table/style.min.css +1 -1
  19. package/es/ui/index.js +1 -1
  20. package/es/ui/src/dom.js +1 -1
  21. package/es/ui/src/log.js +1 -1
  22. package/es/vxe-table/style.css +35 -60
  23. package/es/vxe-table/style.min.css +1 -1
  24. package/lib/index.css +1 -1
  25. package/lib/index.min.css +1 -1
  26. package/lib/index.umd.js +176 -110
  27. package/lib/index.umd.min.js +1 -1
  28. package/lib/style.css +1 -1
  29. package/lib/style.min.css +1 -1
  30. package/lib/table/module/custom/hook.js +6 -0
  31. package/lib/table/module/custom/hook.min.js +1 -1
  32. package/lib/table/module/export/export-panel.js +3 -2
  33. package/lib/table/module/export/export-panel.min.js +1 -1
  34. package/lib/table/module/export/hook.js +15 -7
  35. package/lib/table/module/export/hook.min.js +1 -1
  36. package/lib/table/module/filter/hook.js +111 -86
  37. package/lib/table/module/filter/hook.min.js +1 -1
  38. package/lib/table/src/body.js +11 -3
  39. package/lib/table/src/body.min.js +1 -1
  40. package/lib/table/src/footer.js +12 -3
  41. package/lib/table/src/footer.min.js +1 -1
  42. package/lib/table/src/header.js +11 -3
  43. package/lib/table/src/header.min.js +1 -1
  44. package/lib/table/src/table.js +3 -3
  45. package/lib/table/src/table.min.js +1 -1
  46. package/lib/table/src/util.js +1 -0
  47. package/lib/table/src/util.min.js +1 -1
  48. package/lib/table/style/style.css +35 -60
  49. package/lib/table/style/style.min.css +1 -1
  50. package/lib/ui/index.js +1 -1
  51. package/lib/ui/index.min.js +1 -1
  52. package/lib/ui/src/dom.js +1 -1
  53. package/lib/ui/src/dom.min.js +1 -1
  54. package/lib/ui/src/log.js +1 -1
  55. package/lib/ui/src/log.min.js +1 -1
  56. package/lib/vxe-table/style/style.css +35 -60
  57. package/lib/vxe-table/style/style.min.css +1 -1
  58. package/package.json +2 -2
  59. package/packages/table/module/custom/hook.ts +4 -0
  60. package/packages/table/module/export/export-panel.ts +3 -2
  61. package/packages/table/module/export/hook.ts +12 -7
  62. package/packages/table/module/filter/hook.ts +94 -75
  63. package/packages/table/src/body.ts +14 -4
  64. package/packages/table/src/footer.ts +14 -3
  65. package/packages/table/src/header.ts +14 -4
  66. package/packages/table/src/table.ts +12 -2
  67. package/packages/table/src/util.ts +1 -0
  68. package/packages/ui/src/dom.ts +1 -1
  69. package/packages/ui/src/utils.ts +1 -1
  70. package/styles/components/table.scss +37 -75
  71. /package/es/{iconfont.1787542597284.ttf → iconfont.1788176649939.ttf} +0 -0
  72. /package/es/{iconfont.1787542597284.woff → iconfont.1788176649939.woff} +0 -0
  73. /package/es/{iconfont.1787542597284.woff2 → iconfont.1788176649939.woff2} +0 -0
  74. /package/lib/{iconfont.1787542597284.ttf → iconfont.1788176649939.ttf} +0 -0
  75. /package/lib/{iconfont.1787542597284.woff → iconfont.1788176649939.woff} +0 -0
  76. /package/lib/{iconfont.1787542597284.woff2 → iconfont.1788176649939.woff2} +0 -0
@@ -471,6 +471,10 @@ VxeUI.hooks.add('tableCustomModule', {
471
471
  handleUpdateCustomColumn,
472
472
  handleCustomStyle() {
473
473
  const reactData = $xeTable.reactData;
474
+ const { customStore } = reactData;
475
+ if (!customStore.visible) {
476
+ return nextTick();
477
+ }
474
478
  reactData.isCustomDragStatus = false;
475
479
  return updatePopupStyle();
476
480
  }
@@ -117,9 +117,10 @@ export default defineVxeComponent({
117
117
  const { hasMerge, columns } = storeData;
118
118
  const checkedAll = computeCheckedAll.value;
119
119
  const supportMerge = computeSupportMerge.value;
120
- const expColumns = XEUtils.searchTree(columns, (column) => column.checked, { children: 'children', mapChildren: 'childNodes', original: true });
120
+ // 内部导出使用 _columns -> _children 为自定义子集
121
+ const expColumns = XEUtils.searchTree(columns, (column) => column.checked, { children: 'children', mapChildren: '_children', original: true });
121
122
  return Object.assign({}, defaultOptions, {
122
- columns: expColumns,
123
+ _columns: expColumns,
123
124
  isMerge: hasMerge && supportMerge && checkedAll ? defaultOptions.isMerge : false
124
125
  });
125
126
  };
@@ -257,7 +257,7 @@ const tableExportMethodKeys = ['exportData', 'importByFile', 'importData', 'save
257
257
  hooks.add('tableExportModule', {
258
258
  setupTable($xeTable) {
259
259
  const { props, reactData, internalData } = $xeTable;
260
- const { computeTreeOpts, computePrintOpts, computeExportOpts, computeImportOpts, computeCustomOpts, computeSeqOpts, computeRadioOpts, computeCheckboxOpts, computeColumnOpts, computeAggregateOpts } = $xeTable.getComputeMaps();
260
+ const { computeTreeOpts, computePrintOpts, computeExportOpts, computeImportOpts, computeSeqOpts, computeRadioOpts, computeCheckboxOpts, computeColumnOpts, computeAggregateOpts } = $xeTable.getComputeMaps();
261
261
  const getSeq = (cellValue, row, $rowIndex, column, $columnIndex) => {
262
262
  const seqOpts = computeSeqOpts.value;
263
263
  const seqMd = seqOpts.seqMethod || column.seqMethod;
@@ -1214,9 +1214,9 @@ hooks.add('tableExportModule', {
1214
1214
  const { initStore, isGroup, rowGroupList, footerTableData, exportStore, exportParams } = reactData;
1215
1215
  const { collectColumn, mergeBodyList, mergeFooterList } = internalData;
1216
1216
  const exportOpts = computeExportOpts.value;
1217
+ const printOpts = computePrintOpts.value;
1217
1218
  const hasTree = !!treeConfig;
1218
1219
  const hasRowGroup = rowGroupList.length > 0;
1219
- const customOpts = computeCustomOpts.value;
1220
1220
  const selectRecords = $xeTable.getCheckboxRecords();
1221
1221
  const proxyOpts = $xeGGWrapper ? $xeGGWrapper.getComputeMaps().computeProxyOpts.value : {};
1222
1222
  const hasFooter = !!footerTableData.length;
@@ -1237,9 +1237,9 @@ hooks.add('tableExportModule', {
1237
1237
  warnLog('vxe.error.delProp', ['isAllExpand', 'isTreeAllExpanded']);
1238
1238
  defOpts.isTreeAllExpanded = defOpts.isAllExpand;
1239
1239
  }
1240
- const types = defOpts.types || XEUtils.keys(exportOpts._typeMaps);
1240
+ const types = isPrint ? [] : (defOpts.types || XEUtils.keys(exportOpts._typeMaps));
1241
1241
  const modes = defOpts.modes || [];
1242
- const checkMethod = customOpts.checkMethod;
1242
+ const checkMethod = (isPrint ? printOpts : exportOpts).checkMethod;
1243
1243
  const exportColumns = collectColumn.slice(0);
1244
1244
  const { columns, excludeFields, includeFields, extraFields } = defOpts;
1245
1245
  // 处理类型
@@ -1346,10 +1346,10 @@ hooks.add('tableExportModule', {
1346
1346
  }
1347
1347
  }
1348
1348
  if (!modeList.some(item => item.value === mode)) {
1349
- exportParams.mode = modeList[0].value;
1349
+ exportParams.mode = modeList.length ? modeList[0].value : '';
1350
1350
  }
1351
1351
  if (!typeList.some(item => item.value === type)) {
1352
- exportParams.type = typeList[0].value;
1352
+ exportParams.type = typeList.length ? typeList[0].value : '';
1353
1353
  }
1354
1354
  if (!exportParams.widthMode) {
1355
1355
  exportParams.widthMode = '';
@@ -1438,7 +1438,13 @@ hooks.add('tableExportModule', {
1438
1438
  }
1439
1439
  let isCustomCol = false;
1440
1440
  let customCols = [];
1441
- if (columns) {
1441
+ const _columns = opts._columns;
1442
+ if (_columns) {
1443
+ // 内部导出使用 _columns -> _children 为自定义子集
1444
+ isCustomCol = true;
1445
+ customCols = XEUtils.searchTree(_columns, () => true, { children: '_children', mapChildren: 'childNodes', original: true });
1446
+ }
1447
+ else if (columns) {
1442
1448
  isCustomCol = true;
1443
1449
  customCols = XEUtils.searchTree(columns, () => true, { children: 'children', mapChildren: 'childNodes', original: true });
1444
1450
  }
@@ -15,6 +15,92 @@ hooks.add('tableFilterModule', {
15
15
  const { props, reactData, internalData } = $xeTable;
16
16
  const { refElem, refTableFilter } = $xeTable.getRefMaps();
17
17
  const { computeFilterOpts, computeMouseOpts } = $xeTable.getComputeMaps();
18
+ const updatePopupStyle = () => {
19
+ const { filterStore } = reactData;
20
+ const { elemStore } = internalData;
21
+ const { column, targetEl } = filterStore;
22
+ if (!column || !targetEl) {
23
+ return nextTick();
24
+ }
25
+ const tableEl = refElem.value;
26
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
27
+ const filterOpts = computeFilterOpts.value;
28
+ const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
29
+ const currEl = targetEl;
30
+ const tableRect = tableEl.getBoundingClientRect();
31
+ const filterRender = column ? column.filterRender : null;
32
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
33
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
34
+ if (!headerScrollElem) {
35
+ return nextTick();
36
+ }
37
+ const tableFilter = refTableFilter.value;
38
+ const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value : null;
39
+ if (!filterWrapperElem) {
40
+ return nextTick();
41
+ }
42
+ const btnRect = currEl.getBoundingClientRect();
43
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
44
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
45
+ const filterWidth = filterWrapperElem.offsetWidth;
46
+ const centerWidth = currEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
47
+ let left = 0;
48
+ let top = 0;
49
+ let maxHeight = 0;
50
+ /**
51
+ * 是否显示筛选按钮图标
52
+ * 如果不存在图标,则相对单元格居中显示
53
+ */
54
+ if (transfer) {
55
+ left = btnRect.left - centerWidth + scrollLeft;
56
+ top = btnRect.top + currEl.clientHeight + scrollTop;
57
+ maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
58
+ if (left < 16) {
59
+ left = 16;
60
+ }
61
+ else if (left > (visibleWidth - filterWidth - 16)) {
62
+ left = visibleWidth - filterWidth - 16;
63
+ }
64
+ }
65
+ else {
66
+ left = btnRect.left - tableRect.left - centerWidth;
67
+ top = btnRect.top - tableRect.top + currEl.clientHeight;
68
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
69
+ if (left < 1) {
70
+ left = 1;
71
+ }
72
+ else if (left > (tableEl.clientWidth - filterWidth - 1)) {
73
+ left = tableEl.clientWidth - filterWidth - 1;
74
+ }
75
+ if ($xeGGWrapper) {
76
+ const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value;
77
+ if (wrapperEl) {
78
+ const wrapperRect = wrapperEl.getBoundingClientRect();
79
+ top += tableRect.top - wrapperRect.top;
80
+ }
81
+ }
82
+ }
83
+ const fStys = {
84
+ top: toCssUnit(top),
85
+ left: toCssUnit(left)
86
+ };
87
+ if (zIndex) {
88
+ fStys.zIndex = zIndex;
89
+ }
90
+ filterStore.style = fStys;
91
+ // 筛选面板是自适应表格高度
92
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
93
+ maxHeight = 0;
94
+ }
95
+ else {
96
+ if (customMaxHeight) {
97
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
98
+ }
99
+ }
100
+ // 判断面板不能大于表格高度
101
+ filterStore.maxHeight = maxHeight;
102
+ return nextTick();
103
+ };
18
104
  const filterPrivateMethods = {
19
105
  checkFilterOptions() {
20
106
  const { filterStore } = reactData;
@@ -27,96 +113,21 @@ hooks.add('tableFilterModule', {
27
113
  },
28
114
  handleOpenFilterColumn(evnt, btnEl, colEl, column, params) {
29
115
  const { initStore, filterStore } = reactData;
30
- const { elemStore } = internalData;
31
116
  if (filterStore.column === column && filterStore.visible) {
32
117
  filterStore.visible = false;
33
118
  }
34
119
  else {
35
- const tableEl = refElem.value;
36
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
37
- const filterOpts = computeFilterOpts.value;
38
- const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
39
120
  const currEl = btnEl || colEl;
40
- const tableRect = tableEl.getBoundingClientRect();
41
- const filterRender = column ? column.filterRender : null;
42
- const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
43
121
  $xeTable.handleFilterOptions(column);
44
122
  internalData._currFilterParams = params;
123
+ filterStore.targetEl = currEl;
45
124
  filterStore.style = null;
46
125
  filterStore.visible = true;
47
126
  initStore.filter = true;
48
- nextTick(() => {
49
- const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
50
- if (!headerScrollElem) {
51
- return;
52
- }
53
- const tableFilter = refTableFilter.value;
54
- const filterWrapperElem = tableFilter ? tableFilter.getRefMaps().refElem.value : null;
55
- if (!filterWrapperElem) {
56
- return;
57
- }
58
- const btnRect = currEl.getBoundingClientRect();
59
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
60
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
61
- const filterWidth = filterWrapperElem.offsetWidth;
62
- const centerWidth = btnEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
63
- let left = 0;
64
- let top = 0;
65
- let maxHeight = 0;
66
- /**
67
- * 是否显示筛选按钮图标
68
- * 如果不存在图标,则相对单元格居中显示
69
- */
70
- if (transfer) {
71
- left = btnRect.left - centerWidth + scrollLeft;
72
- top = btnRect.top + currEl.clientHeight + scrollTop;
73
- maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
74
- if (left < 16) {
75
- left = 16;
76
- }
77
- else if (left > (visibleWidth - filterWidth - 16)) {
78
- left = visibleWidth - filterWidth - 16;
79
- }
80
- }
81
- else {
82
- left = btnRect.left - tableRect.left - centerWidth;
83
- top = btnRect.top - tableRect.top + currEl.clientHeight;
84
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
85
- if (left < 1) {
86
- left = 1;
87
- }
88
- else if (left > (tableEl.clientWidth - filterWidth - 1)) {
89
- left = tableEl.clientWidth - filterWidth - 1;
90
- }
91
- if ($xeGGWrapper) {
92
- const wrapperEl = $xeGGWrapper.getRefMaps().refElem.value;
93
- if (wrapperEl) {
94
- const wrapperRect = wrapperEl.getBoundingClientRect();
95
- top += tableRect.top - wrapperRect.top;
96
- }
97
- }
98
- }
99
- const fStys = {
100
- top: toCssUnit(top),
101
- left: toCssUnit(left)
102
- };
103
- if (zIndex) {
104
- fStys.zIndex = zIndex;
105
- }
106
- filterStore.style = fStys;
107
- // 筛选面板是自适应表格高度
108
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
109
- maxHeight = 0;
110
- }
111
- else {
112
- if (customMaxHeight) {
113
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
114
- }
115
- }
116
- // 判断面板不能大于表格高度
117
- filterStore.maxHeight = maxHeight;
118
- });
119
127
  }
128
+ nextTick(() => {
129
+ updatePopupStyle();
130
+ });
120
131
  $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt);
121
132
  },
122
133
  /**
@@ -274,6 +285,13 @@ hooks.add('tableFilterModule', {
274
285
  $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt);
275
286
  }
276
287
  }
288
+ },
289
+ handleFilterStyle() {
290
+ const { filterStore } = reactData;
291
+ if (!filterStore.visible) {
292
+ return nextTick();
293
+ }
294
+ return updatePopupStyle();
277
295
  }
278
296
  };
279
297
  const filterMethods = {
@@ -4,7 +4,7 @@ import XEUtils from 'xe-utils';
4
4
  import { VxeUI } from '../../ui';
5
5
  import { getRowid, createHandleGetRowId, getCellRestHeight } from './util';
6
6
  import { updateCellTitle, getPropClass } from '../../ui/src/dom';
7
- import { isEnableConf } from '../../ui/src/utils';
7
+ import { isEnableConf, getDefaultConfig } from '../../ui/src/utils';
8
8
  import { getSlotVNs } from '../../ui/src/vn';
9
9
  const { getI18n, renderer, renderEmptyElement } = VxeUI;
10
10
  const sourceType = 'table';
@@ -135,8 +135,13 @@ export default defineVxeComponent({
135
135
  const isEdit = isEnableConf(editRender);
136
136
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
137
137
  let fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
138
- const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding;
139
- const cellOverflow = XEUtils.eqNull(showOverflow) ? allShowOverflow : showOverflow;
138
+ const cellPadding = getDefaultConfig(padding, (allPadding === null ? cellOpts.padding : allPadding));
139
+ const isAllCellPadding = cellPadding === true;
140
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
141
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
142
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
143
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
144
+ const cellOverflow = getDefaultConfig(showOverflow, allShowOverflow);
140
145
  const showEllipsis = (cellOverflow === true ? tooltipOpts.mode : cellOverflow) === 'ellipsis';
141
146
  const showTitle = (cellOverflow === true ? tooltipOpts.mode : cellOverflow) === 'title';
142
147
  const showTooltip = (cellOverflow === true ? tooltipOpts.mode : cellOverflow) === 'tooltip';
@@ -428,7 +433,10 @@ export default defineVxeComponent({
428
433
  'col--max-height': maxHeight,
429
434
  'fixed--width': !isAutoCellWidth,
430
435
  'fixed--hidden': fixedHiddenColumn,
431
- 'is--padding': isCellPadding,
436
+ 'is--pg-top': isCellPaddingTop,
437
+ 'is--pg-bottom': isCellPaddingBottom,
438
+ 'is--pg-left': isCellPaddingLeft,
439
+ 'is--pg-right': isCellPaddingRight,
432
440
  'is--progress': (fixedHiddenColumn && isAllOverflow) || isVNPreEmptyStatus,
433
441
  'is--drag-cell': isRowDragCell && (isCrossDrag || isPeerDrag || !rowLevel),
434
442
  'is--drag-disabled': isDisabledDrag,
@@ -4,6 +4,7 @@ import XEUtils from 'xe-utils';
4
4
  import { VxeUI } from '../../ui';
5
5
  import { updateCellTitle, getPropClass } from '../../ui/src/dom';
6
6
  import { getCalcHeight } from './util';
7
+ import { getDefaultConfig } from '../../ui/src/utils';
7
8
  const { renderer, renderEmptyElement } = VxeUI;
8
9
  const sourceType = 'table';
9
10
  const renderType = 'footer';
@@ -61,8 +62,13 @@ export default defineVxeComponent({
61
62
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
62
63
  const showAllTip = footerTooltipOpts.showAll;
63
64
  const fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
64
- const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding;
65
- const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
65
+ const cellPadding = getDefaultConfig(footerCellOpts.padding, cellOpts.padding);
66
+ const isAllCellPadding = cellPadding === true;
67
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
68
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
69
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
70
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
71
+ const footOverflow = getDefaultConfig(showFooterOverflow, allColumnFooterOverflow);
66
72
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
67
73
  const showEllipsis = (footOverflow === true ? footerTooltipOpts.mode : footOverflow) === 'ellipsis';
68
74
  const showTitle = (footOverflow === true ? footerTooltipOpts.mode : footOverflow) === 'title';
@@ -169,7 +175,10 @@ export default defineVxeComponent({
169
175
  'col--last': isLastColumn,
170
176
  'fixed--width': !isAutoCellWidth,
171
177
  'fixed--hidden': fixedHiddenColumn,
172
- 'is--padding': isPadding,
178
+ 'is--pg-top': isCellPaddingTop,
179
+ 'is--pg-bottom': isCellPaddingBottom,
180
+ 'is--pg-left': isCellPaddingLeft,
181
+ 'is--pg-right': isCellPaddingRight,
173
182
  'col--ellipsis': hasEllipsis,
174
183
  'col--current': currentColumn === column
175
184
  }, getPropClass(footerClassName, cellParams), getPropClass(footerCellClassName, cellParams)] }, attrs), { style: footerCellStyle ? (XEUtils.isFunction(footerCellStyle) ? footerCellStyle(cellParams) : footerCellStyle) : null }), tfOns), { key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag ? column.id : $columnIndex }), [
@@ -2,7 +2,7 @@ import { h, ref, inject, nextTick, watch, onMounted, onUnmounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
4
  import { VxeUI } from '../../ui';
5
- import { isEnableConf } from '../../ui/src/utils';
5
+ import { getDefaultConfig, isEnableConf } from '../../ui/src/utils';
6
6
  import { getCalcHeight, convertHeaderColumnToRows, convertHeaderToGridRows } from './util';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  const { renderer, renderEmptyElement } = VxeUI;
@@ -73,8 +73,13 @@ export default defineVxeComponent({
73
73
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
74
74
  const isColGroup = column.children && column.children.length;
75
75
  const fixedHiddenColumn = overflowX && !isColGroup && (fixedType ? column.fixed !== fixedType : !!column.fixed);
76
- const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding;
77
- const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
76
+ const cellPadding = getDefaultConfig(headerCellOpts.padding, cellOpts.padding);
77
+ const isAllCellPadding = cellPadding === true;
78
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
79
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
80
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
81
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
82
+ const headOverflow = getDefaultConfig(showHeaderOverflow, allColumnHeaderOverflow);
78
83
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
79
84
  const showEllipsis = (headOverflow === true ? headerTooltipOpts.mode : headOverflow) === 'ellipsis';
80
85
  const showTitle = (headOverflow === true ? headerTooltipOpts.mode : headOverflow) === 'title';
@@ -192,7 +197,10 @@ export default defineVxeComponent({
192
197
  'col--group': isColGroup,
193
198
  'col--ellipsis': hasEllipsis,
194
199
  'fixed--width': !isAutoCellWidth,
195
- 'is--padding': isPadding,
200
+ 'is--pg-top': isCellPaddingTop,
201
+ 'is--pg-bottom': isCellPaddingBottom,
202
+ 'is--pg-left': isCellPaddingLeft,
203
+ 'is--pg-right': isCellPaddingRight,
196
204
  'is--sortable': column.sortable,
197
205
  'col--filter': !!filters,
198
206
  'is--filter-active': hasFilter,
@@ -2033,10 +2033,9 @@ export default defineVxeComponent({
2033
2033
  if (!el || !el.clientWidth) {
2034
2034
  return;
2035
2035
  }
2036
- const cellOpts = computeCellOpts.value;
2037
2036
  const treeOpts = computeTreeOpts.value;
2038
2037
  const defaultRowHeight = computeDefaultRowHeight.value;
2039
- if (!isAllOverflow && (scrollYLoad || scrollXLoad || cellOpts.maxHeight || (treeConfig && treeOpts.showLine))) {
2038
+ if (!isAllOverflow && (scrollYLoad || scrollXLoad || (treeConfig && treeOpts.showLine))) {
2040
2039
  const { handleGetRowId } = createHandleGetRowId($xeTable);
2041
2040
  el.setAttribute('data-calc-row', 'Y');
2042
2041
  tableData.forEach(row => {
@@ -8415,6 +8414,11 @@ export default defineVxeComponent({
8415
8414
  }
8416
8415
  };
8417
8416
  const handleGlobalScrollEvent = (evnt) => {
8417
+ const { filterStore } = reactData;
8418
+ const filterOpts = computeFilterOpts.value;
8419
+ if (filterStore.visible && filterOpts.transfer) {
8420
+ $xeTable.handleFilterStyle();
8421
+ }
8418
8422
  reUpdateCustomStyleEvent(evnt);
8419
8423
  };
8420
8424
  /**
@@ -14265,6 +14269,12 @@ export default defineVxeComponent({
14265
14269
  }, () => {
14266
14270
  reLayoutFlag.value++;
14267
14271
  });
14272
+ watch(() => {
14273
+ const cellOpts = computeCellOpts.value;
14274
+ return cellOpts.height;
14275
+ }, () => {
14276
+ reLayoutFlag.value++;
14277
+ });
14268
14278
  watch(reLayoutFlag, () => {
14269
14279
  $xeTable.recalculate(true);
14270
14280
  });
@@ -230,6 +230,7 @@ export function createReactData() {
230
230
  customColumnList: [],
231
231
  // 当前选中的筛选列
232
232
  filterStore: {
233
+ targetEl: null,
233
234
  isAllSelected: false,
234
235
  isIndeterminate: false,
235
236
  style: null,
@@ -1834,21 +1834,28 @@
1834
1834
 
1835
1835
  .vxe-table {
1836
1836
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-default);
1837
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-default);
1838
+ --vxe-ui-table-current-row-line-height: var(--vxe-ui-table-row-line-height);
1837
1839
  }
1838
1840
  .vxe-table.size--xlarge {
1839
1841
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-xlarge);
1842
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-xlarge);
1840
1843
  }
1841
1844
  .vxe-table.size--large {
1842
1845
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-large);
1846
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-large);
1843
1847
  }
1844
1848
  .vxe-table.size--medium {
1845
1849
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-medium);
1850
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-medium);
1846
1851
  }
1847
1852
  .vxe-table.size--small {
1848
1853
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-small);
1854
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-small);
1849
1855
  }
1850
1856
  .vxe-table.size--mini {
1851
1857
  --vxe-ui-table-current-font-size: var(--vxe-ui-font-size-mini);
1858
+ --vxe-ui-table-current-cell-padding: var(--vxe-ui-table-cell-padding-mini);
1852
1859
  }
1853
1860
 
1854
1861
  .vxe-table-slots,
@@ -2977,6 +2984,32 @@
2977
2984
  white-space: nowrap;
2978
2985
  }
2979
2986
 
2987
+ .vxe-header--column.is--pg-top .vxe-cell,
2988
+ .vxe-body--column.is--pg-top .vxe-cell,
2989
+ .vxe-footer--column.is--pg-top .vxe-cell {
2990
+ padding-top: var(--vxe-ui-table-current-cell-padding);
2991
+ }
2992
+ .vxe-header--column.is--pg-bottom .vxe-cell,
2993
+ .vxe-body--column.is--pg-bottom .vxe-cell,
2994
+ .vxe-footer--column.is--pg-bottom .vxe-cell {
2995
+ padding-bottom: var(--vxe-ui-table-current-cell-padding);
2996
+ }
2997
+ .vxe-header--column.is--pg-left .vxe-cell,
2998
+ .vxe-body--column.is--pg-left .vxe-cell,
2999
+ .vxe-footer--column.is--pg-left .vxe-cell {
3000
+ padding-left: var(--vxe-ui-table-current-cell-padding);
3001
+ }
3002
+ .vxe-header--column.is--pg-right .vxe-cell,
3003
+ .vxe-body--column.is--pg-right .vxe-cell,
3004
+ .vxe-footer--column.is--pg-right .vxe-cell {
3005
+ padding-right: var(--vxe-ui-table-current-cell-padding);
3006
+ }
3007
+ .vxe-header--column .vxe-default-textarea,
3008
+ .vxe-body--column .vxe-default-textarea,
3009
+ .vxe-footer--column .vxe-default-textarea {
3010
+ padding: var(--vxe-ui-table-current-cell-padding);
3011
+ }
3012
+
2980
3013
  /*table*/
2981
3014
  .vxe-table--render-default {
2982
3015
  position: relative;
@@ -3067,7 +3100,7 @@
3067
3100
  .vxe-table--render-default .vxe-body--column,
3068
3101
  .vxe-table--render-default .vxe-footer--column {
3069
3102
  position: relative;
3070
- line-height: var(--vxe-ui-table-row-line-height);
3103
+ line-height: var(--vxe-ui-table-current-row-line-height);
3071
3104
  text-align: left;
3072
3105
  }
3073
3106
  .vxe-table--render-default .vxe-header--column.col--center,
@@ -3117,7 +3150,7 @@
3117
3150
  .vxe-table--render-default .vxe-body--column,
3118
3151
  .vxe-table--render-default .vxe-footer--column {
3119
3152
  position: relative;
3120
- line-height: var(--vxe-ui-table-row-line-height);
3153
+ line-height: var(--vxe-ui-table-current-row-line-height);
3121
3154
  text-align: left;
3122
3155
  }
3123
3156
  .vxe-table--render-default .vxe-header--column.col--current,
@@ -3270,16 +3303,6 @@
3270
3303
  .vxe-table--render-default.size--medium .vxe-table--empty-block {
3271
3304
  min-height: var(--vxe-ui-table-row-height-medium);
3272
3305
  }
3273
- .vxe-table--render-default.size--medium .vxe-header--column.is--padding .vxe-cell,
3274
- .vxe-table--render-default.size--medium .vxe-body--column.is--padding .vxe-cell,
3275
- .vxe-table--render-default.size--medium .vxe-footer--column.is--padding .vxe-cell {
3276
- padding: var(--vxe-ui-table-cell-padding-medium);
3277
- }
3278
- .vxe-table--render-default.size--medium .vxe-header--column.is--padding .vxe-cell .vxe-default-textarea,
3279
- .vxe-table--render-default.size--medium .vxe-body--column.is--padding .vxe-cell .vxe-default-textarea,
3280
- .vxe-table--render-default.size--medium .vxe-footer--column.is--padding .vxe-cell .vxe-default-textarea {
3281
- padding: var(--vxe-ui-table-cell-padding-medium);
3282
- }
3283
3306
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-input,
3284
3307
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-textarea,
3285
3308
  .vxe-table--render-default.size--medium .vxe-cell .vxe-default-select {
@@ -3295,16 +3318,6 @@
3295
3318
  .vxe-table--render-default.size--small .vxe-table--empty-block {
3296
3319
  min-height: var(--vxe-ui-table-row-height-small);
3297
3320
  }
3298
- .vxe-table--render-default.size--small .vxe-header--column.is--padding .vxe-cell,
3299
- .vxe-table--render-default.size--small .vxe-body--column.is--padding .vxe-cell,
3300
- .vxe-table--render-default.size--small .vxe-footer--column.is--padding .vxe-cell {
3301
- padding: var(--vxe-ui-table-cell-padding-small);
3302
- }
3303
- .vxe-table--render-default.size--small .vxe-header--column.is--padding .vxe-cell .vxe-default-textarea,
3304
- .vxe-table--render-default.size--small .vxe-body--column.is--padding .vxe-cell .vxe-default-textarea,
3305
- .vxe-table--render-default.size--small .vxe-footer--column.is--padding .vxe-cell .vxe-default-textarea {
3306
- padding: var(--vxe-ui-table-cell-padding-small);
3307
- }
3308
3321
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-input,
3309
3322
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-textarea,
3310
3323
  .vxe-table--render-default.size--small .vxe-cell .vxe-default-select {
@@ -3320,16 +3333,6 @@
3320
3333
  .vxe-table--render-default.size--mini .vxe-table--empty-block {
3321
3334
  min-height: var(--vxe-ui-table-row-height-mini);
3322
3335
  }
3323
- .vxe-table--render-default.size--mini .vxe-header--column.is--padding .vxe-cell,
3324
- .vxe-table--render-default.size--mini .vxe-body--column.is--padding .vxe-cell,
3325
- .vxe-table--render-default.size--mini .vxe-footer--column.is--padding .vxe-cell {
3326
- padding: var(--vxe-ui-table-cell-padding-mini);
3327
- }
3328
- .vxe-table--render-default.size--mini .vxe-header--column.is--padding .vxe-cell .vxe-default-textarea,
3329
- .vxe-table--render-default.size--mini .vxe-body--column.is--padding .vxe-cell .vxe-default-textarea,
3330
- .vxe-table--render-default.size--mini .vxe-footer--column.is--padding .vxe-cell .vxe-default-textarea {
3331
- padding: var(--vxe-ui-table-cell-padding-mini);
3332
- }
3333
3336
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-input,
3334
3337
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-textarea,
3335
3338
  .vxe-table--render-default.size--mini .vxe-cell .vxe-default-select {
@@ -3341,16 +3344,6 @@
3341
3344
  .vxe-table--render-default.size--mini .vxe-cell--valid-error-tip {
3342
3345
  padding: 0 var(--vxe-ui-table-cell-padding-mini);
3343
3346
  }
3344
- .vxe-table--render-default .vxe-header--column.is--padding .vxe-cell,
3345
- .vxe-table--render-default .vxe-body--column.is--padding .vxe-cell,
3346
- .vxe-table--render-default .vxe-footer--column.is--padding .vxe-cell {
3347
- padding: var(--vxe-ui-table-cell-padding-default);
3348
- }
3349
- .vxe-table--render-default .vxe-header--column.is--padding .vxe-cell .vxe-default-textarea,
3350
- .vxe-table--render-default .vxe-body--column.is--padding .vxe-cell .vxe-default-textarea,
3351
- .vxe-table--render-default .vxe-footer--column.is--padding .vxe-cell .vxe-default-textarea {
3352
- padding: var(--vxe-ui-table-cell-padding-default);
3353
- }
3354
3347
  .vxe-table--render-default .vxe-cell {
3355
3348
  white-space: pre-line;
3356
3349
  word-break: break-all;
@@ -3797,24 +3790,6 @@
3797
3790
  color: var(--vxe-ui-input-disabled-color);
3798
3791
  cursor: not-allowed;
3799
3792
  }
3800
- .vxe-table--render-default.size--medium .vxe-cell--checkbox {
3801
- font-size: var(--vxe-checkbox-font-size-medium);
3802
- }
3803
- .vxe-table--render-default.size--medium .vxe-cell--radio {
3804
- font-size: var(--vxe-radio-font-size-medium);
3805
- }
3806
- .vxe-table--render-default.size--small .vxe-cell--checkbox {
3807
- font-size: var(--vxe-checkbox-font-size-small);
3808
- }
3809
- .vxe-table--render-default.size--small .vxe-cell--radio {
3810
- font-size: var(--vxe-radio-font-size-small);
3811
- }
3812
- .vxe-table--render-default.size--mini .vxe-cell--checkbox {
3813
- font-size: var(--vxe-checkbox-font-size-mini);
3814
- }
3815
- .vxe-table--render-default.size--mini .vxe-cell--radio {
3816
- font-size: var(--vxe-radio-font-size-mini);
3817
- }
3818
3793
  .vxe-table--render-default {
3819
3794
  /*暂无数据*/
3820
3795
  }