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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-table",
3
- "version": "3.23.5",
3
+ "version": "3.23.7",
4
4
  "description": "A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -65,7 +65,7 @@
65
65
  "vue-i18n": "^8.15.1",
66
66
  "vue-router": "^3.5.1",
67
67
  "vue-template-compiler": "2.6.14",
68
- "vxe-pc-ui": "3.17.28"
68
+ "vxe-pc-ui": "3.18.2"
69
69
  },
70
70
  "vetur": {
71
71
  "tags": "helper/vetur/tags.json",
@@ -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
 
7
7
  import type { VxeTableConstructor, VxeTableDefines, TableReactData, TableInternalData, VxeColumnPropTypes, VxeTablePrivateMethods } from '../../../../types'
@@ -20,15 +20,12 @@ function updatePopupStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethod
20
20
  const { filterStore } = reactData
21
21
  const { elemStore } = internalData
22
22
  const { column, targetEl } = filterStore
23
- if (!column || !targetEl) {
23
+ if (!column) {
24
24
  return $xeTable.$nextTick()
25
25
  }
26
26
  const tableEl = $xeTable.$refs.refElem as HTMLDivElement
27
- const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
28
27
  const filterOpts = $xeTable.computeFilterOpts
29
28
  const { maxHeight: customMaxHeight, transfer, zIndex } = filterOpts
30
- const currEl = targetEl
31
- const tableRect = tableEl.getBoundingClientRect()
32
29
  const filterRender = column ? column.filterRender : null
33
30
  const compConf = filterRender && isEnableConf(filterRender) ? renderer.get(filterRender.name) : null
34
31
 
@@ -41,63 +38,86 @@ function updatePopupStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethod
41
38
  if (!filterWrapperElem) {
42
39
  return $xeTable.$nextTick()
43
40
  }
44
- const btnRect = currEl.getBoundingClientRect()
45
41
  const filterHeadElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-header')
46
42
  const filterFootElem = filterWrapperElem.querySelector<HTMLDivElement>('.vxe-table--filter-footer')
47
- const filterWidth = filterWrapperElem.offsetWidth
48
- const centerWidth = currEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2)
49
- let left = 0
50
- let top = 0
51
- let maxHeight: number = 0
43
+
44
+ /**
45
+ * 是否显示筛选按钮图标
46
+ * 如果不存在图标,则相对单元格居中显示
47
+ */
48
+ const handleStyle = () => {
52
49
  /**
53
50
  * 是否显示筛选按钮图标
54
51
  * 如果不存在图标,则相对单元格居中显示
55
52
  */
56
- if (transfer) {
57
- left = btnRect.left - centerWidth + scrollLeft
58
- top = btnRect.top + currEl.clientHeight + scrollTop
59
- 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))
60
- if (left < 16) {
61
- left = 16
62
- } else if (left > (visibleWidth - filterWidth - 16)) {
63
- left = visibleWidth - filterWidth - 16
53
+ let currEl = targetEl
54
+ if (!targetEl) {
55
+ const headerWrapperElem = getRefElem(elemStore[`${column.fixed || 'main'}-header-wrapper`] || elemStore['main-header-wrapper'])
56
+ const colEl = headerWrapperElem ? headerWrapperElem.querySelector<HTMLDivElement>(`.vxe-header--column.${column.id}`) : null
57
+ if (colEl) {
58
+ currEl = colEl
59
+ }
64
60
  }
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
- } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
72
- left = tableEl.clientWidth - filterWidth - 1
61
+ if (!currEl) {
62
+ return $xeTable.$nextTick()
73
63
  }
74
- if ($xeGGWrapper) {
75
- const wrapperEl = $xeGGWrapper.$refs.refElem as HTMLDivElement
76
- if (wrapperEl) {
77
- const wrapperRect = wrapperEl.getBoundingClientRect()
78
- top += tableRect.top - wrapperRect.top
64
+
65
+ const btnRect = currEl.getBoundingClientRect()
66
+ const tableRect = tableEl.getBoundingClientRect()
67
+ let left = 0
68
+ let top = 0
69
+ let maxHeight = 0
70
+ let panelStyle: Record<string, string | number> = {}
71
+ if (transfer) {
72
+ const ppObj = updatePanelPlacement(currEl, filterWrapperElem, {
73
+ defaultPlacement: 'bottom',
74
+ isMinWidth: false,
75
+ teleportTo: transfer
76
+ })
77
+ panelStyle = ppObj.style
78
+ } else {
79
+ const filterWidth = filterWrapperElem.offsetWidth
80
+ const centerWidth = targetEl ? filterWidth / 2 : ((filterWidth - column.renderWidth) / 2)
81
+ maxHeight = Math.max(40, tableEl.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14)
82
+ left = btnRect.left - tableRect.left - centerWidth
83
+ top = btnRect.top - tableRect.top + currEl.clientHeight
84
+ if (left < 1) {
85
+ left = 1
86
+ } else if (left > (tableEl.clientWidth - filterWidth - 1)) {
87
+ left = tableEl.clientWidth - filterWidth - 1
88
+ }
89
+ if ($xeGGWrapper) {
90
+ const wrapperEl = $xeGGWrapper.$refs.refElem as HTMLDivElement
91
+ if (wrapperEl) {
92
+ const wrapperRect = wrapperEl.getBoundingClientRect()
93
+ top += tableRect.top - wrapperRect.top
94
+ }
95
+ }
96
+ panelStyle = {
97
+ top: toCssUnit(top),
98
+ left: toCssUnit(left)
79
99
  }
80
100
  }
81
- }
82
- const fStys: Record<string, any> = {
83
- top: toCssUnit(top),
84
- left: toCssUnit(left)
85
- }
86
- if (zIndex) {
87
- fStys.zIndex = zIndex
88
- }
89
- filterStore.style = fStys
90
- // 筛选面板是自适应表格高度
91
- if (compConf ? !compConf.tableFilterAutoHeight : false) {
92
- maxHeight = 0
93
- } else {
94
- if (customMaxHeight) {
95
- maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
101
+
102
+ if (zIndex) {
103
+ panelStyle.zIndex = zIndex
104
+ }
105
+ filterStore.style = panelStyle
106
+ // 筛选面板是自适应表格高度
107
+ if (compConf ? !compConf.tableFilterAutoHeight : false) {
108
+ maxHeight = 0
109
+ } else {
110
+ if (customMaxHeight) {
111
+ maxHeight = customMaxHeight > maxHeight ? maxHeight : customMaxHeight
112
+ }
96
113
  }
114
+ // 判断面板不能大于表格高度
115
+ filterStore.maxHeight = maxHeight
97
116
  }
98
- // 判断面板不能大于表格高度
99
- filterStore.maxHeight = maxHeight
100
- return $xeTable.$nextTick()
117
+ handleStyle()
118
+ return $xeTable.$nextTick().then(() => {
119
+ handleStyle()
120
+ })
101
121
  }
102
122
 
103
123
  export default {
@@ -196,14 +216,13 @@ export default {
196
216
  if (filterStore.column === column && filterStore.visible) {
197
217
  filterStore.visible = false
198
218
  } else {
199
- const currEl = btnEl || colEl
200
219
  $xeTable.handleFilterOptions(column)
201
220
  internalData._currFilterParams = params
202
- filterStore.targetEl = currEl
221
+ filterStore.targetEl = btnEl
203
222
  filterStore.style = null
204
223
  filterStore.visible = true
205
224
  initStore.filter = true
206
- $xeTable.$nextTick(() => {
225
+ $xeTable.$nextTick().then(() => {
207
226
  updatePopupStyle($xeTable)
208
227
  })
209
228
  }
@@ -403,14 +403,12 @@ export default {
403
403
  // 处理当前列方向键移动
404
404
  moveCurrentColumn (isLeftArrow: boolean, isRightArrow: boolean, evnt: any) {
405
405
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
406
- const reactData = $xeTable as unknown as TableReactData
407
406
  const internalData = $xeTable as unknown as TableInternalData
408
407
 
409
- const { currentColumn } = reactData
410
- const { visibleColumn } = internalData
408
+ const { currentCol, visibleColumn } = internalData
411
409
  let targetCol: VxeTableDefines.ColumnInfo | null = null
412
- if (currentColumn) {
413
- const _columnIndex = $xeTable.getVTColumnIndex(currentColumn)
410
+ if (currentCol) {
411
+ const _columnIndex = $xeTable.getVTColumnIndex(currentCol)
414
412
  if (isLeftArrow && _columnIndex > 0) {
415
413
  targetCol = visibleColumn[_columnIndex - 1]
416
414
  } else if (isRightArrow && _columnIndex < visibleColumn.length - 1) {
@@ -108,8 +108,8 @@ function renderTdColumn (
108
108
  const $xeGantt = $xeTable.$xeGantt
109
109
 
110
110
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, treeConfig, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps
111
- const { tableData, tableColumn, dragRow, overflowX, overflowY, currentColumn, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps } = tableReactData
112
- const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps } = tableInternalData
111
+ const { tableData, tableColumn, dragRow, overflowX, overflowY, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps, currColFlag } = tableReactData
112
+ const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps, currentCol } = tableInternalData
113
113
  const cellOpts = $xeTable.computeCellOpts
114
114
  const validOpts = $xeTable.computeValidOpts
115
115
  const checkboxOpts = $xeTable.computeCheckboxOpts
@@ -483,7 +483,7 @@ function renderTdColumn (
483
483
  'col--active': editConfig && isEdit && (actived.row === row && (actived.column === column || editOpts.mode === 'row')),
484
484
  'col--valid-error': !!errorValidItem,
485
485
  'show--valid-bg': errorValidItem && validOpts.showErrorBackground,
486
- 'col--current': currentColumn === column
486
+ 'col--current': currColFlag && currentCol === column
487
487
  },
488
488
  getClass(compCellClassName, cellParams),
489
489
  getClass(className, cellParams),
@@ -24,8 +24,8 @@ function renderRows (h: CreateElement, _vm: any, isOptimizeMode: boolean, tableC
24
24
 
25
25
  const { fixedType } = props
26
26
  const { resizable: allResizable, border, footerCellClassName, footerCellStyle, footerAlign: allFooterAlign, footerSpanMethod, align: allAlign, columnKey, showFooterOverflow: allColumnFooterOverflow } = tableProps
27
- const { scrollXLoad, scrollYLoad, overflowX, currentColumn, mergeFootFlag } = tableReactData
28
- const { fullColumnIdData, mergeFooterList, mergeFooterCellMaps, scrollXStore } = tableInternalData
27
+ const { scrollXLoad, scrollYLoad, overflowX, mergeFootFlag, currColFlag } = tableReactData
28
+ const { fullColumnIdData, mergeFooterList, mergeFooterCellMaps, scrollXStore, currentCol } = tableInternalData
29
29
  const virtualXOpts = $xeTable.computeVirtualXOpts
30
30
  const footerTooltipOpts = $xeTable.computeFooterTooltipOpts
31
31
  const resizableOpts = $xeTable.resizableOpts
@@ -167,7 +167,7 @@ function renderRows (h: CreateElement, _vm: any, isOptimizeMode: boolean, tableC
167
167
  'is--pg-left': isCellPaddingLeft,
168
168
  'is--pg-right': isCellPaddingRight,
169
169
  'col--ellipsis': hasEllipsis,
170
- 'col--current': currentColumn === column
170
+ 'col--current': currColFlag && currentCol === column
171
171
  }, getClass(footerClassName, cellParams), getClass(footerCellClassName, cellParams)],
172
172
  attrs,
173
173
  style: footerCellStyle ? (XEUtils.isFunction(footerCellStyle) ? footerCellStyle(cellParams) : footerCellStyle) as VxeComponentStyleType : undefined,
@@ -24,8 +24,8 @@ function renderRows (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMod
24
24
 
25
25
  const { fixedType } = props
26
26
  const { resizable: allResizable, columnKey, showCustomHeader, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, mouseConfig } = tableProps
27
- const { currentColumn, dragCol, scrollXLoad, scrollYLoad, overflowX, mergeHeadFlag, tableColumn } = tableReactData
28
- const { fullColumnIdData, scrollXStore, mergeHeaderList, mergeHeaderCellMaps } = tableInternalData
27
+ const { dragCol, scrollXLoad, scrollYLoad, overflowX, mergeHeadFlag, tableColumn, currColFlag } = tableReactData
28
+ const { fullColumnIdData, scrollXStore, mergeHeaderList, mergeHeaderCellMaps, currentCol } = tableInternalData
29
29
  const virtualXOpts = $xeTable.computeVirtualXOpts
30
30
  const columnOpts = $xeTable.computeColumnOpts
31
31
  const columnDragOpts = $xeTable.computeColumnDragOpts
@@ -186,7 +186,7 @@ function renderRows (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMod
186
186
  'is--filter-active': hasFilter,
187
187
  'is--drag-active': columnOpts.drag && !column.fixed && !isDisabledDrag && (isCrossDrag || isPeerDrag || !column.parentId),
188
188
  'is--drag-disabled': columnOpts.drag && isDisabledDrag,
189
- 'col--current': currentColumn === column
189
+ 'col--current': currColFlag && currentCol === column
190
190
  }, getClass(headerClassName, cellParams), getClass(headerCellClassName, cellParams)],
191
191
  attrs: thAttrs,
192
192
  style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(cellParams) : headerCellStyle) as VxeComponentStyleType : undefined,
@@ -237,8 +237,8 @@ function renderFilterRows (h: CreateElement, _vm: any, isOptimizeMode: boolean,
237
237
 
238
238
  const { fixedType } = props
239
239
  const { showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign } = tableProps
240
- const { currentColumn, overflowX } = tableReactData
241
- const { fullColumnIdData } = tableInternalData
240
+ const { overflowX, currColFlag } = tableReactData
241
+ const { fullColumnIdData, currentCol } = tableInternalData
242
242
  const headerTooltipOpts = $xeTable.computeHeaderTooltipOpts
243
243
  const cellOpts = $xeTable.computeCellOpts
244
244
  const defaultRowHeight = $xeTable.computeDefaultRowHeight
@@ -313,7 +313,7 @@ function renderFilterRows (h: CreateElement, _vm: any, isOptimizeMode: boolean,
313
313
  'fixed--width': !isAutoCellWidth,
314
314
  'is--padding': isPadding,
315
315
  'is--sortable': column.sortable,
316
- 'col--current': currentColumn === column
316
+ 'col--current': currColFlag && currentCol === column
317
317
  }
318
318
  ],
319
319
  key: colid,