vxe-table 4.10.6-beta.3 → 4.10.6-beta.30

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 (178) hide show
  1. package/es/grid/src/grid.js +1 -1
  2. package/es/index.css +1 -1
  3. package/es/index.min.css +1 -1
  4. package/es/locale/lang/ar-EG.js +2 -1
  5. package/es/locale/lang/de-DE.js +2 -1
  6. package/es/locale/lang/en-US.js +4 -3
  7. package/es/locale/lang/es-ES.js +2 -1
  8. package/es/locale/lang/fr-FR.js +2 -1
  9. package/es/locale/lang/hu-HU.js +2 -1
  10. package/es/locale/lang/hy-AM.js +2 -1
  11. package/es/locale/lang/it-IT.js +2 -1
  12. package/es/locale/lang/ja-JP.js +2 -1
  13. package/es/locale/lang/ko-KR.js +2 -1
  14. package/es/locale/lang/nb-NO.js +2 -1
  15. package/es/locale/lang/pt-BR.js +2 -1
  16. package/es/locale/lang/ru-RU.js +4 -3
  17. package/es/locale/lang/th-TH.js +2 -1
  18. package/es/locale/lang/ug-CN.js +2 -1
  19. package/es/locale/lang/uk-UA.js +518 -517
  20. package/es/locale/lang/vi-VN.js +2 -1
  21. package/es/locale/lang/zh-CHT.js +2 -1
  22. package/es/locale/lang/zh-CN.js +2 -1
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/table/module/edit/hook.js +7 -7
  26. package/es/table/module/export/hook.js +97 -62
  27. package/es/table/module/keyboard/hook.js +63 -27
  28. package/es/table/src/body.js +112 -77
  29. package/es/table/src/cell.js +28 -46
  30. package/es/table/src/column.js +13 -1
  31. package/es/table/src/columnInfo.js +3 -0
  32. package/es/table/src/emits.js +2 -0
  33. package/es/table/src/footer.js +32 -8
  34. package/es/table/src/header.js +73 -158
  35. package/es/table/src/props.js +6 -2
  36. package/es/table/src/table.js +1175 -633
  37. package/es/table/src/util.js +77 -62
  38. package/es/table/style.css +357 -213
  39. package/es/table/style.min.css +1 -1
  40. package/es/ui/index.js +24 -11
  41. package/es/ui/src/log.js +1 -1
  42. package/es/vxe-table/style.css +357 -213
  43. package/es/vxe-table/style.min.css +1 -1
  44. package/lib/grid/src/grid.js +1 -1
  45. package/lib/grid/src/grid.min.js +1 -1
  46. package/lib/index.css +1 -1
  47. package/lib/index.min.css +1 -1
  48. package/lib/index.umd.js +1833 -1161
  49. package/lib/index.umd.min.js +1 -1
  50. package/lib/locale/lang/ar-EG.js +2 -1
  51. package/lib/locale/lang/ar-EG.min.js +1 -1
  52. package/lib/locale/lang/de-DE.js +2 -1
  53. package/lib/locale/lang/de-DE.min.js +1 -1
  54. package/lib/locale/lang/en-US.js +4 -3
  55. package/lib/locale/lang/en-US.min.js +1 -1
  56. package/lib/locale/lang/en-US.umd.js +4 -3
  57. package/lib/locale/lang/es-ES.js +2 -1
  58. package/lib/locale/lang/es-ES.min.js +1 -1
  59. package/lib/locale/lang/es-ES.umd.js +2 -1
  60. package/lib/locale/lang/fr-FR.js +2 -1
  61. package/lib/locale/lang/fr-FR.min.js +1 -1
  62. package/lib/locale/lang/hu-HU.js +2 -1
  63. package/lib/locale/lang/hu-HU.min.js +1 -1
  64. package/lib/locale/lang/hu-HU.umd.js +2 -1
  65. package/lib/locale/lang/hy-AM.js +2 -1
  66. package/lib/locale/lang/hy-AM.min.js +1 -1
  67. package/lib/locale/lang/it-IT.js +2 -1
  68. package/lib/locale/lang/it-IT.min.js +1 -1
  69. package/lib/locale/lang/ja-JP.js +2 -1
  70. package/lib/locale/lang/ja-JP.min.js +1 -1
  71. package/lib/locale/lang/ja-JP.umd.js +2 -1
  72. package/lib/locale/lang/ko-KR.js +2 -1
  73. package/lib/locale/lang/ko-KR.min.js +1 -1
  74. package/lib/locale/lang/ko-KR.umd.js +2 -1
  75. package/lib/locale/lang/nb-NO.js +2 -1
  76. package/lib/locale/lang/nb-NO.min.js +1 -1
  77. package/lib/locale/lang/pt-BR.js +2 -1
  78. package/lib/locale/lang/pt-BR.min.js +1 -1
  79. package/lib/locale/lang/pt-BR.umd.js +2 -1
  80. package/lib/locale/lang/ru-RU.js +4 -3
  81. package/lib/locale/lang/ru-RU.min.js +1 -1
  82. package/lib/locale/lang/ru-RU.umd.js +4 -3
  83. package/lib/locale/lang/th-TH.js +2 -1
  84. package/lib/locale/lang/th-TH.min.js +1 -1
  85. package/lib/locale/lang/ug-CN.js +2 -1
  86. package/lib/locale/lang/ug-CN.min.js +1 -1
  87. package/lib/locale/lang/uk-UA.js +518 -517
  88. package/lib/locale/lang/uk-UA.min.js +1 -1
  89. package/lib/locale/lang/uk-UA.umd.js +518 -517
  90. package/lib/locale/lang/vi-VN.js +2 -1
  91. package/lib/locale/lang/vi-VN.min.js +1 -1
  92. package/lib/locale/lang/zh-CHT.js +2 -1
  93. package/lib/locale/lang/zh-CHT.min.js +1 -1
  94. package/lib/locale/lang/zh-CN.js +2 -1
  95. package/lib/locale/lang/zh-CN.min.js +1 -1
  96. package/lib/locale/lang/zh-CN.umd.js +2 -1
  97. package/lib/style.css +1 -1
  98. package/lib/style.min.css +1 -1
  99. package/lib/table/module/edit/hook.js +12 -2
  100. package/lib/table/module/edit/hook.min.js +1 -1
  101. package/lib/table/module/export/hook.js +97 -57
  102. package/lib/table/module/export/hook.min.js +1 -1
  103. package/lib/table/module/keyboard/hook.js +71 -28
  104. package/lib/table/module/keyboard/hook.min.js +1 -1
  105. package/lib/table/src/body.js +104 -76
  106. package/lib/table/src/body.min.js +1 -1
  107. package/lib/table/src/cell.js +27 -38
  108. package/lib/table/src/cell.min.js +1 -1
  109. package/lib/table/src/column.js +13 -1
  110. package/lib/table/src/column.min.js +1 -1
  111. package/lib/table/src/columnInfo.js +3 -0
  112. package/lib/table/src/columnInfo.min.js +1 -1
  113. package/lib/table/src/emits.js +1 -1
  114. package/lib/table/src/emits.min.js +1 -1
  115. package/lib/table/src/footer.js +30 -8
  116. package/lib/table/src/footer.min.js +1 -1
  117. package/lib/table/src/header.js +57 -169
  118. package/lib/table/src/header.min.js +1 -1
  119. package/lib/table/src/props.js +6 -2
  120. package/lib/table/src/props.min.js +1 -1
  121. package/lib/table/src/table.js +1227 -625
  122. package/lib/table/src/table.min.js +1 -1
  123. package/lib/table/src/util.js +100 -82
  124. package/lib/table/src/util.min.js +1 -1
  125. package/lib/table/style/style.css +357 -213
  126. package/lib/table/style/style.min.css +1 -1
  127. package/lib/ui/index.js +24 -11
  128. package/lib/ui/index.min.js +1 -1
  129. package/lib/ui/src/log.js +1 -1
  130. package/lib/ui/src/log.min.js +1 -1
  131. package/lib/vxe-table/style/style.css +357 -213
  132. package/lib/vxe-table/style/style.min.css +1 -1
  133. package/package.json +2 -2
  134. package/packages/grid/src/grid.ts +1 -1
  135. package/packages/locale/lang/ar-EG.ts +2 -1
  136. package/packages/locale/lang/de-DE.ts +2 -1
  137. package/packages/locale/lang/en-US.ts +4 -3
  138. package/packages/locale/lang/es-ES.ts +2 -1
  139. package/packages/locale/lang/fr-FR.ts +2 -1
  140. package/packages/locale/lang/hu-HU.ts +2 -1
  141. package/packages/locale/lang/hy-AM.ts +2 -1
  142. package/packages/locale/lang/it-IT.ts +2 -1
  143. package/packages/locale/lang/ja-JP.ts +2 -1
  144. package/packages/locale/lang/ko-KR.ts +2 -1
  145. package/packages/locale/lang/nb-NO.ts +2 -1
  146. package/packages/locale/lang/pt-BR.ts +2 -1
  147. package/packages/locale/lang/ru-RU.ts +4 -3
  148. package/packages/locale/lang/th-TH.ts +2 -1
  149. package/packages/locale/lang/ug-CN.ts +2 -1
  150. package/packages/locale/lang/uk-UA.ts +518 -517
  151. package/packages/locale/lang/vi-VN.ts +2 -1
  152. package/packages/locale/lang/zh-CHT.ts +2 -1
  153. package/packages/locale/lang/zh-CN.ts +2 -1
  154. package/packages/table/module/edit/hook.ts +7 -7
  155. package/packages/table/module/export/hook.ts +118 -65
  156. package/packages/table/module/keyboard/hook.ts +59 -25
  157. package/packages/table/src/body.ts +122 -80
  158. package/packages/table/src/cell.ts +28 -54
  159. package/packages/table/src/column.ts +13 -1
  160. package/packages/table/src/columnInfo.ts +3 -0
  161. package/packages/table/src/emits.ts +5 -1
  162. package/packages/table/src/footer.ts +32 -8
  163. package/packages/table/src/header.ts +73 -158
  164. package/packages/table/src/props.ts +6 -2
  165. package/packages/table/src/table.ts +1179 -631
  166. package/packages/table/src/util.ts +81 -62
  167. package/packages/ui/index.ts +23 -10
  168. package/styles/components/table.scss +428 -290
  169. package/styles/theme/base.scss +4 -6
  170. package/styles/theme/dark.scss +1 -0
  171. package/styles/theme/light.scss +1 -0
  172. package/styles/variable.scss +1 -1
  173. /package/es/{iconfont.1736748534420.ttf → iconfont.1737460213413.ttf} +0 -0
  174. /package/es/{iconfont.1736748534420.woff → iconfont.1737460213413.woff} +0 -0
  175. /package/es/{iconfont.1736748534420.woff2 → iconfont.1737460213413.woff2} +0 -0
  176. /package/lib/{iconfont.1736748534420.ttf → iconfont.1737460213413.ttf} +0 -0
  177. /package/lib/{iconfont.1736748534420.woff → iconfont.1737460213413.woff} +0 -0
  178. /package/lib/{iconfont.1736748534420.woff2 → iconfont.1737460213413.woff2} +0 -0
