vxe-table 4.10.6-beta.9 → 4.10.6

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 +118 -84
  29. package/es/table/src/cell.js +41 -55
  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 +45 -7
  34. package/es/table/src/header.js +67 -165
  35. package/es/table/src/props.js +14 -4
  36. package/es/table/src/table.js +858 -398
  37. package/es/table/src/util.js +77 -62
  38. package/es/table/style.css +246 -191
  39. package/es/table/style.min.css +1 -1
  40. package/es/ui/index.js +20 -7
  41. package/es/ui/src/log.js +1 -1
  42. package/es/vxe-table/style.css +246 -191
  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 +1489 -874
  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 +7 -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 +121 -80
  106. package/lib/table/src/body.min.js +1 -1
  107. package/lib/table/src/cell.js +32 -42
  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 +45 -5
  116. package/lib/table/src/footer.min.js +1 -1
  117. package/lib/table/src/header.js +51 -178
  118. package/lib/table/src/header.min.js +1 -1
  119. package/lib/table/src/props.js +14 -4
  120. package/lib/table/src/props.min.js +1 -1
  121. package/lib/table/src/table.js +911 -384
  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 +246 -191
  126. package/lib/table/style/style.min.css +1 -1
  127. package/lib/ui/index.js +20 -7
  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 +246 -191
  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 +136 -94
  158. package/packages/table/src/cell.ts +41 -63
  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 +48 -8
  163. package/packages/table/src/header.ts +67 -165
  164. package/packages/table/src/props.ts +14 -5
  165. package/packages/table/src/table.ts +862 -398
  166. package/packages/table/src/util.ts +81 -62
  167. package/packages/ui/index.ts +19 -6
  168. package/styles/components/table.scss +313 -274
  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.1736854674495.ttf → iconfont.1738985856004.ttf} +0 -0
  174. /package/es/{iconfont.1736854674495.woff → iconfont.1738985856004.woff} +0 -0
  175. /package/es/{iconfont.1736854674495.woff2 → iconfont.1738985856004.woff2} +0 -0
  176. /package/lib/{iconfont.1736854674495.ttf → iconfont.1738985856004.ttf} +0 -0
  177. /package/lib/{iconfont.1736854674495.woff → iconfont.1738985856004.woff} +0 -0
  178. /package/lib/{iconfont.1736854674495.woff2 → iconfont.1738985856004.woff2} +0 -0
