vxe-table 4.13.7 → 4.13.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 +13 -3
  6. package/es/table/src/footer.js +11 -15
  7. package/es/table/src/header.js +20 -11
  8. package/es/table/src/table.js +6 -4
  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 +40 -36
  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 +14 -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/table.js +4 -4
  28. package/lib/table/src/table.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 +21 -11
  41. package/packages/table/src/table.ts +7 -4
  42. package/packages/ui/index.ts +2 -2
  43. package/styles/components/table.scss +30 -17
  44. /package/es/{iconfont.1745290253213.ttf → iconfont.1745458144424.ttf} +0 -0
  45. /package/es/{iconfont.1745290253213.woff → iconfont.1745458144424.woff} +0 -0
  46. /package/es/{iconfont.1745290253213.woff2 → iconfont.1745458144424.woff2} +0 -0
  47. /package/lib/{iconfont.1745290253213.ttf → iconfont.1745458144424.ttf} +0 -0
  48. /package/lib/{iconfont.1745290253213.woff → iconfont.1745458144424.woff} +0 -0
  49. /package/lib/{iconfont.1745290253213.woff2 → iconfont.1745458144424.woff2} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-table",
3
- "version": "4.13.7",
3
+ "version": "4.13.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": "^4.5.27"
31
+ "vxe-pc-ui": "^4.5.29"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/resize-observer-browser": "^0.1.11",
@@ -358,7 +358,18 @@ function defaultEditRender (renderOpts: VxeGlobalRendererHandles.RenderTableEdit
358
358
  ]
359
359
  }
360
360
 
