vxe-table 3.15.26 → 3.15.28

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 (41) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/index.js +11 -3
  3. package/es/table/module/filter/mixin.js +19 -8
  4. package/es/table/src/cell.js +3 -1
  5. package/es/table/src/methods.js +97 -9
  6. package/es/table/src/table.js +36 -4
  7. package/es/table/src/util.js +21 -17
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/index.umd.js +226 -45
  11. package/lib/index.umd.min.js +1 -1
  12. package/lib/style.css +1 -1
  13. package/lib/table/index.js +10 -3
  14. package/lib/table/index.min.js +1 -1
  15. package/lib/table/module/filter/mixin.js +25 -8
  16. package/lib/table/module/filter/mixin.min.js +1 -1
  17. package/lib/table/src/cell.js +3 -1
  18. package/lib/table/src/cell.min.js +1 -1
  19. package/lib/table/src/methods.js +114 -9
  20. package/lib/table/src/methods.min.js +1 -1
  21. package/lib/table/src/table.js +40 -5
  22. package/lib/table/src/table.min.js +1 -1
  23. package/lib/table/src/util.js +33 -17
  24. package/lib/table/src/util.min.js +1 -1
  25. package/lib/ui/index.js +1 -1
  26. package/lib/ui/index.min.js +1 -1
  27. package/lib/ui/src/log.js +1 -1
  28. package/lib/ui/src/log.min.js +1 -1
  29. package/package.json +1 -1
  30. package/packages/table/index.ts +10 -3
  31. package/packages/table/module/filter/mixin.ts +26 -12
  32. package/packages/table/src/cell.ts +3 -1
  33. package/packages/table/src/methods.ts +96 -10
  34. package/packages/table/src/table.ts +47 -10
  35. package/packages/table/src/util.ts +24 -19
  36. /package/es/{iconfont.1747024909816.ttf → iconfont.1747176212818.ttf} +0 -0
  37. /package/es/{iconfont.1747024909816.woff → iconfont.1747176212818.woff} +0 -0
  38. /package/es/{iconfont.1747024909816.woff2 → iconfont.1747176212818.woff2} +0 -0
  39. /package/lib/{iconfont.1747024909816.ttf → iconfont.1747176212818.ttf} +0 -0
  40. /package/lib/{iconfont.1747024909816.woff → iconfont.1747176212818.woff} +0 -0
  41. /package/lib/{iconfont.1747024909816.woff2 → iconfont.1747176212818.woff2} +0 -0
@@ -287,8 +287,14 @@ export default {
287
287
  * @param {Event} evnt 事件
288
288
  */
289
289
  handleFilterResetFilter(evnt) {
290
- this.handleClearFilter(this.filterStore.column);
291
- this.confirmFilterEvent(evnt);
290
+ const $xeTable = this;
291
+ const reactData = $xeTable;
292
+ const { filterStore } = reactData;
293
+ $xeTable.handleClearFilter(filterStore.column);
294
+ $xeTable.confirmFilterEvent(evnt);
295
+ if (evnt) {
296
+ $xeTable.dispatchEvent('clear-filter', { filterList: [] }, evnt);
297
+ }
292
298
  },
293
299
  /**
294
300
  * 清空指定列的筛选条件
@@ -296,16 +302,20 @@ export default {
296
302
  * @param {String} fieldOrColumn 列
297
303
  */
298
304
  _clearFilter(fieldOrColumn) {
299
- const { filterStore } = this;
305
+ const $xeTable = this;
306
+ const reactData = $xeTable;
307
+ const internalData = $xeTable;
308
+ const { filterStore } = reactData;
309
+ const { tableFullColumn } = internalData;
300
310
  let column;
301
311
  if (fieldOrColumn) {
302
- column = handleFieldOrColumn(this, fieldOrColumn);
312
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
303
313
  if (column) {
304
- this.handleClearFilter(column);
314
+ $xeTable.handleClearFilter(column);
305
315
  }
306
316
  }
307
317
  else {
308
- this.visibleColumn.forEach(this.handleClearFilter);
318
+ tableFullColumn.forEach($xeTable.handleClearFilter);
309
319
  }
310
320
  if (!fieldOrColumn || column !== filterStore.column) {
311
321
  Object.assign(filterStore, {
@@ -318,12 +328,13 @@ export default {
318
328
  visible: false
319
329
  });
320
330
  }
321
- return this.updateData();
331
+ return $xeTable.updateData();
322
332
  },
323
333
  _updateFilterOptionStatus(item, checked) {
334
+ const $xeTable = this;
324
335
  item._checked = checked;
325
336
  item.checked = checked;
326
- return this.$nextTick();
337
+ return $xeTable.$nextTick();
327
338
  }
328
339
  }
329
340
  };
