vxe-table 3.23.1 → 3.23.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 (77) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/custom/mixin.js +6 -0
  6. package/es/table/module/export/export-panel.js +3 -2
  7. package/es/table/module/export/mixin.js +12 -6
  8. package/es/table/module/filter/mixin.js +102 -76
  9. package/es/table/src/body.js +12 -4
  10. package/es/table/src/footer.js +12 -4
  11. package/es/table/src/header.js +12 -4
  12. package/es/table/src/methods.js +14 -5
  13. package/es/table/src/table.js +8 -0
  14. package/es/table/src/util.js +1 -0
  15. package/es/table/style.css +35 -60
  16. package/es/table/style.min.css +1 -1
  17. package/es/ui/index.js +1 -1
  18. package/es/ui/src/dom.js +1 -1
  19. package/es/ui/src/log.js +1 -1
  20. package/es/vxe-table/style.css +35 -60
  21. package/es/vxe-table/style.min.css +1 -1
  22. package/lib/index.css +1 -1
  23. package/lib/index.min.css +1 -1
  24. package/lib/index.umd.js +194 -110
  25. package/lib/index.umd.min.js +1 -1
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/table/module/custom/mixin.js +8 -0
  29. package/lib/table/module/custom/mixin.min.js +1 -1
  30. package/lib/table/module/export/export-panel.js +3 -2
  31. package/lib/table/module/export/export-panel.min.js +1 -1
  32. package/lib/table/module/export/mixin.js +15 -6
  33. package/lib/table/module/export/mixin.min.js +1 -1
  34. package/lib/table/module/filter/mixin.js +116 -83
  35. package/lib/table/module/filter/mixin.min.js +1 -1
  36. package/lib/table/src/body.js +11 -3
  37. package/lib/table/src/body.min.js +1 -1
  38. package/lib/table/src/footer.js +11 -3
  39. package/lib/table/src/footer.min.js +1 -1
  40. package/lib/table/src/header.js +11 -3
  41. package/lib/table/src/header.min.js +1 -1
  42. package/lib/table/src/methods.js +3 -3
  43. package/lib/table/src/methods.min.js +1 -1
  44. package/lib/table/src/table.js +8 -0
  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/mixin.ts +7 -0
  60. package/packages/table/module/export/export-panel.ts +3 -2
  61. package/packages/table/module/export/mixin.ts +11 -6
  62. package/packages/table/module/filter/mixin.ts +102 -72
  63. package/packages/table/src/body.ts +13 -4
  64. package/packages/table/src/footer.ts +14 -4
  65. package/packages/table/src/header.ts +14 -4
  66. package/packages/table/src/methods.ts +14 -5
  67. package/packages/table/src/table.ts +9 -0
  68. package/packages/table/src/util.ts +1 -0
  69. package/packages/ui/src/dom.ts +1 -1
  70. package/packages/ui/src/utils.ts +1 -1
  71. package/styles/components/table.scss +37 -75
  72. /package/es/{iconfont.1787542588120.ttf → iconfont.1788176636871.ttf} +0 -0
  73. /package/es/{iconfont.1787542588120.woff → iconfont.1788176636871.woff} +0 -0
  74. /package/es/{iconfont.1787542588120.woff2 → iconfont.1788176636871.woff2} +0 -0
  75. /package/lib/{iconfont.1787542588120.ttf → iconfont.1788176636871.ttf} +0 -0
  76. /package/lib/{iconfont.1787542588120.woff → iconfont.1788176636871.woff} +0 -0
  77. /package/lib/{iconfont.1787542588120.woff2 → iconfont.1788176636871.woff2} +0 -0
@@ -497,6 +497,12 @@ export default {
497
497
  },
498
498
  handleCustomStyle() {
499
499
  const $xeTable = this;
500
+ const reactData = $xeTable.reactData;
501
+ const { customStore } = reactData;
502
+ if (!customStore.visible) {
503
+ return $xeTable.$nextTick();
504
+ }
505
+ reactData.isCustomDragStatus = false;
500
506
  return updatePopupStyle($xeTable);
501
507
  }
502
508
  }
