vxe-table 3.15.27 → 3.15.29

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 (48) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/index.js +11 -3
  6. package/es/table/module/filter/mixin.js +20 -8
  7. package/es/table/src/methods.js +192 -55
  8. package/es/table/src/table.js +6 -3
  9. package/es/table/style.css +6 -0
  10. package/es/table/style.min.css +1 -1
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-table/style.css +6 -0
  14. package/es/vxe-table/style.min.css +1 -1
  15. package/lib/index.css +1 -1
  16. package/lib/index.min.css +1 -1
  17. package/lib/index.umd.js +264 -79
  18. package/lib/index.umd.min.js +1 -1
  19. package/lib/style.css +1 -1
  20. package/lib/style.min.css +1 -1
  21. package/lib/table/index.js +10 -3
  22. package/lib/table/index.min.js +1 -1
  23. package/lib/table/module/filter/mixin.js +26 -8
  24. package/lib/table/module/filter/mixin.min.js +1 -1
  25. package/lib/table/src/methods.js +218 -61
  26. package/lib/table/src/methods.min.js +1 -1
  27. package/lib/table/src/table.js +8 -5
  28. package/lib/table/src/table.min.js +1 -1
  29. package/lib/table/style/style.css +6 -0
  30. package/lib/table/style/style.min.css +1 -1
  31. package/lib/ui/index.js +1 -1
  32. package/lib/ui/index.min.js +1 -1
  33. package/lib/ui/src/log.js +1 -1
  34. package/lib/ui/src/log.min.js +1 -1
  35. package/lib/vxe-table/style/style.css +6 -0
  36. package/lib/vxe-table/style/style.min.css +1 -1
  37. package/package.json +1 -1
  38. package/packages/table/index.ts +10 -3
  39. package/packages/table/module/filter/mixin.ts +27 -12
  40. package/packages/table/src/methods.ts +196 -57
  41. package/packages/table/src/table.ts +6 -3
  42. package/styles/components/table.scss +14 -0
  43. /package/es/{iconfont.1747094784148.ttf → iconfont.1747286367921.ttf} +0 -0
  44. /package/es/{iconfont.1747094784148.woff → iconfont.1747286367921.woff} +0 -0
  45. /package/es/{iconfont.1747094784148.woff2 → iconfont.1747286367921.woff2} +0 -0
  46. /package/lib/{iconfont.1747094784148.ttf → iconfont.1747286367921.ttf} +0 -0
  47. /package/lib/{iconfont.1747094784148.woff → iconfont.1747286367921.woff} +0 -0
  48. /package/lib/{iconfont.1747094784148.woff2 → iconfont.1747286367921.woff2} +0 -0
@@ -36,6 +36,7 @@ export default {
36
36
  if (column && column.filters) {
37
37
  column.filters = toFilters(options || []);
38
38
  if (isUpdate) {
39
+ // 已废弃,即将去掉事件触发 new Event('click') -> null
39
40
  return $xeTable.handleColumnConfirmFilter(column, new Event('click'));
40
41
  }
41
42
  }
@@ -287,8 +288,14 @@ export default {
287
288
  * @param {Event} evnt 事件
288
289
  */
289
290
  handleFilterResetFilter(evnt) {
290
- this.handleClearFilter(this.filterStore.column);
291
- this.confirmFilterEvent(evnt);
291
+ const $xeTable = this;
292
+ const reactData = $xeTable;
293
+ const { filterStore } = reactData;
294
+ $xeTable.handleClearFilter(filterStore.column);
295
+ $xeTable.confirmFilterEvent(evnt);
296
+ if (evnt) {
297
+ $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt);
298
+ }
292
299
  },
293
300
  /**
294
301
  * 清空指定列的筛选条件
@@ -296,16 +303,20 @@ export default {
296
303
  * @param {String} fieldOrColumn 列
297
304
  */
298
305
  _clearFilter(fieldOrColumn) {
299
- const { filterStore } = this;
306
+ const $xeTable = this;
307
+ const reactData = $xeTable;
308
+ const internalData = $xeTable;
309
+ const { filterStore } = reactData;
310
+ const { tableFullColumn } = internalData;
300
311
  let column;
301
312
  if (fieldOrColumn) {
302
- column = handleFieldOrColumn(this, fieldOrColumn);
313
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
303
314
  if (column) {
304
- this.handleClearFilter(column);
315
+ $xeTable.handleClearFilter(column);
305
316
  }
306
317
  }
307
318
  else {
308
- this.visibleColumn.forEach(this.handleClearFilter);
319
+ tableFullColumn.forEach($xeTable.handleClearFilter);
309
320
  }
310
321
  if (!fieldOrColumn || column !== filterStore.column) {
311
322
  Object.assign(filterStore, {
@@ -318,12 +329,13 @@ export default {
318
329
  visible: false
319
330
  });
320
331
  }
321
- return this.updateData();
332
+ return $xeTable.updateData();
322
333
  },
323
334
  _updateFilterOptionStatus(item, checked) {
335
+ const $xeTable = this;
324
336
  item._checked = checked;
325
337
  item.checked = checked;
326
- return this.$nextTick();
338
+ return $xeTable.$nextTick();
327
339
  }
328
340
  }
329
341
  };