@@ -21,7 +21,7 @@ export default defineComponent({
21
21
  setup(props) {
22
22
  const $xeTable = inject('$xeTable', {});
23
23
  const { xID, props: tableProps, context: tableContext, reactData: tableReactData, internalData: tableInternalData } = $xeTable;
24
- const { computeEditOpts, computeMouseOpts, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeColumnDragOpts, computeLeftFixedWidth, computeRightFixedWidth } = $xeTable.getComputeMaps();
24
+ const { computeEditOpts, computeMouseOpts, computeAreaOpts, computeDefaultRowHeight, computeEmptyOpts, computeTooltipOpts, computeRadioOpts, computeExpandOpts, computeTreeOpts, computeCheckboxOpts, computeCellOpts, computeValidOpts, computeRowOpts, computeColumnOpts, computeRowDragOpts, computeColumnDragOpts, computeLeftFixedWidth, computeRightFixedWidth, computeResizableOpts } = $xeTable.getComputeMaps();
25
25
  const refElem = ref();
26
26
  const refBodyScroll = ref();
27
27
  const refBodyTable = ref();
@@ -33,10 +33,10 @@ export default defineComponent({
33
33
  // 滚动、拖动过程中不需要触发
34
34
  const isVMScrollProcess = () => {
35
35
  const { delayHover } = tableProps;
36
- const { lastScrollTime, _isResize } = tableReactData;
37
- return !!(_isResize || (lastScrollTime && Date.now() < lastScrollTime + delayHover));
36
+ const { lastScrollTime, isDragResize } = tableReactData;
37
+ return !!(isDragResize || (lastScrollTime && Date.now() < lastScrollTime + delayHover));
38
38
  };
39
- const renderLine = (params) => {
39
+ const renderLine = (params, cellHeight) => {
40
40
  const { row, column } = params;
41
41
  const { afterFullData } = tableInternalData;
42
42
  const { treeConfig } = tableProps;
@@ -58,12 +58,14 @@ export default defineComponent({
58
58
  if (treeConfig && treeNode && (treeOpts.showLine || treeOpts.line)) {
59
59
  return [
60
60
  h('div', {
61
+ key: 'tl',
61
62
  class: 'vxe-tree--line-wrapper'
62
63
  }, [
63
64
  h('div', {
64
65
  class: 'vxe-tree--line',
65
66
  style: {
66
67
  height: `${isFirstRow ? 1 : calcTreeLine(params, prevRow)}px`,
68
+ bottom: `-${Math.floor(cellHeight / 2)}px`,
67
69
  left: `${(rLevel * treeOpts.indent) + (rLevel ? 2 - getOffsetSize($xeTable) : 0) + 16}px`
68
70
  }
69
71
  })
@@ -77,26 +79,30 @@ export default defineComponent({
77
79
  */
78
80
  const renderTdColumn = (seq, rowid, fixedType, isOptimizeMode, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, columns, items) => {
79
81
  const { fullAllDataRowIdData } = tableInternalData;
80
- const { columnKey, height, showOverflow: allColumnOverflow, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig } = tableProps;
81
- const { tableData, overflowX, currentColumn, scrollXLoad, scrollYLoad, isCalcCellHeight, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData;
82
+ const { columnKey, resizable: allResizable, border, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps;
83
+ const { tableData, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData;
82
84
  const { afterFullData, scrollXStore, scrollYStore } = tableInternalData;
83
85
  const cellOpts = computeCellOpts.value;
84
86
  const validOpts = computeValidOpts.value;
85
87
  const checkboxOpts = computeCheckboxOpts.value;
86
88
  const editOpts = computeEditOpts.value;
87
89
  const tooltipOpts = computeTooltipOpts.value;
90
+ const resizableOpts = computeResizableOpts.value;
91
+ const { isAllColumnDrag, isAllRowDrag } = resizableOpts;
88
92
  const rowOpts = computeRowOpts.value;
89
93
  const rowDragOpts = computeRowDragOpts.value;
90
94
  const defaultRowHeight = computeDefaultRowHeight.value;
95
+ const customCellHeight = cellOpts.height || rowOpts.height;
96
+ const currCellHeight = customCellHeight || defaultRowHeight;
91
97
  const { disabledMethod: dragDisabledMethod, isCrossDrag, isPeerDrag } = rowDragOpts;
92
98
  const columnOpts = computeColumnOpts.value;
93
99
  const mouseOpts = computeMouseOpts.value;
94
100
  const areaOpts = computeAreaOpts.value;
95
101
  const { selectCellToRow } = areaOpts;
96
- const { type, cellRender, editRender, align, showOverflow, className, treeNode, slots } = column;
97
- const { verticalAlign } = cellOpts;
102
+ const { type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column;
103
+ const { verticalAlign: allVerticalAlign } = cellOpts;
98
104
  const { actived } = editStore;
99
- const { height: customRHeight } = rowOpts;
105
+ const rowRest = fullAllDataRowIdData[rowid];
100
106
  const colid = column.id;
101
107
  const renderOpts = editRender || cellRender;
102
108
  const compConf = renderOpts ? renderer.get(renderOpts.name) : null;
@@ -106,21 +112,25 @@ export default defineComponent({
106
112
  const columnIndex = $xeTable.getColumnIndex(column);
107
113
  const _columnIndex = $xeTable.getVTColumnIndex(column);
108
114
  const isEdit = isEnableConf(editRender);
115
+ const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
109
116
  let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX;
110
- const cellOverflow = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow;
117
+ const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding;
118
+ const cellOverflow = XEUtils.eqNull(showOverflow) ? isAllOverflow : showOverflow;
111
119
  const showEllipsis = cellOverflow === 'ellipsis';
112
120
  const showTitle = cellOverflow === 'title';
113
121
  const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
114
- // 如果表格加上 showOverflow 则不再支持列单独设置
115
- const hasEllipsis = allColumnOverflow || showTitle || showTooltip || showEllipsis;
122
+ const hasEllipsis = isAllOverflow || showTitle || showTooltip || showEllipsis;
123
+ const showResizable = (XEUtils.isBoolean(column.resizable) ? column.resizable : (columnOpts.resizable || allResizable));
124
+ const isCsHeight = !!customCellHeight;
125
+ const isRsHeight = resizeHeight > 0;
116
126
  let isDirty;
117
127
  const tdOns = {};
118
- const rest = fullAllDataRowIdData[rowid];
119
128
  const cellAlign = align || (compConf ? compConf.tableCellAlign : '') || allAlign;
129
+ const cellVerticalAlign = XEUtils.eqNull(verticalAlign) ? allVerticalAlign : verticalAlign;
120
130
  const errorValidItem = validErrorMaps[`${rowid}:${colid}`];
121
131
  const showValidTip = editRules && validOpts.showMessage && (validOpts.message === 'default' ? (height || tableData.length > 1) : validOpts.message === 'inline');
122
- const attrs = { colid };
123
- const params = {
132
+ const tdAttrs = { colid };
133
+ const cellParams = {
124
134
  $table: $xeTable,
125
135
  $grid: $xeTable.xegrid,
126
136
  isEdit: false,
@@ -148,7 +158,7 @@ export default defineComponent({
148
158
  isRowDragCell = rowDragOpts.trigger === 'row' || (column.dragSort && rowDragOpts.trigger === 'cell');
149
159
  }
150
160
  if (isRowDragCell) {
151
- isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(params));
161
+ isDisabledDrag = !!(dragDisabledMethod && dragDisabledMethod(cellParams));
152
162
  }
153
163
  // hover 进入事件
154
164
  if (showTitle || showTooltip || showAllTip || tooltipConfig) {
@@ -161,9 +171,9 @@ export default defineComponent({
161
171
  }
162
172
  else if (showTooltip || showAllTip) {
163
173
  // 如果配置了显示 tooltip
164
- $xeTable.triggerBodyTooltipEvent(evnt, params);
174
+ $xeTable.triggerBodyTooltipEvent(evnt, cellParams);
165
175
  }
166
- $xeTable.dispatchEvent('cell-mouseenter', Object.assign({ cell: evnt.currentTarget }, params), evnt);
176
+ $xeTable.dispatchEvent('cell-mouseenter', Object.assign({ cell: evnt.currentTarget }, cellParams), evnt);
167
177
  };
168
178
  }
169
179
  // hover 退出事件
@@ -175,13 +185,13 @@ export default defineComponent({
175
185
  if (showTooltip || showAllTip) {
176
186
  $xeTable.handleTargetLeaveEvent(evnt);
177
187
  }
178
- $xeTable.dispatchEvent('cell-mouseleave', Object.assign({ cell: evnt.currentTarget }, params), evnt);
188
+ $xeTable.dispatchEvent('cell-mouseleave', Object.assign({ cell: evnt.currentTarget }, cellParams), evnt);
179
189
  };
180
190
  }
181
191
  // 按下事件处理
182
192
  if (isRowDragCell || checkboxOpts.range || mouseConfig) {
183
193
  tdOns.onMousedown = (evnt) => {
184
- $xeTable.triggerCellMousedownEvent(evnt, params);
194
+ $xeTable.triggerCellMousedownEvent(evnt, cellParams);
185
195
  };
186
196
  }
187
197
  // 拖拽列事件
@@ -190,11 +200,11 @@ export default defineComponent({
190
200
  }
191
201
  // 点击事件处理
192
202
  tdOns.onClick = (evnt) => {
193
- $xeTable.triggerCellClickEvent(evnt, params);
203
+ $xeTable.triggerCellClickEvent(evnt, cellParams);
194
204
  };
195
205
  // 双击事件处理
196
206
  tdOns.onDblclick = (evnt) => {
197
- $xeTable.triggerCellDblclickEvent(evnt, params);
207
+ $xeTable.triggerCellDblclickEvent(evnt, cellParams);
198
208
  };
199
209
  // 合并行或列
200
210
  if (mergeList.length) {
@@ -205,29 +215,29 @@ export default defineComponent({
205
215
  return null;
206
216
  }
207
217
  if (rowspan > 1) {
208
- attrs.rowspan = rowspan;
218
+ tdAttrs.rowspan = rowspan;
209
219
  }
210
220
  if (colspan > 1) {
211
- attrs.colspan = colspan;
221
+ tdAttrs.colspan = colspan;
212
222
  }
213
223
  }
214
224
  }
215
225
  else if (spanMethod) {
216
226
  // 自定义合并行或列的方法
217
- const { rowspan = 1, colspan = 1 } = spanMethod(params) || {};
227
+ const { rowspan = 1, colspan = 1 } = spanMethod(cellParams) || {};
218
228
  if (!rowspan || !colspan) {
219
229
  return null;
220
230
  }
221
231
  if (rowspan > 1) {
222
- attrs.rowspan = rowspan;
232
+ tdAttrs.rowspan = rowspan;
223
233
  }
224
234
  if (colspan > 1) {
225
- attrs.colspan = colspan;
235
+ tdAttrs.colspan = colspan;
226
236
  }
227
237
  }
228
238
  // 如果被合并不可隐藏
229
239
  if (fixedHiddenColumn && mergeList) {
230
- if (attrs.colspan > 1 || attrs.rowspan > 1) {
240
+ if (tdAttrs.colspan > 1 || tdAttrs.rowspan > 1) {
231
241
  fixedHiddenColumn = false;
232
242
  }
233
243
  }
@@ -236,31 +246,38 @@ export default defineComponent({
236
246
  isDirty = $xeTable.isUpdateByRow(row, column.field);
237
247
  }
238
248
  const isVNAutoHeight = scrollYLoad && !hasEllipsis;
239
- let cellHeight = 0;
240
- const vnHeight = isCalcCellHeight ? rest.height : 0;
241
- if (hasEllipsis) {
242
- if (customRHeight) {
243
- cellHeight = customRHeight;
244
- }
245
- else if (!isAllOverflow) {
246
- cellHeight = vnHeight || defaultRowHeight || 18;
247
- }
249
+ let cellHeight = currCellHeight;
250
+ const vnHeight = calcCellHeightFlag ? rowRest.height : 0;
251
+ if (resizeHeight) {
252
+ cellHeight = resizeHeight;
248
253
  }
249
254
  else {
250
- cellHeight = vnHeight || defaultRowHeight || 18;
255
+ if (scrollYLoad) {
256
+ if (!hasEllipsis) {
257
+ cellHeight = vnHeight || currCellHeight;
258
+ }
259
+ }
260
+ }
261
+ const isLastColumn = $columnIndex === columns.length - 1;
262
+ const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
263
+ let isVNPreEmptyStatus = false;
264
+ if (scrollYLoad && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
265
+ isVNPreEmptyStatus = true;
266
+ }
267
+ else if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
268
+ isVNPreEmptyStatus = true;
251
269
  }
252
270
  const tcStyle = {};
253
- if (cellHeight) {
254
- if (hasEllipsis) {
255
- tcStyle.maxHeight = `${cellHeight}px`;
256
- }
257
- else if (isVNAutoHeight) {
258
- tcStyle.height = `${cellHeight}px`;
259
- }
271
+ if (scrollYLoad || hasEllipsis || isCsHeight || isRsHeight) {
272
+ tcStyle.height = `${cellHeight}px`;
273
+ }
274
+ else {
275
+ tcStyle.minHeight = `${cellHeight}px`;
260
276
  }
261
277
  const tdVNs = [];
262
- if (fixedHiddenColumn && (allColumnOverflow ? isAllOverflow : allColumnOverflow)) {
278
+ if (fixedHiddenColumn && isAllOverflow) {
263
279
  tdVNs.push(h('div', {
280
+ key: 'tc',
264
281
  class: ['vxe-cell', {
265
282
  'c--title': showTitle,
266
283
  'c--tooltip': showTooltip,
@@ -271,7 +288,8 @@ export default defineComponent({
271
288
  }
272
289
  else {
273
290
  // 渲染单元格
274
- tdVNs.push(...renderLine(params), h('div', {
291
+ tdVNs.push(...renderLine(cellParams, cellHeight), h('div', {
292
+ key: 'tc',
275
293
  class: ['vxe-cell', {
276
294
  'c--title': showTitle,
277
295
  'c--tooltip': showTooltip,
@@ -279,18 +297,21 @@ export default defineComponent({
279
297
  }],
280
298
  style: tcStyle,
281
299
  title: showTitle ? $xeTable.getCellLabel(row, column) : null
282
- }, isVNAutoHeight
283
- ? [
300
+ }, isVNPreEmptyStatus
301
+ ? []
302
+ : [
284
303
  h('div', {
285
- class: 'vxe-cell--auto-wrapper'
286
- }, column.renderCell(params))
287
- ]
288
- : column.renderCell(params)));
304
+ colid,
305
+ rowid,
306
+ class: 'vxe-cell--wrapper'
307
+ }, column.renderCell(cellParams))
308
+ ]));
289
309
  if (showValidTip && errorValidItem) {
290
310
  const errRule = errorValidItem.rule;
291
311
  const validSlot = slots ? slots.valid : null;
292
- const validParams = Object.assign(Object.assign(Object.assign({}, params), errorValidItem), { rule: errorValidItem });
312
+ const validParams = Object.assign(Object.assign(Object.assign({}, cellParams), errorValidItem), { rule: errorValidItem });
293
313
  tdVNs.push(h('div', {
314
+ key: 'tcv',
294
315
  class: ['vxe-cell--valid-error-tip', getPropClass(validOpts.className, validParams)],
295
316
  style: errRule && errRule.maxWidth
296
317
  ? {
@@ -312,37 +333,49 @@ export default defineComponent({
312
333
  ]));
313
334
  }
314
335
  }
336
+ let showAreaRowStatus = false;
315
337
  if (mouseConfig && mouseOpts.area && selectCellToRow) {
316
- if ((!$columnIndex && selectCellToRow === true) ||
338
+ if ((!_columnIndex && selectCellToRow === true) ||
317
339
  (selectCellToRow === column.field)) {
318
- tdVNs.push(h('div', {
319
- class: 'vxe-cell--area-status'
320
- }));
340
+ showAreaRowStatus = true;
321
341
  }
322
342
  }
323
- const isLastColumn = $columnIndex === columns.length - 1;
324
- const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
325
- let isVNPreEmptyStatus = false;
326
- if (scrollYLoad && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
327
- isVNPreEmptyStatus = true;
343
+ if (!fixedHiddenColumn && showResizable && isAllColumnDrag) {
344
+ tdVNs.push(h('div', {
345
+ key: 'tcc',
346
+ class: ['vxe-cell--col-resizable', {
347
+ 'is--line': !border || border === 'none'
348
+ }],
349
+ onMousedown: (evnt) => $xeTable.handleColResizeMousedownEvent(evnt, fixedType, cellParams),
350
+ onDblclick: (evnt) => $xeTable.handleColResizeDblclickEvent(evnt, cellParams)
351
+ }));
328
352
  }
329
- else if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
330
- isVNPreEmptyStatus = true;
353
+ if ((rowResize || isAllRowDrag) && rowOpts.resizable) {
354
+ tdVNs.push(h('div', {
355
+ key: 'tcr',
356
+ class: 'vxe-cell--row-resizable',
357
+ onMousedown: (evnt) => $xeTable.handleRowResizeMousedownEvent(evnt, cellParams),
358
+ onDblclick: (evnt) => $xeTable.handleRowResizeDblclickEvent(evnt, cellParams)
359
+ }));
331
360
  }
332
361
  return h('td', Object.assign(Object.assign(Object.assign({ class: [
333
362
  'vxe-body--column',
334
363
  colid,
364
+ cellVerticalAlign ? `col--vertical-${cellVerticalAlign}` : '',
365
+ cellAlign ? `col--${cellAlign}` : '',
366
+ type ? `col--${type}` : '',
335
367
  {
336
- [`col--${cellAlign}`]: cellAlign,
337
- [`col--vertical-${verticalAlign}`]: verticalAlign,
338
- [`col--${type}`]: type,
339
368
  'col--last': isLastColumn,
340
369
  'col--tree-node': treeNode,
341
370
  'col--edit': isEdit,
342
371
  'col--ellipsis': hasEllipsis,
372
+ 'col--cs-height': isCsHeight,
373
+ 'col--rs-height': isRsHeight,
374
+ 'col--to-row': showAreaRowStatus,
343
375
  'col--auto-height': isVNAutoHeight,
344
376
  'fixed--width': !isAutoCellWidth,
345
377
  'fixed--hidden': fixedHiddenColumn,
378
+ 'is--padding': isCellPadding,
346
379
  'is--drag-cell': isRowDragCell && (isCrossDrag || isPeerDrag || !rowLevel),
347
380
  'is--drag-disabled': isDisabledDrag,
348
381
  'col--dirty': isDirty,
@@ -350,16 +383,14 @@ export default defineComponent({
350
383
  'col--valid-error': !!errorValidItem,
351
384
  'col--current': currentColumn === column
352
385
  },
353
- getPropClass(compCellClassName, params),
354
- getPropClass(className, params),
355
- getPropClass(allCellClassName, params)
356
- ], key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || rowOpts.useKey || columnOpts.drag ? colid : $columnIndex }, attrs), { style: Object.assign({
357
- height: cellHeight ? `${cellHeight}px` : ''
358
- }, XEUtils.isFunction(compCellStyle) ? compCellStyle(params) : compCellStyle, XEUtils.isFunction(cellStyle) ? cellStyle(params) : cellStyle) }), tdOns), isVNPreEmptyStatus || (isOptimizeMode && fixedHiddenColumn) ? [] : tdVNs);
386
+ getPropClass(compCellClassName, cellParams),
387
+ getPropClass(className, cellParams),
388
+ getPropClass(allCellClassName, cellParams)
389
+ ], key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || rowOpts.useKey || columnOpts.drag ? colid : $columnIndex }, tdAttrs), { style: Object.assign({}, XEUtils.isFunction(compCellStyle) ? compCellStyle(cellParams) : compCellStyle, XEUtils.isFunction(cellStyle) ? cellStyle(cellParams) : cellStyle) }), tdOns), isOptimizeMode && fixedHiddenColumn ? [] : tdVNs);
359
390
  };
360
391
  const renderRows = (fixedType, isOptimizeMode, tableData, tableColumn) => {
361
- const { stripe, rowKey, highlightHoverRow, rowClassName, rowStyle, showOverflow: allColumnOverflow, editConfig, treeConfig } = tableProps;
362
- const { hasFixedColumn, treeExpandedMaps, scrollXLoad, scrollYLoad, rowExpandedMaps, expandColumn, selectRadioRow, pendingRowMaps, isDragColMove } = tableReactData;
392
+ const { stripe, rowKey, highlightHoverRow, rowClassName, rowStyle, editConfig, treeConfig } = tableProps;
393
+ const { hasFixedColumn, treeExpandedMaps, isColLoading, scrollXLoad, scrollYLoad, isAllOverflow, rowExpandedMaps, expandColumn, selectRadioRow, pendingRowMaps, isDragColMove } = tableReactData;
363
394
  const { fullAllDataRowIdData } = tableInternalData;
364
395
  const checkboxOpts = computeCheckboxOpts.value;
365
396
  const radioOpts = computeRadioOpts.value;
@@ -444,7 +475,7 @@ export default defineComponent({
444
475
  const tdVNs = tableColumn.map((column, $columnIndex) => {
445
476
  return renderTdColumn(seq, rowid, fixedType, isOptimizeMode, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, tableColumn, tableData);
446
477
  });
447
- rows.push(columnOpts.drag && columnDragOpts.animation
478
+ rows.push(!isColLoading && (columnOpts.drag && columnDragOpts.animation)
448
479
  ? h(TransitionGroup, Object.assign({ name: `vxe-header--col-list${isDragColMove ? '' : '-disabled'}`, tag: 'tr', class: trClass, rowid: rowid, style: rowStyle ? (XEUtils.isFunction(rowStyle) ? rowStyle(params) : rowStyle) : null, key: rowKey || scrollXLoad || scrollYLoad || rowOpts.useKey || rowOpts.drag || columnOpts.drag || treeConfig ? rowid : $rowIndex }, trOn), {
449
480
  default: () => tdVNs
450
481
  })
@@ -461,7 +492,7 @@ export default defineComponent({
461
492
  cellStyle.paddingLeft = `${(rowLevel * treeOpts.indent) + 30}px`;
462
493
  }
463
494
  const { showOverflow } = expandColumn;
464
- const hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow;
495
+ const hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? isAllOverflow : showOverflow;
465
496
  const expandParams = { $table: $xeTable, seq, column: expandColumn, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex, _rowIndex };
466
497
  rows.push(h('tr', Object.assign({ class: ['vxe-body--expanded-row', {
467
498
  'is--padding': padding
@@ -524,8 +555,8 @@ export default defineComponent({
524
555
  const renderVN = () => {
525
556
  const { slots } = tableContext;
526
557
  const { fixedColumn, fixedType, tableColumn } = props;
527
- const { showOverflow: allColumnOverflow, spanMethod, footerSpanMethod, mouseConfig } = tableProps;
528
- const { isGroup, tableData, scrollXLoad, scrollYLoad, isAllOverflow, isDragRowMove, expandColumn, dragRow, dragCol } = tableReactData;
558
+ const { spanMethod, footerSpanMethod, mouseConfig } = tableProps;
559
+ const { isGroup, tableData, isRowLoading, isColLoading, scrollXLoad, scrollYLoad, isAllOverflow, isDragRowMove, expandColumn, dragRow, dragCol } = tableReactData;
529
560
  const { visibleColumn, fullAllDataRowIdData, fullColumnIdData } = tableInternalData;
530
561
  const rowOpts = computeRowOpts.value;
531
562
  const emptyOpts = computeEmptyOpts.value;
@@ -537,7 +568,7 @@ export default defineComponent({
537
568
  let renderColumnList = tableColumn;
538
569
  let isOptimizeMode = false;
539
570
  // 如果是使用优化模式
540
- if (scrollXLoad || scrollYLoad || (allColumnOverflow && isAllOverflow)) {
571
+ if (scrollXLoad || scrollYLoad || isAllOverflow) {
541
572
  if (expandColumn || spanMethod || footerSpanMethod) {
542
573
  // 如果不支持优化模式
543
574
  }
@@ -658,9 +689,9 @@ export default defineComponent({
658
689
  });
659
690
  })),
660
691
  /**
661
- * 内容
662
- */
663
- rowOpts.drag && rowDragOpts.animation
692
+ * 内容
693
+ */
694
+ !(isRowLoading || isColLoading) && (rowOpts.drag && rowDragOpts.animation)
664
695
  ? h(TransitionGroup, {
665
696
  ref: refBodyTBody,
666
697
  name: `vxe-body--row-list${isDragRowMove ? '' : '-disabled'}`,
@@ -704,6 +735,9 @@ export default defineComponent({
704
735
  }),
705
736
  h('span', {
706
737
  class: 'vxe-table--cell-active-area'
738
+ }),
739
+ h('span', {
740
+ class: 'vxe-table--cell-row-status-area'
707
741
  })
708
742
  ])
709
743
  : renderEmptyElement($xeTable),
@@ -152,7 +152,7 @@ function renderTitleContent(params, content) {
152
152
  const ons = {};
153
153
  if (showTitle || showTooltip || showAllTip) {
154
154
  ons.onMouseenter = (evnt) => {
155
- if (tableReactData._isResize) {
155
+ if (tableReactData.isDragResize) {
156
156
  return;
157
157
  }
158
158
  if (showTitle) {
@@ -165,7 +165,7 @@ function renderTitleContent(params, content) {
165
165
  }
166
166
  if (showTooltip || showAllTip) {
167
167
  ons.onMouseleave = (evnt) => {
168
- if (tableReactData._isResize) {
168
+ if (tableReactData.isDragResize) {
169
169
  return;
170
170
  }
171
171
  if (showTooltip || showAllTip) {
@@ -179,18 +179,6 @@ function renderTitleContent(params, content) {
179
179
  : h('span', Object.assign({ class: 'vxe-cell--title' }, ons), getSlotVNs(content))
180
180
  ];
181
181
  }
182
- function formatFooterLabel(footerFormatter, params) {
183
- if (XEUtils.isFunction(footerFormatter)) {
184
- return `${footerFormatter(params)}`;
185
- }
186
- const isArr = XEUtils.isArray(footerFormatter);
187
- const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter);
188
- const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null;
189
- if (footerFormatMethod) {
190
- return `${isArr ? footerFormatMethod(params, ...footerFormatter.slice(1)) : footerFormatMethod(params)}`;
191
- }
192
- return '';
193
- }
194
182
  function getFooterContent(params) {
195
183
  const { $table, column, _columnIndex, items, row } = params;
196
184
  const { slots, editRender, cellRender, footerFormatter } = column;
@@ -199,42 +187,40 @@ function getFooterContent(params) {
199
187
  if (footerSlot) {
200
188
  return $table.callSlot(footerSlot, params);
201
189
  }
190
+ let itemValue = '';
191
+ // 兼容老模式
192
+ if (XEUtils.isArray(items)) {
193
+ itemValue = items[_columnIndex];
194
+ }
195
+ else {
196
+ itemValue = XEUtils.get(row, column.field);
197
+ }
198
+ const footParams = Object.assign(params, {
199
+ itemValue
200
+ });
201
+ if (footerFormatter) {
202
+ if (XEUtils.isFunction(footerFormatter)) {
203
+ return `${footerFormatter(footParams)}`;
204
+ }
205
+ const isArr = XEUtils.isArray(footerFormatter);
206
+ const gFormatOpts = isArr ? formats.get(footerFormatter[0]) : formats.get(footerFormatter);
207
+ const footerFormatMethod = gFormatOpts ? gFormatOpts.tableFooterCellFormatMethod : null;
208
+ if (footerFormatMethod) {
209
+ return `${isArr ? footerFormatMethod(footParams, ...footerFormatter.slice(1)) : footerFormatMethod(footParams)}`;
210
+ }
211
+ return '';
212
+ }
202
213
  if (renderOpts) {
203
214
  const compConf = renderer.get(renderOpts.name);
204
215
  if (compConf) {
205
216
  const rtFooter = compConf.renderTableFooter || compConf.renderFooter;
206
217
  if (rtFooter) {
207
- return getSlotVNs(rtFooter(renderOpts, params));
218
+ return getSlotVNs(rtFooter(renderOpts, footParams));
208
219
  }
209
220
  }
210
221
  }
211
- let itemValue = '';
212
- // 兼容老模式
213
- if (XEUtils.isArray(items)) {
214
- itemValue = items[_columnIndex];
215
- return [
216
- footerFormatter
217
- ? formatFooterLabel(footerFormatter, {
218
- itemValue,
219
- column,
220
- row,
221
- items,
222
- _columnIndex
223
- })
224
- : formatText(itemValue, 1)
225
- ];
226
- }
227
- itemValue = XEUtils.get(row, column.field);
228
222
  return [
229
- footerFormatter
230
- ? formatFooterLabel(footerFormatter, {
231
- itemValue,
232
- column,
233
- row,
234
- items,
235
- _columnIndex
236
- })
237
- : formatText(itemValue, 1)
223
+ formatText(itemValue, 1)
238
224
  ];
239
225
  }
240
226
  function getDefaultCellLabel(params) {
@@ -383,11 +369,7 @@ export const Cell = {
383
369
  return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params));
384
370
  },
385
371
  renderDefaultFooter(params) {
386
- return [
387
- h('span', {
388
- class: 'vxe-cell--item'
389
- }, getFooterContent(params))
390
- ];
372
+ return getFooterContent(params);
391
373
  },
392
374
  /**
393
375
  * 树节点
@@ -823,7 +805,7 @@ export const Cell = {
823
805
  const { $table, column } = params;
824
806
  const { computeSortOpts } = $table.getComputeMaps();
825
807
  const sortOpts = computeSortOpts.value;
826
- const { showIcon, iconLayout, iconAsc, iconDesc, iconVisibleMethod } = sortOpts;
808
+ const { showIcon, allowBtn, iconLayout, iconAsc, iconDesc, iconVisibleMethod } = sortOpts;
827
809
  const { order } = column;
828
810
  if (showIcon && (!iconVisibleMethod || iconVisibleMethod(params))) {
829
811
  return [
@@ -835,20 +817,24 @@ export const Cell = {
835
817
  'sort--active': order === 'asc'
836
818
  }],
837
819
  title: getI18n('vxe.table.sortAsc'),
838
- onClick(evnt) {
839
- evnt.stopPropagation();
840
- $table.triggerSortEvent(evnt, column, 'asc');
841
- }
820
+ onClick: allowBtn
821
+ ? (evnt) => {
822
+ evnt.stopPropagation();
823
+ $table.triggerSortEvent(evnt, column, 'asc');
824
+ }
825
+ : undefined
842
826
  }),
843
827
  h('i', {
844
828
  class: ['vxe-sort--desc-btn', iconDesc || getIcon().TABLE_SORT_DESC, {
845
829
  'sort--active': order === 'desc'
846
830
  }],
847
831
  title: getI18n('vxe.table.sortDesc'),
848
- onClick(evnt) {
849
- evnt.stopPropagation();
850
- $table.triggerSortEvent(evnt, column, 'desc');
851
- }
832
+ onClick: allowBtn
833
+ ? (evnt) => {
834
+ evnt.stopPropagation();
835
+ $table.triggerSortEvent(evnt, column, 'desc');
836
+ }
837
+ : undefined
852
838
  })
853
839
  ])
854
840
  ];
@@ -54,6 +54,16 @@ export const columnProps = {
54
54
  formatter: [Function, Array, String],
55
55
  // 格式化表尾显示内容
56
56
  footerFormatter: [Function, Array, String],
57
+ // 是否显示间距
58
+ padding: {
59
+ type: Boolean,
60
+ default: null
61
+ },
62
+ // 垂直对齐方式
63
+ verticalAlign: {
64
+ type: String,
65
+ default: null
66
+ },
57
67
  // 是否允许排序
58
68
  sortable: Boolean,
59
69
  // 自定义排序的属性
@@ -80,8 +90,10 @@ export const columnProps = {
80
90
  filterRender: Object,
81
91
  // 设置为树节点
82
92
  treeNode: Boolean,
83
- // 指定为树节点
93
+ // 设置为拖拽排序
84
94
  dragSort: Boolean,
95
+ // 设置为行高拖拽
96
+ rowResize: Boolean,
85
97
  // 是否可视
86
98
  visible: {
87
99
  type: Boolean,
@@ -70,6 +70,8 @@ export class ColumnInfo {
70
70
  footerClassName: _vm.footerClassName,
71
71
  formatter: formatter,
72
72
  footerFormatter: _vm.footerFormatter,
73
+ padding: _vm.padding,
74
+ verticalAlign: _vm.verticalAlign,
73
75
  sortable: _vm.sortable,
74
76
  sortBy: _vm.sortBy,
75
77
  sortType: _vm.sortType,
@@ -81,6 +83,7 @@ export class ColumnInfo {
81
83
  filterRender: _vm.filterRender,
82
84
  treeNode: _vm.treeNode,
83
85
  dragSort: _vm.dragSort,
86
+ rowResize: _vm.rowResize,
84
87
  cellType: _vm.cellType,
85
88
  cellRender: _vm.cellRender,
86
89
  editRender: _vm.editRender,
@@ -35,6 +35,8 @@ export default [
35
35
  'filter-visible',
36
36
  'clear-filter',
37
37
  'resizable-change',
38
+ 'column-resizable-change',
39
+ 'row-resizable-change',
38
40
  'toggle-row-expand',
39
41
  'toggle-tree-expand',
40
42
  'menu-click',