vxe-table 3.12.8 → 3.12.10-beta.0

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 (85) hide show
  1. package/es/grid/src/grid.js +6 -1
  2. package/es/index.css +1 -1
  3. package/es/index.min.css +1 -1
  4. package/es/style.css +1 -1
  5. package/es/style.min.css +1 -1
  6. package/es/table/module/export/mixin.js +3 -3
  7. package/es/table/module/filter/mixin.js +3 -3
  8. package/es/table/module/keyboard/mixin.js +4 -4
  9. package/es/table/module/menu/mixin.js +2 -2
  10. package/es/table/module/validator/mixin.js +2 -2
  11. package/es/table/src/body.js +262 -363
  12. package/es/table/src/footer.js +135 -154
  13. package/es/table/src/header.js +120 -100
  14. package/es/table/src/methods.js +1175 -816
  15. package/es/table/src/props.js +9 -3
  16. package/es/table/src/table.js +187 -103
  17. package/es/table/src/util.js +35 -21
  18. package/es/table/style.css +146 -63
  19. package/es/table/style.min.css +1 -1
  20. package/es/ui/index.js +14 -4
  21. package/es/ui/src/log.js +1 -1
  22. package/es/vxe-table/style.css +146 -63
  23. package/es/vxe-table/style.min.css +1 -1
  24. package/lib/grid/src/grid.js +4 -1
  25. package/lib/grid/src/grid.min.js +1 -1
  26. package/lib/index.css +1 -1
  27. package/lib/index.min.css +1 -1
  28. package/lib/index.umd.js +1920 -1599
  29. package/lib/index.umd.min.js +1 -1
  30. package/lib/style.css +1 -1
  31. package/lib/style.min.css +1 -1
  32. package/lib/table/module/export/mixin.js +3 -3
  33. package/lib/table/module/export/mixin.min.js +1 -1
  34. package/lib/table/module/filter/mixin.js +4 -4
  35. package/lib/table/module/filter/mixin.min.js +1 -1
  36. package/lib/table/module/keyboard/mixin.js +5 -5
  37. package/lib/table/module/keyboard/mixin.min.js +1 -1
  38. package/lib/table/module/menu/mixin.js +2 -2
  39. package/lib/table/module/menu/mixin.min.js +1 -1
  40. package/lib/table/module/validator/mixin.js +2 -2
  41. package/lib/table/module/validator/mixin.min.js +1 -1
  42. package/lib/table/src/body.js +205 -381
  43. package/lib/table/src/body.min.js +1 -1
  44. package/lib/table/src/footer.js +124 -151
  45. package/lib/table/src/footer.min.js +1 -1
  46. package/lib/table/src/header.js +97 -74
  47. package/lib/table/src/header.min.js +1 -1
  48. package/lib/table/src/methods.js +1261 -875
  49. package/lib/table/src/methods.min.js +1 -1
  50. package/lib/table/src/props.js +9 -3
  51. package/lib/table/src/props.min.js +1 -1
  52. package/lib/table/src/table.js +171 -90
  53. package/lib/table/src/table.min.js +1 -1
  54. package/lib/table/src/util.js +38 -22
  55. package/lib/table/src/util.min.js +1 -1
  56. package/lib/table/style/style.css +146 -63
  57. package/lib/table/style/style.min.css +1 -1
  58. package/lib/ui/index.js +14 -4
  59. package/lib/ui/index.min.js +1 -1
  60. package/lib/ui/src/log.js +1 -1
  61. package/lib/ui/src/log.min.js +1 -1
  62. package/lib/vxe-table/style/style.css +146 -63
  63. package/lib/vxe-table/style/style.min.css +1 -1
  64. package/package.json +2 -2
  65. package/packages/grid/src/grid.ts +6 -1
  66. package/packages/table/module/export/mixin.ts +3 -3
  67. package/packages/table/module/filter/mixin.ts +3 -3
  68. package/packages/table/module/keyboard/mixin.ts +4 -4
  69. package/packages/table/module/menu/mixin.ts +2 -2
  70. package/packages/table/module/validator/mixin.ts +2 -2
  71. package/packages/table/src/body.ts +296 -436
  72. package/packages/table/src/footer.ts +148 -164
  73. package/packages/table/src/header.ts +135 -111
  74. package/packages/table/src/methods.ts +1249 -873
  75. package/packages/table/src/props.ts +9 -3
  76. package/packages/table/src/table.ts +195 -146
  77. package/packages/table/src/util.ts +40 -23
  78. package/packages/ui/index.ts +13 -3
  79. package/styles/components/table.scss +164 -74
  80. /package/es/{iconfont.1736406699090.ttf → iconfont.1736688976404.ttf} +0 -0
  81. /package/es/{iconfont.1736406699090.woff → iconfont.1736688976404.woff} +0 -0
  82. /package/es/{iconfont.1736406699090.woff2 → iconfont.1736688976404.woff2} +0 -0
  83. /package/lib/{iconfont.1736406699090.ttf → iconfont.1736688976404.ttf} +0 -0
  84. /package/lib/{iconfont.1736406699090.woff → iconfont.1736688976404.woff} +0 -0
  85. /package/lib/{iconfont.1736406699090.woff2 → iconfont.1736688976404.woff2} +0 -0