361
- function radioAndCheckboxEditRender (renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
361
+ function checkboxEditRender (renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
362
+ const { row, column } = params
363
+ const cellValue = getCellValue(row, column)
364
+ return [
365
+ h(getDefaultComponent(renderOpts), {
366
+ ...getCellEditProps(renderOpts, params, cellValue),
367
+ ...getEditOns(renderOpts, params)
368
+ })
369
+ ]
370
+ }
371
+
372
+ function radioAndCheckboxGroupEditRender (renderOpts: VxeGlobalRendererHandles.RenderTableEditOptions, params: VxeGlobalRendererHandles.RenderEditParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
362
373
  const { options } = renderOpts
363
374
  const { row, column } = params
364
375
  const cellValue = getCellValue(row, column)
@@ -948,10 +959,13 @@ renderer.mixin({
948
959
  }
949
960
  },
950
961
  VxeRadioGroup: {
951
- renderTableDefault: radioAndCheckboxEditRender
962
+ renderTableDefault: radioAndCheckboxGroupEditRender
963
+ },
964
+ VxeCheckbox: {
965
+ renderTableDefault: checkboxEditRender
952
966
  },
953
967
  VxeCheckboxGroup: {
954
- renderTableDefault: radioAndCheckboxEditRender
968
+ renderTableDefault: radioAndCheckboxGroupEditRender
955
969
  },
956
970
  VxeSwitch: {
957
971
  tableAutoFocus: 'button',
@@ -43,7 +43,7 @@ export default defineComponent({
43
43
  const refFooterTFoot = ref() as Ref<HTMLTableSectionElement>
44
44
  const refFooterXSpace = ref() as Ref<HTMLDivElement>
45
45
 
46
- const renderRows = (tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) => {
46
+ const renderRows = (isOptimizeMode: boolean, tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) => {
47
47
  const $xeGrid = $xeTable.xeGrid
48
48
 
49
49
  const { fixedType } = props
@@ -72,10 +72,10 @@ export default defineComponent({
72
72
  const isPadding = XEUtils.isBoolean(footerCellOpts.padding) ? footerCellOpts.padding : cellOpts.padding
73
73
  const footOverflow = XEUtils.eqNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow
74
74
  const footAlign = footerAlign || (compConf ? compConf.tableFooterCellAlign : '') || allFooterAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
75
- let showEllipsis = footOverflow === 'ellipsis'
75
+ const showEllipsis = footOverflow === 'ellipsis'
76
76
  const showTitle = footOverflow === 'title'
77
77
  const showTooltip = footOverflow === true || footOverflow === 'tooltip'
78
- let hasEllipsis = showTitle || showTooltip || showEllipsis
78
+ const hasEllipsis = showTitle || showTooltip || showEllipsis
79
79
  const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable))
80
80
  const attrs: any = { colid }
81
81
  const tfOns: any = {}
@@ -101,10 +101,6 @@ export default defineComponent({
101
101
  type: renderType,
102
102
  data: footerTableData
103
103
  }
104
- // 纵向虚拟滚动不支持动态行高
105
- if (scrollXLoad && !hasEllipsis) {
106
- showEllipsis = hasEllipsis = true
107
- }
108
104
  if (showTitle || showTooltip || showAllTip) {
109
105
  tfOns.onMouseenter = (evnt: MouseEvent) => {
110
106
  if (showTitle) {
@@ -162,7 +158,7 @@ export default defineComponent({
162
158
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
163
159
 
164
160
  let isVNPreEmptyStatus = false
165
- if (!isMergeCell) {
161
+ if (isOptimizeMode && !isMergeCell) {
166
162
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
167
163
  isVNPreEmptyStatus = true
168
164
  }
@@ -222,7 +218,7 @@ export default defineComponent({
222
218
  })
223
219
  }
224
220
 
225
- const renderHeads = (renderColumnList: VxeTableDefines.ColumnInfo[]) => {
221
+ const renderHeads = (isOptimizeMode: boolean, renderColumnList: VxeTableDefines.ColumnInfo[]) => {
226
222
  const { fixedType, footerTableData } = props
227
223
  const { footerRowClassName, footerRowStyle } = tableProps
228
224
  const { isColLoading, isDragColMove } = tableReactData
@@ -244,7 +240,7 @@ export default defineComponent({
244
240
  ],
245
241
  style: footerRowStyle ? (XEUtils.isFunction(footerRowStyle) ? footerRowStyle(rowParams) : footerRowStyle) : null
246
242
  }, {
247
- default: () => renderRows(renderColumnList, footerTableData, row, $rowIndex, _rowIndex)
243
+ default: () => renderRows(isOptimizeMode, renderColumnList, footerTableData, row, $rowIndex, _rowIndex)
248
244
  })
249
245
  }
250
246
  return h('tr', {
@@ -254,7 +250,7 @@ export default defineComponent({
254
250
  footerRowClassName ? XEUtils.isFunction(footerRowClassName) ? footerRowClassName(rowParams) : footerRowClassName : ''
255
251
  ],
256
252
  style: footerRowStyle ? (XEUtils.isFunction(footerRowStyle) ? footerRowStyle(rowParams) : footerRowStyle) : null
257
- }, renderRows(renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
253
+ }, renderRows(isOptimizeMode, renderColumnList, footerTableData, row, $rowIndex, _rowIndex))
258
254
  })
259
255
  }
260
256
 
@@ -262,12 +258,12 @@ export default defineComponent({
262
258
  const { fixedType, fixedColumn, tableColumn } = props
263
259
  const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = tableProps
264
260
  const { visibleColumn, fullColumnIdData } = tableInternalData
265
- const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
261
+ const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData
266
262
 
267
263
  let renderColumnList = tableColumn
268
264
  let isOptimizeMode = false
269
265
  // 如果是使用优化模式
270
- if (scrollXLoad || scrollYLoad || allColumnFooterOverflow) {
266
+ if (scrollXLoad && allColumnFooterOverflow) {
271
267
  if (spanMethod || footerSpanMethod) {
272
268
  // 如果不支持优化模式
273
269
  } else {
@@ -275,7 +271,7 @@ export default defineComponent({
275
271
  }
276
272
  }
277
273
 
278
- if (!isColLoading && (fixedType || !overflowX)) {
274
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
279
275
  renderColumnList = visibleColumn
280
276
  }
281
277
 
@@ -355,7 +351,7 @@ export default defineComponent({
355
351
  */
356
352
  h('tfoot', {
357
353
  ref: refFooterTFoot
358
- }, renderHeads(renderColumnList))
354
+ }, renderHeads(isOptimizeMode, renderColumnList))
359
355
  ])
360
356
  ])
361
357
  ])
@@ -57,6 +57,7 @@ export default defineComponent({
57
57
  const headerCellOpts = computeHeaderCellOpts.value
58
58
  const currCellHeight = getCellHeight(headerCellOpts.height || cellOpts.height) || defaultRowHeight
59
59
  const { disabledMethod: dragDisabledMethod, isCrossDrag, isPeerDrag } = columnDragOpts
60
+
60
61
  return cols.map((column, $columnIndex) => {
61
62
  const { type, showHeaderOverflow, headerAlign, align, filters, headerClassName, editRender, cellRender } = column
62
63
  const colid = column.id
@@ -68,10 +69,10 @@ export default defineComponent({
68
69
  const isPadding = XEUtils.isBoolean(headerCellOpts.padding) ? headerCellOpts.padding : cellOpts.padding
69
70
  const headOverflow = XEUtils.eqNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow
70
71
  const headAlign = headerAlign || (compConf ? compConf.tableHeaderCellAlign : '') || allHeaderAlign || align || (compConf ? compConf.tableCellAlign : '') || allAlign
71
- let showEllipsis = headOverflow === 'ellipsis'
72
+ const showEllipsis = headOverflow === 'ellipsis'
72
73
  const showTitle = headOverflow === 'title'
73
74
  const showTooltip = headOverflow === true || headOverflow === 'tooltip'
74
- let hasEllipsis = showTitle || showTooltip || showEllipsis
75
+ const hasEllipsis = showTitle || showTooltip || showEllipsis
75
76
  let hasFilter = false
76
77
  let firstFilterOption: VxeColumnPropTypes.FilterItem | null = null
77
78
  if (filters) {
@@ -82,7 +83,20 @@ export default defineComponent({
82
83
  const _columnIndex = colRest._index
83
84
  const cellParams: VxeTableDefines.CellRenderHeaderParams & {
84
85
  $table: VxeTableConstructor & VxeTablePrivateMethods
85
- } = { $table: $xeTable, $grid: $xeGrid, $rowIndex, column, columnIndex, $columnIndex, _columnIndex, firstFilterOption, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, hasFilter }
86
+ } = {
87
+ $table: $xeTable,
88
+ $grid: $xeGrid,
89
+ $rowIndex,
90
+ column,
91
+ columnIndex,
92
+ $columnIndex,
93
+ _columnIndex,
94
+ firstFilterOption,
95
+ fixed: fixedType,
96
+ type: renderType,
97
+ isHidden: fixedHiddenColumn,
98
+ hasFilter
99
+ }
86
100
  const thAttrs: Record<string, string | number | null> = {
87
101
  colid,
88
102
  colspan: column.colSpan > 1 ? column.colSpan : null,
@@ -92,10 +106,6 @@ export default defineComponent({
92
106
  onClick: (evnt: MouseEvent) => $xeTable.triggerHeaderCellClickEvent(evnt, cellParams),
93
107
  onDblclick: (evnt: MouseEvent) => $xeTable.triggerHeaderCellDblclickEvent(evnt, cellParams)
94
108
  }
95
- // 横向虚拟滚动不支持动态行高
96
- if (scrollXLoad && !hasEllipsis) {
97
- showEllipsis = hasEllipsis = true
98
- }
99
109
  const isColDragCell = columnOpts.drag && columnDragOpts.trigger === 'cell'
100
110
  let isDisabledDrag = false
101
111
  if (isColDragCell) {
@@ -119,7 +129,7 @@ export default defineComponent({
119
129
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
120
130
 
121
131
  let isVNPreEmptyStatus = false
122
- if (!isGroup) {
132
+ if (isOptimizeMode && !isGroup) {
123
133
  if (!dragCol || dragCol.id !== colid) {
124
134
  if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
125
135
  isVNPreEmptyStatus = true
@@ -227,7 +237,7 @@ export default defineComponent({
227
237
  const renderVN = () => {
228
238
  const { fixedType, fixedColumn, tableColumn } = props
229
239
  const { mouseConfig, showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps
230
- const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
240
+ const { isGroup, isColLoading, overflowX, scrollXLoad, dragCol } = tableReactData
231
241
  const { visibleColumn, fullColumnIdData } = tableInternalData
232
242
 
233
243
  const mouseOpts = computeMouseOpts.value
@@ -239,7 +249,7 @@ export default defineComponent({
239
249
  renderColumnList = visibleColumn
240
250
  } else {
241
251
  // 如果是使用优化模式
242
- if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
252
+ if (scrollXLoad && allColumnHeaderOverflow) {
243
253
  if (spanMethod || footerSpanMethod) {
244
254
  // 如果不支持优化模式
245
255
  } else {
@@ -247,7 +257,7 @@ export default defineComponent({
247
257
  }
248
258
  }
249
259
 
250
- if (!isColLoading && (fixedType || !overflowX)) {
260
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
251
261
  renderColumnList = visibleColumn
252
262
  }
253
263
 
@@ -2075,7 +2075,7 @@ export default defineComponent({
2075
2075
 
2076
2076
  const updateStyle = () => {
2077
2077
  const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
2078
- const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData
2078
+ const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn, isColLoading } = reactData
2079
2079
  const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData
2080
2080
  const el = refElem.value
2081
2081
  if (!el) {
@@ -2191,7 +2191,7 @@ export default defineComponent({
2191
2191
  renderColumnList = visibleColumn
2192
2192
  } else {
2193
2193
  // 如果是使用优化模式
2194
- if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
2194
+ if (scrollXLoad && allColumnHeaderOverflow) {
2195
2195
  if (spanMethod || footerSpanMethod) {
2196
2196
  // 如果不支持优化模式
2197
2197
  } else {
@@ -2199,8 +2199,11 @@ export default defineComponent({
2199
2199
  }
2200
2200
  }
2201
2201
 
2202
- if (fixedType) {
2202
+ if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
2203
2203
  renderColumnList = visibleColumn
2204
+ }
2205
+
2206
+ if (fixedType) {
2204
2207
  // 如果是使用优化模式
2205
2208
  if (isOptimizeMode) {
2206
2209
  renderColumnList = fixedColumn || []
@@ -2297,7 +2300,7 @@ export default defineComponent({
2297
2300
  let renderColumnList = tableColumn
2298
2301
  let isOptimizeMode = false
2299
2302
  // 如果是使用优化模式
2300
- if (scrollXLoad || scrollYLoad || allColumnFooterOverflow) {
2303
+ if (scrollXLoad && allColumnFooterOverflow) {
2301
2304
  if (spanMethod || footerSpanMethod) {
2302
2305
  // 如果不支持优化模式
2303
2306
  } else {
@@ -219,8 +219,8 @@ VxeUI.setConfig({
219
219
  oSize: 0
220
220
  },
221
221
  scrollbarConfig: {
222
- // width: 0,
223
- // height: 0
222
+ width: 14,
223
+ height: 14
224
224
  }
225
225
  },
226
226
  // 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);