vxe-table 3.15.7 → 3.15.9

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 (49) 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/render/index.js +16 -3
  6. package/es/table/src/footer.js +11 -15
  7. package/es/table/src/header.js +20 -11
  8. package/es/table/src/methods.js +9 -5
  9. package/es/table/style.css +12 -5
  10. package/es/table/style.min.css +1 -1
  11. package/es/ui/index.js +3 -3
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-table/style.css +12 -5
  14. package/es/vxe-table/style.min.css +1 -1
  15. package/lib/index.css +1 -1
  16. package/lib/index.min.css +1 -1
  17. package/lib/index.umd.js +46 -37
  18. package/lib/index.umd.min.js +1 -1
  19. package/lib/style.css +1 -1
  20. package/lib/style.min.css +1 -1
  21. package/lib/table/render/index.js +17 -3
  22. package/lib/table/render/index.min.js +1 -1
  23. package/lib/table/src/footer.js +10 -15
  24. package/lib/table/src/footer.min.js +1 -1
  25. package/lib/table/src/header.js +5 -10
  26. package/lib/table/src/header.min.js +1 -1
  27. package/lib/table/src/methods.js +10 -5
  28. package/lib/table/src/methods.min.js +1 -1
  29. package/lib/table/style/style.css +12 -5
  30. package/lib/table/style/style.min.css +1 -1
  31. package/lib/ui/index.js +3 -3
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/log.js +1 -1
  34. package/lib/ui/src/log.min.js +1 -1
  35. package/lib/vxe-table/style/style.css +12 -5
  36. package/lib/vxe-table/style/style.min.css +1 -1
  37. package/package.json +2 -2
  38. package/packages/table/render/index.ts +17 -3
  39. package/packages/table/src/footer.ts +11 -15
  40. package/packages/table/src/header.ts +20 -11
  41. package/packages/table/src/methods.ts +11 -5
  42. package/packages/ui/index.ts +2 -2
  43. package/styles/components/table.scss +30 -17
  44. /package/es/{iconfont.1745290222894.ttf → iconfont.1745458119157.ttf} +0 -0
  45. /package/es/{iconfont.1745290222894.woff → iconfont.1745458119157.woff} +0 -0
  46. /package/es/{iconfont.1745290222894.woff2 → iconfont.1745458119157.woff2} +0 -0
  47. /package/lib/{iconfont.1745290222894.ttf → iconfont.1745458119157.ttf} +0 -0
  48. /package/lib/{iconfont.1745290222894.woff → iconfont.1745458119157.woff} +0 -0
  49. /package/lib/{iconfont.1745290222894.woff2 → iconfont.1745458119157.woff2} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-table",
3
- "version": "3.15.7",
3
+ "version": "3.15.9",
4
4
  "description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、拖拽排序,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -28,7 +28,7 @@
28
28
  "style": "lib/style.css",
29
29
  "typings": "types/index.d.ts",
30
30
  "dependencies": {
31
- "vxe-pc-ui": "^3.5.27"
31
+ "vxe-pc-ui": "^3.5.29"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@babel/plugin-transform-modules-commonjs": "^7.25.7",
@@ -360,7 +360,18 @@ function defaultEditRender (h: CreateElement, renderOpts: VxeGlobalRendererHandl
360
360
  ]
361
361
  }
362
362
 
363
- function radioAndCheckboxEditRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
363
+ function checkboxEditRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
364
+ const { row, column } = params
365
+ const cellValue = getCellValue(row, column)
366
+ return [
367
+ h(getDefaultComponent(renderOpts), {
368
+ props: getCellEditProps(renderOpts, params, cellValue),
369
+ on: getEditOns(renderOpts, params)
370
+ })
371
+ ]
372
+ }
373
+
374
+ function radioAndCheckboxGroupEditRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
364
375
  const { options } = renderOpts
365
376
  const { row, column } = params
366
377
  const cellValue = getCellValue(row, column)
@@ -957,10 +968,13 @@ renderer.mixin({
957
968
  }
958
969
  },
959
970
  VxeRadioGroup: {
960
- renderTableDefault: radioAndCheckboxEditRender
971
+ renderTableDefault: radioAndCheckboxGroupEditRender
972
+ },
973
+ VxeCheckbox: {
974
+ renderTableDefault: checkboxEditRender
961
975
  },
962
976
  VxeCheckboxGroup: {
963
- renderTableDefault: radioAndCheckboxEditRender
977
+ renderTableDefault: radioAndCheckboxGroupEditRender
964
978
  },