@@ -163,9 +163,10 @@ export default {
163
163
  const { hasMerge, columns } = storeData;
164
164
  const checkedAll = $xeExportPanel.computeCheckedAll;
165
165
  const supportMerge = $xeExportPanel.computeSupportMerge;
166
- const expColumns = XEUtils.searchTree(columns, column => column.checked, { children: 'children', mapChildren: 'childNodes', original: true });
166
+ // 内部导出使用 _columns -> _children 为自定义子集
167
+ const expColumns = XEUtils.searchTree(columns, column => column.checked, { children: 'children', mapChildren: '_children', original: true });
167
168
  return Object.assign({}, defaultOptions, {
168
- columns: expColumns,
169
+ _columns: expColumns,
169
170
  isMerge: hasMerge && supportMerge && checkedAll ? defaultOptions.isMerge : false
170
171
  });
171
172
  },
@@ -1183,7 +1183,7 @@ function handleExportAndPrint($xeTable, options, isPrint) {
1183
1183
  const exportOpts = $xeTable.computeExportOpts;
1184
1184
  const hasTree = !!treeConfig;
1185
1185
  const hasRowGroup = rowGroupList.length > 0;
1186
- const customOpts = $xeTable.computeCustomOpts;
1186
+ const printOpts = $xeTable.computePrintOpts;
1187
1187
  const selectRecords = $xeTable.getCheckboxRecords();
1188
1188
  const proxyOpts = $xeGGWrapper ? $xeGGWrapper.computeProxyOpts : {};
1189
1189
  const hasFooter = !!footerTableData.length;
@@ -1204,9 +1204,9 @@ function handleExportAndPrint($xeTable, options, isPrint) {
1204
1204
  warnLog('vxe.error.delProp', ['isAllExpand', 'isTreeAllExpanded']);
1205
1205
  defOpts.isTreeAllExpanded = defOpts.isAllExpand;
1206
1206
  }
1207
- const types = defOpts.types || XEUtils.keys(exportOpts._typeMaps);
1207
+ const types = isPrint ? [] : (defOpts.types || XEUtils.keys(exportOpts._typeMaps));
1208
1208
  const modes = defOpts.modes || [];
1209
- const checkMethod = customOpts.checkMethod;
1209
+ const checkMethod = (isPrint ? printOpts : exportOpts).checkMethod;
1210
1210
  const exportColumns = collectColumn.slice(0);
1211
1211
  const { columns, excludeFields, includeFields, extraFields } = defOpts;
1212
1212
  // 处理类型
@@ -1313,10 +1313,10 @@ function handleExportAndPrint($xeTable, options, isPrint) {
1313
1313
  }
1314
1314
  }
1315
1315
  if (!modeList.some(item => item.value === mode)) {
1316
- exportParams.mode = modeList[0].value;
1316
+ exportParams.mode = modeList.length ? modeList[0].value : '';
1317
1317
  }
1318
1318
  if (!typeList.some(item => item.value === type)) {
1319
- exportParams.type = typeList[0].value;
1319
+ exportParams.type = typeList.length ? typeList[0].value : '';
1320
1320
  }
