vxe-table 3.14.4 → 3.15.0-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 (140) hide show
  1. package/es/locale/lang/ar-EG.js +3 -1
  2. package/es/locale/lang/de-DE.js +3 -1
  3. package/es/locale/lang/en-US.js +7 -5
  4. package/es/locale/lang/es-ES.js +3 -1
  5. package/es/locale/lang/fr-FR.js +3 -1
  6. package/es/locale/lang/hu-HU.js +3 -1
  7. package/es/locale/lang/hy-AM.js +3 -1
  8. package/es/locale/lang/id-ID.js +3 -1
  9. package/es/locale/lang/it-IT.js +3 -1
  10. package/es/locale/lang/ja-JP.js +3 -1
  11. package/es/locale/lang/ko-KR.js +3 -1
  12. package/es/locale/lang/nb-NO.js +3 -1
  13. package/es/locale/lang/pt-BR.js +3 -1
  14. package/es/locale/lang/ru-RU.js +3 -1
  15. package/es/locale/lang/th-TH.js +3 -1
  16. package/es/locale/lang/ug-CN.js +3 -1
  17. package/es/locale/lang/uk-UA.js +3 -1
  18. package/es/locale/lang/vi-VN.js +3 -1
  19. package/es/locale/lang/zh-CHT.js +3 -1
  20. package/es/locale/lang/zh-CN.js +3 -1
  21. package/es/style.css +1 -1
  22. package/es/table/module/edit/mixin.js +10 -9
  23. package/es/table/module/export/export-panel.js +32 -17
  24. package/es/table/module/export/mixin.js +17 -12
  25. package/es/table/src/body.js +11 -13
  26. package/es/table/src/footer.js +3 -16
  27. package/es/table/src/methods.js +246 -109
  28. package/es/table/src/table.js +50 -25
  29. package/es/table/src/util.js +0 -13
  30. package/es/ui/index.js +2 -2
  31. package/es/ui/src/log.js +1 -1
  32. package/lib/index.umd.js +410 -247
  33. package/lib/index.umd.min.js +1 -1
  34. package/lib/locale/lang/ar-EG.js +3 -1
  35. package/lib/locale/lang/ar-EG.min.js +1 -1
  36. package/lib/locale/lang/de-DE.js +3 -1
  37. package/lib/locale/lang/de-DE.min.js +1 -1
  38. package/lib/locale/lang/en-US.js +7 -5
  39. package/lib/locale/lang/en-US.min.js +1 -1
  40. package/lib/locale/lang/en-US.umd.js +7 -5
  41. package/lib/locale/lang/es-ES.js +3 -1
  42. package/lib/locale/lang/es-ES.min.js +1 -1
  43. package/lib/locale/lang/es-ES.umd.js +3 -1
  44. package/lib/locale/lang/fr-FR.js +3 -1
  45. package/lib/locale/lang/fr-FR.min.js +1 -1
  46. package/lib/locale/lang/hu-HU.js +3 -1
  47. package/lib/locale/lang/hu-HU.min.js +1 -1
  48. package/lib/locale/lang/hu-HU.umd.js +3 -1
  49. package/lib/locale/lang/hy-AM.js +3 -1
  50. package/lib/locale/lang/hy-AM.min.js +1 -1
  51. package/lib/locale/lang/id-ID.js +3 -1
  52. package/lib/locale/lang/id-ID.min.js +1 -1
  53. package/lib/locale/lang/it-IT.js +3 -1
  54. package/lib/locale/lang/it-IT.min.js +1 -1
  55. package/lib/locale/lang/ja-JP.js +3 -1
  56. package/lib/locale/lang/ja-JP.min.js +1 -1
  57. package/lib/locale/lang/ja-JP.umd.js +3 -1
  58. package/lib/locale/lang/ko-KR.js +3 -1
  59. package/lib/locale/lang/ko-KR.min.js +1 -1
  60. package/lib/locale/lang/ko-KR.umd.js +3 -1
  61. package/lib/locale/lang/nb-NO.js +3 -1
  62. package/lib/locale/lang/nb-NO.min.js +1 -1
  63. package/lib/locale/lang/pt-BR.js +3 -1
  64. package/lib/locale/lang/pt-BR.min.js +1 -1
  65. package/lib/locale/lang/pt-BR.umd.js +3 -1
  66. package/lib/locale/lang/ru-RU.js +3 -1
  67. package/lib/locale/lang/ru-RU.min.js +1 -1
  68. package/lib/locale/lang/ru-RU.umd.js +3 -1
  69. package/lib/locale/lang/th-TH.js +3 -1
  70. package/lib/locale/lang/th-TH.min.js +1 -1
  71. package/lib/locale/lang/ug-CN.js +3 -1
  72. package/lib/locale/lang/ug-CN.min.js +1 -1
  73. package/lib/locale/lang/uk-UA.js +3 -1
  74. package/lib/locale/lang/uk-UA.min.js +1 -1
  75. package/lib/locale/lang/uk-UA.umd.js +3 -1
  76. package/lib/locale/lang/vi-VN.js +3 -1
  77. package/lib/locale/lang/vi-VN.min.js +1 -1
  78. package/lib/locale/lang/zh-CHT.js +3 -1
  79. package/lib/locale/lang/zh-CHT.min.js +1 -1
  80. package/lib/locale/lang/zh-CHT.umd.js +3 -1
  81. package/lib/locale/lang/zh-CN.js +3 -1
  82. package/lib/locale/lang/zh-CN.min.js +1 -1
  83. package/lib/locale/lang/zh-CN.umd.js +3 -1
  84. package/lib/style.css +1 -1
  85. package/lib/table/module/edit/mixin.js +9 -9
  86. package/lib/table/module/edit/mixin.min.js +1 -1
  87. package/lib/table/module/export/export-panel.js +29 -17
  88. package/lib/table/module/export/export-panel.min.js +1 -1
  89. package/lib/table/module/export/mixin.js +18 -12
  90. package/lib/table/module/export/mixin.min.js +1 -1
  91. package/lib/table/src/body.js +14 -15
  92. package/lib/table/src/body.min.js +1 -1
  93. package/lib/table/src/footer.js +4 -27
  94. package/lib/table/src/footer.min.js +1 -1
  95. package/lib/table/src/methods.js +278 -114
  96. package/lib/table/src/methods.min.js +1 -1
  97. package/lib/table/src/table.js +52 -25
  98. package/lib/table/src/table.min.js +1 -1
  99. package/lib/table/src/util.js +0 -25
  100. package/lib/table/src/util.min.js +1 -1
  101. package/lib/ui/index.js +2 -2
  102. package/lib/ui/index.min.js +1 -1
  103. package/lib/ui/src/log.js +1 -1
  104. package/lib/ui/src/log.min.js +1 -1
  105. package/package.json +2 -2
  106. package/packages/locale/lang/ar-EG.ts +3 -1
  107. package/packages/locale/lang/de-DE.ts +3 -1
  108. package/packages/locale/lang/en-US.ts +7 -5
  109. package/packages/locale/lang/es-ES.ts +3 -1
  110. package/packages/locale/lang/fr-FR.ts +3 -1
  111. package/packages/locale/lang/hu-HU.ts +3 -1
  112. package/packages/locale/lang/hy-AM.ts +3 -1
  113. package/packages/locale/lang/id-ID.ts +3 -1
  114. package/packages/locale/lang/it-IT.ts +3 -1
  115. package/packages/locale/lang/ja-JP.ts +3 -1
  116. package/packages/locale/lang/ko-KR.ts +3 -1
  117. package/packages/locale/lang/nb-NO.ts +3 -1
  118. package/packages/locale/lang/pt-BR.ts +3 -1
  119. package/packages/locale/lang/ru-RU.ts +3 -1
  120. package/packages/locale/lang/th-TH.ts +3 -1
  121. package/packages/locale/lang/ug-CN.ts +3 -1
  122. package/packages/locale/lang/uk-UA.ts +3 -1
  123. package/packages/locale/lang/vi-VN.ts +3 -1
  124. package/packages/locale/lang/zh-CHT.ts +3 -1
  125. package/packages/locale/lang/zh-CN.ts +3 -1
  126. package/packages/table/module/edit/mixin.ts +10 -9
  127. package/packages/table/module/export/export-panel.ts +33 -17
  128. package/packages/table/module/export/mixin.ts +17 -12
  129. package/packages/table/src/body.ts +11 -13
  130. package/packages/table/src/footer.ts +3 -17
  131. package/packages/table/src/methods.ts +261 -119
  132. package/packages/table/src/table.ts +50 -25
  133. package/packages/table/src/util.ts +0 -14
  134. package/packages/ui/index.ts +1 -1
  135. /package/es/{iconfont.1743393991959.ttf → iconfont.1743578536739.ttf} +0 -0
  136. /package/es/{iconfont.1743393991959.woff → iconfont.1743578536739.woff} +0 -0
  137. /package/es/{iconfont.1743393991959.woff2 → iconfont.1743578536739.woff2} +0 -0
  138. /package/lib/{iconfont.1743393991959.ttf → iconfont.1743578536739.ttf} +0 -0
  139. /package/lib/{iconfont.1743393991959.woff → iconfont.1743578536739.woff} +0 -0
  140. /package/lib/{iconfont.1743393991959.woff2 → iconfont.1743578536739.woff2} +0 -0