@@ -5,11 +5,18 @@ import { getOffsetPos, hasClass, addClass, removeClass } from '../../ui/src/dom'
5
5
  import { convertHeaderColumnToRows, getColReMinWidth } from './util';
6
6
  const { getI18n, renderer, renderEmptyElement } = VxeUI;
7
7
  const cellType = 'header';
8
- const renderRows = (h, _vm, cols, $rowIndex) => {
8
+ const renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) => {
9
+ const props = _vm;
9
10
  const $xeTable = _vm.$parent;
10
11
  const $xeGrid = $xeTable.xegrid;
11
- const { fixedType } = _vm;
12
- const { resizable: allResizable, border, columnKey, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, currentColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, mouseConfig, columnOpts } = $xeTable;
12
+ const tableProps = $xeTable;
13
+ const tableReactData = $xeTable;
14
+ const tableInternalData = $xeTable;
15
+ const { fixedType } = props;
16
+ const { resizable: allResizable, border, columnKey, headerCellClassName, headerCellStyle, showHeaderOverflow: allColumnHeaderOverflow, headerAlign: allHeaderAlign, align: allAlign, mouseConfig } = tableProps;
17
+ const { currentColumn, scrollXLoad, scrollYLoad, overflowX } = tableReactData;
18
+ const { scrollXStore } = tableInternalData;
19
+ const columnOpts = $xeTable.computeColumnOpts;
13
20
  const columnDragOpts = $xeTable.computeColumnDragOpts;
14
21
  const { disabledMethod: dragDisabledMethod, isCrossDrag, isPeerDrag } = columnDragOpts;
15
22
  return cols.map((column, $columnIndex) => {
@@ -67,6 +74,10 @@ const renderRows = (h, _vm, cols, $rowIndex) => {
67
74
  }
68
75
  }
69
76
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
77
+ let isPreLoadStatus = false;
78
+ if (scrollXLoad && !isGroup && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex || _columnIndex > scrollXStore.visibleEndIndex)) {
79
+ isPreLoadStatus = true;
80
+ }
70
81
  return h('th', {
71
82
  class: ['vxe-header--column', colid, {
72
83
  [`col--${headAlign}`]: headAlign,
@@ -85,7 +96,7 @@ const renderRows = (h, _vm, cols, $rowIndex) => {
85
96
  'col--current': currentColumn === column
86
97
  }, getClass(headerClassName, params), getClass(headerCellClassName, params)],
87
98
  attrs: thAttrs,
88
- style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(params) : headerCellStyle) : null,
99
+ style: headerCellStyle ? (XEUtils.isFunction(headerCellStyle) ? headerCellStyle(params) : headerCellStyle) : undefined,
89
100
  on: thOns,
90
101
  key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag || isColGroup ? colid : $columnIndex
91
102
  }, [
@@ -95,7 +106,7 @@ const renderRows = (h, _vm, cols, $rowIndex) => {
95
106
  'c--tooltip': showTooltip,
96
107
  'c--ellipsis': showEllipsis
97
108
  }]
98
- }, column.renderHeader(h, params)),
109
+ }, isPreLoadStatus || (isOptimizeMode && fixedHiddenColumn) ? [] : column.renderHeader(h, params)),
99
110
  /**
100
111
  * 列宽拖动
101
112
  */