@@ -6,7 +6,7 @@ import { updateCellTitle, getPropClass } from '../../ui/src/dom'
6
6
  import { isEnableConf } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
 
9
- import type { VxeTablePrivateMethods, VxeTableConstructor, VxeTableDefines, VxeTableMethods, VxeComponentSlotType, VxeColumnPropTypes } from '../../../types'
9
+ import type { VxeTablePrivateMethods, VxeTableConstructor, VxeTableDefines, VxeComponentSlotType, VxeColumnPropTypes } from '../../../types'
10
10
 
11
11
  const { getI18n, renderer, renderEmptyElement } = VxeUI
12
12
 
@@ -24,7 +24,7 @@ export default defineComponent({
24
24
  }
25
25
  },
26
26
  setup (props) {
27
- const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods)
27
+ const $xeTable = inject('$xeTable', {} as VxeTableConstructor & VxeTablePrivateMethods)
28
28
 
29
29
  const { xID, props: tableProps, context: tableContext, reactData: tableReactData, internalData: tableInternalData } = $xeTable
30
30
  const { computeEditOpts, computeMouseOpts, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeColumnDragOpts, computeLeftFixedWidth, computeRightFixedWidth } = $xeTable.getComputeMaps()
@@ -41,11 +41,11 @@ export default defineComponent({
41
41
  // 滚动、拖动过程中不需要触发
42
42
  const isVMScrollProcess = () => {
43
43
  const { delayHover } = tableProps
44
- const { lastScrollTime, _isResize } = tableReactData
45
- return !!(_isResize || (lastScrollTime && Date.now() < lastScrollTime + (delayHover as number)))
44
+ const { lastScrollTime, isDragResize } = tableReactData
45
+ return !!(isDragResize || (lastScrollTime && Date.now() < lastScrollTime + (delayHover as number)))
46
46
  }
47
47
 
48
- const renderLine = (params: VxeTableDefines.CellRenderBodyParams) => {
48
+ const renderLine = (params: VxeTableDefines.CellRenderBodyParams, cellHeight: number) => {
49
49
  const { row, column } = params
50
50
  const { afterFullData } = tableInternalData
51
51
  const { treeConfig } = tableProps
@@ -61,18 +61,20 @@ export default defineComponent({
61
61
  let prevRow = null
62
62
  if (rest) {
63
63
  rLevel = rest.level
64
- prevRow = rest.items[rest._index - 1]
64
+ prevRow = rest.items[rest.treeIndex - 1]
65
65
  }
66
66
  const isFirstRow = $xeTable.eqRow(afterFullData[0], row)
67
67
  if (treeConfig && treeNode && (treeOpts.showLine || treeOpts.line)) {
68
68
  return [
69
69
  h('div', {
70
+ key: 'tl',
70
71
  class: 'vxe-tree--line-wrapper'
71
72
  }, [
72
73
  h('div', {
73
74
  class: 'vxe-tree--line',
74
75
  style: {
75
76
  height: `${isFirstRow ? 1 : calcTreeLine(params, prevRow)}px`,
77
+ bottom: `-${Math.floor(cellHeight / 2)}px`,
76
78
  left: `${(rLevel * treeOpts.indent) + (rLevel ? 2 - getOffsetSize($xeTable) : 0) + 16}px`
77
79
  }
78
80
  })
@@ -101,8 +103,8 @@ export default defineComponent({
101
103
  items: any[]
102
104
  ) => {
103
105
  const { fullAllDataRowIdData } = tableInternalData
104
- const { columnKey, height, showOverflow: allColumnOverflow, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig } = tableProps
105
- const { tableData, overflowX, currentColumn, scrollXLoad, scrollYLoad, isCalcCellHeight, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData
106
+ const { columnKey, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps
107
+ const { tableData, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData
106
108
  const { afterFullData, scrollXStore, scrollYStore } = tableInternalData
107
109
  const cellOpts = computeCellOpts.value
108
110
  const validOpts = computeValidOpts.value
@@ -112,15 +114,17 @@ export default defineComponent({
112
114
  const rowOpts = computeRowOpts.value
113
115
  const rowDragOpts = computeRowDragOpts.value
114
116
  const defaultRowHeight = computeDefaultRowHeight.value
117
+ const customCellHeight = cellOpts.height || rowOpts.height
118
+ const currCellHeight = customCellHeight || defaultRowHeight
115
119
  const { disabledMethod: dragDisabledMethod, isCrossDrag, isPeerDrag } = rowDragOpts
116
120
  const columnOpts = computeColumnOpts.value
117
121
  const mouseOpts = computeMouseOpts.value
118
122
  const areaOpts = computeAreaOpts.value
119
123
  const { selectCellToRow } = areaOpts
120
- const { type, cellRender, editRender, align, showOverflow, className, treeNode, slots } = column
121
- const { verticalAlign } = cellOpts
124
+ const { type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column
125
+ const { verticalAlign: allVerticalAlign } = cellOpts
122
126
  const { actived } = editStore
123
- const { height: customRHeight } = rowOpts
127
+ const rowRest = fullAllDataRowIdData[rowid]
124
128
  const colid = column.id
125
129
  const renderOpts = editRender || cellRender
126
130
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null
@@ -130,21 +134,26 @@ export default defineComponent({
130
134
  const columnIndex = $xeTable.getColumnIndex(column)
131
135
  const _columnIndex = $xeTable.getVTColumnIndex(column)
132
136
  const isEdit = isEnableConf(editRender)
137
+ const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0
133
138
  let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX
134
- const cellOverflow = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow
139
+ const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding
140
+ const cellOverflow = XEUtils.eqNull(showOverflow) ? isAllOverflow : showOverflow
135
141
  const showEllipsis = cellOverflow === 'ellipsis'
136
142
  const showTitle = cellOverflow === 'title'
137
143
  const showTooltip = cellOverflow === true || cellOverflow === 'tooltip'
138
- // 如果表格加上 showOverflow 则不再支持列单独设置
139
- const hasEllipsis = allColumnOverflow || showTitle || showTooltip || showEllipsis
144
+ const hasEllipsis = isAllOverflow || showTitle || showTooltip || showEllipsis
145
+ const isCsHeight = !!customCellHeight
146
+ const isRsHeight = resizeHeight > 0
140
147
  let isDirty
141
148
  const tdOns: any = {}
142
- const rest = fullAllDataRowIdData[rowid]
143
149
  const cellAlign = align || (compConf ? compConf.tableCellAlign : '') || allAlign
150
+ const cellVerticalAlign = XEUtils.eqNull(verticalAlign) ? allVerticalAlign : verticalAlign
144
151
  const errorValidItem = validErrorMaps[`${rowid}:${colid}`]
145
152
  const showValidTip = editRules && validOpts.showMessage && (validOpts.message === 'default' ? (height || tableData.length > 1) : validOpts.message === 'inline')
146
- const attrs: any = { colid }
147
- const params: VxeTableDefines.CellRenderBodyParams = {
153
+ const tdAttrs: any = { colid }
154
+ const cellParams: VxeTableDefines.CellRenderBodyParams & {
155
+ $table: VxeTableConstructor<any> & VxeTablePrivateMethods
156
+ } = {
148
157
  $table: $xeTable,
149
158
  $grid: $xeTable.xegrid,
150
159
  isEdit: false,
@@ -172,7 +181,7 @@ export default defineComponent({
172
181
  isRowDragCell = rowDragOpts.trigger === 'row' || (column.dragSort && rowDragOpts.trigger === 'cell')
173
182
  }
174
183
  if (isRowDragCell) {
175
- isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(params))
184
+ isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(cellParams))
176
185
  }
177
186
  // hover 进入事件
178
187
  if (showTitle || showTooltip || showAllTip || tooltipConfig) {
@@ -184,9 +193,9 @@ export default defineComponent({
184
193
  updateCellTitle(evnt.currentTarget, column)
185
194
  } else if (showTooltip || showAllTip) {
186
195
  // 如果配置了显示 tooltip
187
- $xeTable.triggerBodyTooltipEvent(evnt, params)
196
+ $xeTable.triggerBodyTooltipEvent(evnt, cellParams)
188
197
  }
189
- $xeTable.dispatchEvent('cell-mouseenter', Object.assign({ cell: evnt.currentTarget }, params), evnt)
198
+ $xeTable.dispatchEvent('cell-mouseenter', Object.assign({ cell: evnt.currentTarget }, cellParams), evnt)
190
199
  }
191
200
  }
192
201
  // hover 退出事件
@@ -198,13 +207,13 @@ export default defineComponent({
198
207
  if (showTooltip || showAllTip) {
199
208
  $xeTable.handleTargetLeaveEvent(evnt)
200
209
  }
201
- $xeTable.dispatchEvent('cell-mouseleave', Object.assign({ cell: evnt.currentTarget }, params), evnt)
210
+ $xeTable.dispatchEvent('cell-mouseleave', Object.assign({ cell: evnt.currentTarget }, cellParams), evnt)
202
211
  }
203
212
  }
204
213
  // 按下事件处理
205
214
  if (isRowDragCell || checkboxOpts.range || mouseConfig) {
206
215
  tdOns.onMousedown = (evnt: MouseEvent) => {
207
- $xeTable.triggerCellMousedownEvent(evnt, params)
216
+ $xeTable.triggerCellMousedownEvent(evnt, cellParams)
208
217
  }
209
218
  }
210
219
  // 拖拽列事件
@@ -213,11 +222,11 @@ export default defineComponent({
213
222
  }
214
223
  // 点击事件处理
215
224
  tdOns.onClick = (evnt: MouseEvent) => {
216
- $xeTable.triggerCellClickEvent(evnt, params)
225
+ $xeTable.triggerCellClickEvent(evnt, cellParams)
217
226
  }
218
227
  // 双击事件处理
219
228
  tdOns.onDblclick = (evnt: MouseEvent) => {
220
- $xeTable.triggerCellDblclickEvent(evnt, params)
229
+ $xeTable.triggerCellDblclickEvent(evnt, cellParams)
221
230
  }
222
231
  // 合并行或列
223
232
  if (mergeList.length) {
@@ -228,28 +237,28 @@ export default defineComponent({
228
237
  return null
229
238
  }
230
239
  if (rowspan > 1) {
231
- attrs.rowspan = rowspan
240
+ tdAttrs.rowspan = rowspan
232
241
  }
233
242
  if (colspan > 1) {
234
- attrs.colspan = colspan
243
+ tdAttrs.colspan = colspan
235
244
  }
236
245
  }
237
246
  } else if (spanMethod) {
238
247
  // 自定义合并行或列的方法
239
- const { rowspan = 1, colspan = 1 } = spanMethod(params) || {}
248
+ const { rowspan = 1, colspan = 1 } = spanMethod(cellParams) || {}
240
249
  if (!rowspan || !colspan) {
241
250
  return null
242
251
  }
243
252
  if (rowspan > 1) {
244
- attrs.rowspan = rowspan
253
+ tdAttrs.rowspan = rowspan
245
254
  }
246
255
  if (colspan > 1) {
247
- attrs.colspan = colspan
256
+ tdAttrs.colspan = colspan
248
257
  }
249
258
  }
250
259
  // 如果被合并不可隐藏
251
260
  if (fixedHiddenColumn && mergeList) {
252
- if (attrs.colspan > 1 || attrs.rowspan > 1) {
261
+ if (tdAttrs.colspan > 1 || tdAttrs.rowspan > 1) {
253
262
  fixedHiddenColumn = false
254
263
  }
255
264
  }
@@ -257,42 +266,80 @@ export default defineComponent({
257
266
  if (!fixedHiddenColumn && editConfig && (editRender || cellRender) && (editOpts.showStatus || editOpts.showUpdateStatus)) {
258
267
  isDirty = $xeTable.isUpdateByRow(row, column.field)
259
268
  }
269
+
270
+ const isVNAutoHeight = scrollYLoad && !hasEllipsis
271
+ let cellHeight = currCellHeight
272
+ const vnHeight = calcCellHeightFlag ? rowRest.height : 0
273
+ if (resizeHeight) {
274
+ cellHeight = resizeHeight
275
+ } else {
276
+ if (scrollYLoad) {
277
+ if (!hasEllipsis) {
278
+ cellHeight = vnHeight || currCellHeight
279
+ }
280
+ }
281
+ }
282
+
283
+ const isLastColumn = $columnIndex === columns.length - 1
284
+ const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
285
+
286
+ let isVNPreEmptyStatus = false
287
+ if (scrollYLoad && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
288
+ isVNPreEmptyStatus = true
289
+ } else if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
290
+ isVNPreEmptyStatus = true
291
+ }
292
+
293
+ const tcStyle: Record<string, string> = {}
294
+ if (scrollYLoad || hasEllipsis || isCsHeight || isRsHeight) {
295
+ tcStyle.height = `${cellHeight}px`
296
+ } else {
297
+ tcStyle.minHeight = `${cellHeight}px`
298
+ }
299
+
260
300
  const tdVNs: any[] = []
261
- if (fixedHiddenColumn && (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
301
+ if (fixedHiddenColumn && isAllOverflow) {
262
302
  tdVNs.push(
263
303
  h('div', {
304
+ key: 'tc',
264
305
  class: ['vxe-cell', {
265
306
  'c--title': showTitle,
266
307
  'c--tooltip': showTooltip,
267
308
  'c--ellipsis': showEllipsis
268
309
  }],
269
- style: {
270
- maxHeight: hasEllipsis && (customRHeight || defaultRowHeight) ? `${customRHeight || defaultRowHeight}px` : ''
271
- }
310
+ style: tcStyle
272
311
  })
273
312
  )
274
313
  } else {
275
314
  // 渲染单元格
276
315
  tdVNs.push(
277
- ...renderLine(params),
316
+ ...renderLine(cellParams, cellHeight),
278
317
  h('div', {
318
+ key: 'tc',
279
319
  class: ['vxe-cell', {
280
320
  'c--title': showTitle,
281
321
  'c--tooltip': showTooltip,
282
322
  'c--ellipsis': showEllipsis
283
323
  }],
284
- style: {
285
- maxHeight: hasEllipsis && (customRHeight || defaultRowHeight) ? `${customRHeight || defaultRowHeight}px` : ''
286
- },
324
+ style: tcStyle,
287
325
  title: showTitle ? $xeTable.getCellLabel(row, column) : null
288
- }, column.renderCell(params))
326
+ }, isVNPreEmptyStatus
327
+ ? []
328
+ : [
329
+ h('div', {
330
+ colid,
331
+ rowid,
332
+ class: 'vxe-cell--wrapper'
333
+ }, column.renderCell(cellParams))
334
+ ])
289
335
  )
290
336
  if (showValidTip && errorValidItem) {
291
337
  const errRule = errorValidItem.rule
292
338
  const validSlot = slots ? slots.valid : null
293
- const validParams = { ...params, ...errorValidItem, rule: errorValidItem }
339
+ const validParams = { ...cellParams, ...errorValidItem, rule: errorValidItem }
294
340
  tdVNs.push(
295
341
  h('div', {
342
+ key: 'tcv',
296
343
  class: ['vxe-cell--valid-error-tip', getPropClass(validOpts.className, validParams)],
297
344
  style: errRule && errRule.maxWidth
298
345
  ? {
@@ -315,53 +362,47 @@ export default defineComponent({
315
362
  )
316
363
  }
317
364
  }
318
- let cellHeight = ''
319
- const vnHeight = isCalcCellHeight ? rest.height : 0
320
- if (hasEllipsis) {
321
- if (customRHeight) {
322
- cellHeight = `${customRHeight}px`
323
- } else if (!isAllOverflow) {
324
- cellHeight = `${vnHeight || defaultRowHeight || 18}px`
325
- }
326
- } else {
327
- cellHeight = `${vnHeight || defaultRowHeight || 18}px`
328
- }
329
365
 
366
+ let showAreaRowStatus = false
330
367
  if (mouseConfig && mouseOpts.area && selectCellToRow) {
331
368
  if (
332
- (!$columnIndex && selectCellToRow === true) ||
369
+ (!_columnIndex && selectCellToRow === true) ||
333
370
  (selectCellToRow === column.field)
334
371
  ) {
335
- tdVNs.push(
336
- h('div', {
337
- class: 'vxe-cell--area-status'
338
- })
339
- )
372
+ showAreaRowStatus = true
340
373
  }
341
374
  }
342
- const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
343
375
 
344
- let isPreLoadStatus = false
345
- if (scrollYLoad && (_rowIndex < scrollYStore.visibleStartIndex || _rowIndex > scrollYStore.visibleEndIndex)) {
346
- isPreLoadStatus = true
347
- } else if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex || _columnIndex > scrollXStore.visibleEndIndex)) {
348
- isPreLoadStatus = true
376
+ if (rowResize && rowOpts.resizable) {
377
+ tdVNs.push(
378
+ h('div', {
379
+ key: 'tcr',
380
+ class: 'vxe-cell--row-resizable',
381
+ onMousedown: (evnt: MouseEvent) => $xeTable.handleRowResizeMousedownEvent(evnt, cellParams),
382
+ onDblclick: (evnt: MouseEvent) => $xeTable.handleRowResizeDblclickEvent(evnt, cellParams)
383
+ })
384
+ )
349
385
  }
350
386
 
351
387
  return h('td', {
352
388
  class: [
353
389
  'vxe-body--column',
354
390
  colid,
391
+ cellVerticalAlign ? `col--vertical-${cellVerticalAlign}` : '',
392
+ cellAlign ? `col--${cellAlign}` : '',
393
+ type ? `col--${type}` : '',
355
394
  {
356
- [`col--${cellAlign}`]: cellAlign,
357
- [`col--vertical-${verticalAlign}`]: verticalAlign,
358
- [`col--${type}`]: type,
359
- 'col--last': $columnIndex === columns.length - 1,
395
+ 'col--last': isLastColumn,
360
396
  'col--tree-node': treeNode,
361
397
  'col--edit': isEdit,
362
398
  'col--ellipsis': hasEllipsis,
399
+ 'col--cs-height': isCsHeight,
400
+ 'col--rs-height': isRsHeight,
401
+ 'col--to-row': showAreaRowStatus,
402
+ 'col--auto-height': isVNAutoHeight,
363
403
  'fixed--width': !isAutoCellWidth,
364
404
  'fixed--hidden': fixedHiddenColumn,
405
+ 'is--padding': isCellPadding,
365
406
  'is--drag-cell': isRowDragCell && (isCrossDrag || isPeerDrag || !rowLevel),
366
407
  'is--drag-disabled': isDisabledDrag,
367
408
  'col--dirty': isDirty,
@@ -369,22 +410,20 @@ export default defineComponent({
369
410
  'col--valid-error': !!errorValidItem,
370
411
  'col--current': currentColumn === column
371
412
  },
372
- getPropClass(compCellClassName, params),
373
- getPropClass(className, params),
374
- getPropClass(allCellClassName, params)
413
+ getPropClass(compCellClassName, cellParams),
414
+ getPropClass(className, cellParams),
415
+ getPropClass(allCellClassName, cellParams)
375
416
  ],
376
417
  key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || rowOpts.useKey || columnOpts.drag ? colid : $columnIndex,
377
- ...attrs,
378
- style: Object.assign({
379
- height: cellHeight
380
- }, XEUtils.isFunction(compCellStyle) ? compCellStyle(params) : compCellStyle, XEUtils.isFunction(cellStyle) ? cellStyle(params) : cellStyle),
418
+ ...tdAttrs,
419
+ style: Object.assign({}, XEUtils.isFunction(compCellStyle) ? compCellStyle(cellParams) : compCellStyle, XEUtils.isFunction(cellStyle) ? cellStyle(cellParams) : cellStyle),
381
420
  ...tdOns
382
- }, isPreLoadStatus || (isOptimizeMode && fixedHiddenColumn) ? [] : tdVNs)
421
+ }, isOptimizeMode && fixedHiddenColumn ? [] : tdVNs)
383
422
  }
384
423
 
385
424
  const renderRows = (fixedType: VxeColumnPropTypes.Fixed, isOptimizeMode: boolean, tableData: any[], tableColumn: VxeTableDefines.ColumnInfo[]) => {
386
- const { stripe, rowKey, highlightHoverRow, rowClassName, rowStyle, showOverflow: allColumnOverflow, editConfig, treeConfig } = tableProps
387
- const { hasFixedColumn, treeExpandedMaps, scrollXLoad, scrollYLoad, rowExpandedMaps, expandColumn, selectRadioRow, pendingRowMaps, isDragColMove } = tableReactData
425
+ const { stripe, rowKey, highlightHoverRow, rowClassName, rowStyle, editConfig, treeConfig } = tableProps
426
+ const { hasFixedColumn, treeExpandedMaps, scrollXLoad, scrollYLoad, isAllOverflow, rowExpandedMaps, expandColumn, selectRadioRow, pendingRowMaps, isDragColMove } = tableReactData
388
427
  const { fullAllDataRowIdData } = tableInternalData
389
428
  const checkboxOpts = computeCheckboxOpts.value
390
429
  const radioOpts = computeRadioOpts.value
@@ -501,7 +540,7 @@ export default defineComponent({
501
540
  cellStyle.paddingLeft = `${(rowLevel * treeOpts.indent) + 30}px`
502
541
  }
503
542
  const { showOverflow } = expandColumn
504
- const hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow
543
+ const hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? isAllOverflow : showOverflow
505
544
  const expandParams = { $table: $xeTable, seq, column: expandColumn, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex, _rowIndex }
506
545
  rows.push(
507
546
  h('tr', {
@@ -575,7 +614,7 @@ export default defineComponent({
575
614
  const { slots } = tableContext
576
615
 
577
616
  const { fixedColumn, fixedType, tableColumn } = props
578
- const { showOverflow: allColumnOverflow, spanMethod, footerSpanMethod, mouseConfig } = tableProps
617
+ const { spanMethod, footerSpanMethod, mouseConfig } = tableProps
579
618
  const { isGroup, tableData, scrollXLoad, scrollYLoad, isAllOverflow, isDragRowMove, expandColumn, dragRow, dragCol } = tableReactData
580
619
  const { visibleColumn, fullAllDataRowIdData, fullColumnIdData } = tableInternalData
581
620
  const rowOpts = computeRowOpts.value
@@ -589,7 +628,7 @@ export default defineComponent({
589
628
  let renderColumnList = tableColumn as VxeTableDefines.ColumnInfo[]
590
629
  let isOptimizeMode = false
591
630
  // 如果是使用优化模式
592
- if (scrollXLoad || scrollYLoad || (allColumnOverflow && isAllOverflow)) {
631
+ if (scrollXLoad || scrollYLoad || isAllOverflow) {
593
632
  if (expandColumn || spanMethod || footerSpanMethod) {
594
633
  // 如果不支持优化模式
595
634
  } else {
@@ -761,6 +800,9 @@ export default defineComponent({
761
800
  }),
762
801
  h('span', {
763
802
  class: 'vxe-table--cell-active-area'
803
+ }),
804
+ h('span', {
805
+ class: 'vxe-table--cell-row-status-area'
764
806
  })
765
807
  ])
766
808
  : renderEmptyElement($xeTable),
@@ -6,7 +6,7 @@ import { updateCellTitle } from '../../ui/src/dom'
6
6
  import { createColumn, getRowid } from './util'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
 
9
- import type { VxeTableConstructor, VxeTableDefines, VxeColumnPropTypes, VxeTablePrivateMethods, VxeComponentSlotType } from '../../../types'
9
+ import type { VxeTableConstructor, VxeTableDefines, VxeTablePrivateMethods, VxeComponentSlotType } from '../../../types'
10
10
 
11
11
  const { getI18n, getIcon, renderer, formats, renderEmptyElement } = VxeUI
12
12
 
@@ -173,7 +173,7 @@ function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams & {
173
173
  const ons: Record<string, any> = {}
174
174
  if (showTitle || showTooltip || showAllTip) {
175
175
  ons.onMouseenter = (evnt: MouseEvent) => {
176
- if (tableReactData._isResize) {
176
+ if (tableReactData.isDragResize) {
177
177
  return
178
178
  }
179
179
  if (showTitle) {
@@ -185,7 +185,7 @@ function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams & {
185
185
  }
186
186
  if (showTooltip || showAllTip) {
187
187
  ons.onMouseleave = (evnt: MouseEvent) => {
188
- if (tableReactData._isResize) {
188
+ if (tableReactData.isDragResize) {
189
189
  return
190
190
  }
191
191
  if (showTooltip || showAllTip) {
@@ -207,25 +207,6 @@ function renderTitleContent (params: VxeTableDefines.CellRenderHeaderParams & {
207
207
  ]
208
208
  }
209
209
 
210
- function formatFooterLabel (footerFormatter: VxeColumnPropTypes.FooterFormatter, params: {
211
- itemValue: any
212
- column: VxeTableDefines.ColumnInfo
213
- row: any
214
- items: any[]
215
- _columnIndex: number
216
- }) {
217
- if (XEUtils.isFunction(footerFormatter)) {
218
- return `${footerFormatter(params)}`
219
- }
220
- const isArr = XEUtils.isArray(footerFormatter)
221
- const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter)
222
- const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null
223
- if (footerFormatMethod) {
224
- return `${isArr ? footerFormatMethod(params, ...footerFormatter.slice(1)) : footerFormatMethod(params)}`
225
- }
226
- return ''
227
- }
228
-
229
210
  function getFooterContent (params: VxeTableDefines.CellRenderFooterParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
230
211
  const { $table, column, _columnIndex, items, row } = params
231
212
  const { slots, editRender, cellRender, footerFormatter } = column
@@ -234,42 +215,39 @@ function getFooterContent (params: VxeTableDefines.CellRenderFooterParams & { $t
234
215
  if (footerSlot) {
235
216
  return $table.callSlot(footerSlot, params)
236
217
  }
218
+ let itemValue = ''
219
+ // 兼容老模式
220
+ if (XEUtils.isArray(items)) {
221
+ itemValue = items[_columnIndex]
222
+ } else {
223
+ itemValue = XEUtils.get(row, column.field)
224
+ }
225
+ const footParams = Object.assign(params, {
226
+ itemValue
227
+ })
228
+ if (footerFormatter) {
229
+ if (XEUtils.isFunction(footerFormatter)) {
230
+ return `${footerFormatter(footParams)}`
231
+ }
232
+ const isArr = XEUtils.isArray(footerFormatter)
233
+ const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter)
234
+ const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null
235
+ if (footerFormatMethod) {
236
+ return `${isArr ? footerFormatMethod(footParams, ...footerFormatter.slice(1)) : footerFormatMethod(footParams)}`
237
+ }
238
+ return ''
239
+ }
237
240
  if (renderOpts) {
238
241
  const compConf = renderer.get(renderOpts.name)
239
242
  if (compConf) {
240
243
  const rtFooter = compConf.renderTableFooter || compConf.renderFooter
241
244
  if (rtFooter) {
242
- return getSlotVNs(rtFooter(renderOpts, params))
245
+ return getSlotVNs(rtFooter(renderOpts, footParams))
243
246
  }
244
247
  }
245
248
  }
246
- let itemValue = ''
247
- // 兼容老模式
248
- if (XEUtils.isArray(items)) {
249
- itemValue = items[_columnIndex]
250
- return [
251
- footerFormatter
252
- ? formatFooterLabel(footerFormatter, {
253
- itemValue,
254
- column,
255
- row,
256
- items,
257
- _columnIndex
258
- })
259
- : formatText(itemValue, 1)
260
- ]
261
- }
262
- itemValue = XEUtils.get(row, column.field)
263
249
  return [
264
- footerFormatter
265
- ? formatFooterLabel(footerFormatter, {
266
- itemValue,
267
- column,
268
- row,
269
- items,
270
- _columnIndex
271
- })
272
- : formatText(itemValue, 1)
250
+ formatText(itemValue, 1)
273
251
  ]
274
252
  }
275
253
 
@@ -425,11 +403,7 @@ export const Cell = {
425
403
  return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params) as VNode[])
426
404
  },
427
405
  renderDefaultFooter (params: VxeTableDefines.CellRenderFooterParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }) {
428
- return [
429
- h('span', {
430
- class: 'vxe-cell--item'
431
- }, getFooterContent(params))
432
- ]
406
+ return getFooterContent(params)
433
407
  },
434
408
 
435
409
  /**
@@ -57,6 +57,16 @@ export const columnProps = {
57
57
  formatter: [Function, Array, String] as PropType<VxeColumnPropTypes.Formatter<any>>,
58
58
  // 格式化表尾显示内容
59
59
  footerFormatter: [Function, Array, String] as PropType<VxeColumnPropTypes.FooterFormatter>,
60
+ // 是否显示间距
61
+ padding: {
62
+ type: Boolean as PropType<VxeColumnPropTypes.Padding>,
63
+ default: null
64
+ },
65
+ // 垂直对齐方式
66
+ verticalAlign: {
67
+ type: String as PropType<VxeColumnPropTypes.VerticalAlign>,
68
+ default: null
69
+ },
60
70
  // 是否允许排序
61
71
  sortable: Boolean as PropType<VxeColumnPropTypes.Sortable>,
62
72
  // 自定义排序的属性
@@ -83,8 +93,10 @@ export const columnProps = {
83
93
  filterRender: Object as PropType<VxeColumnPropTypes.FilterRender>,
84
94
  // 设置为树节点
85
95
  treeNode: Boolean as PropType<VxeColumnPropTypes.TreeNode>,
86
- // 指定为树节点
96
+ // 设置为拖拽排序
87
97
  dragSort: Boolean as PropType<VxeColumnPropTypes.DragSort>,
98
+ // 设置为行高拖拽
99
+ rowResize: Boolean as PropType<VxeColumnPropTypes.RowResize>,
88
100
  // 是否可视
89
101
  visible: {
90
102
  type: Boolean as PropType<VxeColumnPropTypes.Visible>,
@@ -74,6 +74,8 @@ export class ColumnInfo {
74
74
  footerClassName: _vm.footerClassName,
75
75
  formatter: formatter,
76
76
  footerFormatter: _vm.footerFormatter,
77
+ padding: _vm.padding,
78
+ verticalAlign: _vm.verticalAlign,
77
79
  sortable: _vm.sortable,
78
80
  sortBy: _vm.sortBy,
79
81
  sortType: _vm.sortType,
@@ -85,6 +87,7 @@ export class ColumnInfo {
85
87
  filterRender: _vm.filterRender,
86
88
  treeNode: _vm.treeNode,
87
89
  dragSort: _vm.dragSort,
90
+ rowResize: _vm.rowResize,
88
91
  cellType: _vm.cellType,
89
92
  cellRender: _vm.cellRender,
90
93
  editRender: _vm.editRender,
@@ -36,7 +36,11 @@ export default [
36
36
  'filter-change',
37
37
  'filter-visible',
38
38
  'clear-filter',
39
- 'resizable-change',
39
+
40
+ 'resizable-change', // 废弃
41
+
42
+ 'column-resizable-change',
43
+ 'row-resizable-change',
40
44
  'toggle-row-expand',
41
45
  'toggle-tree-expand',
42
46
  'menu-click',