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
@@ -249,39 +249,33 @@ function cacheColumnMap ($xeTable: VxeTableConstructor) {
249
249
  htmlColumn = column
250
250
  }
251
251
  if (treeNode) {
252
- if (process.env.VUE_APP_VXE_ENV === 'development') {
253
- if (treeNodeColumn) {
254
- warnLog('vxe.error.colRepet', ['tree-node', treeNode])
255
- }
252
+ if (treeNodeColumn) {
253
+ warnLog('vxe.error.colRepet', ['tree-node', treeNode])
256
254
  }
257
255
  if (!treeNodeColumn) {
258
256
  treeNodeColumn = column
259
257
  }
260
258
  } else if (type === 'expand') {
261
- if (process.env.VUE_APP_VXE_ENV === 'development') {
262
- if (expandColumn) {
263
- warnLog('vxe.error.colRepet', ['type', type])
264
- }
259
+ if (expandColumn) {
260
+ warnLog('vxe.error.colRepet', ['type', type])
265
261
  }
266
262
  if (!expandColumn) {
267
263
  expandColumn = column
268
264
  }
269
265
  }
270
- if (process.env.VUE_APP_VXE_ENV === 'development') {
271
- if (type === 'checkbox') {
272
- if (checkboxColumn) {
273
- warnLog('vxe.error.colRepet', ['type', type])
274
- }
275
- if (!checkboxColumn) {
276
- checkboxColumn = column
277
- }
278
- } else if (type === 'radio') {
279
- if (radioColumn) {
280
- warnLog('vxe.error.colRepet', ['type', type])
281
- }
282
- if (!radioColumn) {
283
- radioColumn = column
284
- }
266
+ if (type === 'checkbox') {
267
+ if (checkboxColumn) {
268
+ warnLog('vxe.error.colRepet', ['type', type])
269
+ }
270
+ if (!checkboxColumn) {
271
+ checkboxColumn = column
272
+ }
273
+ } else if (type === 'radio') {
274
+ if (radioColumn) {
275
+ warnLog('vxe.error.colRepet', ['type', type])
276
+ }
277
+ if (!radioColumn) {
278
+ radioColumn = column
285
279
  }
286
280
  }
287
281
  if (isAllOverflow && column.showOverflow === false) {
@@ -1327,51 +1321,135 @@ function calculateMergerOffsetIndex (list: any, offsetItem: any, type: any) {
1327
1321
  }
1328
1322
  }
1329
1323
 
1330
- function setMerges ($xeTable: VxeTableConstructor, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any[]) {
1331
- // const props = $xeTable
1324
+ function buildMergeData (mergeConfigs: VxeTableDefines.MergeItem[]) {
1325
+ const mergeMaps: Record<string, VxeTableDefines.MergeCacheItem> = {}
1326
+ if (mergeConfigs && mergeConfigs.length) {
1327
+ for (let mIndex = 0; mIndex < mergeConfigs.length; mIndex++) {
1328
+ const { row: _rowIndex, col: _columnIndex, rowspan: mergeRowspan, colspan: mergeColspan } = mergeConfigs[mIndex]
1329
+ for (let i = 0; i < mergeRowspan; i++) {
1330
+ for (let j = 0; j < mergeColspan; j++) {
1331
+ mergeMaps[`${_rowIndex + i}:${_columnIndex + j}`] = !i && !j
1332
+ ? {
1333
+ rowspan: mergeRowspan,
1334
+ colspan: mergeColspan
1335
+ }
1336
+ : {
1337
+ rowspan: 0,
1338
+ colspan: 0
1339
+ }
1340
+ }
1341
+ }
1342
+ }
1343
+ }
1344
+ return mergeMaps
1345
+ }
1346
+
1347
+ const handleBodyMerge = ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
1332
1348
  const internalData = $xeTable as unknown as TableInternalData
1333
1349
 
1350
+ const { fullAllDataRowIdData, fullColumnIdData, visibleColumn, afterFullData, mergeBodyList, mergeBodyMaps } = internalData
1334
1351
  if (merges) {
1335
- // const { treeConfig } = props
1336
- const { visibleColumn } = internalData
1352
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
1337
1353
  if (!XEUtils.isArray(merges)) {
1338
1354
  merges = [merges]
1339
1355
  }
1340
- // if (treeConfig && merges.length) {
1341
- // errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
1342
- // }
1343
1356
  merges.forEach((item) => {
1344
1357
  let { row, col, rowspan, colspan } = item
1345
- if (rowList && XEUtils.isNumber(row)) {
1346
- row = rowList[row]
1358
+ let mergeRowIndex = -1
1359
+ let mergeColumnIndex = -1
1360
+ if (XEUtils.isNumber(row)) {
1361
+ mergeRowIndex = row
1362
+ } else {
1363
+ const rowid = row ? handleGetRowId(row) : null
1364
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null
1365
+ if (rowRest) {
1366
+ mergeRowIndex = rowRest._index
1367
+ }
1347
1368
  }
1348
1369
  if (XEUtils.isNumber(col)) {
1349
- col = visibleColumn[col]
1370
+ mergeColumnIndex = col
1371
+ } else {
1372
+ const colid = col ? col.id : null
1373
+ const colRest = colid ? fullColumnIdData[colid] : null
1374
+ if (colRest) {
1375
+ mergeColumnIndex = colRest._index
1376
+ }
1350
1377
  }
1351
- if ((rowList ? row : XEUtils.isNumber(row)) && col && (rowspan || colspan)) {
1378
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1352
1379
  rowspan = XEUtils.toNumber(rowspan) || 1
1353
1380
  colspan = XEUtils.toNumber(colspan) || 1
1354
1381
  if (rowspan > 1 || colspan > 1) {
1355
- const mcIndex = XEUtils.findIndexOf(mList, item => item._row === row && item._col === col)
1356
- const mergeItem = mList[mcIndex]
1382
+ const row = afterFullData[mergeRowIndex]
1383
+ const column = visibleColumn[mergeColumnIndex]
1384
+ let mergeItem = mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
1357
1385
  if (mergeItem) {
1358
1386
  mergeItem.rowspan = rowspan
1359
1387
  mergeItem.colspan = colspan
1360
1388
  mergeItem._rowspan = rowspan
1361
1389
  mergeItem._colspan = colspan
1362
1390
  } else {
1363
- const mergeRowIndex = rowList ? rowList.indexOf(row) : row
1364
- const mergeColIndex = visibleColumn.indexOf(col)
1365
- mList.push({
1391
+ mergeItem = {
1366
1392
  row: mergeRowIndex,
1367
- col: mergeColIndex,
1393
+ col: mergeColumnIndex,
1368
1394
  rowspan,
1369
1395
  colspan,
1370
1396
  _row: row,
1371
- _col: col,
1397
+ _col: column,
1372
1398
  _rowspan: rowspan,
1373
1399
  _colspan: colspan
1374
- })
1400
+ }
1401
+ mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem
1402
+ mergeBodyList.push(mergeItem)
1403
+ }
1404
+ }
1405
+ }
1406
+ })
1407
+ }
1408
+ }
1409
+
1410
+ const handleFooterMerge = ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
1411
+ const reactData = $xeTable as unknown as TableReactData
1412
+ const internalData = $xeTable as unknown as TableInternalData
1413
+
1414
+ const { footerTableData } = reactData
1415
+ const { mergeFooterList, mergeFooterMaps } = internalData
1416
+ if (merges) {
1417
+ const { visibleColumn } = internalData
1418
+ if (!XEUtils.isArray(merges)) {
1419
+ merges = [merges]
1420
+ }
1421
+ merges.forEach((item) => {
1422
+ let { row: margeRow, col: margeCol, rowspan, colspan } = item
1423
+ const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1
1424
+ let mergeColumnIndex = -1
1425
+ if (XEUtils.isNumber(margeCol)) {
1426
+ mergeColumnIndex = margeCol
1427
+ }
1428
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
1429
+ rowspan = XEUtils.toNumber(rowspan) || 1
1430
+ colspan = XEUtils.toNumber(colspan) || 1
1431
+ if (rowspan > 1 || colspan > 1) {
1432
+ const row = footerTableData[mergeRowIndex]
1433
+ const column = visibleColumn[mergeColumnIndex]
1434
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
1435
+ if (mergeItem) {
1436
+ mergeItem.rowspan = rowspan
1437
+ mergeItem.colspan = colspan
1438
+ mergeItem._rowspan = rowspan
1439
+ mergeItem._colspan = colspan
1440
+ } else {
1441
+ mergeItem = {
1442
+ row: mergeRowIndex,
1443
+ col: mergeColumnIndex,
1444
+ rowspan,
1445
+ colspan,
1446
+ _row: row,
1447
+ _col: column,
1448
+ _rowspan: rowspan,
1449
+ _colspan: colspan
1450
+ }
1451
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem
1452
+ mergeFooterList.push(mergeItem)
1375
1453
  }
1376
1454
  }
1377
1455
  }
@@ -1379,7 +1457,7 @@ function setMerges ($xeTable: VxeTableConstructor, merges: VxeTableDefines.Merge
1379
1457
  }
1380
1458
  }
1381
1459
 
1382
- function removeMerges ($xeTable: VxeTableConstructor, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any) {
1460
+ function removeMerges ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[], mList: VxeTableDefines.MergeItem[], rowList?: any) {
1383
1461
  // const props = $xeTable
1384
1462
  const internalData = $xeTable as unknown as TableInternalData
1385
1463
 
@@ -2069,8 +2147,8 @@ function loadScrollXData ($xeTable: VxeTableConstructor & VxeTablePrivateMethods
2069
2147
  const reactData = $xeTable as unknown as TableReactData
2070
2148
  const internalData = $xeTable as unknown as TableInternalData
2071
2149
 
2072
- const { mergeList, mergeFooterList, isScrollXBig } = reactData
2073
- const { scrollXStore } = internalData
2150
+ const { isScrollXBig } = reactData
2151
+ const { mergeBodyList, mergeFooterList, scrollXStore } = internalData
2074
2152
  const { preloadSize, startIndex, endIndex, offsetSize } = scrollXStore
2075
2153
  const { toVisibleIndex, visibleSize } = handleVirtualXVisible($xeTable)
2076
2154
  const offsetItem = {
@@ -2079,7 +2157,7 @@ function loadScrollXData ($xeTable: VxeTableConstructor & VxeTablePrivateMethods
2079
2157
  }
2080
2158
  scrollXStore.visibleStartIndex = toVisibleIndex - 1
2081
2159
  scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1
2082
- calculateMergerOffsetIndex(mergeList.concat(mergeFooterList), offsetItem, 'col')
2160
+ calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList), offsetItem, 'col')
2083
2161
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem
2084
2162
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
2085
2163
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -2293,8 +2371,8 @@ function loadScrollYData ($xeTable: VxeTableConstructor & VxeTablePrivateMethods
2293
2371
  const reactData = $xeTable as unknown as TableReactData
2294
2372
  const internalData = $xeTable as unknown as TableInternalData
2295
2373
 
2296
- const { mergeList, isAllOverflow, isScrollYBig } = reactData
2297
- const { scrollYStore } = internalData
2374
+ const { isAllOverflow, isScrollYBig } = reactData
2375
+ const { mergeBodyList, scrollYStore } = internalData
2298
2376
  const { preloadSize, startIndex, endIndex, offsetSize } = scrollYStore
2299
2377
  const autoOffsetYSize = isAllOverflow ? offsetSize : offsetSize + 1
2300
2378
  const { toVisibleIndex, visibleSize } = handleVirtualYVisible($xeTable)
@@ -2304,7 +2382,7 @@ function loadScrollYData ($xeTable: VxeTableConstructor & VxeTablePrivateMethods
2304
2382
  }
2305
2383
  scrollYStore.visibleStartIndex = toVisibleIndex - 1
2306
2384
  scrollYStore.visibleEndIndex = toVisibleIndex + visibleSize + 1
2307
- calculateMergerOffsetIndex(mergeList, offsetItem, 'row')
2385
+ calculateMergerOffsetIndex(mergeBodyList, offsetItem, 'row')
2308
2386
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem
2309
2387
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
2310
2388
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -2721,7 +2799,7 @@ const Methods = {
2721
2799
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
2722
2800
  */
2723
2801
  syncData () {
2724
- warnLog('vxe.error.delFunc', ['syncData', 'getData'])
2802
+ errLog('vxe.error.delFunc', ['syncData', 'getData'])
2725
2803
  return this.$nextTick().then(() => {
2726
2804
  this.tableData = []
2727
2805
  return this.$nextTick().then(() => this.loadTableData(this.tableFullData, true))
@@ -2732,31 +2810,37 @@ const Methods = {
2732
2810
  * 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到
2733
2811
  */
2734
2812
  updateData () {
2735
- const { scrollXLoad, scrollYLoad } = this
2736
- return this.handleTableData(true).then(() => {
2737
- this.updateFooter()
2813
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
2814
+ const reactData = $xeTable as unknown as TableReactData
2815
+
2816
+ const { scrollXLoad, scrollYLoad } = reactData
2817
+ return $xeTable.handleTableData(true).then(() => {
2818
+ $xeTable.updateFooter()
2738
2819
  if (scrollXLoad || scrollYLoad) {
2739
2820
  if (scrollXLoad) {
2740
- this.updateScrollXSpace()
2821
+ $xeTable.updateScrollXSpace()
2741
2822
  }
2742
2823
  if (scrollYLoad) {
2743
- this.updateScrollYSpace()
2824
+ $xeTable.updateScrollYSpace()
2744
2825
  }
2745
- return this.refreshScroll()
2826
+ return $xeTable.refreshScroll()
2746
2827
  }
2747
2828
  }).then(() => {
2748
- this.updateCellAreas()
2749
- return this.recalculate(true)
2829
+ $xeTable.updateCellAreas()
2830
+ return $xeTable.recalculate(true)
2750
2831
  }).then(() => {
2751
2832
  // 存在滚动行为未结束情况
2752
- setTimeout(() => this.recalculate(), 50)
2833
+ setTimeout(() => $xeTable.recalculate(), 50)
2753
2834
  })
2754
2835
  },
2755
2836
  handleTableData (force: any) {
2756
- const $xeTable = this
2837
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
2838
+ const reactData = $xeTable as unknown as TableReactData
2839
+ const internalData = $xeTable as unknown as TableInternalData
2757
2840
 
2758
- const { scrollYLoad, scrollYStore, fullDataRowIdData, afterFullData } = this
2759
- let fullList = afterFullData
2841
+ const { scrollYLoad } = reactData
2842
+ const { scrollYStore, fullDataRowIdData } = internalData
2843
+ let fullList: any[] = internalData.afterFullData
2760
2844
  // 是否进行数据处理
2761
2845
  if (force) {
2762
2846
  // 更新数据,处理筛选和排序
@@ -2765,14 +2849,17 @@ const Methods = {
2765
2849
  fullList = handleVirtualTreeToList($xeTable)
2766
2850
  }
2767
2851
  const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0)
2852
+ const visibleDataRowIdMaps: Record<string, any> = {}
2768
2853
  tableData.forEach((row: any, $index: any) => {
2769
2854
  const rowid = getRowid(this, row)
2770
2855
  const rest = fullDataRowIdData[rowid]
2771
2856
  if (rest) {
2772
2857
  rest.$index = $index
2773
2858
  }
2859
+ visibleDataRowIdMaps[rowid] = row
2774
2860
  })
2775
2861
  this.tableData = tableData
2862
+ internalData.visibleDataRowIdData = visibleDataRowIdMaps
2776
2863
  return this.$nextTick()
2777
2864
  },
2778
2865
  /**
@@ -2789,6 +2876,7 @@ const Methods = {
2789
2876
  const { scrollYLoad: oldScrollYLoad } = reactData
2790
2877
  const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData
2791
2878
  const treeOpts = $xeTable.computeTreeOpts
2879
+ const expandOpts = $xeTable.computeExpandOpts
2792
2880
  const { transform } = treeOpts
2793
2881
  const childrenField = treeOpts.children || treeOpts.childrenField
2794
2882
  let treeData = []
@@ -2845,7 +2933,7 @@ const Methods = {
2845
2933
  internalData.tableFullData = fullData
2846
2934
  internalData.tableFullTreeData = treeData
2847
2935
  // 缓存数据
2848
- $xeTable.cacheRowMap(true)
2936
+ $xeTable.cacheRowMap(isReset)
2849
2937
  // 原始数据
2850
2938
  internalData.tableSynchData = datas
2851
2939
  if (isReset) {
@@ -2863,6 +2951,7 @@ const Methods = {
2863
2951
  $xeTable.clearMergeFooterItems()
2864
2952
  $xeTable.handleTableData(true)
2865
2953
  $xeTable.updateFooter()
2954
+ $xeTable.handleUpdateBodyMerge()
2866
2955
  return $xeTable.$nextTick().then(() => {
2867
2956
  updateHeight($xeTable)
2868
2957
  updateStyle($xeTable)
@@ -2875,6 +2964,9 @@ const Methods = {
2875
2964
  }
2876
2965
 
2877
2966
  if (sYLoad) {
2967
+ if (reactData.expandColumn && expandOpts.mode !== 'fixed') {
2968
+ errLog('vxe.error.notConflictProp', ['column.type="expand', 'expand-config.mode="fixed"'])
2969
+ }
2878
2970
  // if (showOverflow) {
2879
2971
  // if (!rowOpts.height) {
2880
2972
  // const errColumn = internalData.tableFullColumn.find((column: any) => column.showOverflow === false)
@@ -3039,7 +3131,7 @@ const Methods = {
3039
3131
  /**
3040
3132
  * 更新数据行的 Map
3041
3133
  */
3042
- cacheRowMap () {
3134
+ cacheRowMap (isReset: boolean) {
3043
3135
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
3044
3136
  const props = $xeTable
3045
3137
  const reactData = $xeTable as unknown as TableReactData
@@ -3051,7 +3143,7 @@ const Methods = {
3051
3143
  const childrenField = treeOpts.children || treeOpts.childrenField
3052
3144
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
3053
3145
  const { lazy } = treeOpts
3054
- const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = { ...fullAllDataRowIdData } // 存在已删除数据
3146
+ const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = isReset ? {} : { ...fullAllDataRowIdData } // 存在已删除数据
3055
3147
  const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
3056
3148
 
3057
3149
  const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
@@ -3814,9 +3906,11 @@ const Methods = {
3814
3906
  getCheckboxRecords (isFull: boolean) {
3815
3907
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
3816
3908
  const props = $xeTable
3909
+ const reactData = $xeTable as unknown as TableReactData
3817
3910
  const internalData = $xeTable as unknown as TableInternalData
3818
3911
 
3819
3912
  const { treeConfig } = props
3913
+ const { updateCheckboxFlag } = reactData
3820
3914
  const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData
3821
3915
  const treeOpts = $xeTable.computeTreeOpts
3822
3916
  const checkboxOpts = $xeTable.computeCheckboxOpts
@@ -3824,26 +3918,28 @@ const Methods = {
3824
3918
  const { checkField } = checkboxOpts
3825
3919
  const childrenField = treeOpts.children || treeOpts.childrenField
3826
3920
  let rowList: any[] = []
3827
- if (checkField) {
3828
- if (treeConfig) {
3829
- const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData)
3830
- rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField })
3831
- } else {
3832
- const currTableData = isFull ? tableFullData : afterFullData
3833
- rowList = currTableData.filter((row) => XEUtils.get(row, checkField))
3834
- }
3835
- } else {
3836
- XEUtils.each(selectCheckboxMaps, (row, rowid) => {
3837
- if (isFull) {
3838
- if (fullDataRowIdData[rowid]) {
3839
- rowList.push(fullDataRowIdData[rowid].row)
3840
- }
3921
+ if (updateCheckboxFlag) {
3922
+ if (checkField) {
3923
+ if (treeConfig) {
3924
+ const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData)
3925
+ rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField })
3841
3926
  } else {
3842
- if (afterFullRowMaps[rowid]) {
3843
- rowList.push(afterFullRowMaps[rowid])
3844
- }
3927
+ const currTableData = isFull ? tableFullData : afterFullData
3928
+ rowList = currTableData.filter((row) => XEUtils.get(row, checkField))
3845
3929
  }
3846
- })
3930
+ } else {
3931
+ XEUtils.each(selectCheckboxMaps, (row, rowid) => {
3932
+ if (isFull) {
3933
+ if (fullDataRowIdData[rowid]) {
3934
+ rowList.push(fullDataRowIdData[rowid].row)
3935
+ }
3936
+ } else {
3937
+ if (afterFullRowMaps[rowid]) {
3938
+ rowList.push(afterFullRowMaps[rowid])
3939
+ }
3940
+ }
3941
+ })
3942
+ }
3847
3943
  }
3848
3944
  return rowList
3849
3945
  },
@@ -5684,6 +5780,27 @@ const Methods = {
5684
5780
  this.updateCellAreas()
5685
5781
  this.recalculate(true)
5686
5782
  },
5783
+ /**
5784
+ * 处理合并
5785
+ */
5786
+ handleUpdateBodyMerge () {
5787
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5788
+ const reactData = $xeTable as unknown as TableReactData
5789
+ const internalData = $xeTable as unknown as TableInternalData
5790
+
5791
+ const { mergeBodyList } = internalData
5792
+ internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList)
5793
+ reactData.mergeBodyFlag++
5794
+ },
5795
+ handleUpdateFooterMerge () {
5796
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5797
+ const reactData = $xeTable as unknown as TableReactData
5798
+ const internalData = $xeTable as unknown as TableInternalData
5799
+
5800
+ const { mergeFooterList } = internalData
5801
+ internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList)
5802
+ reactData.mergeFootFlag++
5803
+ },
5687
5804
  handleTargetLeaveEvent () {
5688
5805
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
5689
5806
  const internalData = $xeTable as unknown as TableInternalData
@@ -9270,7 +9387,7 @@ const Methods = {
9270
9387
  * @param {ColumnInfo} column 列配置
9271
9388
  */
9272
9389
  scrollToColumn (fieldOrColumn: any) {
9273
- const $xeTable = this
9390
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9274
9391
 
9275
9392
  return handleScrollToRowColumn($xeTable, fieldOrColumn)
9276
9393
  },
@@ -9300,8 +9417,8 @@ const Methods = {
9300
9417
  * 手动清除滚动相关信息,还原到初始状态
9301
9418
  */
9302
9419
  clearScroll () {
9303
- const $xeTable = this
9304
- const internalData = $xeTable
9420
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9421
+ const internalData = $xeTable as unknown as TableInternalData
9305
9422
 
9306
9423
  const { elemStore, scrollXStore, scrollYStore } = internalData
9307
9424
  const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
@@ -9341,17 +9458,22 @@ const Methods = {
9341
9458
  */
9342
9459
  updateFooter () {
9343
9460
  const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9461
+ const props = $xeTable
9462
+ const reactData = $xeTable as unknown as TableReactData
9463
+ const internalData = $xeTable as unknown as TableInternalData
9344
9464
  const $xeGrid = $xeTable.$xeGrid as VxeGridConstructor & GridPrivateMethods
9345
9465
 
9346
- const { showFooter, visibleColumn, footerData, footerMethod } = this
9466
+ const { showFooter, footerData, footerMethod } = props
9467
+ const { visibleColumn, afterFullData } = internalData
9347
9468
  let footData = []
9348
9469
  if (showFooter && footerData && footerData.length) {
9349
9470
  footData = footerData.slice(0)
9350
9471
  } else if (showFooter && footerMethod) {
9351
- footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : []
9472
+ footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: afterFullData, $table: $xeTable, $grid: $xeGrid }) : []
9352
9473
  }
9353
- this.footerTableData = footData
9354
- return this.$nextTick()
9474
+ reactData.footerTableData = footData
9475
+ $xeTable.handleUpdateFooterMerge()
9476
+ return $xeTable.$nextTick()
9355
9477
  },
9356
9478
  /**
9357
9479
  * 更新列状态 updateStatus({ row, column }, cellValue)
@@ -9359,7 +9481,7 @@ const Methods = {
9359
9481
  * 如果单元格配置了校验规则,则会进行校验
9360
9482
  */
9361
9483
  updateStatus (slotParams: any, cellValue: any) {
9362
- const $xeTable = this
9484
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9363
9485
  const props = $xeTable
9364
9486
 
9365
9487
  return this.$nextTick().then(() => {
@@ -9374,14 +9496,16 @@ const Methods = {
9374
9496
  * @param {TableMergeConfig[]} merges { row: Row|number, column: ColumnInfo|number, rowspan: number, colspan: number }
9375
9497
  */
9376
9498
  setMergeCells (merges: any) {
9377
- const $xeTable = this
9499
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9500
+ const props = $xeTable
9378
9501
 
9379
- if (this.spanMethod) {
9502
+ if (props.spanMethod) {
9380
9503
  errLog('vxe.error.errConflicts', ['merge-cells', 'span-method'])
9381
9504
  }
9382
- setMerges(this, merges, this.mergeList, this.afterFullData)
9383
- return this.$nextTick().then(() => {
9384
- this.updateCellAreas()
9505
+ handleBodyMerge($xeTable, merges)
9506
+ $xeTable.handleUpdateBodyMerge()
9507
+ return $xeTable.$nextTick().then(() => {
9508
+ $xeTable.updateCellAreas()
9385
9509
  return updateStyle($xeTable)
9386
9510
  })
9387
9511
  },
@@ -9390,14 +9514,16 @@ const Methods = {
9390
9514
  * @param {TableMergeConfig[]} merges 多个或数组 [{row:Row|number, col:ColumnInfo|number}]
9391
9515
  */
9392
9516
  removeMergeCells (merges: any) {
9393
- const $xeTable = this
9517
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9518
+ const props = $xeTable
9519
+ const internalData = $xeTable as unknown as TableInternalData
9394
9520
 
9395
- if (this.spanMethod) {
9521
+ if (props.spanMethod) {
9396
9522
  errLog('vxe.error.errConflicts', ['merge-cells', 'span-method'])
9397
9523
  }
9398
- const rest = removeMerges(this, merges, this.mergeList, this.afterFullData)
9399
- return this.$nextTick().then(() => {
9400
- this.updateCellAreas()
9524
+ const rest = removeMerges($xeTable, merges, internalData.mergeBodyList, internalData.afterFullData)
9525
+ return $xeTable.$nextTick().then(() => {
9526
+ $xeTable.updateCellAreas()
9401
9527
  updateStyle($xeTable)
9402
9528
  return rest
9403
9529
  })
@@ -9406,40 +9532,50 @@ const Methods = {
9406
9532
  * 获取所有被合并的单元格
9407
9533
  */
9408
9534
  getMergeCells () {
9409
- return this.mergeList.slice(0)
9535
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9536
+ const internalData = $xeTable as unknown as TableInternalData
9537
+
9538
+ return internalData.mergeBodyList.slice(0)
9410
9539
  },
9411
9540
  /**
9412
9541
  * 清除所有单元格合并
9413
9542
  */
9414
9543
  clearMergeCells () {
9415
- const $xeTable = this
9544
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9545
+ const internalData = $xeTable as unknown as TableInternalData
9416
9546
 
9417
- this.mergeList = []
9418
- return this.$nextTick().then(() => {
9547
+ internalData.mergeBodyList = []
9548
+ internalData.mergeBodyMaps = {}
9549
+ internalData.mergeBodyCellMaps = {}
9550
+ return $xeTable.$nextTick().then(() => {
9419
9551
  return updateStyle($xeTable)
9420
9552
  })
9421
9553
  },
9422
9554
  setMergeFooterItems (merges: any) {
9423
- const $xeTable = this
9555
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9556
+ const props = $xeTable
9424
9557
 
9425
- if (this.footerSpanMethod) {
9558
+ if (props.footerSpanMethod) {
9426
9559
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
9427
9560
  }
9428
- setMerges(this, merges, this.mergeFooterList)
9429
- return this.$nextTick().then(() => {
9430
- this.updateCellAreas()
9561
+ handleFooterMerge($xeTable, merges)
9562
+ $xeTable.handleUpdateFooterMerge()
9563
+ return $xeTable.$nextTick().then(() => {
9564
+ $xeTable.updateCellAreas()
9431
9565
  return updateStyle($xeTable)
9432
9566
  })
9433
9567
  },
9434
9568
  removeMergeFooterItems (merges: any) {
9435
- const $xeTable = this
9569
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9570
+ const props = $xeTable
9571
+ const internalData = $xeTable as unknown as TableInternalData
9436
9572
 
9437
- if (this.footerSpanMethod) {
9573
+ if (props.footerSpanMethod) {
9438
9574
  errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
9439
9575
  }
9440
- const rest = removeMerges(this, merges, this.mergeFooterList, null)
9441
- return this.$nextTick().then(() => {
9442
- this.updateCellAreas()
9576
+ const rest = removeMerges($xeTable, merges, internalData.mergeFooterList)
9577
+ return $xeTable.$nextTick().then(() => {
9578
+ $xeTable.updateCellAreas()
9443
9579
  updateStyle($xeTable)
9444
9580
  return rest
9445
9581
  })
@@ -9448,16 +9584,22 @@ const Methods = {
9448
9584
  * 获取所有被合并的表尾
9449
9585
  */
9450
9586
  getMergeFooterItems () {
9451
- return this.mergeFooterList.slice(0)
9587
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9588
+ const internalData = $xeTable as unknown as TableInternalData
9589
+
9590
+ return internalData.mergeFooterList.slice(0)
9452
9591
  },
9453
9592
  /**
9454
9593
  * 清除所有表尾合并
9455
9594
  */
9456
9595
  clearMergeFooterItems () {
9457
- const $xeTable = this
9596
+ const $xeTable = this as VxeTableConstructor & VxeTablePrivateMethods
9597
+ const internalData = $xeTable as unknown as TableInternalData
9458
9598
 
9459
- this.mergeFooterList = []
9460
- return this.$nextTick().then(() => {
9599
+ internalData.mergeFooterList = []
9600
+ internalData.mergeFooterMaps = {}
9601
+ internalData.mergeFooterCellMaps = {}
9602
+ return $xeTable.$nextTick().then(() => {
9461
9603
  return updateStyle($xeTable)
9462
9604
  })
9463
9605
  },