@@ -111,23 +122,18 @@ const renderRows = (h, _vm, cols, $rowIndex) => {
111
122
  })
112
123
  : null
113
124
  ]);
114
- }).concat(scrollbarWidth
115
- ? [
116
- h('th', {
117
- key: `gr${$rowIndex}`,
118
- class: 'vxe-header--gutter col--gutter'
119
- })
120
- ]
121
- : []);
125
+ });
122
126
  };
123
- function renderHeads(h, _vm, headerGroups) {
127
+ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
128
+ const props = _vm;
124
129
  const $xeTable = _vm.$parent;
125
130
  const tableProps = $xeTable;
126
- const { fixedType } = _vm;
131
+ const tableReactData = $xeTable;
132
+ const { fixedType } = props;
127
133
  const columnOpts = $xeTable.computeColumnOpts;
128
134
  const columnDragOpts = $xeTable.computeColumnDragOpts;
129
135
  const { headerRowClassName, headerRowStyle } = tableProps;
130
- const { isDragColMove } = $xeTable;
136
+ const { isDragColMove } = tableReactData;
131
137
  return headerGroups.map((cols, $rowIndex) => {
132
138
  const params = { $table: $xeTable, $rowIndex, fixed: fixedType, type: cellType };
133
139
  if (columnOpts.drag && columnDragOpts.animation) {
@@ -142,7 +148,7 @@ function renderHeads(h, _vm, headerGroups) {
142
148
  ],
143
149
  style: headerRowStyle ? (XEUtils.isFunction(headerRowStyle) ? headerRowStyle(params) : headerRowStyle) : null
144
150
  }
145
- }, renderRows(h, _vm, cols, $rowIndex));
151
+ }, renderRows(h, _vm, isGroup, isOptimizeMode, cols, $rowIndex));
146
152
  }
147
153
  return h('tr', {
148
154
  key: $rowIndex,
@@ -150,8 +156,8 @@ function renderHeads(h, _vm, headerGroups) {
150
156
  'vxe-header--row',
151
157
  headerRowClassName ? XEUtils.isFunction(headerRowClassName) ? headerRowClassName(params) : headerRowClassName : ''
152
158
  ],
153
- style: headerRowStyle ? (XEUtils.isFunction(headerRowStyle) ? headerRowStyle(params) : headerRowStyle) : null
154
- }, renderRows(h, _vm, cols, $rowIndex));
159
+ style: headerRowStyle ? (XEUtils.isFunction(headerRowStyle) ? headerRowStyle(params) : headerRowStyle) : undefined
160
+ }, renderRows(h, _vm, isGroup, isOptimizeMode, cols, $rowIndex));
155
161
  });
156
162
  }