965
979
  VxeSwitch: {
966
980
  tableAutoFocus: 'button',
@@ -11,7 +11,7 @@ const renderType = 'footer'
11
11
 
12
12
  const { renderer, renderEmptyElement } = VxeUI
13
13
 
14
- function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) {
14
+ function renderRows (h: CreateElement, _vm: any, isOptimizeMode: boolean, tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) {
15
15
  const props = _vm
16
16
  const $xeTable = _vm.$parent as VxeTableConstructor & VxeTablePrivateMethods
17
17
  const tableProps = $xeTable
@@ -45,10 +45,10 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
45
45
  const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding
46
46
  const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow
47
47
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
48
- let showEllipsis = footOverflow === 'ellipsis'
48
+ const showEllipsis = footOverflow === 'ellipsis'
49
49
  const showTitle = footOverflow === 'title'
50
50
  const showTooltip = footOverflow === true || footOverflow === 'tooltip'
51
- let hasEllipsis = showTitle || showTooltip || showEllipsis
51
+ const hasEllipsis = showTitle || showTooltip || showEllipsis
52
52
  const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable))
53
53
  const attrs: any = { colid }
54
54
  const tfOns: any = {}
@@ -74,10 +74,6 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
74
74
  type: renderType,
75
75
  data: footerTableData
76
76
  }
77
- // 纵向虚拟滚动不支持动态行高
78
- if (scrollXLoad && !hasEllipsis) {
79
- showEllipsis = hasEllipsis = true
80
- }
81
77
  if (showTitle || showTooltip || showAllTip) {
82
78
  tfOns.mouseenter = (evnt: MouseEvent) => {
83
79
  if (showTitle) {
@@ -135,7 +131,7 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
135
131
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
136
132
 
137
133
  let isVNPreEmptyStatus = false
138
- if (!isMergeCell) {
134
+ if (isOptimizeMode && !isMergeCell) {
139
135
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
140
136
  isVNPreEmptyStatus = true
141
137
  }
@@ -199,7 +195,7 @@ function renderRows (h: CreateElement, _vm: any, tableColumn: VxeTableDefines.Co
199
195
  })
200
196
  }
201
197
 
202
- function renderHeads (h: CreateElement, _vm: any, renderColumnList: VxeTableDefines.ColumnInfo[]) {
198
+ function renderHeads (h: CreateElement, _vm: any, isOptimizeMode: boolean, renderColumnList: VxeTableDefines.ColumnInfo[]) {
203
199
  const props = _vm
204
200
  const $xeTable = _vm.$parent as VxeTableConstructor & VxeTablePrivateMethods
205
201
  const tableProps = $xeTable
@@ -228,7 +224,7 @@ function renderHeads (h: CreateElement, _vm: any, renderColumnList: VxeTableDefi
228
224
  ],
229
225
  style: footerRowStyle ? (XEUtils.isFunction(footerRowStyle) ? footerRowStyle(rowParams) : footerRowStyle) as VxeComponentStyleType : undefined
230
226
  }
231
- }, renderRows(h, _vm, renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
227
+ }, renderRows(h, _vm, isOptimizeMode, renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
232
228
  }
233
229
  return h('tr', {
234
230
  key: $rowIndex,
@@ -237,7 +233,7 @@ function renderHeads (h: CreateElement, _vm: any, renderColumnList: VxeTableDefi
237
233
  footerRowClassName ? XEUtils.isFunction(footerRowClassName) ? footerRowClassName(rowParams) : footerRowClassName : ''
238
234
  ],
239
235
  style: footerRowStyle ? (XEUtils.isFunction(footerRowStyle) ? footerRowStyle(rowParams) : footerRowStyle) as VxeComponentStyleType : undefined
240
- }, renderRows(h, _vm, renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
236
+ }, renderRows(h, _vm, isOptimizeMode, renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
241
237
  })
242
238
  }
243
239
 
@@ -304,12 +300,12 @@ export default {
304
300
  const { fixedType, fixedColumn, tableColumn } = props
305
301
  const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = tableProps
306
302
  const { visibleColumn, fullColumnIdData } = tableInternalData
307
- const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
303
+ const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData
308
304
 
309
305
  let renderColumnList = tableColumn as VxeTableDefines.ColumnInfo[]
310
306
  let isOptimizeMode = false
311
307
  // 如果是使用优化模式
312
- if (scrollXLoad || scrollYLoad || allColumnFooterOverflow) {
308
+ if (scrollXLoad && allColumnFooterOverflow) {
313
309
  if (spanMethod || footerSpanMethod) {
314
310
  // 如果不支持优化模式
315
311
  } else {
@@ -317,7 +313,7 @@ export default {
317
313
  }
318
314
  }
319
315
 
320
- if (!isColLoading && (fixedType || !overflowX)) {
316
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
321
317
  renderColumnList = visibleColumn
322
318
  }
323
319
 
@@ -405,7 +401,7 @@ export default {
405
401
  */
406
402
  h('tfoot', {
407
403
  ref: 'refFooterTFoot'
408
- }, renderHeads(h, this, renderColumnList))
404
+ }, renderHeads(h, this, isOptimizeMode, renderColumnList))
409
405
  ])
410
406
  ])
