vxe-table 4.12.0-beta.9 → 4.12.1

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 (185) hide show
  1. package/es/grid/src/grid.js +45 -36
  2. package/es/locale/lang/ar-EG.js +7 -1
  3. package/es/locale/lang/de-DE.js +7 -1
  4. package/es/locale/lang/en-US.js +7 -1
  5. package/es/locale/lang/es-ES.js +7 -1
  6. package/es/locale/lang/fr-FR.js +7 -1
  7. package/es/locale/lang/hu-HU.js +7 -1
  8. package/es/locale/lang/hy-AM.js +7 -1
  9. package/es/locale/lang/id-ID.js +7 -1
  10. package/es/locale/lang/it-IT.js +7 -1
  11. package/es/locale/lang/ja-JP.js +7 -1
  12. package/es/locale/lang/ko-KR.js +7 -1
  13. package/es/locale/lang/nb-NO.js +7 -1
  14. package/es/locale/lang/pt-BR.js +7 -1
  15. package/es/locale/lang/ru-RU.js +7 -1
  16. package/es/locale/lang/th-TH.js +7 -1
  17. package/es/locale/lang/ug-CN.js +7 -1
  18. package/es/locale/lang/uk-UA.js +7 -1
  19. package/es/locale/lang/vi-VN.js +7 -1
  20. package/es/locale/lang/zh-CHT.js +7 -1
  21. package/es/locale/lang/zh-CN.js +7 -1
  22. package/es/style.css +1 -1
  23. package/es/table/module/custom/hook.js +1 -1
  24. package/es/table/module/custom/panel.js +4 -2
  25. package/es/table/module/edit/hook.js +29 -33
  26. package/es/table/module/export/export-panel.js +3 -2
  27. package/es/table/module/export/import-panel.js +3 -2
  28. package/es/table/module/filter/panel.js +12 -2
  29. package/es/table/module/keyboard/hook.js +105 -30
  30. package/es/table/module/menu/hook.js +2 -1
  31. package/es/table/module/validator/hook.js +4 -5
  32. package/es/table/render/index.js +3 -3
  33. package/es/table/src/body.js +45 -27
  34. package/es/table/src/cell.js +43 -24
  35. package/es/table/src/columnInfo.js +2 -2
  36. package/es/table/src/footer.js +12 -7
  37. package/es/table/src/header.js +12 -7
  38. package/es/table/src/props.js +4 -0
  39. package/es/table/src/table.js +501 -512
  40. package/es/table/src/util.js +34 -6
  41. package/es/ui/index.js +4 -3
  42. package/es/ui/src/log.js +1 -1
  43. package/helper/vetur/attributes.json +1 -1
  44. package/helper/vetur/tags.json +1 -1
  45. package/lib/grid/src/grid.js +42 -40
  46. package/lib/grid/src/grid.min.js +1 -1
  47. package/lib/index.umd.js +12594 -1185
  48. package/lib/index.umd.min.js +1 -1
  49. package/lib/locale/lang/ar-EG.js +7 -1
  50. package/lib/locale/lang/ar-EG.min.js +1 -1
  51. package/lib/locale/lang/de-DE.js +7 -1
  52. package/lib/locale/lang/de-DE.min.js +1 -1
  53. package/lib/locale/lang/en-US.js +7 -1
  54. package/lib/locale/lang/en-US.min.js +1 -1
  55. package/lib/locale/lang/en-US.umd.js +7 -1
  56. package/lib/locale/lang/es-ES.js +7 -1
  57. package/lib/locale/lang/es-ES.min.js +1 -1
  58. package/lib/locale/lang/es-ES.umd.js +7 -1
  59. package/lib/locale/lang/fr-FR.js +7 -1
  60. package/lib/locale/lang/fr-FR.min.js +1 -1
  61. package/lib/locale/lang/hu-HU.js +7 -1
  62. package/lib/locale/lang/hu-HU.min.js +1 -1
  63. package/lib/locale/lang/hu-HU.umd.js +7 -1
  64. package/lib/locale/lang/hy-AM.js +7 -1
  65. package/lib/locale/lang/hy-AM.min.js +1 -1
  66. package/lib/locale/lang/id-ID.js +7 -1
  67. package/lib/locale/lang/id-ID.min.js +1 -1
  68. package/lib/locale/lang/it-IT.js +7 -1
  69. package/lib/locale/lang/it-IT.min.js +1 -1
  70. package/lib/locale/lang/ja-JP.js +7 -1
  71. package/lib/locale/lang/ja-JP.min.js +1 -1
  72. package/lib/locale/lang/ja-JP.umd.js +7 -1
  73. package/lib/locale/lang/ko-KR.js +7 -1
  74. package/lib/locale/lang/ko-KR.min.js +1 -1
  75. package/lib/locale/lang/ko-KR.umd.js +7 -1
  76. package/lib/locale/lang/nb-NO.js +7 -1
  77. package/lib/locale/lang/nb-NO.min.js +1 -1
  78. package/lib/locale/lang/pt-BR.js +7 -1
  79. package/lib/locale/lang/pt-BR.min.js +1 -1
  80. package/lib/locale/lang/pt-BR.umd.js +7 -1
  81. package/lib/locale/lang/ru-RU.js +7 -1
  82. package/lib/locale/lang/ru-RU.min.js +1 -1
  83. package/lib/locale/lang/ru-RU.umd.js +7 -1
  84. package/lib/locale/lang/th-TH.js +7 -1
  85. package/lib/locale/lang/th-TH.min.js +1 -1
  86. package/lib/locale/lang/ug-CN.js +7 -1
  87. package/lib/locale/lang/ug-CN.min.js +1 -1
  88. package/lib/locale/lang/uk-UA.js +7 -1
  89. package/lib/locale/lang/uk-UA.min.js +1 -1
  90. package/lib/locale/lang/uk-UA.umd.js +7 -1
  91. package/lib/locale/lang/vi-VN.js +7 -1
  92. package/lib/locale/lang/vi-VN.min.js +1 -1
  93. package/lib/locale/lang/zh-CHT.js +7 -1
  94. package/lib/locale/lang/zh-CHT.min.js +1 -1
  95. package/lib/locale/lang/zh-CN.js +7 -1
  96. package/lib/locale/lang/zh-CN.min.js +1 -1
  97. package/lib/locale/lang/zh-CN.umd.js +7 -1
  98. package/lib/style.css +1 -1
  99. package/lib/table/module/custom/hook.js +1 -1
  100. package/lib/table/module/custom/hook.min.js +1 -1
  101. package/lib/table/module/custom/panel.js +4 -2
  102. package/lib/table/module/custom/panel.min.js +1 -1
  103. package/lib/table/module/edit/hook.js +36 -45
  104. package/lib/table/module/edit/hook.min.js +1 -1
  105. package/lib/table/module/export/export-panel.js +3 -2
  106. package/lib/table/module/export/export-panel.min.js +1 -1
  107. package/lib/table/module/export/import-panel.js +3 -2
  108. package/lib/table/module/export/import-panel.min.js +1 -1
  109. package/lib/table/module/filter/panel.js +8 -2
  110. package/lib/table/module/filter/panel.min.js +1 -1
  111. package/lib/table/module/keyboard/hook.js +113 -31
  112. package/lib/table/module/keyboard/hook.min.js +1 -1
  113. package/lib/table/module/menu/hook.js +2 -1
  114. package/lib/table/module/menu/hook.min.js +1 -1
  115. package/lib/table/module/validator/hook.js +6 -10
  116. package/lib/table/module/validator/hook.min.js +1 -1
  117. package/lib/table/render/index.js +4 -3
  118. package/lib/table/render/index.min.js +1 -1
  119. package/lib/table/src/body.js +53 -26
  120. package/lib/table/src/body.min.js +1 -1
  121. package/lib/table/src/cell.js +49 -25
  122. package/lib/table/src/cell.min.js +1 -1
  123. package/lib/table/src/columnInfo.js +2 -4
  124. package/lib/table/src/columnInfo.min.js +1 -1
  125. package/lib/table/src/footer.js +12 -5
  126. package/lib/table/src/footer.min.js +1 -1
  127. package/lib/table/src/header.js +12 -5
  128. package/lib/table/src/header.min.js +1 -1
  129. package/lib/table/src/props.js +4 -0
  130. package/lib/table/src/props.min.js +1 -1
  131. package/lib/table/src/table.js +594 -564
  132. package/lib/table/src/table.min.js +1 -1
  133. package/lib/table/src/util.js +36 -6
  134. package/lib/table/src/util.min.js +1 -1
  135. package/lib/ui/index.js +4 -3
  136. package/lib/ui/index.min.js +1 -1
  137. package/lib/ui/src/log.js +1 -1
  138. package/lib/ui/src/log.min.js +1 -1
  139. package/package.json +2 -2
  140. package/packages/grid/src/grid.ts +49 -42
  141. package/packages/locale/lang/ar-EG.ts +7 -1
  142. package/packages/locale/lang/de-DE.ts +7 -1
  143. package/packages/locale/lang/en-US.ts +7 -1
  144. package/packages/locale/lang/es-ES.ts +7 -1
  145. package/packages/locale/lang/fr-FR.ts +7 -1
  146. package/packages/locale/lang/hu-HU.ts +7 -1
  147. package/packages/locale/lang/hy-AM.ts +7 -1
  148. package/packages/locale/lang/id-ID.ts +7 -1
  149. package/packages/locale/lang/it-IT.ts +7 -1
  150. package/packages/locale/lang/ja-JP.ts +7 -1
  151. package/packages/locale/lang/ko-KR.ts +7 -1
  152. package/packages/locale/lang/nb-NO.ts +7 -1
  153. package/packages/locale/lang/pt-BR.ts +7 -1
  154. package/packages/locale/lang/ru-RU.ts +7 -1
  155. package/packages/locale/lang/th-TH.ts +7 -1
  156. package/packages/locale/lang/ug-CN.ts +7 -1
  157. package/packages/locale/lang/uk-UA.ts +7 -1
  158. package/packages/locale/lang/vi-VN.ts +7 -1
  159. package/packages/locale/lang/zh-CHT.ts +7 -1
  160. package/packages/locale/lang/zh-CN.ts +7 -1
  161. package/packages/table/module/custom/hook.ts +1 -1
  162. package/packages/table/module/custom/panel.ts +6 -2
  163. package/packages/table/module/edit/hook.ts +30 -33
  164. package/packages/table/module/export/export-panel.ts +4 -2
  165. package/packages/table/module/export/import-panel.ts +4 -2
  166. package/packages/table/module/filter/panel.ts +12 -2
  167. package/packages/table/module/keyboard/hook.ts +106 -32
  168. package/packages/table/module/menu/hook.ts +3 -1
  169. package/packages/table/module/validator/hook.ts +5 -5
  170. package/packages/table/render/index.ts +3 -4
  171. package/packages/table/src/body.ts +46 -27
  172. package/packages/table/src/cell.ts +43 -24
  173. package/packages/table/src/columnInfo.ts +3 -2
  174. package/packages/table/src/footer.ts +13 -7
  175. package/packages/table/src/header.ts +13 -7
  176. package/packages/table/src/props.ts +4 -0
  177. package/packages/table/src/table.ts +513 -518
  178. package/packages/table/src/util.ts +39 -6
  179. package/packages/ui/index.ts +3 -2
  180. /package/es/{iconfont.1741337003908.ttf → iconfont.1743045589885.ttf} +0 -0
  181. /package/es/{iconfont.1741337003908.woff → iconfont.1743045589885.woff} +0 -0
  182. /package/es/{iconfont.1741337003908.woff2 → iconfont.1743045589885.woff2} +0 -0
  183. /package/lib/{iconfont.1741337003908.ttf → iconfont.1743045589885.ttf} +0 -0
  184. /package/lib/{iconfont.1741337003908.woff → iconfont.1743045589885.woff} +0 -0
  185. /package/lib/{iconfont.1741337003908.woff2 → iconfont.1743045589885.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, TransitionGroup, h, ref, Ref, PropType, inject, nextTick, onMounted, onUnmounted } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