157
163
  export default {
@@ -161,8 +167,10 @@ export default {
161
167
  tableColumn: Array,
162
168
  tableGroupColumn: Array,
163
169
  fixedColumn: Array,
164
- size: String,
165
- fixedType: String
170
+ fixedType: {
171
+ type: String,
172
+ default: null
173
+ }
166
174
  },
167
175
  data() {
168
176
  return {
@@ -178,21 +186,30 @@ export default {
178
186
  this.uploadColumn();
179
187
  },
180
188
  mounted() {
181
- const { $parent: $xetable, $el, $refs, fixedType } = this;
182
- const { elemStore } = $xetable;
189
+ const _vm = this;
190
+ const props = _vm;
191
+ const $xeTable = _vm.$parent;
192
+ const internalData = $xeTable;
193
+ const { fixedType } = props;
194
+ const { elemStore } = internalData;
183
195
  const prefix = `${fixedType || 'main'}-header-`;
184
- elemStore[`${prefix}wrapper`] = $el;
185
- elemStore[`${prefix}table`] = $refs.table;
186
- elemStore[`${prefix}colgroup`] = $refs.colgroup;
187
- elemStore[`${prefix}list`] = $refs.thead;
188
- elemStore[`${prefix}xSpace`] = $refs.xSpace;
189
- elemStore[`${prefix}repair`] = $refs.repair;
196
+ elemStore[`${prefix}wrapper`] = _vm.$refs.refElem;
197
+ elemStore[`${prefix}scroll`] = _vm.$refs.refHeaderScroll;
198
+ elemStore[`${prefix}table`] = _vm.$refs.refHeaderTable;
199
+ elemStore[`${prefix}colgroup`] = _vm.$refs.refHeaderColgroup;
200
+ elemStore[`${prefix}list`] = _vm.$refs.refHeaderTHead;
201
+ elemStore[`${prefix}xSpace`] = _vm.$refs.refHeaderXSpace;
202
+ elemStore[`${prefix}repair`] = _vm.$refs.refHeaderBorderRepair;
190
203
  },
191
204
  destroyed() {
192
- const { $parent: $xetable, fixedType } = this;
193
- const { elemStore } = $xetable;
205
+ const props = this;
206
+ const $xeTable = this.$parent;
207
+ const internalData = $xeTable;
208
+ const { fixedType } = props;
209
+ const { elemStore } = internalData;
194
210
  const prefix = `${fixedType || 'main'}-header-`;
195
211
  elemStore[`${prefix}wrapper`] = null;
212
+ elemStore[`${prefix}scroll`] = null;
196
213
  elemStore[`${prefix}table`] = null;
197
214
  elemStore[`${prefix}colgroup`] = null;
198
215
  elemStore[`${prefix}list`] = null;
@@ -205,31 +222,33 @@ export default {
205
222
  const tableProps = $xeTable;
206
223
  const tableReactData = $xeTable;
207
224
  const tableInternalData = $xeTable;
208
- const { tId } = $xeTable;
225
+ const { xID } = $xeTable;
209
226
  const { fixedType, fixedColumn, tableColumn } = props;
210
227
  const { headerColumn } = this;
211
228
  const { showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps;
212
- const { isGroup, scrollXLoad, scrollYLoad, scrollbarWidth, dragCol } = tableReactData;
229
+ const { isGroup, scrollXLoad, scrollYLoad, dragCol } = tableReactData;
213
230
  const { visibleColumn, fullColumnIdData } = tableInternalData;
214
231
  let renderHeaderList = headerColumn;
215
232
  let renderColumnList = tableColumn;
233
+ let isOptimizeMode = false;
216
234
  if (isGroup) {
217
235
  renderColumnList = visibleColumn;
218
236
  }
219
237
  else {
220
- if (fixedType) {
221
- // 如果是使用优化模式
222
- if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
238
+ // 如果是使用优化模式
239
+ if (scrollXLoad || scrollYLoad || allColumnHeaderOverflow) {
240
+ if (spanMethod || footerSpanMethod) {
223
241
  // 如果不支持优化模式
224
- if (spanMethod || footerSpanMethod) {
225
- renderColumnList = visibleColumn;
226
- }
227
- else {
228
- renderColumnList = fixedColumn || [];
229
- }
230
242
  }
231
243
  else {
232
- renderColumnList = visibleColumn;
244
+ isOptimizeMode = true;
245
+ }
246
+ }
247
+ if (fixedType) {
248
+ renderColumnList = visibleColumn;
249
+ // 如果是使用优化模式
250
+ if (isOptimizeMode) {
251
+ renderColumnList = fixedColumn || [];
233
252
  }
234
253
  }
235
254
  renderHeaderList = [renderColumnList];
@@ -248,7 +267,6 @@ export default {
248
267
  if (firstColRest && lastColRest) {
249
268
  const fcIndex = firstColRest._index;
250
269
  const lcIndex = lastColRest._index;
251
- console.log(dragCol.id, dcIndex, fcIndex, lcIndex, renderColumnList.length);
252
270
  if (dcIndex < fcIndex) {
253
271
  renderColumnList = [dragCol].concat(renderColumnList);
254
272
  renderHeaderList = [[dragCol].concat(renderHeaderList[0])].concat(renderHeaderList.slice(1));
@@ -257,69 +275,71 @@ export default {
257
275
  renderColumnList = renderColumnList.concat([dragCol]);
258
276
  renderHeaderList = [renderHeaderList[0].concat([dragCol])].concat(renderHeaderList.slice(1));
259
277
  }
260
- console.log(renderColumnList.length);
261
278
  }
262
279
  }
263
280
  }
264
281
  }
265
282
  }
266
283
  return h('div', {
284
+ ref: 'refElem',
267
285
  class: ['vxe-table--header-wrapper', fixedType ? `fixed-${fixedType}--wrapper` : 'body--wrapper'],
268
286
  attrs: {
269
- xid: tId
287
+ xid: xID
270
288
  }
271
289
  }, [
272
- fixedType
273
- ? renderEmptyElement($xeTable)
274
- : h('div', {
275
- class: 'vxe-body--x-space',
276
- ref: 'xSpace'
277
- }),
278
- h('table', {
279
- class: 'vxe-table--header',
280
- attrs: {
281
- xid: tId,
282
- cellspacing: 0,
283
- cellpadding: 0,
284
- border: 0
285
- },
286
- ref: 'table'
290
+ h('div', {
291
+ ref: 'refHeaderScroll',
292
+ class: 'vxe-table--header-inner-wrapper',
293
+ on: {
294
+ scroll(evnt) {
295
+ $xeTable.triggerHeaderScrollEvent(evnt, fixedType);
296
+ }
297
+ }
287
298
  }, [
288
- /**
289
- * 列宽
290
- */
291
- h('colgroup', {
292
- ref: 'colgroup'
293
- }, renderColumnList.map((column, $columnIndex) => {
294
- return h('col', {
295
- attrs: {
296
- name: column.id
297
- },
298
- key: $columnIndex
299
- });
300
- }).concat(scrollbarWidth
301
- ? [
302
- h('col', {
299
+ fixedType
300
+ ? renderEmptyElement($xeTable)
301
+ : h('div', {
302
+ ref: 'refHeaderXSpace',
303
+ class: 'vxe-body--x-space'
304
+ }),
305
+ h('table', {
306
+ ref: 'refHeaderTable',
307
+ class: 'vxe-table--header',
308
+ attrs: {
309
+ xid: xID,
310
+ cellspacing: 0,
311
+ cellpadding: 0,
312
+ border: 0
313
+ }
314
+ }, [
315
+ /**
316
+ * 列宽
317
+ */
318
+ h('colgroup', {
319
+ ref: 'refHeaderColgroup'
320
+ }, renderColumnList.map((column, $columnIndex) => {
321
+ return h('col', {
303
322
  attrs: {
304
- name: 'col_gutter'
305
- }
306
- })
307
- ]
308
- : [])),
323
+ name: column.id
324
+ },
325
+ key: $columnIndex
326
+ });
327
+ })),
328
+ /**
329
+ * 头部
330
+ */
331
+ h('thead', {
332
+ ref: 'refHeaderTHead'
333
+ }, renderHeads(h, this, isGroup, isOptimizeMode, renderHeaderList))
334
+ ]),
309
335
  /**
310
- * 头部
336
+ * 其他
311
337
  */
312
- h('thead', {
313
- ref: 'thead'
314
- }, renderHeads(h, this, renderHeaderList))
315
- ]),
316
- /**
317
- * 其他
318
- */
319
- h('div', {
320
- class: 'vxe-table--header-border-line',
321
- ref: 'repair'
322
- })
338
+ h('div', {
339
+ ref: 'refHeaderBorderRepair',
340
+ class: 'vxe-table--header-border-line'
341
+ })
342
+ ])
323
343
  ]);
324
344
  },
325
345
  methods: {
@@ -333,9 +353,9 @@ export default {
333
353
  const { column } = params;
334
354
  const { $parent: $xetable, fixedType } = this;
335
355
  const { visibleColumn } = tableInternalData;
336
- const { tableBody, leftContainer, rightContainer } = $xetable.$refs;
356
+ const { refTableBody, refLeftContainer, refRightContainer } = $xetable.$refs;
337
357
  const tableEl = $xeTable.$el;
338
- const resizeBarElem = $xetable.$refs.resizeBar;
358
+ const resizeBarElem = $xetable.$refs.refCellResizeBar;
339
359
  const resizeTipElem = $xetable.$refs.refCellResizeTip;
340
360
  const wrapperElem = this.$el;
341
361
  const { clientX: dragClientX } = evnt;
@@ -344,7 +364,7 @@ export default {
344
364
  const cellParams = Object.assign(params, { cell });
345
365
  const resizableOpts = $xeTable.computeResizableOpts;
346
366
  let dragLeft = 0;
347
- const tableBodyElem = tableBody.$el;
367
+ const tableBodyElem = refTableBody.$el;
348
368
  const pos = getOffsetPos(dragBtnElem, tableEl);
349
369
  const dragBtnWidth = dragBtnElem.clientWidth;
350
370
  const dragBtnOffsetWidth = Math.floor(dragBtnWidth / 2);
@@ -369,8 +389,8 @@ export default {
369
389
  }
370
390
  tempCellElem = tempCellElem[siblingProp];
371
391
  }
372
- if (isRightFixed && rightContainer) {
373
- dragPosLeft = rightContainer.offsetLeft + fixedOffsetWidth;
392
+ if (isRightFixed && refRightContainer) {
393
+ dragPosLeft = refRightContainer.offsetLeft + fixedOffsetWidth;
374
394
  }
375
395
  }
376
396
  // 处理拖动事件
@@ -382,11 +402,11 @@ export default {
382
402
  const scrollLeft = fixedType ? 0 : tableBodyElem.scrollLeft;
383
403
  if (isLeftFixed) {
384
404
  // 左固定列(不允许超过右侧固定列、不允许超过右边距)
385
- left = Math.min(left, (rightContainer ? rightContainer.offsetLeft : tableBodyElem.clientWidth) - fixedOffsetWidth - minInterval);
405
+ left = Math.min(left, (refRightContainer ? refRightContainer.offsetLeft : tableBodyElem.clientWidth) - fixedOffsetWidth - minInterval);
386
406
  }
387
407
  else if (isRightFixed) {
388
408
  // 右侧固定列(不允许超过左侧固定列、不允许超过左边距)
389
- dragMinLeft = (leftContainer ? leftContainer.clientWidth : 0) + fixedOffsetWidth + minInterval;
409
+ dragMinLeft = (refLeftContainer ? refLeftContainer.clientWidth : 0) + fixedOffsetWidth + minInterval;
390
410
  left = Math.min(left, dragPosLeft + cell.clientWidth - minInterval);
391
411
  }
392
412
  else {