411
407
  ])
@@ -42,10 +42,10 @@ const renderRows = (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMode
42
42
  const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding
43
43
  const headOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow
44
44
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
45
- let showEllipsis = headOverflow === 'ellipsis'
45
+ const showEllipsis = headOverflow === 'ellipsis'
46
46
  const showTitle = headOverflow === 'title'
47
47
  const showTooltip = headOverflow === true || headOverflow === 'tooltip'
48
- let hasEllipsis = showTitle || showTooltip || showEllipsis
48
+ const hasEllipsis = showTitle || showTooltip || showEllipsis
49
49
  let hasFilter = false
50
50
  let firstFilterOption: VxeColumnPropTypes.FilterItem | null = null
51
51
  if (filters) {
@@ -54,7 +54,20 @@ const renderRows = (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMode
54
54
  }
55
55
  const columnIndex = colRest.index
56
56
  const _columnIndex = colRest._index
57
- const cellParams = { $table: $xeTable, $grid: $xeGrid, $rowIndex, column, columnIndex, $columnIndex, _columnIndex, firstFilterOption, fixed: fixedType, type: cellType, isHidden: fixedHiddenColumn, hasFilter }
57
+ const cellParams = {
58
+ $table: $xeTable,
59
+ $grid: $xeGrid,
60
+ $rowIndex,
61
+ column,
62
+ columnIndex,
63
+ $columnIndex,
64
+ _columnIndex,
65
+ firstFilterOption,
66
+ fixed: fixedType,
67
+ type: cellType,
68
+ isHidden: fixedHiddenColumn,
69
+ hasFilter
70
+ }
58
71
  const thAttrs: Record<string, string | number | null> = {
59
72
  colid,
60
73
  colspan: column.colSpan > 1 ? column.colSpan : null,
@@ -64,10 +77,6 @@ const renderRows = (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMode
64
77
  click: (evnt: MouseEvent) => $xeTable.triggerHeaderCellClickEvent(evnt, cellParams),
65
78
  dblclick: (evnt: MouseEvent) => $xeTable.triggerHeaderCellDblclickEvent(evnt, cellParams)
66
79
  }
67
- // 虚拟滚动不支持动态高度
68
- if (scrollXLoad && !hasEllipsis) {
69
- showEllipsis = hasEllipsis = true
70
- }
71
80
  const isColDragCell = columnOpts.drag && columnDragOpts.trigger === 'cell'
72
81
  let isDisabledDrag = false
73
82
  if (isColDragCell) {
@@ -91,7 +100,7 @@ const renderRows = (h: CreateElement, _vm: any, isGroup: boolean, isOptimizeMode
91
100
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
92
101
 
93
102
  let isVNPreEmptyStatus = false
94
- if (!isGroup) {
103
+ if (isOptimizeMode && !isGroup) {
95
104
  if (!dragCol || dragCol.id !== colid) {
96
105
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
97
106
  isVNPreEmptyStatus = true
@@ -274,7 +283,7 @@ export default {
274
283
  const { headerColumn } = this
275
284
 
276
285
  const { mouseConfig, showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps
277
- const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
286
+ const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData
278
287
  const { visibleColumn, fullColumnIdData } = tableInternalData
279
288
 
280
289
  const mouseOpts = $xeTable.computeMouseOpts
@@ -286,7 +295,7 @@ export default {
286
295
  renderColumnList = visibleColumn
287
296
  } else {
288
297
  // 如果是使用优化模式
289
- if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
298
+ if (scrollXLoad && allColumnHeaderOverflow) {
290
299
  if (spanMethod || footerSpanMethod) {
291
300
  // 如果不支持优化模式
292
301
  } else {
@@ -294,7 +303,7 @@ export default {
294
303
  }
295
304
  }
296
305
 
297
- if (!isColLoading && (fixedType || !overflowX)) {
306
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
298
307
  renderColumnList = visibleColumn
299
308
  }
300
309
 
@@ -861,7 +861,7 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
861
861
  const internalData = $xeTable as unknown as TableInternalData
862
862
 
863
863
  const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
864
- const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData
864
+ const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn, isColLoading } = reactData
865
865
  const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
866
866
  const el = $xeTable.$refs.refElem as HTMLDivElement
867
867
  if (!el) {
@@ -977,7 +977,7 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
977
977
  renderColumnList = visibleColumn
978
978
  } else {
979
979
  // 如果是使用优化模式
980
- if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
980
+ if (scrollXLoad && allColumnHeaderOverflow) {
981
981
  if (spanMethod || footerSpanMethod) {
982
982
  // 如果不支持优化模式
983
983
  } else {
@@ -985,8 +985,11 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
985
985
  }
986
986
  }
987
987
 
988
- if (fixedType) {
988
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
989
989
  renderColumnList = visibleColumn
990
+ }
991
+
992
+ if (fixedType) {
990
993
  // 如果是使用优化模式
991
994
  if (isOptimizeMode) {
992
995
  renderColumnList = fixedColumn || []
@@ -1083,7 +1086,7 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
1083
1086
  let renderColumnList = tableColumn
1084
1087
  let isOptimizeMode = false
1085
1088
  // 如果是使用优化模式
1086
- if (scrollXLoad || scrollYLoad || allColumnFooterOverflow) {
1089
+ if (scrollXLoad && allColumnFooterOverflow) {
1087
1090
  if (spanMethod || footerSpanMethod) {
1088
1091
  // 如果不支持优化模式
1089
1092
  } else {
@@ -1091,8 +1094,11 @@ function updateStyle ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
1091
1094
  }
1092
1095
  }
1093
1096
 
1094
- if (fixedType) {
1097
+ if (!isOptimizeMode) {
1095
1098
  renderColumnList = visibleColumn
1099
+ }
1100
+
1101
+ if (fixedType) {
1096
1102
  if (isOptimizeMode) {
1097
1103
  renderColumnList = fixedColumn || []
1098
1104
  }
@@ -220,8 +220,8 @@ VxeUI.setConfig({
220
220
  oSize: 2
221
221
  },
222
222
  scrollbarConfig: {
223
- // width: 0,
224
- // height: 0
223
+ width: 14,
224
+ height: 14
225
225
  }
226
226
  },
227
227
  // export: {
@@ -990,12 +990,6 @@
990
990
  position: relative;
991
991
  line-height: var(--vxe-ui-table-row-line-height);
992
992
  text-align: left;
993
- &.col--current {
994
- background-color: var(--vxe-ui-table-column-current-background-color);
995
- // .vxe-cell--tree-btn {
996
- // background-color: var(--vxe-ui-table-column-current-background-color);
997
- // }
998
- }
999
993
  &.col--center {
1000
994
  text-align: center;
1001
995
  & > .vxe-cell {
@@ -1009,17 +1003,6 @@
1009
1003
  }
1010
1004
  }
1011
1005
  }
1012
- // &.is--tree-line {
1013
- // .vxe-header--column,
1014
- // .vxe-body--column,
1015
- // .vxe-footer--column {
1016
- // &.col--current {
1017
- // .vxe-cell--tree-btn {
1018
- // background-color: var(--vxe-ui-table-column-current-background-color);
1019
- // }
1020
- // }
1021
- // }
1022
- // }
1023
1006
  .vxe-header--column,
1024
1007
  .vxe-footer--column {
1025
1008
  &.col--ellipsis {
@@ -1043,6 +1026,36 @@
1043
1026
  background-color: var(--vxe-ui-table-row-striped-background-color);
1044
1027
  }
1045
1028
  }
1029
+ }
1030
+
1031
+ // 列高亮
1032
+ .vxe-header--column,
1033
+ .vxe-body--column,
1034
+ .vxe-footer--column {
1035
+ position: relative;
1036
+ line-height: var(--vxe-ui-table-row-line-height);
1037
+ text-align: left;
1038
+ &.col--current {
1039
+ background-color: var(--vxe-ui-table-column-current-background-color);
1040
+ // .vxe-cell--tree-btn {
1041
+ // background-color: var(--vxe-ui-table-column-current-background-color);
1042
+ // }
1043
+ }
1044
+ }
1045
+ // &.is--tree-line {
1046
+ // .vxe-header--column,
1047
+ // .vxe-body--column,
1048
+ // .vxe-footer--column {
1049
+ // &.col--current {
1050
+ // .vxe-cell--tree-btn {
1051
+ // background-color: var(--vxe-ui-table-column-current-background-color);
1052
+ // }
1053
+ // }
1054
+ // }
1055
+ // }
1056
+
1057
+ // 行高亮
1058
+ .vxe-body--row {
1046
1059
  &.row--radio {
1047
1060
  & > .vxe-body--column {
1048
1061
  background-color: var(--vxe-ui-table-row-radio-checked-background-color);