3
  import { VxeUI } from '../../ui'
4
- import { getOffsetSize, calcTreeLine, mergeBodyMethod, getRowid } from './util'
4
+ import { getOffsetSize, calcTreeLine, mergeBodyMethod, getRowid, createHandleGetRowId } from './util'
5
5
  import { updateCellTitle, getPropClass } from '../../ui/src/dom'
6
6
  import { isEnableConf } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
@@ -27,7 +27,7 @@ export default defineComponent({
27
27
  const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTablePrivateMethods)
28
28
 
29
29
  const { xID, props: tableProps, context: tableContext, reactData: tableReactData, internalData: tableInternalData } = $xeTable
30
- const { computeEditOpts, computeMouseOpts, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeColumnDragOpts, computeResizableOpts } = $xeTable.getComputeMaps()
30
+ const { computeEditOpts, computeMouseOpts, computeCellOffsetWidth, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeColumnDragOpts, computeResizableOpts } = $xeTable.getComputeMaps()
31
31
 
32
32
  const refElem = ref() as Ref<HTMLDivElement>
33
33
  const refBodyScroll = ref() as Ref<HTMLDivElement>
@@ -45,7 +45,7 @@ export default defineComponent({
45
45
  return !!(isDragResize || (lastScrollTime && Date.now() < lastScrollTime + (delayHover as number)))
46
46
  }
47
47
 
48
- const renderLine = (params: VxeTableDefines.CellRenderBodyParams, cellHeight: number) => {
48
+ const renderLine = (rowid: string, params: VxeTableDefines.CellRenderBodyParams, cellHeight: number) => {
49
49
  const { row, column } = params
50
50
  const { afterFullData } = tableInternalData
51
51
  const { treeConfig } = tableProps
@@ -55,7 +55,6 @@ export default defineComponent({
55
55
  if (slots && (slots as any).line) {
56
56
  return $xeTable.callSlot((slots as any).line, params)
57
57
  }
58
- const rowid = getRowid($xeTable, row)
59
58
  const rest = fullAllDataRowIdData[rowid]
60
59
  let rLevel = 0
61
60
  let prevRow = null
@@ -102,9 +101,11 @@ export default defineComponent({
102
101
  columns: VxeTableDefines.ColumnInfo[],
103
102
  items: any[]
104
103
  ) => {
105
- const { fullAllDataRowIdData } = tableInternalData
104
+ const $xeGrid = $xeTable.xeGrid
105
+
106
+ const { fullAllDataRowIdData, fullColumnIdData, visibleColumn } = tableInternalData
106
107
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps
107
- const { tableData, dragRow, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData
108
+ const { tableData, dragRow, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData
108
109
  const { afterFullData, scrollXStore, scrollYStore } = tableInternalData
109
110
  const cellOpts = computeCellOpts.value
110
111
  const validOpts = computeValidOpts.value
@@ -121,19 +122,21 @@ export default defineComponent({
121
122
  const columnOpts = computeColumnOpts.value
122
123
  const mouseOpts = computeMouseOpts.value
123
124
  const areaOpts = computeAreaOpts.value
125
+ const cellOffsetWidth = computeCellOffsetWidth.value
124
126
  const { selectCellToRow } = areaOpts
125
127
  const { type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column
126
128
  const { verticalAlign: allVerticalAlign } = cellOpts
127
129
  const { actived } = editStore
128
- const rowRest = fullAllDataRowIdData[rowid]
130
+ const rowRest = fullAllDataRowIdData[rowid] || {}
129
131
  const colid = column.id
132
+ const colRest = fullColumnIdData[colid] || {}
130
133
  const renderOpts = editRender || cellRender
131
134
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
132
135
  const compCellClassName = compConf ? (compConf.tableCellClassName || compConf.cellClassName) : null
133
136
  const compCellStyle = compConf ? (compConf.tableCellStyle || compConf.cellStyle) : ''
134
137
  const showAllTip = tooltipOpts.showAll
135
- const columnIndex = $xeTable.getColumnIndex(column)
136
- const _columnIndex = $xeTable.getVTColumnIndex(column)
138
+ const columnIndex = colRest.index
139
+ const _columnIndex = colRest._index
137
140
  const isEdit = isEnableConf(editRender)
138
141
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0
139
142
  let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX
@@ -157,7 +160,7 @@ export default defineComponent({
157
160
  $table: VxeTableConstructor<any> & VxeTablePrivateMethods
158
161
  } = {
159
162
  $table: $xeTable,
160
- $grid: $xeTable.xegrid,
163
+ $grid: $xeGrid,
161
164
  isEdit: false,
162
165
  seq,
163
166
  rowid,
@@ -290,6 +293,18 @@ export default defineComponent({
290
293
  }
291
294
 
292
295
  const tcStyle: Record<string, string> = {}
296
+ if (hasEllipsis && resizeWidthFlag) {
297
+ let tsColspan = tdAttrs.colspan || 0
298
+ if (tsColspan > 1) {
299
+ for (let index = 1; index < tsColspan; index++) {
300
+ const nextColumn = visibleColumn[columnIndex + index]
301
+ if (nextColumn) {
302
+ tsColspan += nextColumn.renderWidth
303
+ }
304
+ }
305
+ }
306
+ tcStyle.width = `${column.renderWidth - (cellOffsetWidth * tsColspan)}px`
307
+ }
293
308
  if (scrollYLoad || hasEllipsis || isCsHeight || isRsHeight) {
294
309
  tcStyle.height = `${cellHeight}px`
295
310
  } else {
@@ -312,7 +327,7 @@ export default defineComponent({
312
327
  } else {
313
328
  // 渲染单元格
314
329
  tdVNs.push(
315
- ...renderLine(cellParams, cellHeight),
330
+ ...renderLine(rowid, cellParams, cellHeight),
316
331
  h('div', {
317
332
  key: 'tc',
318
333
  class: ['vxe-cell', {
@@ -436,8 +451,8 @@ export default defineComponent({
436
451
 
437
452
  const renderRows = (fixedType: 'left' | 'right' | '', isOptimizeMode: boolean, tableData: any[], tableColumn: VxeTableDefines.ColumnInfo[]) => {
438
453
  const { stripe, rowKey, highlightHoverRow, rowClassName, rowStyle, editConfig, treeConfig } = tableProps
439
- const { hasFixedColumn, treeExpandedMaps, isColLoading, scrollXLoad, scrollYLoad, isAllOverflow, rowExpandedMaps, expandColumn, selectRadioRow, pendingRowMaps, isDragColMove, rowExpandHeightFlag } = tableReactData
440
- const { fullAllDataRowIdData } = tableInternalData
454
+ const { hasFixedColumn, treeExpandedFlag, isColLoading, scrollXLoad, scrollYLoad, isAllOverflow, rowExpandedFlag, expandColumn, selectRadioRow, pendingRowFlag, isDragColMove, rowExpandHeightFlag } = tableReactData
455
+ const { fullAllDataRowIdData, treeExpandedMaps, pendingRowMaps, rowExpandedMaps } = tableInternalData
441
456
  const checkboxOpts = computeCheckboxOpts.value
442
457
  const radioOpts = computeRadioOpts.value
443
458
  const treeOpts = computeTreeOpts.value
@@ -448,11 +463,15 @@ export default defineComponent({
448
463
  const { transform, seqMode } = treeOpts
449
464
  const childrenField = treeOpts.children || treeOpts.childrenField
450
465
  const rows: any[] = []
466
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
451
467
  tableData.forEach((row, $rowIndex) => {
452
- const trOn: Record<string, any> = {}
468
+ const rowid = handleGetRowId(row)
469
+ const rowRest = fullAllDataRowIdData[rowid] || {}
453
470
  let rowIndex = $rowIndex
454
- // 确保任何情况下 rowIndex 都精准指向真实 data 索引
455
- rowIndex = $xeTable.getRowIndex(row)
471
+ let rowLevel = 0
472
+ let seq: string | number = -1
473
+ let _rowIndex = -1
474
+ const trOn: Record<string, any> = {}
456
475
  // 当前行事件
457
476
  if (rowOpts.isHover || highlightHoverRow) {
458
477
  trOn.onMouseenter = (evnt: MouseEvent) => {
@@ -468,11 +487,6 @@ export default defineComponent({
468
487
  $xeTable.clearHoverRow()
469
488
  }
470
489
  }
471
- const rowid = getRowid($xeTable, row)
472
- const rowRest = fullAllDataRowIdData[rowid]
473
- let rowLevel = 0
474
- let seq: string | number = -1
475
- let _rowIndex = 0
476
490
  if (rowRest) {
477
491
  rowLevel = rowRest.level
478
492
  if (treeConfig && transform && seqMode === 'increasing') {
@@ -480,11 +494,12 @@ export default defineComponent({
480
494
  } else {
481
495
  seq = rowRest.seq
482
496
  }
497
+ rowIndex = rowRest.index
483
498
  _rowIndex = rowRest._index
484
499
  }
485
500
  const params = { $table: $xeTable, seq, rowid, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex, _rowIndex }
486
501
  // 行是否被展开
487
- const isExpandRow = expandColumn && !!rowExpandedMaps[rowid]
502
+ const isExpandRow = expandColumn && !!rowExpandedFlag && !!rowExpandedMaps[rowid]
488
503
  // 树节点是否被展开
489
504
  let isExpandTree = false
490
505
  let rowChildren = []
@@ -494,7 +509,7 @@ export default defineComponent({
494
509
  }
495
510
  if (treeConfig && !scrollYLoad && !transform) {
496
511
  rowChildren = row[childrenField]
497
- isExpandTree = rowChildren && rowChildren.length > 0 && !!treeExpandedMaps[rowid]
512
+ isExpandTree = !!treeExpandedFlag && rowChildren && rowChildren.length > 0 && !!treeExpandedMaps[rowid]
498
513
  }
499
514
  // 拖拽行事件
500
515
  if (rowOpts.drag && (!treeConfig || transform)) {
@@ -513,7 +528,7 @@ export default defineComponent({
513
528
  'row--new': isNewRow && (editOpts.showStatus || editOpts.showInsertStatus),
514
529
  'row--radio': radioOpts.highlight && $xeTable.eqRow(selectRadioRow, row),
515
530
  'row--checked': checkboxOpts.highlight && $xeTable.isCheckedByCheckboxRow(row),
516
- 'row--pending': !!pendingRowMaps[rowid]
531
+ 'row--pending': !!pendingRowFlag && !!pendingRowMaps[rowid]
517
532
  },
518
533
  getPropClass(rowClassName, params)
519
534
  ]
@@ -639,6 +654,7 @@ export default defineComponent({
639
654
 
640
655
  const renderVN = () => {
641
656
  const { slots } = tableContext
657
+ const $xeGrid = $xeTable.xeGrid
642
658
 
643
659
  const { fixedColumn, fixedType, tableColumn } = props
644
660
  const { spanMethod, footerSpanMethod, mouseConfig } = tableProps
@@ -662,7 +678,7 @@ export default defineComponent({
662
678
  }
663
679
  }
664
680
 
665
- if (fixedType || !overflowX) {
681
+ if (!isColLoading && (fixedType || !overflowX)) {
666
682
  renderColumnList = visibleColumn
667
683
  }
668
684
 
@@ -723,7 +739,7 @@ export default defineComponent({
723
739
  let emptyContent: string | VxeComponentSlotType | VxeComponentSlotType[]
724
740
  const emptySlot = slots ? slots.empty : null
725
741
  if (emptySlot) {
726
- emptyContent = $xeTable.callSlot(emptySlot, { $table: $xeTable, $grid: $xeTable.xegrid })
742
+ emptyContent = $xeTable.callSlot(emptySlot, { $table: $xeTable, $grid: $xeGrid })
727
743
  } else {
728
744
  const compConf = emptyOpts.name ? renderer.get(emptyOpts.name) : null
729
745
  const rtEmptyView = compConf ? (compConf.renderTableEmpty || compConf.renderTableEmptyView || compConf.renderEmpty) : null
@@ -776,7 +792,10 @@ export default defineComponent({
776
792
  }, renderColumnList.map((column, $columnIndex) => {
777
793
  return h('col', {
778
794
  name: column.id,
779
- key: $columnIndex
795
+ key: $columnIndex,
796
+ style: {
797
+ width: `${column.renderWidth}px`
798
+ }
780
799
  })
781
800
  })),
782
801
  /**
@@ -228,15 +228,27 @@ function getFooterContent (params: VxeTableDefines.CellRenderFooterParams & { $t
228
228
  })
229
229
  if (footerFormatter) {
230
230
  if (XEUtils.isFunction(footerFormatter)) {
231
- return `${footerFormatter(footParams)}`
231
+ return [
232
+ h('span', {
233
+ class: 'vxe-cell--label'
234
+ }, `${footerFormatter(footParams)}`)
235
+ ]
232
236
  }
233
237
  const isArr = XEUtils.isArray(footerFormatter)
234
238
  const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter)
235
239
  const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null
236
240
  if (footerFormatMethod) {
237
- return `${isArr ? footerFormatMethod(footParams, ...footerFormatter.slice(1)) : footerFormatMethod(footParams)}`
241
+ return [
242
+ h('span', {
243
+ class: 'vxe-cell--label'
244
+ }, `${isArr ? footerFormatMethod(footParams, ...footerFormatter.slice(1)) : footerFormatMethod(footParams)}`)
245
+ ]
238
246
  }
239
- return ''
247
+ return [
248
+ h('span', {
249
+ class: 'vxe-cell--label'
250
+ }, '')
251
+ ]
240
252
  }
241
253
  if (renderOpts) {
242
254
  const compConf = renderer.get(renderOpts.name)
@@ -248,7 +260,9 @@ function getFooterContent (params: VxeTableDefines.CellRenderFooterParams & { $t
248
260
  }
249
261
  }
250
262
  return [
251
- formatText(itemValue, 1)
263
+ h('span', {
264
+ class: 'vxe-cell--label'
265
+ }, formatText(itemValue, 1))
252
266
  ]
253
267
  }
254
268
 
@@ -415,8 +429,8 @@ export const Cell = {
415
429
  const tableReactData = $table.reactData
416
430
  const tableInternalData = $table.internalData
417
431
  const { computeTreeOpts } = $table.getComputeMaps()
418
- const { treeExpandedMaps, treeExpandLazyLoadedMaps } = tableReactData
419
- const { fullAllDataRowIdData } = tableInternalData
432
+ const { treeExpandedFlag } = tableReactData
433
+ const { fullAllDataRowIdData, treeExpandedMaps, treeExpandLazyLoadedMaps } = tableInternalData
420
434
  const treeOpts = computeTreeOpts.value
421
435
  const { row, column, level } = params
422
436
  const { slots } = column
@@ -436,7 +450,7 @@ export const Cell = {
436
450
  }
437
451
  if (!isHidden) {
438
452
  const rowid = getRowid($table, row)
439
- isActive = !!treeExpandedMaps[rowid]
453
+ isActive = !!treeExpandedFlag && !!treeExpandedMaps[rowid]
440
454
  if (lazy) {
441
455
  const rest = fullAllDataRowIdData[rowid]
442
456
  isLazyLoading = !!treeExpandLazyLoadedMaps[rowid]
@@ -598,7 +612,8 @@ export const Cell = {
598
612
  const headerSlot = slots ? slots.header : null
599
613
  const titleSlot = slots ? slots.title : null
600
614
  const checkboxOpts = computeCheckboxOpts.value
601
- const headerTitle = column.getTitle()
615
+ const { checkStrictly, showHeader, headerTitle } = checkboxOpts
616
+ const colTitle = column.getTitle()
602
617
  const ons: Record<string, any> = {}
603
618
  if (!isHidden) {
604
619
  ons.onClick = (evnt: MouseEvent) => {
@@ -611,11 +626,11 @@ export const Cell = {
611
626
  if (headerSlot) {
612
627
  return renderHeaderCellBaseVNs(params, renderTitleContent(checkboxParams, $table.callSlot(headerSlot, checkboxParams)))
613
628
  }
614
- if (checkboxOpts.checkStrictly ? !checkboxOpts.showHeader : checkboxOpts.showHeader === false) {
629
+ if (checkStrictly ? !showHeader : showHeader === false) {
615
630
  return renderHeaderCellBaseVNs(params, renderTitleContent(checkboxParams, [
616
631
  h('span', {
617
632
  class: 'vxe-checkbox--label'
618
- }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : headerTitle)
633
+ }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : colTitle)
619
634
  ]))
620
635
  }
621
636
  return renderHeaderCellBaseVNs(params,
@@ -626,17 +641,17 @@ export const Cell = {
626
641
  'is--disabled': isAllCheckboxDisabled,
627
642
  'is--indeterminate': isAllCheckboxIndeterminate
628
643
  }],
629
- title: getI18n('vxe.table.allTitle'),
644
+ title: XEUtils.eqNull(headerTitle) ? getI18n('vxe.table.allTitle') : `${headerTitle || ''}`,
630
645
  ...ons
631
646
  }, [
632
647
  h('span', {
633
648
  class: ['vxe-checkbox--icon', isAllCheckboxIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : (isAllCheckboxSelected ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED)]
634
649
  })
635
- ].concat(titleSlot || headerTitle
650
+ ].concat(titleSlot || colTitle
636
651
  ? [
637
652
  h('span', {
638
653
  class: 'vxe-checkbox--label'
639
- }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : headerTitle)
654
+ }, titleSlot ? $table.callSlot(titleSlot, checkboxParams) : colTitle)
640
655
  ]
641
656
  : []))
642
657
  ])
@@ -646,8 +661,10 @@ export const Cell = {
646
661
  const { $table, row, column, isHidden } = params
647
662
  const tableProps = $table.props
648
663
  const tableReactData = $table.reactData
664
+ const tableInternalData = $table.internalData
649
665
  const { treeConfig } = tableProps
650
- const { selectCheckboxMaps, treeIndeterminateMaps } = tableReactData
666
+ const { updateCheckboxFlag } = tableReactData
667
+ const { selectCheckboxMaps, treeIndeterminateRowMaps } = tableInternalData
651
668
  const { computeCheckboxOpts } = $table.getComputeMaps()
652
669
  const checkboxOpts = computeCheckboxOpts.value
653
670
  const { labelField, checkMethod, visibleMethod } = checkboxOpts
@@ -661,7 +678,7 @@ export const Cell = {
661
678
  const ons: Record<string, any> = {}
662
679
  if (!isHidden) {
663
680
  const rowid = getRowid($table, row)
664
- isChecked = !!selectCheckboxMaps[rowid]
681
+ isChecked = !!updateCheckboxFlag && !!selectCheckboxMaps[rowid]
665
682
  ons.onClick = (evnt: MouseEvent) => {
666
683
  if (!isDisabled && isVisible) {
667
684
  $table.triggerCheckRowEvent(evnt, params, !isChecked)
@@ -671,7 +688,7 @@ export const Cell = {
671
688
  isDisabled = !checkMethod({ row })
672
689
  }
673
690
  if (treeConfig) {
674
- indeterminate = !!treeIndeterminateMaps[rowid]
691
+ indeterminate = !!treeIndeterminateRowMaps[rowid]
675
692
  }
676
693
  }
677
694
  const checkboxParams = { ...params, checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate }
@@ -712,8 +729,10 @@ export const Cell = {
712
729
  const { $table, row, column, isHidden } = params
713
730
  const tableProps = $table.props
714
731
  const tableReactData = $table.reactData
732
+ const tableInternalData = $table.internalData
715
733
  const { treeConfig } = tableProps
716
- const { treeIndeterminateMaps } = tableReactData
734
+ const { updateCheckboxFlag } = tableReactData
735
+ const { treeIndeterminateRowMaps } = tableInternalData
717
736
  const { computeCheckboxOpts } = $table.getComputeMaps()
718
737
  const checkboxOpts = computeCheckboxOpts.value
719
738
  const { labelField, checkField, checkMethod, visibleMethod } = checkboxOpts
@@ -728,7 +747,7 @@ export const Cell = {
728
747
  const ons: Record<string, any> = {}
729
748
  if (!isHidden) {
730
749
  const rowid = getRowid($table, row)
731
- isChecked = XEUtils.get(row, checkField as string)
750
+ isChecked = !!updateCheckboxFlag && XEUtils.get(row, checkField)
732
751
  ons.onClick = (evnt: MouseEvent) => {
733
752
  if (!isDisabled && isVisible) {
734
753
  $table.triggerCheckRowEvent(evnt, params, !isChecked)
@@ -738,7 +757,7 @@ export const Cell = {
738
757
  isDisabled = !checkMethod({ row })
739
758
  }
740
759
  if (treeConfig) {
741
- isIndeterminate = !!treeIndeterminateMaps[rowid]
760
+ isIndeterminate = !!treeIndeterminateRowMaps[rowid]
742
761
  }
743
762
  }
744
763
  const checkboxParams = { ...params, checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate: isIndeterminate }
@@ -781,8 +800,8 @@ export const Cell = {
781
800
  */
782
801
  renderExpandCell (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
783
802
  const { $table, isHidden, row, column } = params
784
- const tableReactData = $table.reactData
785
- const { rowExpandedMaps, rowExpandLazyLoadedMaps } = tableReactData
803
+ const tableInternalData = $table.internalData
804
+ const { rowExpandedMaps, rowExpandLazyLoadedMaps } = tableInternalData
786
805
  const { computeExpandOpts } = $table.getComputeMaps()
787
806
  const expandOpts = computeExpandOpts.value
788
807
  const { lazy, labelField, iconLoaded, showIcon, iconOpen, iconClose, visibleMethod } = expandOpts
@@ -889,7 +908,7 @@ export const Cell = {
889
908
  const { $table, column } = params
890
909
  const { computeSortOpts } = $table.getComputeMaps()
891
910
  const sortOpts = computeSortOpts.value
892
- const { showIcon, allowBtn, iconLayout, iconAsc, iconDesc, iconVisibleMethod } = sortOpts
911
+ const { showIcon, allowBtn, ascTitle, descTitle, iconLayout, iconAsc, iconDesc, iconVisibleMethod } = sortOpts
893
912
  const { order } = column
894
913
  if (showIcon && (!iconVisibleMethod || iconVisibleMethod(params))) {
895
914
  return [
@@ -900,7 +919,7 @@ export const Cell = {
900
919
  class: ['vxe-sort--asc-btn', iconAsc || getIcon().TABLE_SORT_ASC, {
901
920
  'sort--active': order === 'asc'
902
921
  }],
903
- title: getI18n('vxe.table.sortAsc'),
922
+ title: XEUtils.eqNull(ascTitle) ? getI18n('vxe.table.sortAsc') : `${ascTitle || ''}`,
904
923
  onClick: allowBtn
905
924
  ? (evnt: Event) => {
906
925
  evnt.stopPropagation()
@@ -912,7 +931,7 @@ export const Cell = {
912
931
  class: ['vxe-sort--desc-btn', iconDesc || getIcon().TABLE_SORT_DESC, {
913
932
  'sort--active': order === 'desc'
914
933
  }],
915
- title: getI18n('vxe.table.sortDesc'),
934
+ title: XEUtils.eqNull(descTitle) ? getI18n('vxe.table.sortDesc') : `${descTitle || ''}`,
916
935
  onClick: allowBtn
917
936
  ? (evnt: Event) => {
918
937
  evnt.stopPropagation()
@@ -10,10 +10,11 @@ const { getI18n, formats } = VxeUI
10
10
  export class ColumnInfo {
11
11
  /* eslint-disable @typescript-eslint/no-use-before-define */
12
12
  constructor ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, _vm: any, { renderHeader, renderCell, renderFooter, renderData }: any = {}) {
13
- const $xeGrid = $xeTable.xegrid
13
+ const tableProps = $xeTable.props
14
+ const $xeGrid = $xeTable.xeGrid
15
+
14
16
  const formatter: string | any[] = _vm.formatter
15
17
  const visible = XEUtils.isBoolean(_vm.visible) ? _vm.visible : true
16
- const { props: tableProps } = $xeTable
17
18
 
18
19
  const types = ['seq', 'checkbox', 'radio', 'expand', 'html']
19
20
  if (_vm.type && types.indexOf(_vm.type) === -1) {
@@ -58,10 +58,12 @@ export default defineComponent({
58
58
  const refFooterXSpace = ref() as Ref<HTMLDivElement>
59
59
 
60
60
  const renderRows = (tableColumn: VxeTableDefines.ColumnInfo[], footerTableData: any[], row: any, $rowIndex: number, _rowIndex: number) => {
61
+ const $xeGrid = $xeTable.xeGrid
62
+
61
63
  const { fixedType } = props
62
64
  const { resizable: allResizable, border, footerCellClassName, footerCellStyle, footerAlign: allFooterAlign, footerSpanMethod, align: allAlign, columnKey, showFooterOverflow: allColumnFooterOverflow } = tableProps
63
65
  const { scrollXLoad, scrollYLoad, overflowX, currentColumn, mergeFooterList } = tableReactData
64
- const { scrollXStore } = tableInternalData
66
+ const { fullColumnIdData, scrollXStore } = tableInternalData
65
67
  const tooltipOpts = computeTooltipOpts.value
66
68
  const resizableOpts = computeResizableOpts.value
67
69
  const { isAllColumnDrag } = resizableOpts
@@ -74,6 +76,7 @@ export default defineComponent({
74
76
  return tableColumn.map((column, $columnIndex) => {
75
77
  const { type, showFooterOverflow, footerAlign, align, footerClassName, editRender, cellRender } = column
76
78
  const colid = column.id
79
+ const colRest = fullColumnIdData[colid] || {}
77
80
  const renderOpts = editRender || cellRender
78
81
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
79
82
  const showAllTip = tooltipOpts.showAll
@@ -89,14 +92,14 @@ export default defineComponent({
89
92
  const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable))
90
93
  const attrs: any = { colid }
91
94
  const tfOns: any = {}
92
- const columnIndex = $xeTable.getColumnIndex(column)
93
- const _columnIndex = $xeTable.getVTColumnIndex(column)
95
+ const columnIndex = colRest.index
96
+ const _columnIndex = colRest._index
94
97
  const itemIndex = _columnIndex
95
98
  const cellParams: VxeTableDefines.CellRenderFooterParams & {
96
99
  $table: VxeTableConstructor<any> & VxeTablePrivateMethods
97
100
  } = {
98
101
  $table: $xeTable,
99
- $grid: $xeTable.xegrid,
102
+ $grid: $xeGrid,
100
103
  row,
101
104
  rowIndex: _rowIndex,
102
105
  _rowIndex,
@@ -272,7 +275,7 @@ export default defineComponent({
272
275
  const { fixedType, fixedColumn, tableColumn } = props
273
276
  const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = tableProps
274
277
  const { visibleColumn, fullColumnIdData } = tableInternalData
275
- const { isGroup, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
278
+ const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
276
279
 
277
280
  let renderColumnList = tableColumn
278
281
  let isOptimizeMode = false
@@ -285,7 +288,7 @@ export default defineComponent({
285
288
  }
286
289
  }
287
290
 
288
- if (fixedType || !overflowX) {
291
+ if (!isColLoading && (fixedType || !overflowX)) {
289
292
  renderColumnList = visibleColumn
290
293
  }
291
294
 
@@ -354,7 +357,10 @@ export default defineComponent({
354
357
  }, renderColumnList.map((column, $columnIndex) => {
355
358
  return h('col', {
356
359
  name: column.id,
357
- key: $columnIndex
360
+ key: $columnIndex,
361
+ style: {
362
+ width: `${column.renderWidth}px`
363
+ }
358
364
  })
359
365
  })),
360
366
  /**
@@ -43,10 +43,12 @@ export default defineComponent({
43
43
  }
44
44
 
45
45
  const renderRows = (isGroup: boolean, isOptimizeMode: boolean, cols: VxeTableDefines.ColumnInfo[], $rowIndex: number) => {
46
+ const $xeGrid = $xeTable.xeGrid
47
+
46
48
  const { fixedType } = props
47
49
  const { resizable: allResizable, columnKey, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, mouseConfig } = tableProps
48
50
  const { currentColumn, dragCol, scrollXLoad, scrollYLoad, overflowX } = tableReactData
49
- const { scrollXStore } = tableInternalData
51
+ const { fullColumnIdData, scrollXStore } = tableInternalData
50
52
  const columnOpts = computeColumnOpts.value
51
53
  const columnDragOpts = computeColumnDragOpts.value
52
54
  const cellOpts = computeCellOpts.value
@@ -57,6 +59,7 @@ export default defineComponent({
57
59
  return cols.map((column, $columnIndex) => {
58
60
  const { type, showHeaderOverflow, headerAlign, align, filters, headerClassName, editRender, cellRender } = column
59
61
  const colid = column.id
62
+ const colRest = fullColumnIdData[colid] || {}
60
63
  const renderOpts = editRender || cellRender
61
64
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
62
65
  const isColGroup = column.children && column.children.length
@@ -74,11 +77,11 @@ export default defineComponent({
74
77
  firstFilterOption = filters[0]
75
78
  hasFilter = filters.some((item) => item.checked)
76
79
  }
77
- const columnIndex = $xeTable.getColumnIndex(column)
78
- const _columnIndex = $xeTable.getVTColumnIndex(column)
80
+ const columnIndex = colRest.index
81
+ const _columnIndex = colRest._index
79
82
  const cellParams: VxeTableDefines.CellRenderHeaderParams & {
80
83
  $table: VxeTableConstructor & VxeTablePrivateMethods
81
- } = { $table: $xeTable, $grid: $xeTable.xegrid, $rowIndex, column, columnIndex, $columnIndex, _columnIndex, firstFilterOption, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, hasFilter }
84
+ } = { $table: $xeTable, $grid: $xeGrid, $rowIndex, column, columnIndex, $columnIndex, _columnIndex, firstFilterOption, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, hasFilter }
82
85
  const thAttrs: Record<string, string | number | null> = {
83
86
  colid,
84
87
  colspan: column.colSpan > 1 ? column.colSpan : null,
@@ -223,7 +226,7 @@ export default defineComponent({
223
226
  const renderVN = () => {
224
227
  const { fixedType, fixedColumn, tableColumn } = props
225
228
  const { mouseConfig, showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps
226
- const { isGroup, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
229
+ const { isGroup, isColLoading, overflowX, scrollXLoad, scrollYLoad, dragCol } = tableReactData
227
230
  const { visibleColumn, fullColumnIdData } = tableInternalData
228
231
 
229
232
  const mouseOpts = computeMouseOpts.value
@@ -243,7 +246,7 @@ export default defineComponent({
243
246
  }
244
247
  }
245
248
 
246
- if (fixedType || !overflowX) {
249
+ if (!isColLoading && (fixedType || !overflowX)) {
247
250
  renderColumnList = visibleColumn
248
251
  }
249
252
 
@@ -317,7 +320,10 @@ export default defineComponent({
317
320
  }, renderColumnList.map((column, $columnIndex) => {
318
321
  return h('col', {
319
322
  name: column.id,
320
- key: $columnIndex
323
+ key: $columnIndex,
324
+ style: {
325
+ width: `${column.renderWidth}px`
326
+ }
321
327
  })
322
328
  })),
323
329
  /**
@@ -188,6 +188,8 @@ export default {
188
188
  resizeConfig: Object as PropType<VxeTablePropTypes.ResizeConfig>,
189
189
  // 列配置信息
190
190
  columnConfig: Object as PropType<VxeTablePropTypes.ColumnConfig>,
191
+ // 当前列配置信息
192
+ currentColumnConfig: Object as PropType<VxeTablePropTypes.CurrentColumnConfig>,
191
193
  // 单元格配置信息
192
194
  cellConfig: Object as PropType<VxeTablePropTypes.CellConfig>,
193
195
  // 表头单元格配置信息
@@ -196,6 +198,8 @@ export default {
196
198
  footerCellConfig: Object as PropType<VxeTablePropTypes.FooterCellConfig>,
197
199
  // 行配置信息
198
200
  rowConfig: Object as PropType<VxeTablePropTypes.RowConfig>,
201
+ // 当前行配置信息
202
+ currentRowConfig: Object as PropType<VxeTablePropTypes.CurrentRowConfig>,
199
203
  // 已废弃,被 rowDragConfig 替换
200
204
  dragConfig: Object as PropType<VxeTablePropTypes.DragConfig>,
201
205
  // 行拖拽排序配置项