@@ -1037,7 +1037,9 @@ export const Cell = {
1037
1037
  ? h('i', {
1038
1038
  class: 'vxe-cell--edit-icon'
1039
1039
  }, [
1040
- h('i')
1040
+ h('i', {
1041
+ class: editOpts.icon || getIcon().TABLE_EDIT
1042
+ })
1041
1043
  ])
1042
1044
  : renderEmptyElement($table)
1043
1045
  ];
@@ -4188,7 +4188,6 @@ const Methods = {
4188
4188
  },
4189
4189
  /**
4190
4190
  * 检查是否为临时行数据
4191
- * @param {Row} row 行对象
4192
4191
  */
4193
4192
  isInsertByRow(row) {
4194
4193
  const $xeTable = this;
@@ -4206,18 +4205,15 @@ const Methods = {
4206
4205
  },
4207
4206
  /**
4208
4207
  * 删除所有新增的临时数据
4209
- * @returns
4210
4208
  */
4211
4209
  removeInsertRow() {
4212
4210
  const $xeTable = this;
4213
4211
  const internalData = $xeTable;
4214
- internalData.insertRowMaps = {};
4215
- return $xeTable.remove($xeTable.getInsertRecords());
4212
+ const { insertRowMaps } = internalData;
4213
+ return $xeTable.remove(XEUtils.values(insertRowMaps));
4216
4214
  },
4217
4215
  /**
4218
4216
  * 检查行或列数据是否发生改变
4219
- * @param {Row} rowOrId 行对象
4220
- * @param {String} field 字段名
4221
4217
  */
4222
4218
  isUpdateByRow(rowOrId, field) {
4223
4219
  const $xeTable = this;
@@ -6235,7 +6231,12 @@ const Methods = {
6235
6231
  }
6236
6232
  }
6237
6233
  if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
6238
- handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'), tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
6234
+ const ctEl = tdEl.querySelector('.vxe-cell--wrapper');
6235
+ let ovEl = null;
6236
+ if (column.treeNode) {
6237
+ ovEl = tdEl.querySelector('.vxe-tree-cell');
6238
+ }
6239
+ handleTooltip($xeTable, evnt, tdEl, ovEl || ctEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
6239
6240
  }
6240
6241
  },
