vxe-table 3.23.5 → 3.23.7

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 (72) 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/filter/mixin.js +71 -56
  6. package/es/table/module/keyboard/mixin.js +3 -5
  7. package/es/table/src/body.js +3 -3
  8. package/es/table/src/footer.js +3 -3
  9. package/es/table/src/header.js +6 -6
  10. package/es/table/src/methods.js +128 -68
  11. package/es/table/src/table.js +10 -2
  12. package/es/table/src/util.js +6 -5
  13. package/es/table/style.css +1 -1
  14. package/es/table/style.min.css +1 -1
  15. package/es/ui/index.js +1 -1
  16. package/es/ui/src/dom.js +162 -0
  17. package/es/ui/src/log.js +1 -1
  18. package/es/vxe-table/style.css +1 -1
  19. package/es/vxe-table/style.min.css +1 -1
  20. package/lib/index.css +1 -1
  21. package/lib/index.min.css +1 -1
  22. package/lib/index.umd.js +320 -133
  23. package/lib/index.umd.min.js +1 -1
  24. package/lib/style.css +1 -1
  25. package/lib/style.min.css +1 -1
  26. package/lib/table/module/filter/mixin.js +69 -58
  27. package/lib/table/module/filter/mixin.min.js +1 -1
  28. package/lib/table/module/keyboard/mixin.js +3 -6
  29. package/lib/table/module/keyboard/mixin.min.js +1 -1
  30. package/lib/table/src/body.js +5 -4
  31. package/lib/table/src/body.min.js +1 -1
  32. package/lib/table/src/footer.js +5 -4
  33. package/lib/table/src/footer.min.js +1 -1
  34. package/lib/table/src/header.js +10 -8
  35. package/lib/table/src/header.min.js +1 -1
  36. package/lib/table/src/methods.js +46 -44
  37. package/lib/table/src/methods.min.js +1 -1
  38. package/lib/table/src/table.js +10 -2
  39. package/lib/table/src/table.min.js +1 -1
  40. package/lib/table/src/util.js +6 -5
  41. package/lib/table/src/util.min.js +1 -1
  42. package/lib/table/style/style.css +1 -1
  43. package/lib/table/style/style.min.css +1 -1
  44. package/lib/ui/index.js +1 -1
  45. package/lib/ui/index.min.js +1 -1
  46. package/lib/ui/src/dom.js +167 -0
  47. package/lib/ui/src/dom.min.js +1 -1
  48. package/lib/ui/src/log.js +1 -1
  49. package/lib/ui/src/log.min.js +1 -1
  50. package/lib/vxe-table/style/style.css +1 -1
  51. package/lib/vxe-table/style/style.min.css +1 -1
  52. package/package.json +2 -2
  53. package/packages/table/module/filter/mixin.ts +72 -53
  54. package/packages/table/module/keyboard/mixin.ts +3 -5
  55. package/packages/table/src/body.ts +3 -3
  56. package/packages/table/src/footer.ts +3 -3
  57. package/packages/table/src/header.ts +6 -6
  58. package/packages/table/src/methods.ts +166 -80
  59. package/packages/table/src/table.ts +10 -2
  60. package/packages/table/src/util.ts +9 -6
  61. package/packages/ui/src/dom.ts +176 -0
  62. package/styles/components/table-module/filter.scss +1 -1
  63. package/styles/theme/base.scss +2 -0
  64. package/styles/theme/dark.scss +4 -4
  65. package/styles/theme/light.scss +4 -4
  66. package/styles/variable.scss +4 -4
  67. /package/es/{iconfont.1788403274136.ttf → iconfont.1788696064361.ttf} +0 -0
  68. /package/es/{iconfont.1788403274136.woff → iconfont.1788696064361.woff} +0 -0
  69. /package/es/{iconfont.1788403274136.woff2 → iconfont.1788696064361.woff2} +0 -0
  70. /package/lib/{iconfont.1788403274136.ttf → iconfont.1788696064361.ttf} +0 -0
  71. /package/lib/{iconfont.1788403274136.woff → iconfont.1788696064361.woff} +0 -0
  72. /package/lib/{iconfont.1788403274136.woff2 → iconfont.1788696064361.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { VxeUI } from '../../../ui';
3
3
  import { toFilters, handleFieldOrColumn, getRefElem } from '../../src/util';
4
- import { toCssUnit, triggerEvent, getDomNode } from '../../../ui/src/dom';
4
+ import { toCssUnit, triggerEvent, updatePanelPlacement } from '../../../ui/src/dom';
5
5
  import { isEnableConf } from '../../../ui/src/utils';
6
6
  const { renderer } = VxeUI;
7
7
  const sourceType = 'table';
@@ -14,15 +14,12 @@ function updatePopupStyle($xeTable) {
14
14
  const { filterStore } = reactData;
15
15
  const { elemStore } = internalData;
16
16
  const { column, targetEl } = filterStore;
17
- if (!column || !targetEl) {
17
+ if (!column) {
18
18
  return $xeTable.$nextTick();
19
19
  }
20
20
  const tableEl = $xeTable.$refs.refElem;
21
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode();
22
21
  const filterOpts = $xeTable.computeFilterOpts;
23
22
  const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts;
24
- const currEl = targetEl;
25
- const tableRect = tableEl.getBoundingClientRect();
26
23
  const filterRender = column ? column.filterRender : null;
27
24
  const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null;
28
25
  const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
@@ -34,67 +31,86 @@ function updatePopupStyle($xeTable) {
34
31
  if (!filterWrapperElem) {
35
32
  return $xeTable.$nextTick();
36
33
  }
37
- const btnRect = currEl.getBoundingClientRect();
38
34
  const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
39
35
  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
36
  /**
46
37
  * 是否显示筛选按钮图标
47
38
  * 如果不存在图标,则相对单元格居中显示
48
39
  */
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;
40
+ const handleStyle = () => {
41
+ /**
42
+ * 是否显示筛选按钮图标
43
+ * 如果不存在图标,则相对单元格居中显示
44
+ */
45
+ let currEl = targetEl;
46
+ if (!targetEl) {
47
+ const headerWrapperElem = getRefElem(elemStore[`${column.fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper']);
48
+ const colEl = headerWrapperElem ? headerWrapperElem.querySelector(`.vxe-header--column.${column.id}`) : null;
49
+ if (colEl) {
50
+ currEl = colEl;
51
+ }
55
52
  }
56
- else if (left > (visibleWidth - filterWidth - 16)) {
57
- left = visibleWidth - filterWidth - 16;
53
+ if (!currEl) {
54
+ return $xeTable.$nextTick();
58
55
  }
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;
56
+ const btnRect = currEl.getBoundingClientRect();
57
+ const tableRect = tableEl.getBoundingClientRect();
58
+ let left = 0;
59
+ let top = 0;
60
+ let maxHeight = 0;
61
+ let panelStyle = {};
62
+ if (transfer) {
63
+ const ppObj = updatePanelPlacement(currEl, filterWrapperElem, {
64
+ defaultPlacement: 'bottom',
65
+ isMinWidth: false,
66
+ teleportTo: transfer
67
+ });
68
+ panelStyle = ppObj.style;
69
+ }
70
+ else {
71
+ const filterWidth = filterWrapperElem.offsetWidth;
72
+ const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2);
73
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
74
+ left = btnRect.left - tableRect.left - centerWidth;
75
+ top = btnRect.top - tableRect.top + currEl.clientHeight;
76
+ if (left < 1) {
77
+ left = 1;
78
+ }
79
+ else if (left > (tableEl.clientWidth - filterWidth - 1)) {
80
+ left = tableEl.clientWidth - filterWidth - 1;
81
+ }
82
+ if ($xeGGWrapper) {
83
+ const wrapperEl = $xeGGWrapper.$refs.refElem;
84
+ if (wrapperEl) {
85
+ const wrapperRect = wrapperEl.getBoundingClientRect();
86
+ top += tableRect.top - wrapperRect.top;
87
+ }
88
+ }
89
+ panelStyle = {
90
+ top: toCssUnit(top),
91
+ left: toCssUnit(left)
92
+ };
66
93
  }
67
- else if (left > (tableEl.clientWidth - filterWidth - 1)) {
68
- left = tableEl.clientWidth - filterWidth - 1;
94
+ if (zIndex) {
95
+ panelStyle.zIndex = zIndex;
69
96
  }
70
- if ($xeGGWrapper) {
71
- const wrapperEl = $xeGGWrapper.$refs.refElem;
72
- if (wrapperEl) {
73
- const wrapperRect = wrapperEl.getBoundingClientRect();
74
- top += tableRect.top - wrapperRect.top;
97
+ filterStore.style = panelStyle;
98
+ // 筛选面板是自适应表格高度
99
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
100
+ maxHeight = 0;
101
+ }
102
+ else {
103
+ if (customMaxHeight) {
104
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight;
75
105
  }
76
106
  }
77
- }
78
- const fStys = {
79
- top: toCssUnit(top),
80
- left: toCssUnit(left)
107
+ // 判断面板不能大于表格高度
108
+ filterStore.maxHeight = maxHeight;
81
109
  };
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();
110
+ handleStyle();
111
+ return $xeTable.$nextTick().then(() => {
112
+ handleStyle();
113
+ });
98
114
  }
99
115
  export default {
100
116
  methods: {
@@ -191,14 +207,13 @@ export default {
191
207
  filterStore.visible = false;
192
208
  }
193
209
  else {
194
- const currEl = btnEl || colEl;
195
210
  $xeTable.handleFilterOptions(column);
196
211
  internalData._currFilterParams = params;
197
- filterStore.targetEl = currEl;
212
+ filterStore.targetEl = btnEl;
198
213
  filterStore.style = null;
199
214
  filterStore.visible = true;
200
215
  initStore.filter = true;
201
- $xeTable.$nextTick(() => {
216
+ $xeTable.$nextTick().then(() => {
202
217
  updatePopupStyle($xeTable);
203
218
  });
204
219
  }
@@ -420,13 +420,11 @@ export default {
420
420
  // 处理当前列方向键移动
421
421
  moveCurrentColumn(isLeftArrow, isRightArrow, evnt) {
422
422
  const $xeTable = this;
423
- const reactData = $xeTable;
424
423
  const internalData = $xeTable;
425
- const { currentColumn } = reactData;
426
- const { visibleColumn } = internalData;
424
+ const { currentCol, visibleColumn } = internalData;
427
425
  let targetCol = null;
428
- if (currentColumn) {
429
- const _columnIndex = $xeTable.getVTColumnIndex(currentColumn);
426
+ if (currentCol) {
427
+ const _columnIndex = $xeTable.getVTColumnIndex(currentCol);
430
428
  if (isLeftArrow && _columnIndex > 0) {
431
429
  targetCol = visibleColumn[_columnIndex - 1];
432
430
  }
@@ -82,8 +82,8 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
82
82
  const $xeGrid = $xeTable.$xeGrid;
83
83
  const $xeGantt = $xeTable.$xeGantt;
84
84
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, treeConfig, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps;
85
- const { tableData, tableColumn, dragRow, overflowX, overflowY, currentColumn, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps } = tableReactData;
86
- const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps } = tableInternalData;
85
+ const { tableData, tableColumn, dragRow, overflowX, overflowY, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps, currColFlag } = tableReactData;
86
+ const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps, currentCol } = tableInternalData;
87
87
  const cellOpts = $xeTable.computeCellOpts;
88
88
  const validOpts = $xeTable.computeValidOpts;
89
89
  const checkboxOpts = $xeTable.computeCheckboxOpts;
@@ -436,7 +436,7 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
436
436
  'col--active': editConfig && isEdit && (actived.row === row && (actived.column === column || editOpts.mode === 'row')),
437
437
  'col--valid-error': !!errorValidItem,
438
438
  'show--valid-bg': errorValidItem && validOpts.showErrorBackground,
439
- 'col--current': currentColumn === column
439
+ 'col--current': currColFlag && currentCol === column
440
440
  },
441
441
  getClass(compCellClassName, cellParams),
442
442
  getClass(className, cellParams),
@@ -17,8 +17,8 @@ function renderRows(h, _vm, isOptimizeMode, tableColumn, footerTableData, row, $
17
17
  const $xeGantt = $xeTable.$xeGantt;
18
18
  const { fixedType } = props;
19
19
  const { resizable: allResizable, border, footerCellClassName, footerCellStyle, footerAlign: allFooterAlign, footerSpanMethod, align: allAlign, columnKey, showFooterOverflow: allColumnFooterOverflow } = tableProps;
20
- const { scrollXLoad, scrollYLoad, overflowX, currentColumn, mergeFootFlag } = tableReactData;
21
- const { fullColumnIdData, mergeFooterList, mergeFooterCellMaps, scrollXStore } = tableInternalData;
20
+ const { scrollXLoad, scrollYLoad, overflowX, mergeFootFlag, currColFlag } = tableReactData;
21
+ const { fullColumnIdData, mergeFooterList, mergeFooterCellMaps, scrollXStore, currentCol } = tableInternalData;
22
22
  const virtualXOpts = $xeTable.computeVirtualXOpts;
23
23
  const footerTooltipOpts = $xeTable.computeFooterTooltipOpts;
24
24
  const resizableOpts = $xeTable.resizableOpts;
@@ -155,7 +155,7 @@ function renderRows(h, _vm, isOptimizeMode, tableColumn, footerTableData, row, $
155
155
  'is--pg-left': isCellPaddingLeft,
156
156
  'is--pg-right': isCellPaddingRight,
157
157
  'col--ellipsis': hasEllipsis,
158
- 'col--current': currentColumn === column
158
+ 'col--current': currColFlag && currentCol === column
159
159
  }, getClass(footerClassName, cellParams), getClass(footerCellClassName, cellParams)],
160
160
  attrs,
161
161
  style: footerCellStyle ? (XEUtils.isFunction(footerCellStyle) ? footerCellStyle(cellParams) : footerCellStyle) : undefined,
@@ -17,8 +17,8 @@ function renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, _rowIndex, co
17
17
  const tableInternalData = $xeTable;
18
18
  const { fixedType } = props;
19
19
  const { resizable: allResizable, columnKey, showCustomHeader, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, mouseConfig } = tableProps;
20
- const { currentColumn, dragCol, scrollXLoad, scrollYLoad, overflowX, mergeHeadFlag, tableColumn } = tableReactData;
21
- const { fullColumnIdData, scrollXStore, mergeHeaderList, mergeHeaderCellMaps } = tableInternalData;
20
+ const { dragCol, scrollXLoad, scrollYLoad, overflowX, mergeHeadFlag, tableColumn, currColFlag } = tableReactData;
21
+ const { fullColumnIdData, scrollXStore, mergeHeaderList, mergeHeaderCellMaps, currentCol } = tableInternalData;
22
22
  const virtualXOpts = $xeTable.computeVirtualXOpts;
23
23
  const columnOpts = $xeTable.computeColumnOpts;
24
24
  const columnDragOpts = $xeTable.computeColumnDragOpts;
@@ -172,7 +172,7 @@ function renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, _rowIndex, co
172
172
  'is--filter-active': hasFilter,
173
173
  'is--drag-active': columnOpts.drag && !column.fixed && !isDisabledDrag && (isCrossDrag || isPeerDrag || !column.parentId),
174
174
  'is--drag-disabled': columnOpts.drag && isDisabledDrag,
175
- 'col--current': currentColumn === column
175
+ 'col--current': currColFlag && currentCol === column
176
176
  }, getClass(headerClassName, cellParams), getClass(headerCellClassName, cellParams)],
177
177
  attrs: thAttrs,
178
178
  style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(cellParams) : headerCellStyle) : undefined,
@@ -221,8 +221,8 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
221
221
  const tableInternalData = $xeTable;
222
222
  const { fixedType } = props;
223
223
  const { showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign } = tableProps;
224
- const { currentColumn, overflowX } = tableReactData;
225
- const { fullColumnIdData } = tableInternalData;
224
+ const { overflowX, currColFlag } = tableReactData;
225
+ const { fullColumnIdData, currentCol } = tableInternalData;
226
226
  const headerTooltipOpts = $xeTable.computeHeaderTooltipOpts;
227
227
  const cellOpts = $xeTable.computeCellOpts;
228
228
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
@@ -292,7 +292,7 @@ function renderFilterRows(h, _vm, isOptimizeMode, cols) {
292
292
  'fixed--width': !isAutoCellWidth,
293
293
  'is--padding': isPadding,
294
294
  'is--sortable': column.sortable,
295
- 'col--current': currentColumn === column
295
+ 'col--current': currColFlag && currentCol === column
296
296
  }
297
297
  ],
298
298
  key: colid,