1321
1321
  if (!exportParams.widthMode) {
1322
1322
  exportParams.widthMode = '';
@@ -1458,7 +1458,13 @@ export default {
1458
1458
  }
1459
1459
  let isCustomCol = false;
1460
1460
  let customCols = [];
1461
- if (columns) {
1461
+ const _columns = opts._columns;
1462
+ if (_columns) {
1463
+ // 内部导出使用 _columns -> _children 为自定义子集
1464
+ isCustomCol = true;
1465
+ customCols = XEUtils.searchTree(_columns, () => true, { children: '_children', mapChildren: 'childNodes', original: true });
1466
+ }
1467
+ else if (columns) {
1462
1468
  isCustomCol = true;
1463
1469
  customCols = XEUtils.searchTree(columns, () => true, { children: 'children', mapChildren: 'childNodes', original: true });
1464
1470
  }
@@ -5,6 +5,97 @@ import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom';
5
5
  import { isEnableConf } from '../../../ui/src/utils';
6
6
  const { renderer } = VxeUI;
7
7
  const sourceType = 'table';
8
+ function updatePopupStyle($xeTable) {
9
+ const $xeGrid = $xeTable.$xeGrid;
10
+ const $xeGantt = $xeTable.$xeGantt;
11
+ const reactData = $xeTable;
12
+ const internalData = $xeTable;
13
+ const $xeGGWrapper = $xeGrid || $xeGantt;
14
+ const { filterStore } = reactData;
15
+ const { elemStore } = internalData;
16
+ const { column, targetEl } = filterStore;
17
+ if (!column || !targetEl) {
18
+ return $xeTable.$nextTick();
19
+ }
20
+ const tableEl = $xeTable.$refs.refElem;
21
+ const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
22
+ const filterOpts = $xeTable.computeFilterOpts;
23
+ const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
24
+ const currEl = targetEl;
25
+ const tableRect = tableEl.getBoundingClientRect();
26
+ const filterRender = column ? column.filterRender : null;
27
+ const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
28
+ const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
29
+ if (!headerScrollElem) {
30
+ return $xeTable.$nextTick();
31
+ }
32
+ const tableFilter = $xeTable.$refs.refTableFilter;
33
+ const filterWrapperElem = tableFilter ? tableFilter.$el : null;
34
+ if (!filterWrapperElem) {
35
+ return $xeTable.$nextTick();
36
+ }
37
+ const btnRect = currEl.getBoundingClientRect();
38
+ const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
39
+ const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
40
+ const filterWidth = filterWrapperElem.offsetWidth;
41
+ const centerWidth = currEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
42
+ let left = 0;
43
+ let top = 0;
44
+ let maxHeight = 0;
45
+ /**
46
+ * 是否显示筛选按钮图标
47
+ * 如果不存在图标,则相对单元格居中显示
48
+ */
49
+ if (transfer) {
50
+ left = btnRect.left - centerWidth + scrollLeft;
51
+ top = btnRect.top + currEl.clientHeight + scrollTop;
52
+ 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));
53
+ if (left < 16) {
54
+ left = 16;
55
+ }
56
+ else if (left > (visibleWidth - filterWidth - 16)) {
57
+ left = visibleWidth - filterWidth - 16;
58
+ }
59
+ }
60
+ else {
61
+ left = btnRect.left - tableRect.left - centerWidth;
62
+ top = btnRect.top - tableRect.top + currEl.clientHeight;
63
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
64
+ if (left < 1) {
65
+ left = 1;
66
+ }
67
+ else if (left > (tableEl.clientWidth - filterWidth - 1)) {
68
+ left = tableEl.clientWidth - filterWidth - 1;
69
+ }
70
+ if ($xeGGWrapper) {
71
+ const wrapperEl = $xeGGWrapper.$refs.refElem;
72
+ if (wrapperEl) {
73
+ const wrapperRect = wrapperEl.getBoundingClientRect();
74
+ top += tableRect.top - wrapperRect.top;
75
+ }
76
+ }
77
+ }
78
+ const fStys = {
79
+ top: toCssUnit(top),
80
+ left: toCssUnit(left)
81
+ };
82
+ if (zIndex) {
83
+ fStys.zIndex = zIndex;
84
+ }
85
+ filterStore.style = fStys;
86
+ // 筛选面板是自适应表格高度
87
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
88
+ maxHeight = 0;
89
+ }
90
+ else {
91
+ if (customMaxHeight) {
92
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
93
+ }
94
+ }
95
+ // 判断面板不能大于表格高度
96
+ filterStore.maxHeight = maxHeight;
97
+ return $xeTable.$nextTick();
98
+ }
8
99
  export default {
9
100
  methods: {
10
101
  /**
@@ -93,96 +184,22 @@ export default {
93
184
  },
94
185
  handleOpenFilterColumn(evnt, btnEl, colEl, column, params) {
95
186
  const $xeTable = this;
96
- const $xeGrid = $xeTable.$xeGrid;
97
- const $xeGantt = $xeTable.$xeGantt;
98
187
  const reactData = $xeTable;
99
188
  const internalData = $xeTable;
100
- const $xeGGWrapper = $xeGrid || $xeGantt;
101
189
  const { initStore, filterStore } = reactData;
102
- const { elemStore } = internalData;
103
190
  if (filterStore.column === column && filterStore.visible) {
104
191
  filterStore.visible = false;
105
192
  }
106
193
  else {
107
- const tableEl = $xeTable.$refs.refElem;
108
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
109
- const filterOpts = $xeTable.computeFilterOpts;
110
- const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
111
194
  const currEl = btnEl || colEl;
112
- const tableRect = tableEl.getBoundingClientRect();
113
- const filterRender = column ? column.filterRender : null;
114
- const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
115
195
  $xeTable.handleFilterOptions(column);
116
196
  internalData._currFilterParams = params;
197
+ filterStore.targetEl = currEl;
117
198
  filterStore.style = null;
118
199
  filterStore.visible = true;
119
200
  initStore.filter = true;
120
201
  $xeTable.$nextTick(() => {
121
- const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
122
- if (!headerScrollElem) {
123
- return;
124
- }
125
- const tableFilter = $xeTable.$refs.refTableFilter;
126
- const filterWrapperElem = tableFilter ? tableFilter.$el : null;
127
- if (!filterWrapperElem) {
128
- return;
129
- }
130
- const btnRect = currEl.getBoundingClientRect();
131
- const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
132
- const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
133
- const filterWidth = filterWrapperElem.offsetWidth;
134
- const centerWidth = filterWidth / 2;
135
- let left = 0;
136
- let top = 0;
137
- let maxHeight = 0;
138
- if (transfer) {
139
- left = btnRect.left - centerWidth + scrollLeft;
140
- top = btnRect.top + currEl.clientHeight + scrollTop;
141
- 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));
142
- if (left < 16) {
143
- left = 16;
144
- }
145
- else if (left > (visibleWidth - filterWidth - 16)) {
146
- left = visibleWidth - filterWidth - 16;
147
- }
148
- }
149
- else {
150
- left = btnRect.left - tableRect.left - centerWidth;
151
- top = btnRect.top - tableRect.top + currEl.clientHeight;
152
- maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
153
- if (left < 1) {
154
- left = 1;
155
- }
156
- else if (left > (tableEl.clientWidth - filterWidth - 1)) {
157
- left = tableEl.clientWidth - filterWidth - 1;
158
- }
159
- if ($xeGGWrapper) {
160
- const wrapperEl = $xeGGWrapper.$refs.refElem;
161
- if (wrapperEl) {
162
- const wrapperRect = wrapperEl.getBoundingClientRect();
163
- top += tableRect.top - wrapperRect.top;
164
- }
165
- }
166
- }
167
- const fStys = {
168
- top: toCssUnit(top),
169
- left: toCssUnit(left)
170
- };
171
- if (zIndex) {
172
- fStys.zIndex = zIndex;
173
- }
174
- filterStore.style = fStys;
175
- // 筛选面板是自适应表格高度
176
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
177
- maxHeight = 0;
178
- }
179
- else {
180
- if (customMaxHeight) {
181
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
182
- }
183
- }
184
- // 判断面板不能大于表格高度
185
- filterStore.maxHeight = maxHeight;
202
+ updatePopupStyle($xeTable);
186
203
  });
187
204
  }
188
205
  $xeTable.dispatchEvent('filter-visible', { column, field: column.field, property: column.field, filterList: $xeTable.getCheckedFilters(), visible: filterStore.visible }, evnt);
@@ -443,6 +460,15 @@ export default {
443
460
  }
444
461
  }
445
462
  },
463
+ handleFilterStyle() {
464
+ const $xeTable = this;
465
+ const reactData = $xeTable;
466
+ const { filterStore } = reactData;
467
+ if (!filterStore.visible) {
468
+ return $xeTable.$nextTick();
469
+ }
470
+ return updatePopupStyle($xeTable);
471
+ },
446
472
  /**
447
473
  * 清空指定列的筛选条件
448
474
  * 如果为空则清空所有列的筛选条件
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../ui';
3
3
  import { defineVxeComponent } from '../../ui/src/comp';
4
- import { isEnableConf, getClass } from '../../ui/src/utils';
4
+ import { isEnableConf, getClass, getDefaultConfig } from '../../ui/src/utils';
5
5
  import { getRowid, createHandleGetRowId, getCellRestHeight } from './util';
6
6
  import { updateCellTitle } from '../../ui/src/dom';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
@@ -118,8 +118,13 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
118
118
  const isEdit = isEnableConf(editRender);
119
119
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
120
120
  let fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
121
- const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding;
122
- const cellOverflow = XEUtils.eqNull(showOverflow) ? allShowOverflow : showOverflow;
121
+ const cellPadding = getDefaultConfig(padding, (allPadding === null ? cellOpts.padding : allPadding));
122
+ const isAllCellPadding = cellPadding === true;
123
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
124
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
125
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
126
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
127
+ const cellOverflow = getDefaultConfig(showOverflow, allShowOverflow);
123
128
  const showEllipsis = cellOverflow === 'ellipsis';
124
129
  const showTitle = cellOverflow === 'title';
125
130
  const showTooltip = cellOverflow === true ? tooltipOpts.mode === 'tooltip' : cellOverflow === 'tooltip';
@@ -420,7 +425,10 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
420
425
  'col--max-height': maxHeight,
421
426
  'fixed--width': !isAutoCellWidth,
422
427
  'fixed--hidden': fixedHiddenColumn,
423
- 'is--padding': isCellPadding,
428
+ 'is--pg-top': isCellPaddingTop,
429
+ 'is--pg-bottom': isCellPaddingBottom,
430
+ 'is--pg-left': isCellPaddingLeft,
431
+ 'is--pg-right': isCellPaddingRight,
424
432
  'is--progress': (fixedHiddenColumn && isAllOverflow) || isVNPreEmptyStatus,
425
433
  'is--drag-cell': isRowDragCell && (isCrossDrag || isPeerDrag || !rowLevel),
426
434
  'is--drag-disabled': isDisabledDrag,
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../ui';
3
3
  import { defineVxeComponent } from '../../ui/src/comp';
4
- import { getClass } from '../../ui/src/utils';
4
+ import { getClass, getDefaultConfig } from '../../ui/src/utils';
5
5
  import { updateCellTitle } from '../../ui/src/dom';
6
6
  import { getCalcHeight } from './util';
7
7
  const sourceType = 'table';
@@ -36,8 +36,13 @@ function renderRows(h, _vm, isOptimizeMode, tableColumn, footerTableData, row, $
36
36
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
37
37
  const showAllTip = footerTooltipOpts.showAll;
38
38
  const fixedHiddenColumn = overflowX && (fixedType ? column.fixed !== fixedType : !!column.fixed);
39
- const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding;
40
- const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
39
+ const cellPadding = getDefaultConfig(footerCellOpts.padding, cellOpts.padding);
40
+ const isAllCellPadding = cellPadding === true;
41
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
42
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
43
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
44
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
45
+ const footOverflow = getDefaultConfig(showFooterOverflow, allColumnFooterOverflow);
41
46
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
42
47
  const showEllipsis = (footOverflow === true ? footerTooltipOpts.mode : footOverflow) === 'ellipsis';
43
48
  const showTitle = (footOverflow === true ? footerTooltipOpts.mode : footOverflow) === 'title';
@@ -145,7 +150,10 @@ function renderRows(h, _vm, isOptimizeMode, tableColumn, footerTableData, row, $
145
150
  'col--last': isLastColumn,
146
151
  'fixed--width': !isAutoCellWidth,
147
152
  'fixed--hidden': fixedHiddenColumn,
148
- 'is--padding': isPadding,
153
+ 'is--pg-top': isCellPaddingTop,
154
+ 'is--pg-bottom': isCellPaddingBottom,
155
+ 'is--pg-left': isCellPaddingLeft,
156
+ 'is--pg-right': isCellPaddingRight,
149
157
  'col--ellipsis': hasEllipsis,
150
158
  'col--current': currentColumn === column
151
159
  }, getClass(footerClassName, cellParams), getClass(footerCellClassName, cellParams)],
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../ui';
3
3
  import { defineVxeComponent } from '../../ui/src/comp';
4
- import { isEnableConf, getClass } from '../../ui/src/utils';
4
+ import { isEnableConf, getClass, getDefaultConfig } from '../../ui/src/utils';
5
5
  import { getCalcHeight, convertHeaderColumnToRows, convertHeaderToGridRows } from './util';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
7
  const { renderer, renderEmptyElement } = VxeUI;
@@ -38,8 +38,13 @@ function renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, _rowIndex, co
38
38
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
39
39
  const isColGroup = column.children && column.children.length;
40
40
  const fixedHiddenColumn = overflowX && !isColGroup && (fixedType ? column.fixed !== fixedType : !!column.fixed);
41
- const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding;
42
- const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
41
+ const cellPadding = getDefaultConfig(headerCellOpts.padding, cellOpts.padding);
42
+ const isAllCellPadding = cellPadding === true;
43
+ const isCellPaddingTop = cellPadding ? (isAllCellPadding || cellPadding.top !== false) : false;
44
+ const isCellPaddingBottom = cellPadding ? (isAllCellPadding || cellPadding.bottom !== false) : false;
45
+ const isCellPaddingLeft = cellPadding ? (isAllCellPadding || cellPadding.left !== false) : false;
46
+ const isCellPaddingRight = cellPadding ? (isAllCellPadding || cellPadding.right !== false) : false;
47
+ const headOverflow = getDefaultConfig(showHeaderOverflow, allColumnHeaderOverflow);
43
48
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign;
44
49
  const showEllipsis = headOverflow === 'ellipsis';
45
50
  const showTitle = headOverflow === 'title';
@@ -158,7 +163,10 @@ function renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, _rowIndex, co
158
163
  'col--group': isColGroup,
159
164
  'col--ellipsis': hasEllipsis,
160
165
  'fixed--width': !isAutoCellWidth,
161
- 'is--padding': isPadding,
166
+ 'is--pg-top': isCellPaddingTop,
167
+ 'is--pg-bottom': isCellPaddingBottom,
168
+ 'is--pg-left': isCellPaddingLeft,
169
+ 'is--pg-right': isCellPaddingRight,
162
170
  'is--sortable': column.sortable,
163
171
  'col--filter': !!filters,
164
172
  'is--filter-active': hasFilter,
@@ -2536,10 +2536,9 @@ const calcCellHeight = ($xeTable) => {
2536
2536
  if (!el || !el.clientWidth) {
2537
2537
  return;
2538
2538
  }
2539
- const cellOpts = $xeTable.computeCellOpts;
2540
2539
  const treeOpts = $xeTable.computeTreeOpts;
2541
2540
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
2542
- if (!isAllOverflow && (scrollYLoad || scrollXLoad || cellOpts.maxHeight || (treeConfig && treeOpts.showLine))) {
2541
+ if (!isAllOverflow && (scrollYLoad || scrollXLoad || (treeConfig && treeOpts.showLine))) {
2543
2542
  const { handleGetRowId } = createHandleGetRowId($xeTable);
2544
2543
  el.setAttribute('data-calc-row', 'Y');
2545
2544
  tableData.forEach(row => {
@@ -7619,6 +7618,12 @@ const tableMethods = {
7619
7618
  },
7620
7619
  handleGlobalScrollEvent(evnt) {
7621
7620
  const $xeTable = this;
7621
+ const reactData = $xeTable;
7622
+ const { filterStore } = reactData;
7623
+ const filterOpts = $xeTable.computeFilterOpts;
7624
+ if (filterStore.visible && filterOpts.transfer) {
7625
+ $xeTable.handleFilterStyle();
7626
+ }
7622
7627
  reUpdateCustomStyleEvent($xeTable, evnt);
7623
7628
  },
7624
7629
  /**
@@ -7636,10 +7641,14 @@ const tableMethods = {
7636
7641
  */
7637
7642
  keydownEvent(evnt) {
7638
7643
  const $xeTable = this;
7639
- const { filterStore, ctxMenuStore, editStore, keyboardConfig, mouseConfig, mouseOpts, keyboardOpts } = this;
7644
+ const props = $xeTable;
7645
+ const reactData = $xeTable;
7646
+ const { mouseConfig, keyboardConfig } = props;
7647
+ const { filterStore, ctxMenuStore, editStore } = reactData;
7648
+ const mouseOpts = $xeTable.computeMouseOpts;
7649
+ const keyboardOpts = $xeTable.computeKeyboardOpts;
7640
7650
  const { actived } = editStore;
7641
- const { keyCode } = evnt;
7642
- const isEsc = keyCode === 27;
7651
+ const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
7643
7652
  if (isEsc) {
7644
7653
  this.preventEvent(evnt, 'event.keydown', null, () => {
7645
7654
  $xeTable.dispatchEvent('keydown-start', {}, evnt);
@@ -1391,6 +1391,11 @@ export default {
1391
1391
  const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
1392
1392
  const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
1393
1393
  return `${scrollbarXOpts.visible}${scrollbarYOpts.visible}`;
1394
+ },
1395
+ computeCellConfHeitht() {
1396
+ const $xeTable = this;
1397
+ const cellOpts = $xeTable.computeCellOpts;
1398
+ return cellOpts.height;
1394
1399
  } }),
1395
1400
  watch: {
1396
1401
  data(value) {
@@ -1474,6 +1479,9 @@ export default {
1474
1479
  computeScrollbarVisible() {
1475
1480
  this.reLayoutFlag++;
1476
1481
  },
1482
+ computeCellConfHeitht() {
1483
+ this.reLayoutFlag++;
1484
+ },
1477
1485
  reLayoutFlag() {
1478
1486
  const $xeTable = this;
1479
1487
  $xeTable.$nextTick(() => $xeTable.recalculate(true));
@@ -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
  }