6241
6242
  /**
@@ -7375,12 +7376,15 @@ const Methods = {
7375
7376
  const props = $xeTable;
7376
7377
  const { mouseConfig } = props;
7377
7378
  const mouseOpts = $xeTable.computeMouseOpts;
7378
- const { field, sortable } = column;
7379
+ const { field, sortable, order } = column;
7379
7380
  if (sortable) {
7380
- const params = { $table: $xeTable, $event: evnt, column, field, property: field, order: column.order, sortList: $xeTable.getSortColumns(), sortTime: column.sortTime };
7381
+ const params = { $table: $xeTable, $event: evnt, column, field, property: field, order, sortList: $xeTable.getSortColumns(), sortTime: column.sortTime };
7381
7382
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
7382
7383
  $xeTable.handleSortEvent(evnt, params);
7383
7384
  }
7385
+ if (!order) {
7386
+ $xeTable.dispatchEvent('clear-sort', params, evnt);
7387
+ }
7384
7388
  $xeTable.dispatchEvent('sort-change', params, evnt);
7385
7389
  }
7386
7390
  },
@@ -8332,6 +8336,44 @@ const Methods = {
8332
8336
  return updateStyle($xeTable);
8333
8337
  });
8334
8338
  },
8339
+ clearSortByEvent(evnt, fieldOrColumn) {
8340
+ const $xeTable = this;
8341
+ const internalData = $xeTable;
8342
+ const { tableFullColumn } = internalData;
8343
+ const sortOpts = $xeTable.computeSortOpts;
8344
+ const sortCols = [];
8345
+ let column = null;
8346
+ if (evnt) {
8347
+ if (fieldOrColumn) {
8348
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
8349
+ if (column) {
8350
+ column.order = null;
8351
+ }
8352
+ }
8353
+ else {
8354
+ tableFullColumn.forEach((column) => {
8355
+ if (column.order) {
8356
+ column.order = null;
8357
+ sortCols.push(column);
8358
+ }
8359
+ });
8360
+ }
8361
+ if (!sortOpts.remote) {
8362
+ $xeTable.handleTableData(true);
8363
+ }
8364
+ if (sortCols.length) {
8365
+ const params = { $table: $xeTable, $event: evnt, cols: sortCols, sortList: [] };
8366
+ $xeTable.dispatchEvent('clear-all-sort', params, evnt);
8367
+ }
8368
+ else if (column) {
8369
+ $xeTable.handleColumnSortEvent(evnt, column);
8370
+ }
8371
+ }
8372
+ return $xeTable.$nextTick().then(() => {
8373
+ updateRowOffsetTop($xeTable);
8374
+ return updateStyle($xeTable);
8375
+ });
8376
+ },
8335
8377
  // 在 v3 中废弃
8336
8378
  getSortColumn() {
8337
8379
  if (process.env.NODE_ENV === 'development') {
@@ -8399,6 +8441,52 @@ const Methods = {
8399
8441
  isFilter(fieldOrColumn) {
8400
8442
  return this.isActiveFilterByColumn(fieldOrColumn);
8401
8443
  },
8444
+ clearFilterByEvent(evnt, fieldOrColumn) {
8445
+ const $xeTable = this;
8446
+ const reactData = $xeTable;
8447
+ const internalData = $xeTable;
8448
+ const { filterStore } = reactData;
8449
+ const { tableFullColumn } = internalData;
8450
+ const filterOpts = $xeTable.computeFilterOpts;
8451
+ const filterCols = [];
8452
+ let column = null;
8453
+ if (fieldOrColumn) {
8454
+ column = handleFieldOrColumn($xeTable, fieldOrColumn);
8455
+ if (column) {
8456
+ $xeTable.handleClearFilter(column);
8457
+ }
8458
+ }
8459
+ else {
8460
+ tableFullColumn.forEach(column => {
8461
+ if (column.filters) {
8462
+ filterCols.push(column);
8463
+ $xeTable.handleClearFilter(column);
8464
+ }
8465
+ });
8466
+ }
8467
+ if (!fieldOrColumn || column !== filterStore.column) {
8468
+ Object.assign(filterStore, {
8469
+ isAllSelected: false,
8470
+ isIndeterminate: false,
8471
+ style: null,
8472
+ options: [],
8473
+ column: null,
8474
+ multiple: false,
8475
+ visible: false
8476
+ });
8477
+ }
8478
+ if (!filterOpts.remote) {
8479
+ $xeTable.updateData();
8480
+ }
8481
+ if (filterCols.length) {
8482
+ const params = { $table: $xeTable, $event: evnt, cols: filterCols, filterList: [] };
8483
+ $xeTable.dispatchEvent('clear-all-filter', params, evnt);
8484
+ }
8485
+ else if (column) {
8486
+ $xeTable.dispatchEvent('clear-filter', { filterList: () => $xeTable.getCheckedFilters() }, evnt);
8487
+ }
8488
+ return $xeTable.$nextTick();
8489
+ },
8402
8490
  /**
8403
8491
  * 判断展开行是否懒加载完成
8404
8492
  * @param {Row} row 行对象
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { getFuncText, isEnableConf } from '../../ui/src/utils';
3
3
  import { initTpImg } from '../../ui/src/dom';
4
- import { createHandleGetRowId, getCellHeight } from './util';
4
+ import { createHandleGetRowId, getCellHeight, hasDeepKey } from './util';
5
5
  import { VxeUI } from '../../ui';
6
6
  import methods from './methods';
7
7
  import TableBodyComponent from './body';
@@ -23,6 +23,12 @@ import keyboardMixin from '../module/keyboard/mixin';
23
23
  import validatorMixin from '../module/validator/mixin';
24
24
  import customMixin from '../module/custom/mixin';
25
25
  const { getConfig, getIcon, getI18n, renderer, globalResize, globalEvents, globalMixins, renderEmptyElement } = VxeUI;
26
+ function handleKeyField($xeTable) {
27
+ const internalData = $xeTable;
28
+ const keyField = $xeTable.computeRowField;
29
+ internalData.currKeyField = keyField;
30
+ internalData.isCurrDeepKey = hasDeepKey(keyField);
31
+ }
26
32
  /**
27
33
  * 渲染浮固定列
28
34
  * 分别渲染左边固定列和右边固定列
@@ -690,6 +696,12 @@ export default {
690
696
  }
691
697
  return '';
692
698
  },
699
+ computeRowField() {
700
+ const $xeTable = this;
701
+ const props = $xeTable;
702
+ const rowOpts = $xeTable.computeRowOpts;
703
+ return `${props.rowId || rowOpts.keyField || '_X_ROW_KEY'}`;
704
+ },
693
705
  validOpts() {
694
706
  return this.computeValidOpts;
695
707
  },
@@ -1303,6 +1315,20 @@ export default {
1303
1315
  computeRowGroupFields(val) {
1304
1316
  const $xeTable = this;
1305
1317
  $xeTable.handleUpdateRowGroup(val);
1318
+ },
1319
+ computeRowField() {
1320
+ const $xeTable = this;
1321
+ const reactData = $xeTable;
1322
+ const internalData = $xeTable;
1323
+ // 行主键被改变,重载表格
1324
+ const { inited, tableFullData } = internalData;
1325
+ if (inited) {
1326
+ handleKeyField($xeTable);
1327
+ reactData.tableData = [];
1328
+ $xeTable.$nextTick(() => {
1329
+ $xeTable.reloadData(tableFullData);
1330
+ });
1331
+ }
1306
1332
  }
1307
1333
  },
1308
1334
  created() {
@@ -1311,6 +1337,8 @@ export default {
1311
1337
  const internalData = $xeTable;
1312
1338
  Object.assign($xeTable, {
1313
1339
  tZindex: 0,
1340
+ currKeyField: '',
1341
+ isCurrDeepKey: false,
1314
1342
  elemStore: {},
1315
1343
  // 存放横向 X 虚拟滚动相关的信息
1316
1344
  scrollXStore: {
@@ -1417,6 +1445,7 @@ export default {
1417
1445
  swYInterval: 0,
1418
1446
  swYTotal: 0
1419
1447
  });
1448
+ handleKeyField($xeTable);
1420
1449
  const { data, exportConfig, importConfig, treeConfig, showOverflow, highlightCurrentRow, highlightCurrentColumn } = props;
1421
1450
  const { scrollXStore, scrollYStore } = internalData;
1422
1451
  const columnOpts = $xeTable.computeColumnOpts;
@@ -1653,6 +1682,7 @@ export default {
1653
1682
  const columnOpts = $xeTable.computeColumnOpts;
1654
1683
  const rowOpts = $xeTable.computeRowOpts;
1655
1684
  const customOpts = $xeTable.computeCustomOpts;
1685
+ const virtualYOpts = $xeTable.computeVirtualYOpts;
1656
1686
  if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
1657
1687
  initTpImg();
1658
1688
  }
@@ -1693,9 +1723,11 @@ export default {
1693
1723
  resizeObserver.observe(this.getParentElem());
1694
1724
  this.$resize = resizeObserver;
1695
1725
  }
1696
- const tableViewportEl = $xeTable.$refs.refTableViewportElem;
1697
- if (tableViewportEl) {
1698
- 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
+ }
1699
1731
  }
1700
1732
  this.preventEvent(null, 'mounted');
1701
1733
  },
@@ -86,36 +86,40 @@ export function toTreePathSeq(path) {
86
86
  export function getRowUniqueId() {
87
87
  return XEUtils.uniqueId('row_');
88
88
  }
89
+ export function hasDeepKey(rowKey) {
90
+ return rowKey.indexOf('.') > -1;
91
+ }
89
92
  // 行主键 key
90
93
  export function getRowkey($xeTable) {
91
- const props = $xeTable;
92
- const rowOpts = $xeTable.computeRowOpts;
93
- return `${props.rowId || rowOpts.keyField || '_X_ROW_KEY'}`;
94
+ const internalData = $xeTable;
95
+ const { currKeyField } = internalData;
96
+ return currKeyField;
94
97
  }
95
98
  // 行主键 value
96
99
  export function getRowid($xeTable, row) {
97
- const rowid = XEUtils.get(row, getRowkey($xeTable));
98
- return encodeRowid(rowid);
100
+ const internalData = $xeTable;
101
+ const { isCurrDeepKey, currKeyField } = internalData;
102
+ return row ? encodeRowid((isCurrDeepKey ? getDeepRowIdByKey : getFastRowIdByKey)(row, currKeyField)) : '';
99
103
  }
100
104
  export function createHandleUpdateRowId($xeTable) {
101
- const rowKey = getRowkey($xeTable);
102
- const isDeepKey = rowKey.indexOf('.') > -1;
103
- const updateRId = isDeepKey ? updateDeepRowKey : updateFastRowKey;
105
+ const internalData = $xeTable;
106
+ const { isCurrDeepKey, currKeyField } = internalData;
107
+ const updateRId = isCurrDeepKey ? updateDeepRowKey : updateFastRowKey;
104
108
  return {
105
- rowKey,
109
+ rowKey: currKeyField,
106
110
  handleUpdateRowId(row) {
107
- return row ? updateRId(row, rowKey) : null;
111
+ return row ? updateRId(row, currKeyField) : '';
108
112
  }
109
113
  };
110
114
  }
111
115
  export function createHandleGetRowId($xeTable) {
112
- const rowKey = getRowkey($xeTable);
113
- const isDeepKey = rowKey.indexOf('.') > -1;
114
- const getRId = isDeepKey ? getDeepRowIdByKey : getFastRowIdByKey;
116
+ const internalData = $xeTable;
117
+ const { isCurrDeepKey, currKeyField } = internalData;
118
+ const getRId = isCurrDeepKey ? getDeepRowIdByKey : getFastRowIdByKey;
115
119
  return {
116
- rowKey,
120
+ rowKey: currKeyField,
117
121
  handleGetRowId(row) {
118
- return row ? getRId(row, rowKey) : null;
122
+ return row ? encodeRowid(getRId(row, currKeyField)) : '';
119
123
  }
120
124
  };
121
125
  }
@@ -127,7 +131,7 @@ function getDeepRowIdByKey(row, rowKey) {
127
131
  return XEUtils.get(row, rowKey);
128
132
  }
129
133
  export function updateDeepRowKey(row, rowKey) {
130
- let rowid = getDeepRowIdByKey(row, rowKey);
134
+ let rowid = encodeRowid(getDeepRowIdByKey(row, rowKey));
131
135
  if (eqEmptyValue(rowid)) {
132
136
  rowid = getRowUniqueId();
133
137
  XEUtils.set(row, rowKey, rowid);
@@ -138,7 +142,7 @@ function getFastRowIdByKey(row, rowKey) {
138
142
  return row[rowKey];
139
143
  }
140
144
  export function updateFastRowKey(row, rowKey) {
141
- let rowid = getFastRowIdByKey(row, rowKey);
145
+ let rowid = encodeRowid(getFastRowIdByKey(row, rowKey));
142
146
  if (eqEmptyValue(rowid)) {
143
147
  rowid = getRowUniqueId();
144
148
  row[rowKey] = rowid;
package/es/ui/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { getFuncText } from './src/utils';
3
- export const version = "3.15.26";
3
+ export const version = "3.15.27";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"3.15.26"}`;
3
+ const version = `table v${"3.15.27"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);