@@ -230,41 +230,35 @@ function cacheColumnMap($xeTable) {
230
230
  htmlColumn = column;
231
231
  }
232
232
  if (treeNode) {
233
- if (process.env.NODE_ENV === 'development') {
234
- if (treeNodeColumn) {
235
- warnLog('vxe.error.colRepet', ['tree-node', treeNode]);
236
- }
233
+ if (treeNodeColumn) {
234
+ warnLog('vxe.error.colRepet', ['tree-node', treeNode]);
237
235
  }
238
236
  if (!treeNodeColumn) {
239
237
  treeNodeColumn = column;
240
238
  }
241
239
  }
242
240
  else if (type === 'expand') {
243
- if (process.env.NODE_ENV === 'development') {
244
- if (expandColumn) {
245
- warnLog('vxe.error.colRepet', ['type', type]);
246
- }
241
+ if (expandColumn) {
242
+ warnLog('vxe.error.colRepet', ['type', type]);
247
243
  }
248
244
  if (!expandColumn) {
249
245
  expandColumn = column;
250
246
  }
251
247
  }
252
- if (process.env.NODE_ENV === 'development') {
253
- if (type === 'checkbox') {
254
- if (checkboxColumn) {
255
- warnLog('vxe.error.colRepet', ['type', type]);
256
- }
257
- if (!checkboxColumn) {
258
- checkboxColumn = column;
259
- }
248
+ if (type === 'checkbox') {
249
+ if (checkboxColumn) {
250
+ warnLog('vxe.error.colRepet', ['type', type]);
260
251
  }
261
- else if (type === 'radio') {
262
- if (radioColumn) {
263
- warnLog('vxe.error.colRepet', ['type', type]);
264
- }
265
- if (!radioColumn) {
266
- radioColumn = column;
267
- }
252
+ if (!checkboxColumn) {
253
+ checkboxColumn = column;
254
+ }
255
+ }
256
+ else if (type === 'radio') {
257
+ if (radioColumn) {
258
+ warnLog('vxe.error.colRepet', ['type', type]);
259
+ }
260
+ if (!radioColumn) {
261
+ radioColumn = column;
268
262
  }
269
263
  }
270
264
  if (isAllOverflow && column.showOverflow === false) {
@@ -1262,32 +1256,67 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
1262
1256
  }
1263
1257
  }
1264
1258
  }
1265
- function setMerges($xeTable, merges, mList, rowList) {
1266
- // const props = $xeTable
1259
+ function buildMergeData(mergeConfigs) {
1260
+ const mergeMaps = {};
1261
+ if (mergeConfigs && mergeConfigs.length) {
1262
+ for (let mIndex = 0; mIndex < mergeConfigs.length; mIndex++) {
1263
+ const { row: _rowIndex, col: _columnIndex, rowspan: mergeRowspan, colspan: mergeColspan } = mergeConfigs[mIndex];
1264
+ for (let i = 0; i < mergeRowspan; i++) {
1265
+ for (let j = 0; j < mergeColspan; j++) {
1266
+ mergeMaps[`${_rowIndex + i}:${_columnIndex + j}`] = !i && !j
1267
+ ? {
1268
+ rowspan: mergeRowspan,
1269
+ colspan: mergeColspan
1270
+ }
1271
+ : {
1272
+ rowspan: 0,
1273
+ colspan: 0
1274
+ };
1275
+ }
1276
+ }
1277
+ }
1278
+ }
1279
+ return mergeMaps;
1280
+ }
1281
+ const handleBodyMerge = ($xeTable, merges) => {
1267
1282
  const internalData = $xeTable;
1283
+ const { fullAllDataRowIdData, fullColumnIdData, visibleColumn, afterFullData, mergeBodyList, mergeBodyMaps } = internalData;
1268
1284
  if (merges) {
1269
- // const { treeConfig } = props
1270
- const { visibleColumn } = internalData;
1285
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1271
1286
  if (!XEUtils.isArray(merges)) {
1272
1287
  merges = [merges];
1273
1288
  }
1274
- // if (treeConfig && merges.length) {
1275
- // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1276
- // }
1277
1289
  merges.forEach((item) => {
1278
1290
  let { row, col, rowspan, colspan } = item;
1279
- if (rowList && XEUtils.isNumber(row)) {
1280
- row = rowList[row];
1291
+ let mergeRowIndex = -1;
1292
+ let mergeColumnIndex = -1;
1293
+ if (XEUtils.isNumber(row)) {
1294
+ mergeRowIndex = row;
1295
+ }
1296
+ else {
1297
+ const rowid = row ? handleGetRowId(row) : null;
1298
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
1299
+ if (rowRest) {
1300
+ mergeRowIndex = rowRest._index;
1301
+ }
1281
1302
  }
1282
1303
  if (XEUtils.isNumber(col)) {
1283
- col = visibleColumn[col];
1304
+ mergeColumnIndex = col;
1284
1305
  }
1285
- if ((rowList ? row : XEUtils.isNumber(row)) && col && (rowspan || colspan)) {
1306
+ else {
1307
+ const colid = col ? col.id : null;
1308
+ const colRest = colid ? fullColumnIdData[colid] : null;
1309
+ if (colRest) {
1310
+ mergeColumnIndex = colRest._index;
1311
+ }
1312
+ }
1313
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1286
1314
  rowspan = XEUtils.toNumber(rowspan) || 1;
1287
1315
  colspan = XEUtils.toNumber(colspan) || 1;
1288
1316
  if (rowspan > 1 || colspan > 1) {
1289
- const mcIndex = XEUtils.findIndexOf(mList, item => item._row === row && item._col === col);
1290
- const mergeItem = mList[mcIndex];
1317
+ const row = afterFullData[mergeRowIndex];
1318
+ const column = visibleColumn[mergeColumnIndex];
1319
+ let mergeItem = mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1291
1320
  if (mergeItem) {
1292
1321
  mergeItem.rowspan = rowspan;
1293
1322
  mergeItem.colspan = colspan;
@@ -1295,24 +1324,73 @@ function setMerges($xeTable, merges, mList, rowList) {
1295
1324
  mergeItem._colspan = colspan;
1296
1325
  }
1297
1326
  else {
1298
- const mergeRowIndex = rowList ? rowList.indexOf(row) : row;
1299
- const mergeColIndex = visibleColumn.indexOf(col);
1300
- mList.push({
1327
+ mergeItem = {
1301
1328
  row: mergeRowIndex,
1302
- col: mergeColIndex,
1329
+ col: mergeColumnIndex,
1303
1330
  rowspan,
1304
1331
  colspan,
1305
1332
  _row: row,
1306
- _col: col,
1333
+ _col: column,
1307
1334
  _rowspan: rowspan,
1308
1335
  _colspan: colspan
1309
- });
1336
+ };
1337
+ mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1338
+ mergeBodyList.push(mergeItem);
1310
1339
  }
1311
1340
  }
1312
1341
  }
1313
1342
  });
1314
1343
  }
1315
- }
1344
+ };
1345
+ const handleFooterMerge = ($xeTable, merges) => {
1346
+ const reactData = $xeTable;
1347
+ const internalData = $xeTable;
1348
+ const { footerTableData } = reactData;
1349
+ const { mergeFooterList, mergeFooterMaps } = internalData;
1350
+ if (merges) {
1351
+ const { visibleColumn } = internalData;
1352
+ if (!XEUtils.isArray(merges)) {
1353
+ merges = [merges];
1354
+ }
1355
+ merges.forEach((item) => {
1356
+ let { row: margeRow, col: margeCol, rowspan, colspan } = item;
1357
+ const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
1358
+ let mergeColumnIndex = -1;
1359
+ if (XEUtils.isNumber(margeCol)) {
1360
+ mergeColumnIndex = margeCol;
1361
+ }
1362
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1363
+ rowspan = XEUtils.toNumber(rowspan) || 1;
1364
+ colspan = XEUtils.toNumber(colspan) || 1;
1365
+ if (rowspan > 1 || colspan > 1) {
1366
+ const row = footerTableData[mergeRowIndex];
1367
+ const column = visibleColumn[mergeColumnIndex];
1368
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1369
+ if (mergeItem) {
1370
+ mergeItem.rowspan = rowspan;
1371
+ mergeItem.colspan = colspan;
1372
+ mergeItem._rowspan = rowspan;
1373
+ mergeItem._colspan = colspan;
1374
+ }
1375
+ else {
1376
+ mergeItem = {
1377
+ row: mergeRowIndex,
1378
+ col: mergeColumnIndex,
1379
+ rowspan,
1380
+ colspan,
1381
+ _row: row,
1382
+ _col: column,
1383
+ _rowspan: rowspan,
1384
+ _colspan: colspan
1385
+ };
1386
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1387
+ mergeFooterList.push(mergeItem);
1388
+ }
1389
+ }
1390
+ }
1391
+ });
1392
+ }
1393
+ };
1316
1394
  function removeMerges($xeTable, merges, mList, rowList) {
1317
1395
  // const props = $xeTable
1318
1396
  const internalData = $xeTable;
@@ -1971,8 +2049,8 @@ function handleUpdateColumn($xeTable) {
1971
2049
  function loadScrollXData($xeTable) {
1972
2050
  const reactData = $xeTable;
1973
2051
  const internalData = $xeTable;
1974
- const { mergeList, mergeFooterList, isScrollXBig } = reactData;
1975
- const { scrollXStore } = internalData;
2052
+ const { isScrollXBig } = reactData;
2053
+ const { mergeBodyList, mergeFooterList, scrollXStore } = internalData;
1976
2054
  const { preloadSize, startIndex, endIndex, offsetSize } = scrollXStore;
1977
2055
  const { toVisibleIndex, visibleSize } = handleVirtualXVisible($xeTable);
1978
2056
  const offsetItem = {
@@ -1981,7 +2059,7 @@ function loadScrollXData($xeTable) {
1981
2059
  };
1982
2060
  scrollXStore.visibleStartIndex = toVisibleIndex - 1;
1983
2061
  scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
1984
- calculateMergerOffsetIndex(mergeList.concat(mergeFooterList), offsetItem, 'col');
2062
+ calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList), offsetItem, 'col');
1985
2063
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem;
1986
2064
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
1987
2065
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -2190,8 +2268,8 @@ function handleColumn($xeTable, collectColumn) {
2190
2268
  function loadScrollYData($xeTable) {
2191
2269
  const reactData = $xeTable;
2192
2270
  const internalData = $xeTable;
2193
- const { mergeList, isAllOverflow, isScrollYBig } = reactData;
2194
- const { scrollYStore } = internalData;
2271
+ const { isAllOverflow, isScrollYBig } = reactData;
2272
+ const { mergeBodyList, scrollYStore } = internalData;
2195
2273
  const { preloadSize, startIndex, endIndex, offsetSize } = scrollYStore;
2196
2274
  const autoOffsetYSize = isAllOverflow ? offsetSize : offsetSize + 1;
2197
2275
  const { toVisibleIndex, visibleSize } = handleVirtualYVisible($xeTable);
@@ -2201,7 +2279,7 @@ function loadScrollYData($xeTable) {
2201
2279
  };
2202
2280
  scrollYStore.visibleStartIndex = toVisibleIndex - 1;
2203
2281
  scrollYStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
2204
- calculateMergerOffsetIndex(mergeList, offsetItem, 'row');
2282
+ calculateMergerOffsetIndex(mergeBodyList, offsetItem, 'row');
2205
2283
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem;
2206
2284
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
2207
2285
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -2590,7 +2668,7 @@ const Methods = {
2590
2668
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
2591
2669
  */
2592
2670
  syncData() {
2593
- warnLog('vxe.error.delFunc', ['syncData', 'getData']);
2671
+ errLog('vxe.error.delFunc', ['syncData', 'getData']);
2594
2672
  return this.$nextTick().then(() => {
2595
2673
  this.tableData = [];
2596
2674
  return this.$nextTick().then(() => this.loadTableData(this.tableFullData, true));
@@ -2601,30 +2679,35 @@ const Methods = {
2601
2679
  * 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到
2602
2680
  */
2603
2681
  updateData() {
2604
- const { scrollXLoad, scrollYLoad } = this;
2605
- return this.handleTableData(true).then(() => {
2606
- this.updateFooter();
2682
+ const $xeTable = this;
2683
+ const reactData = $xeTable;
2684
+ const { scrollXLoad, scrollYLoad } = reactData;
2685
+ return $xeTable.handleTableData(true).then(() => {
2686
+ $xeTable.updateFooter();
2607
2687
  if (scrollXLoad || scrollYLoad) {
2608
2688
  if (scrollXLoad) {
2609
- this.updateScrollXSpace();
2689
+ $xeTable.updateScrollXSpace();
2610
2690
  }
2611
2691
  if (scrollYLoad) {
2612
- this.updateScrollYSpace();
2692
+ $xeTable.updateScrollYSpace();
2613
2693
  }
2614
- return this.refreshScroll();
2694
+ return $xeTable.refreshScroll();
2615
2695
  }
2616
2696
  }).then(() => {
2617
- this.updateCellAreas();
2618
- return this.recalculate(true);
2697
+ $xeTable.updateCellAreas();
2698
+ return $xeTable.recalculate(true);
2619
2699
  }).then(() => {
2620
2700
  // 存在滚动行为未结束情况
2621
- setTimeout(() => this.recalculate(), 50);
2701
+ setTimeout(() => $xeTable.recalculate(), 50);
2622
2702
  });
2623
2703
  },
2624
2704
  handleTableData(force) {
2625
2705
  const $xeTable = this;
2626
- const { scrollYLoad, scrollYStore, fullDataRowIdData, afterFullData } = this;
2627
- let fullList = afterFullData;
2706
+ const reactData = $xeTable;
2707
+ const internalData = $xeTable;
2708
+ const { scrollYLoad } = reactData;
2709
+ const { scrollYStore, fullDataRowIdData } = internalData;
2710
+ let fullList = internalData.afterFullData;
2628
2711
  // 是否进行数据处理
2629
2712
  if (force) {
2630
2713
  // 更新数据,处理筛选和排序
@@ -2633,14 +2716,17 @@ const Methods = {
2633
2716
  fullList = handleVirtualTreeToList($xeTable);
2634
2717
  }
2635
2718
  const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
2719
+ const visibleDataRowIdMaps = {};
2636
2720
  tableData.forEach((row, $index) => {
2637
2721
  const rowid = getRowid(this, row);
2638
2722
  const rest = fullDataRowIdData[rowid];
2639
2723
  if (rest) {
2640
2724
  rest.$index = $index;
2641
2725
  }
2726
+ visibleDataRowIdMaps[rowid] = row;
2642
2727
  });
2643
2728
  this.tableData = tableData;
2729
+ internalData.visibleDataRowIdData = visibleDataRowIdMaps;
2644
2730
  return this.$nextTick();
2645
2731
  },
2646
2732
  /**
@@ -2656,6 +2742,7 @@ const Methods = {
2656
2742
  const { scrollYLoad: oldScrollYLoad } = reactData;
2657
2743
  const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData;
2658
2744
  const treeOpts = $xeTable.computeTreeOpts;
2745
+ const expandOpts = $xeTable.computeExpandOpts;
2659
2746
  const { transform } = treeOpts;
2660
2747
  const childrenField = treeOpts.children || treeOpts.childrenField;
2661
2748
  let treeData = [];
@@ -2713,7 +2800,7 @@ const Methods = {
2713
2800
  internalData.tableFullData = fullData;
2714
2801
  internalData.tableFullTreeData = treeData;
2715
2802
  // 缓存数据
2716
- $xeTable.cacheRowMap(true);
2803
+ $xeTable.cacheRowMap(isReset);
2717
2804
  // 原始数据
2718
2805
  internalData.tableSynchData = datas;
2719
2806
  if (isReset) {
@@ -2731,6 +2818,7 @@ const Methods = {
2731
2818
  $xeTable.clearMergeFooterItems();
2732
2819
  $xeTable.handleTableData(true);
2733
2820
  $xeTable.updateFooter();
2821
+ $xeTable.handleUpdateBodyMerge();
2734
2822
  return $xeTable.$nextTick().then(() => {
2735
2823
  updateHeight($xeTable);
2736
2824
  updateStyle($xeTable);
@@ -2742,6 +2830,9 @@ const Methods = {
2742
2830
  scrollYStore.endIndex = scrollYStore.visibleSize;
2743
2831
  }
2744
2832
  if (sYLoad) {
2833
+ if (reactData.expandColumn && expandOpts.mode !== 'fixed') {
2834
+ errLog('vxe.error.notConflictProp', ['column.type="expand', 'expand-config.mode="fixed"']);
2835
+ }
2745
2836
  // if (showOverflow) {
2746
2837
  // if (!rowOpts.height) {
2747
2838
  // const errColumn = internalData.tableFullColumn.find((column: any) => column.showOverflow === false)
@@ -2903,7 +2994,7 @@ const Methods = {
2903
2994
  /**
2904
2995
  * 更新数据行的 Map
2905
2996
  */
2906
- cacheRowMap() {
2997
+ cacheRowMap(isReset) {
2907
2998
  const $xeTable = this;
2908
2999
  const props = $xeTable;
2909
3000
  const reactData = $xeTable;
@@ -2914,7 +3005,7 @@ const Methods = {
2914
3005
  const childrenField = treeOpts.children || treeOpts.childrenField;
2915
3006
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
2916
3007
  const { lazy } = treeOpts;
2917
- const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
3008
+ const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
2918
3009
  const fullDataRowIdMaps = {};
2919
3010
  const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
2920
3011
  const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
@@ -3652,8 +3743,10 @@ const Methods = {
3652
3743
  getCheckboxRecords(isFull) {
3653
3744
  const $xeTable = this;
3654
3745
  const props = $xeTable;
3746
+ const reactData = $xeTable;
3655
3747
  const internalData = $xeTable;
3656
3748
  const { treeConfig } = props;
3749
+ const { updateCheckboxFlag } = reactData;
3657
3750
  const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
3658
3751
  const treeOpts = $xeTable.computeTreeOpts;
3659
3752
  const checkboxOpts = $xeTable.computeCheckboxOpts;
@@ -3661,29 +3754,31 @@ const Methods = {
3661
3754
  const { checkField } = checkboxOpts;
3662
3755
  const childrenField = treeOpts.children || treeOpts.childrenField;
3663
3756
  let rowList = [];
3664
- if (checkField) {
3665
- if (treeConfig) {
3666
- const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
3667
- rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
3757
+ if (updateCheckboxFlag) {
3758
+ if (checkField) {
3759
+ if (treeConfig) {
3760
+ const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
3761
+ rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
3762
+ }
3763
+ else {
3764
+ const currTableData = isFull ? tableFullData : afterFullData;
3765
+ rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
3766
+ }
3668
3767
  }
3669
3768
  else {
3670
- const currTableData = isFull ? tableFullData : afterFullData;
3671
- rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
3672
- }
3673
- }
3674
- else {
3675
- XEUtils.each(selectCheckboxMaps, (row, rowid) => {
3676
- if (isFull) {
3677
- if (fullDataRowIdData[rowid]) {
3678
- rowList.push(fullDataRowIdData[rowid].row);
3769
+ XEUtils.each(selectCheckboxMaps, (row, rowid) => {
3770
+ if (isFull) {
3771
+ if (fullDataRowIdData[rowid]) {
3772
+ rowList.push(fullDataRowIdData[rowid].row);
3773
+ }
3679
3774
  }
3680
- }
3681
- else {
3682
- if (afterFullRowMaps[rowid]) {
3683
- rowList.push(afterFullRowMaps[rowid]);
3775
+ else {
3776
+ if (afterFullRowMaps[rowid]) {
3777
+ rowList.push(afterFullRowMaps[rowid]);
3778
+ }
3684
3779
  }
3685
- }
3686
- });
3780
+ });
3781
+ }
3687
3782
  }
3688
3783
  return rowList;
3689
3784
  },
@@ -5518,6 +5613,25 @@ const Methods = {
5518
5613
  this.updateCellAreas();
5519
5614
  this.recalculate(true);
5520
5615
  },
5616
+ /**
5617
+ * 处理合并
5618
+ */
5619
+ handleUpdateBodyMerge() {
5620
+ const $xeTable = this;
5621
+ const reactData = $xeTable;
5622
+ const internalData = $xeTable;
5623
+ const { mergeBodyList } = internalData;
5624
+ internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
5625
+ reactData.mergeBodyFlag++;
5626
+ },
5627
+ handleUpdateFooterMerge() {
5628
+ const $xeTable = this;
5629
+ const reactData = $xeTable;
5630
+ const internalData = $xeTable;
5631
+ const { mergeFooterList } = internalData;
5632
+ internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
5633
+ reactData.mergeFootFlag++;
5634
+ },
5521
5635
  handleTargetLeaveEvent() {
5522
5636
  const $xeTable = this;
5523
5637
  const internalData = $xeTable;
@@ -9064,17 +9178,22 @@ const Methods = {
9064
9178
  */
9065
9179
  updateFooter() {
9066
9180
  const $xeTable = this;
9181
+ const props = $xeTable;
9182
+ const reactData = $xeTable;
9183
+ const internalData = $xeTable;
9067
9184
  const $xeGrid = $xeTable.$xeGrid;
9068
- const { showFooter, visibleColumn, footerData, footerMethod } = this;
9185
+ const { showFooter, footerData, footerMethod } = props;
9186
+ const { visibleColumn, afterFullData } = internalData;
9069
9187
  let footData = [];
9070
9188
  if (showFooter && footerData && footerData.length) {
9071
9189
  footData = footerData.slice(0);
9072
9190
  }
9073
9191
  else if (showFooter && footerMethod) {
9074
- footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
9192
+ footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
9075
9193
  }
9076
- this.footerTableData = footData;
9077
- return this.$nextTick();
9194
+ reactData.footerTableData = footData;
9195
+ $xeTable.handleUpdateFooterMerge();
9196
+ return $xeTable.$nextTick();
9078
9197
  },
9079
9198
  /**
9080
9199
  * 更新列状态 updateStatus({ row, column }, cellValue)
@@ -9097,12 +9216,14 @@ const Methods = {
9097
9216
  */
9098
9217
  setMergeCells(merges) {
9099
9218
  const $xeTable = this;
9100
- if (this.spanMethod) {
9219
+ const props = $xeTable;
9220
+ if (props.spanMethod) {
9101
9221
  errLog('vxe.error.errConflicts', ['merge-cells', 'span-method']);
9102
9222
  }
9103
- setMerges(this, merges, this.mergeList, this.afterFullData);
9104
- return this.$nextTick().then(() => {
9105
- this.updateCellAreas();
9223
+ handleBodyMerge($xeTable, merges);
9224
+ $xeTable.handleUpdateBodyMerge();
9225
+ return $xeTable.$nextTick().then(() => {
9226
+ $xeTable.updateCellAreas();
9106
9227
  return updateStyle($xeTable);
9107
9228
  });
9108
9229
  },
@@ -9112,12 +9233,14 @@ const Methods = {
9112
9233
  */
9113
9234
  removeMergeCells(merges) {
9114
9235
  const $xeTable = this;
9115
- if (this.spanMethod) {
9236
+ const props = $xeTable;
9237
+ const internalData = $xeTable;
9238
+ if (props.spanMethod) {
9116
9239
  errLog('vxe.error.errConflicts', ['merge-cells', 'span-method']);
9117
9240
  }
9118
- const rest = removeMerges(this, merges, this.mergeList, this.afterFullData);
9119
- return this.$nextTick().then(() => {
9120
- this.updateCellAreas();
9241
+ const rest = removeMerges($xeTable, merges, internalData.mergeBodyList, internalData.afterFullData);
9242
+ return $xeTable.$nextTick().then(() => {
9243
+ $xeTable.updateCellAreas();
9121
9244
  updateStyle($xeTable);
9122
9245
  return rest;
9123
9246
  });
@@ -9126,37 +9249,46 @@ const Methods = {
9126
9249
  * 获取所有被合并的单元格
9127
9250
  */
9128
9251
  getMergeCells() {
9129
- return this.mergeList.slice(0);
9252
+ const $xeTable = this;
9253
+ const internalData = $xeTable;
9254
+ return internalData.mergeBodyList.slice(0);
9130
9255
  },
9131
9256
  /**
9132
9257
  * 清除所有单元格合并
9133
9258
  */
9134
9259
  clearMergeCells() {
9135
9260
  const $xeTable = this;
9136
- this.mergeList = [];
9137
- return this.$nextTick().then(() => {
9261
+ const internalData = $xeTable;
9262
+ internalData.mergeBodyList = [];
9263
+ internalData.mergeBodyMaps = {};
9264
+ internalData.mergeBodyCellMaps = {};
9265
+ return $xeTable.$nextTick().then(() => {
9138
9266
  return updateStyle($xeTable);
9139
9267
  });
9140
9268
  },
9141
9269
  setMergeFooterItems(merges) {
9142
9270
  const $xeTable = this;
9143
- if (this.footerSpanMethod) {
9271
+ const props = $xeTable;
9272
+ if (props.footerSpanMethod) {
9144
9273
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
9145
9274
  }
9146
- setMerges(this, merges, this.mergeFooterList);
9147
- return this.$nextTick().then(() => {
9148
- this.updateCellAreas();
9275
+ handleFooterMerge($xeTable, merges);
9276
+ $xeTable.handleUpdateFooterMerge();
9277
+ return $xeTable.$nextTick().then(() => {
9278
+ $xeTable.updateCellAreas();
9149
9279
  return updateStyle($xeTable);
9150
9280
  });
9151
9281
  },
9152
9282
  removeMergeFooterItems(merges) {
9153
9283
  const $xeTable = this;
9154
- if (this.footerSpanMethod) {
9284
+ const props = $xeTable;
9285
+ const internalData = $xeTable;
9286
+ if (props.footerSpanMethod) {
9155
9287
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
9156
9288
  }
9157
- const rest = removeMerges(this, merges, this.mergeFooterList, null);
9158
- return this.$nextTick().then(() => {
9159
- this.updateCellAreas();
9289
+ const rest = removeMerges($xeTable, merges, internalData.mergeFooterList);
9290
+ return $xeTable.$nextTick().then(() => {
9291
+ $xeTable.updateCellAreas();
9160
9292
  updateStyle($xeTable);
9161
9293
  return rest;
9162
9294
  });
@@ -9165,15 +9297,20 @@ const Methods = {
9165
9297
  * 获取所有被合并的表尾
9166
9298
  */
9167
9299
  getMergeFooterItems() {
9168
- return this.mergeFooterList.slice(0);
9300
+ const $xeTable = this;
9301
+ const internalData = $xeTable;
9302
+ return internalData.mergeFooterList.slice(0);
9169
9303
  },
9170
9304
  /**
9171
9305
  * 清除所有表尾合并
9172
9306
  */
9173
9307
  clearMergeFooterItems() {
9174
9308
  const $xeTable = this;
9175
- this.mergeFooterList = [];
9176
- return this.$nextTick().then(() => {
9309
+ const internalData = $xeTable;
9310
+ internalData.mergeFooterList = [];
9311
+ internalData.mergeFooterMaps = {};
9312
+ internalData.mergeFooterCellMaps = {};
9313
+ return $xeTable.$nextTick().then(() => {
9177
9314
  return updateStyle($xeTable);
9178
9315
  });
9179
9316
  },