@@ -3,7 +3,7 @@ import { getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTarge
3
3
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
4
4
  import { VxeUI } from '../../ui';
5
5
  import Cell from './cell';
6
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
6
+ import { getRowUniqueId, clearTableAllStatus, toFilters, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { warnLog, errLog } from '../../ui/src/log';
9
9
  const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
@@ -23,8 +23,9 @@ function eqCellValue(row1, row2, field) {
23
23
  }
24
24
  return XEUtils.isEqual(val1, val2);
25
25
  }
26
- function getNextSortOrder(_vm, column) {
27
- const orders = _vm.sortOpts.orders;
26
+ function getNextSortOrder($xeTable, column) {
27
+ const sortOpts = $xeTable.computeSortOpts;
28
+ const { orders = [] } = sortOpts;
28
29
  const currOrder = column.order || null;
29
30
  const oIndex = orders.indexOf(currOrder) + 1;
30
31
  return orders[oIndex < orders.length ? oIndex : 0];
@@ -1949,8 +1950,57 @@ function removeFooterMerges($xeTable, merges) {
1949
1950
  }
1950
1951
  return rest;
1951
1952
  }
1952
- function clearAllSort(_vm) {
1953
- _vm.tableFullColumn.forEach((column) => {
1953
+ function handleSortEvent($xeTable, evnt, sortConfs, isUpdate) {
1954
+ const sortOpts = $xeTable.computeSortOpts;
1955
+ const { multiple, remote, orders } = sortOpts;
1956
+ if (!XEUtils.isArray(sortConfs)) {
1957
+ sortConfs = [sortConfs];
1958
+ }
1959
+ if (sortConfs && sortConfs.length) {
1960
+ if (!multiple) {
1961
+ sortConfs = [sortConfs[0]];
1962
+ clearAllSort($xeTable);
1963
+ }
1964
+ let firstColumn = null;
1965
+ sortConfs.forEach((confs, index) => {
1966
+ let { field, order } = confs;
1967
+ let column = field;
1968
+ if (XEUtils.isString(field)) {
1969
+ column = $xeTable.getColumnByField(field);
1970
+ }
1971
+ if (!firstColumn) {
1972
+ firstColumn = column;
1973
+ }
1974
+ if (column && column.sortable) {
1975
+ if (orders && orders.indexOf(order) === -1) {
1976
+ order = getNextSortOrder($xeTable, column);
1977
+ }
1978
+ if (column.order !== order) {
1979
+ column.order = order;
1980
+ }
1981
+ column.sortTime = Date.now() + index;
1982
+ }
1983
+ });
1984
+ if (isUpdate) {
1985
+ if (!remote) {
1986
+ $xeTable.handleTableData(true);
1987
+ }
1988
+ }
1989
+ if (evnt) {
1990
+ $xeTable.handleColumnSortEvent(evnt, firstColumn);
1991
+ }
1992
+ return $xeTable.$nextTick().then(() => {
1993
+ updateRowOffsetTop($xeTable);
1994
+ $xeTable.updateCellAreas();
1995
+ return updateStyle($xeTable);
1996
+ });
1997
+ }
1998
+ return $xeTable.$nextTick();
1999
+ }
2000
+ function clearAllSort($xeTable) {
2001
+ const internalData = $xeTable;
2002
+ const { tableFullColumn } = internalData;
2003
+ tableFullColumn.forEach((column) => {
1954
2004
  column.order = null;
1955
2005
  });
1956
2006
  }
@@ -3162,7 +3212,7 @@ function lazyScrollYData($xeTable) {
3162
3212
  function checkLastSyncScroll($xeTable, isRollX, isRollY) {
3163
3213
  const reactData = $xeTable;
3164
3214
  const internalData = $xeTable;
3165
- const { scrollXLoad, scrollYLoad } = reactData;
3215
+ const { scrollXLoad, scrollYLoad, isAllOverflow } = reactData;
3166
3216
  const { lcsTimeout } = internalData;
3167
3217
  if (lcsTimeout) {
3168
3218
  clearTimeout(lcsTimeout);
@@ -3177,13 +3227,19 @@ function checkLastSyncScroll($xeTable, isRollX, isRollY) {
3177
3227
  internalData.inBodyScroll = false;
3178
3228
  internalData.inFooterScroll = false;
3179
3229
  internalData.scrollRenderType = '';
3180
- calcCellHeight($xeTable);
3230
+ if (!isAllOverflow) {
3231
+ calcCellHeight($xeTable);
3232
+ updateRowOffsetTop($xeTable);
3233
+ }
3181
3234
  if (isRollX && scrollXLoad) {
3182
3235
  $xeTable.updateScrollXData();
3183
3236
  }
3184
3237
  if (isRollY && scrollYLoad) {
3185
3238
  $xeTable.updateScrollYData().then(() => {
3186
- calcCellHeight($xeTable);
3239
+ if (!isAllOverflow) {
3240
+ calcCellHeight($xeTable);
3241
+ updateRowOffsetTop($xeTable);
3242
+ }
3187
3243
  $xeTable.updateScrollYSpace();
3188
3244
  });
3189
3245
  }
@@ -4624,6 +4680,7 @@ const Methods = {
4624
4680
  }
4625
4681
  XEUtils.eachTree([targetColumn], (column) => {
4626
4682
  column.fixed = fixed;
4683
+ column.renderFixed = fixed;
4627
4684
  });
4628
4685
  $xeTable.saveCustomStore('update:fixed');
4629
4686
  if (!status) {
@@ -4649,6 +4706,7 @@ const Methods = {
4649
4706
  if (targetColumn && targetColumn.fixed) {
4650
4707
  XEUtils.eachTree([targetColumn], (column) => {
4651
4708
  column.fixed = null;
4709
+ column.renderFixed = null;
4652
4710
  });
4653
4711
  $xeTable.saveCustomStore('update:fixed');
4654
4712
  if (!status) {
@@ -6231,7 +6289,16 @@ const Methods = {
6231
6289
  }
6232
6290
  }
6233
6291
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
6234
- handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
6292
+ const ctEl = tdEl.querySelector('.vxe-cell--wrapper');
6293
+ let ovEl = null;
6294
+ let tipEl = tdEl.querySelector(column.type === 'html' ? '.vxe-cell--html' : '.vxe-cell--label');
6295
+ if (column.treeNode) {
6296
+ ovEl = tdEl.querySelector('.vxe-tree-cell');
6297
+ }
6298
+ if (!tipEl) {
6299
+ tipEl = ctEl;
6300
+ }
6301
+ handleTooltip($xeTable, evnt, tdEl, ovEl || ctEl, tipEl, params);
6235
6302
  }
6236
6303
  },
6237
6304
  /**
@@ -6245,7 +6312,16 @@ const Methods = {
6245
6312
  const tdEl = evnt.currentTarget;
6246
6313
  handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
6247
6314
  if (tooltipStore.column !== column || !tooltipStore.visible) {
6248
- handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
6315
+ const ctEl = tdEl.querySelector('.vxe-cell--wrapper');
6316
+ let ovEl = null;
6317
+ let tipEl = tdEl.querySelector(column.type === 'html' ? '.vxe-cell--html' : '.vxe-cell--label');
6318
+ if (column.type === 'html') {
6319
+ ovEl = tdEl.querySelector('.vxe-cell--html');
6320
+ }
6321
+ if (!tipEl) {
6322
+ tipEl = ctEl;
6323
+ }
6324
+ handleTooltip($xeTable, evnt, tdEl, ovEl || ctEl, tipEl, params);
6249
6325
  }
6250
6326
  },
6251
6327
  openTooltip(target, content) {
@@ -7371,12 +7447,15 @@ const Methods = {
7371
7447
  const props = $xeTable;
7372
7448
  const { mouseConfig } = props;
7373
7449
  const mouseOpts = $xeTable.computeMouseOpts;
7374
- const { field, sortable } = column;
7450
+ const { field, sortable, order } = column;
7375
7451
  if (sortable) {
7376
- const params = { $table: $xeTable, $event: evnt, column, field, property: field, order: column.order, sortList: $xeTable.getSortColumns(), sortTime: column.sortTime };
7452
+ const params = { $table: $xeTable, $event: evnt, column, field, property: field, order, sortList: $xeTable.getSortColumns(), sortTime: column.sortTime };
7377
7453
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
7378
7454
  $xeTable.handleSortEvent(evnt, params);
7379
7455
  }
7456
+ if (!order) {
7457
+ $xeTable.dispatchEvent('clear-sort', params, evnt);
7458
+ }
7380
7459
  $xeTable.dispatchEvent('sort-change', params, evnt);
7381
7460
  }
7382
7461
  },
@@ -8259,49 +8338,12 @@ const Methods = {
8259
8338
  },
8260
8339
  setSort(sortConfs, isUpdate) {
8261
8340
  const $xeTable = this;
8262
- const sortOpts = $xeTable.computeSortOpts;
8263
- const { multiple, remote, orders } = sortOpts;
8264
- if (!XEUtils.isArray(sortConfs)) {
8265
- sortConfs = [sortConfs];
8266
- }
8267
- if (sortConfs && sortConfs.length) {
8268
- if (!multiple) {
8269
- sortConfs = [sortConfs[0]];
8270
- clearAllSort($xeTable);
8271
- }
8272
- let firstColumn = null;
8273
- sortConfs.forEach((confs, index) => {
8274
- let { field, order } = confs;
8275
- let column = field;
8276
- if (XEUtils.isString(field)) {
8277
- column = $xeTable.getColumnByField(field);
8278
- }
8279
- if (!firstColumn) {
8280
- firstColumn = column;
8281
- }
8282
- if (column && column.sortable) {
8283
- if (orders && orders.indexOf(order) === -1) {
8284
- order = getNextSortOrder($xeTable, column);
8285
- }
8286
- if (column.order !== order) {
8287
- column.order = order;
8288
- }
8289
- column.sortTime = Date.now() + index;
8290
- }
8291
- });
8292
- if (isUpdate) {
8293
- if (!remote) {
8294
- $xeTable.handleTableData(true);
8295
- }
8296
- $xeTable.handleColumnSortEvent(new Event('click'), firstColumn);
8297
- }
8298
- return $xeTable.$nextTick().then(() => {
8299
- updateRowOffsetTop($xeTable);
8300
- $xeTable.updateCellAreas();
8301
- return updateStyle($xeTable);
8302
- });
8303
- }
8304
- return $xeTable.$nextTick();
8341
+ // 已废弃,即将去掉事件触发 new Event('click') -> null
8342
+ return handleSortEvent($xeTable, new Event('click'), sortConfs, isUpdate);
8343
+ },
8344
+ setSortByEvent(evnt, sortConfs, isUpdate) {
8345
+ const $xeTable = this;
8346
+ return handleSortEvent($xeTable, evnt, sortConfs, isUpdate);
8305
8347
  },
8306
8348
  /**
8307
8349
  * 清空指定列的排序条件
@@ -8328,6 +8370,44 @@ const Methods = {
8328
8370
  return updateStyle($xeTable);
8329
8371
  });
8330
8372
  },
8373
+ clearSortByEvent(evnt, fieldOrColumn) {
8374
+ const $xeTable = this;
8375
+ const internalData = $xeTable;
8376
+ const { tableFullColumn } = internalData;
8377
+ const sortOpts = $xeTable.computeSortOpts;
8378
+ const sortCols = [];
8379
+ let column = null;
8380
+ if (evnt) {
8381
+ if (fieldOrColumn) {
8382
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
8383
+ if (column) {
8384
+ column.order = null;
8385
+ }
8386
+ }
8387
+ else {
8388
+ tableFullColumn.forEach((column) => {
8389
+ if (column.order) {
8390
+ column.order = null;
8391
+ sortCols.push(column);
8392
+ }
8393
+ });
8394
+ }
8395
+ if (!sortOpts.remote) {
8396
+ $xeTable.handleTableData(true);
8397
+ }
8398
+ if (sortCols.length) {
8399
+ const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] };
8400
+ $xeTable.dispatchEvent('clear-all-sort', params, evnt);
8401
+ }
8402
+ else if (column) {
8403
+ $xeTable.handleColumnSortEvent(evnt, column);
8404
+ }
8405
+ }
8406
+ return $xeTable.$nextTick().then(() => {
8407
+ updateRowOffsetTop($xeTable);
8408
+ return updateStyle($xeTable);
8409
+ });
8410
+ },
8331
8411
  // 在 v3 中废弃
8332
8412
  getSortColumn() {
8333
8413
  if (process.env.NODE_ENV === 'development') {
@@ -8356,6 +8436,17 @@ const Methods = {
8356
8436
  }
8357
8437
  return sortList;
8358
8438
  },
8439
+ setFilterByEvent(evnt, fieldOrColumn, options, isUpdate) {
8440
+ const $xeTable = this;
8441
+ const column = handleFieldOrColumn($xeTable, fieldOrColumn);
8442
+ if (column && column.filters) {
8443
+ column.filters = toFilters(options || []);
8444
+ if (isUpdate) {
8445
+ return $xeTable.handleColumnConfirmFilter(column, evnt);
8446
+ }
8447
+ }
8448
+ return $xeTable.$nextTick();
8449
+ },
8359
8450
  /**
8360
8451
  * 关闭筛选
8361
8452
  * @param {Event} evnt 事件
@@ -8395,6 +8486,52 @@ const Methods = {
8395
8486
  isFilter(fieldOrColumn) {
8396
8487
  return this.isActiveFilterByColumn(fieldOrColumn);
8397
8488
  },
8489
+ clearFilterByEvent(evnt, fieldOrColumn) {
8490
+ const $xeTable = this;
8491
+ const reactData = $xeTable;
8492
+ const internalData = $xeTable;
8493
+ const { filterStore } = reactData;
8494
+ const { tableFullColumn } = internalData;
8495
+ const filterOpts = $xeTable.computeFilterOpts;
8496
+ const filterCols = [];
8497
+ let column = null;
8498
+ if (fieldOrColumn) {
8499
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
8500
+ if (column) {
8501
+ $xeTable.handleClearFilter(column);
8502
+ }
8503
+ }
8504
+ else {
8505
+ tableFullColumn.forEach(column => {
8506
+ if (column.filters) {
8507
+ filterCols.push(column);
8508
+ $xeTable.handleClearFilter(column);
8509
+ }
8510
+ });
8511
+ }
8512
+ if (!fieldOrColumn || column !== filterStore.column) {
8513
+ Object.assign(filterStore, {
8514
+ isAllSelected: false,
8515
+ isIndeterminate: false,
8516
+ style: null,
8517
+ options: [],
8518
+ column: null,
8519
+ multiple: false,
8520
+ visible: false
8521
+ });
8522
+ }
8523
+ if (!filterOpts.remote) {
8524
+ $xeTable.updateData();
8525
+ }
8526
+ if (filterCols.length) {
8527
+ const params = { $table: $xeTable, $event: evnt, cols: filterCols, filterList: [] };
8528
+ $xeTable.dispatchEvent('clear-all-filter', params, evnt);
8529
+ }
8530
+ else if (column) {
8531
+ $xeTable.dispatchEvent('clear-filter', { filterList: () => $xeTable.getCheckedFilters() }, evnt);
8532
+ }
8533
+ return $xeTable.$nextTick();
8534
+ },
8398
8535
  /**
8399
8536
  * 判断展开行是否懒加载完成
8400
8537
  * @param {Row} row 行对象
@@ -1682,6 +1682,7 @@ export default {
1682
1682
  const columnOpts = $xeTable.computeColumnOpts;
1683
1683
  const rowOpts = $xeTable.computeRowOpts;
1684
1684
  const customOpts = $xeTable.computeCustomOpts;
1685
+ const virtualYOpts = $xeTable.computeVirtualYOpts;
1685
1686
  if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
1686
1687
  initTpImg();
1687
1688
  }
@@ -1722,9 +1723,11 @@ export default {
1722
1723
  resizeObserver.observe(this.getParentElem());
1723
1724
  this.$resize = resizeObserver;
1724
1725
  }
1725
- const tableViewportEl = $xeTable.$refs.refTableViewportElem;
1726
- if (tableViewportEl) {
1727
- tableViewportEl.addEventListener('wheel', $xeTable.triggerBodyWheelEvent, { passive: false });
1726
+ if (virtualYOpts.mode !== 'scroll') {
1727
+ const tableViewportEl = $xeTable.$refs.refTableViewportElem;
1728
+ if (tableViewportEl) {
1729
+ tableViewportEl.addEventListener('wheel', $xeTable.triggerBodyWheelEvent, { passive: false });
1730
+ }
1728
1731
  }
1729
1732
  this.preventEvent(null, 'mounted');
1730
1733
  },
@@ -2550,6 +2550,12 @@
2550
2550
  .vxe-table--render-default .vxe-footer--column.col--right > .vxe-cell {
2551
2551
  justify-content: right;
2552
2552
  }
2553
+ .vxe-table--render-default .vxe-header--column.col--ellipsis.col--center .vxe-cell--wrapper {
2554
+ justify-content: center;
2555
+ }
2556
+ .vxe-table--render-default .vxe-header--column.col--ellipsis.col--right .vxe-cell--wrapper {
2557
+ justify-content: right;
2558
+ }
2553
2559
  .vxe-table--render-default .vxe-header--column.col--ellipsis.col--center .vxe-cell,
2554
2560
  .vxe-table--render-default .vxe-footer--column.col--ellipsis.col--center .vxe-cell {
2555
2561
  justify-content: center;