vxe-table 3.18.0 → 3.18.2

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 (83) 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/module/edit/mixin.js +58 -20
  6. package/es/table/module/filter/mixin.js +12 -10
  7. package/es/table/module/menu/mixin.js +16 -9
  8. package/es/table/module/validator/mixin.js +4 -2
  9. package/es/table/src/column.js +2 -0
  10. package/es/table/src/columnInfo.js +1 -0
  11. package/es/table/src/footer.js +7 -5
  12. package/es/table/src/header.js +67 -28
  13. package/es/table/src/methods.js +577 -85
  14. package/es/table/src/props.js +23 -6
  15. package/es/table/src/store.js +8 -0
  16. package/es/table/src/table.js +67 -26
  17. package/es/table/src/util.js +70 -2
  18. package/es/table/style.css +11 -17
  19. package/es/table/style.min.css +1 -1
  20. package/es/ui/index.js +1 -1
  21. package/es/ui/src/log.js +1 -1
  22. package/es/vxe-table/style.css +11 -17
  23. package/es/vxe-table/style.min.css +1 -1
  24. package/lib/index.css +1 -1
  25. package/lib/index.min.css +1 -1
  26. package/lib/index.umd.js +1002 -200
  27. package/lib/index.umd.min.js +1 -1
  28. package/lib/style.css +1 -1
  29. package/lib/style.min.css +1 -1
  30. package/lib/table/module/edit/mixin.js +55 -16
  31. package/lib/table/module/edit/mixin.min.js +1 -1
  32. package/lib/table/module/filter/mixin.js +12 -10
  33. package/lib/table/module/filter/mixin.min.js +1 -1
  34. package/lib/table/module/menu/mixin.js +20 -13
  35. package/lib/table/module/menu/mixin.min.js +1 -1
  36. package/lib/table/module/validator/mixin.js +4 -2
  37. package/lib/table/module/validator/mixin.min.js +1 -1
  38. package/lib/table/src/column.js +2 -0
  39. package/lib/table/src/column.min.js +1 -1
  40. package/lib/table/src/columnInfo.js +1 -0
  41. package/lib/table/src/columnInfo.min.js +1 -1
  42. package/lib/table/src/footer.js +7 -5
  43. package/lib/table/src/header.js +82 -25
  44. package/lib/table/src/header.min.js +1 -1
  45. package/lib/table/src/methods.js +647 -94
  46. package/lib/table/src/methods.min.js +1 -1
  47. package/lib/table/src/props.js +11 -3
  48. package/lib/table/src/props.min.js +1 -1
  49. package/lib/table/src/store.js +15 -0
  50. package/lib/table/src/store.min.js +1 -0
  51. package/lib/table/src/table.js +74 -25
  52. package/lib/table/src/table.min.js +1 -1
  53. package/lib/table/src/util.js +74 -2
  54. package/lib/table/src/util.min.js +1 -1
  55. package/lib/table/style/style.css +11 -17
  56. package/lib/table/style/style.min.css +1 -1
  57. package/lib/ui/index.js +1 -1
  58. package/lib/ui/index.min.js +1 -1
  59. package/lib/ui/src/log.js +1 -1
  60. package/lib/ui/src/log.min.js +1 -1
  61. package/lib/vxe-table/style/style.css +11 -17
  62. package/lib/vxe-table/style/style.min.css +1 -1
  63. package/package.json +1 -1
  64. package/packages/table/module/edit/mixin.ts +59 -23
  65. package/packages/table/module/filter/mixin.ts +17 -13
  66. package/packages/table/module/menu/mixin.ts +16 -9
  67. package/packages/table/module/validator/mixin.ts +8 -4
  68. package/packages/table/src/column.ts +4 -2
  69. package/packages/table/src/columnInfo.ts +1 -0
  70. package/packages/table/src/footer.ts +11 -9
  71. package/packages/table/src/header.ts +76 -34
  72. package/packages/table/src/methods.ts +607 -90
  73. package/packages/table/src/props.ts +29 -12
  74. package/packages/table/src/store.ts +15 -0
  75. package/packages/table/src/table.ts +79 -24
  76. package/packages/table/src/util.ts +76 -2
  77. package/styles/components/table.scss +33 -55
  78. /package/es/{iconfont.1756083626568.ttf → iconfont.1756452257212.ttf} +0 -0
  79. /package/es/{iconfont.1756083626568.woff → iconfont.1756452257212.woff} +0 -0
  80. /package/es/{iconfont.1756083626568.woff2 → iconfont.1756452257212.woff2} +0 -0
  81. /package/lib/{iconfont.1756083626568.ttf → iconfont.1756452257212.ttf} +0 -0
  82. /package/lib/{iconfont.1756083626568.woff → iconfont.1756452257212.woff} +0 -0
  83. /package/lib/{iconfont.1756083626568.woff2 → iconfont.1756452257212.woff2} +0 -0
@@ -13,6 +13,7 @@ var _util = require("./util");
13
13
  var _vn = require("../../ui/src/vn");
14
14
  var _anime = require("./anime");
15
15
  var _log = require("../../ui/src/log");
16
+ var _store = require("./store");
16
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
18
  const {
18
19
  getConfig,
@@ -27,6 +28,7 @@ const supportMaxRow = 5e6;
27
28
  const customStorageKey = 'VXE_CUSTOM_STORE';
28
29
  const maxYHeight = 5e6;
29
30
  const maxXWidth = 5e6;
31
+ let crossTableDragRowObj = null;
30
32
  function eqCellValue(row1, row2, field) {
31
33
  const val1 = _xeUtils.default.get(row1, field);
32
34
  const val2 = _xeUtils.default.get(row2, field);
@@ -1274,20 +1276,25 @@ function updateStyle($xeTable) {
1274
1276
  emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
1275
1277
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
1276
1278
  }
1279
+ const scrollbarXConf = scrollbarOpts.x || {};
1277
1280
  const scrollbarXToTop = $xeTable.computeScrollbarXToTop;
1281
+ const scrollbarYConf = scrollbarOpts.y || {};
1278
1282
  const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
1279
1283
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
1280
- if ($xeGanttView) {
1284
+ if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
1281
1285
  osbHeight = scrollbarHeight;
1282
1286
  xScrollbarVisible = 'visible';
1283
- } else if (scrollbarOpts.x && scrollbarOpts.x.visible === false) {
1287
+ } else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
1284
1288
  osbHeight = 0;
1285
1289
  xScrollbarVisible = 'hidden';
1286
1290
  }
1287
1291
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
1288
- if (scrollbarOpts.y && scrollbarOpts.y.visible === false || $xeGanttView && !scrollbarYToLeft) {
1292
+ if (scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false || $xeGanttView && !scrollbarYToLeft) {
1289
1293
  osbWidth = 0;
1290
1294
  yScrollbarVisible = 'hidden';
1295
+ } else if (scrollbarYConf.visible === 'visible') {
1296
+ osbWidth = scrollbarWidth;
1297
+ yScrollbarVisible = 'visible';
1291
1298
  }
1292
1299
  let tbHeight = 0;
1293
1300
  let bodyMaxHeight = 0;
@@ -1327,7 +1334,7 @@ function updateStyle($xeTable) {
1327
1334
  }
1328
1335
  if (xRightCornerEl) {
1329
1336
  xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
1330
- xRightCornerEl.style.display = scrollbarXToTop ? '' : overflowX && osbHeight ? 'block' : '';
1337
+ xRightCornerEl.style.display = scrollbarXToTop ? '' : xScrollbarVisible === 'visible' ? 'block' : '';
1331
1338
  }
1332
1339
  const scrollYVirtualEl = $xeTable.$refs.refScrollYVirtualElem;
1333
1340
  if (scrollYVirtualEl) {
@@ -1338,7 +1345,7 @@ function updateStyle($xeTable) {
1338
1345
  const yTopCornerEl = $xeTable.$refs.refScrollYTopCornerElem;
1339
1346
  if (yTopCornerEl) {
1340
1347
  yTopCornerEl.style.height = `${tHeaderHeight}px`;
1341
- yTopCornerEl.style.display = overflowY && tHeaderHeight ? 'block' : '';
1348
+ yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1342
1349
  }
1343
1350
  const yWrapperEl = $xeTable.$refs.refScrollYWrapperElem;
1344
1351
  if (yWrapperEl) {
@@ -1349,7 +1356,7 @@ function updateStyle($xeTable) {
1349
1356
  if (yBottomCornerEl) {
1350
1357
  yBottomCornerEl.style.height = `${tFooterHeight}px`;
1351
1358
  yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
1352
- yBottomCornerEl.style.display = overflowY && tFooterHeight ? 'block' : '';
1359
+ yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1353
1360
  }
1354
1361
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
1355
1362
  if (rowExpandEl) {
@@ -2377,15 +2384,71 @@ function handleBodyMerge($xeTable, merges) {
2377
2384
  });
2378
2385
  }
2379
2386
  }
2380
- function handleFooterMerge($xeTable, merges) {
2387
+ function removeBodyMerges($xeTable, merges) {
2388
+ const internalData = $xeTable;
2389
+ const {
2390
+ mergeBodyList,
2391
+ fullColumnIdData,
2392
+ fullAllDataRowIdData,
2393
+ mergeBodyMaps
2394
+ } = internalData;
2395
+ const rest = [];
2396
+ if (merges) {
2397
+ const {
2398
+ handleGetRowId
2399
+ } = (0, _util.createHandleGetRowId)($xeTable);
2400
+ if (!_xeUtils.default.isArray(merges)) {
2401
+ merges = [merges];
2402
+ }
2403
+ merges.forEach(item => {
2404
+ const {
2405
+ row: margeRow,
2406
+ col: margeCol
2407
+ } = item;
2408
+ let mergeRowIndex = -1;
2409
+ let mergeColumnIndex = -1;
2410
+ if (_xeUtils.default.isNumber(margeRow)) {
2411
+ mergeRowIndex = margeRow;
2412
+ } else {
2413
+ const rowid = margeRow ? handleGetRowId(margeRow) : null;
2414
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
2415
+ if (rowRest) {
2416
+ mergeRowIndex = rowRest._index;
2417
+ }
2418
+ }
2419
+ if (_xeUtils.default.isNumber(margeCol)) {
2420
+ mergeColumnIndex = margeCol;
2421
+ } else {
2422
+ const colid = margeCol ? margeCol.id : null;
2423
+ const colRest = colid ? fullColumnIdData[colid] : null;
2424
+ if (colRest) {
2425
+ mergeColumnIndex = colRest._index;
2426
+ }
2427
+ }
2428
+ const mcIndex = _xeUtils.default.findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
2429
+ if (mcIndex > -1) {
2430
+ const rItems = mergeBodyList.splice(mcIndex, 1);
2431
+ const item = rItems[0];
2432
+ if (item) {
2433
+ rest.push(rItems[0]);
2434
+ if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2435
+ delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2436
+ }
2437
+ }
2438
+ }
2439
+ });
2440
+ }
2441
+ return rest;
2442
+ }
2443
+ function handleHeaderMerge($xeTable, merges) {
2381
2444
  const reactData = $xeTable;
2382
2445
  const internalData = $xeTable;
2383
2446
  const {
2384
2447
  footerTableData
2385
2448
  } = reactData;
2386
2449
  const {
2387
- mergeFooterList,
2388
- mergeFooterMaps,
2450
+ mergeHeaderList,
2451
+ mergeHeaderMaps,
2389
2452
  fullColumnIdData
2390
2453
  } = internalData;
2391
2454
  if (merges) {
@@ -2419,7 +2482,7 @@ function handleFooterMerge($xeTable, merges) {
2419
2482
  if (rowspan > 1 || colspan > 1) {
2420
2483
  const row = footerTableData[mergeRowIndex];
2421
2484
  const column = visibleColumn[mergeColumnIndex];
2422
- let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2485
+ let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2423
2486
  if (mergeItem) {
2424
2487
  mergeItem.rowspan = rowspan;
2425
2488
  mergeItem.colspan = colspan;
@@ -2436,27 +2499,23 @@ function handleFooterMerge($xeTable, merges) {
2436
2499
  _rowspan: rowspan,
2437
2500
  _colspan: colspan
2438
2501
  };
2439
- mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2440
- mergeFooterList.push(mergeItem);
2502
+ mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2503
+ mergeHeaderList.push(mergeItem);
2441
2504
  }
2442
2505
  }
2443
2506
  }
2444
2507
  });
2445
2508
  }
2446
2509
  }
2447
- function removeBodyMerges($xeTable, merges) {
2510
+ function removeHeaderMerges($xeTable, merges) {
2448
2511
  const internalData = $xeTable;
2449
2512
  const {
2450
- mergeBodyList,
2513
+ mergeHeaderList,
2451
2514
  fullColumnIdData,
2452
- fullAllDataRowIdData,
2453
- mergeBodyMaps
2515
+ mergeHeaderMaps
2454
2516
  } = internalData;
2455
2517
  const rest = [];
2456
2518
  if (merges) {
2457
- const {
2458
- handleGetRowId
2459
- } = (0, _util.createHandleGetRowId)($xeTable);
2460
2519
  if (!_xeUtils.default.isArray(merges)) {
2461
2520
  merges = [merges];
2462
2521
  }
@@ -2465,17 +2524,8 @@ function removeBodyMerges($xeTable, merges) {
2465
2524
  row: margeRow,
2466
2525
  col: margeCol
2467
2526
  } = item;
2468
- let mergeRowIndex = -1;
2527
+ const mergeRowIndex = _xeUtils.default.isNumber(margeRow) ? margeRow : -1;
2469
2528
  let mergeColumnIndex = -1;
2470
- if (_xeUtils.default.isNumber(margeRow)) {
2471
- mergeRowIndex = margeRow;
2472
- } else {
2473
- const rowid = margeRow ? handleGetRowId(margeRow) : null;
2474
- const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
2475
- if (rowRest) {
2476
- mergeRowIndex = rowRest._index;
2477
- }
2478
- }
2479
2529
  if (_xeUtils.default.isNumber(margeCol)) {
2480
2530
  mergeColumnIndex = margeCol;
2481
2531
  } else {
@@ -2485,14 +2535,14 @@ function removeBodyMerges($xeTable, merges) {
2485
2535
  mergeColumnIndex = colRest._index;
2486
2536
  }
2487
2537
  }
2488
- const mcIndex = _xeUtils.default.findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
2538
+ const mcIndex = _xeUtils.default.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
2489
2539
  if (mcIndex > -1) {
2490
- const rItems = mergeBodyList.splice(mcIndex, 1);
2540
+ const rItems = mergeHeaderList.splice(mcIndex, 1);
2491
2541
  const item = rItems[0];
2492
2542
  if (item) {
2493
- rest.push(rItems[0]);
2494
- if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2495
- delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2543
+ rest.push(item);
2544
+ if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2545
+ delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2496
2546
  }
2497
2547
  }
2498
2548
  }
@@ -2500,6 +2550,73 @@ function removeBodyMerges($xeTable, merges) {
2500
2550
  }
2501
2551
  return rest;
2502
2552
  }
2553
+ function handleFooterMerge($xeTable, merges) {
2554
+ const reactData = $xeTable;
2555
+ const internalData = $xeTable;
2556
+ const {
2557
+ footerTableData
2558
+ } = reactData;
2559
+ const {
2560
+ mergeFooterList,
2561
+ mergeFooterMaps,
2562
+ fullColumnIdData
2563
+ } = internalData;
2564
+ if (merges) {
2565
+ const {
2566
+ visibleColumn
2567
+ } = internalData;
2568
+ if (!_xeUtils.default.isArray(merges)) {
2569
+ merges = [merges];
2570
+ }
2571
+ merges.forEach(item => {
2572
+ let {
2573
+ row: margeRow,
2574
+ col: margeCol,
2575
+ rowspan,
2576
+ colspan
2577
+ } = item;
2578
+ const mergeRowIndex = _xeUtils.default.isNumber(margeRow) ? margeRow : -1;
2579
+ let mergeColumnIndex = -1;
2580
+ if (_xeUtils.default.isNumber(margeCol)) {
2581
+ mergeColumnIndex = margeCol;
2582
+ } else {
2583
+ const colid = margeCol ? margeCol.id : null;
2584
+ const colRest = colid ? fullColumnIdData[colid] : null;
2585
+ if (colRest) {
2586
+ mergeColumnIndex = colRest._index;
2587
+ }
2588
+ }
2589
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
2590
+ rowspan = _xeUtils.default.toNumber(rowspan) || 1;
2591
+ colspan = _xeUtils.default.toNumber(colspan) || 1;
2592
+ if (rowspan > 1 || colspan > 1) {
2593
+ const row = footerTableData[mergeRowIndex];
2594
+ const column = visibleColumn[mergeColumnIndex];
2595
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2596
+ if (mergeItem) {
2597
+ mergeItem.rowspan = rowspan;
2598
+ mergeItem.colspan = colspan;
2599
+ mergeItem._rowspan = rowspan;
2600
+ mergeItem._colspan = colspan;
2601
+ } else {
2602
+ mergeItem = {
2603
+ row: mergeRowIndex,
2604
+ col: mergeColumnIndex,
2605
+ rowspan,
2606
+ colspan,
2607
+ _row: row,
2608
+ _col: column,
2609
+ _rowspan: rowspan,
2610
+ _colspan: colspan
2611
+ };
2612
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2613
+ mergeFooterList.push(mergeItem);
2614
+ }
2615
+ }
2616
+ }
2617
+ });
2618
+ }
2619
+ }
2503
2620
  function removeFooterMerges($xeTable, merges) {
2504
2621
  const internalData = $xeTable;
2505
2622
  const {
@@ -2627,10 +2744,26 @@ function clearAllSort($xeTable) {
2627
2744
  function calcTableHeight($xeTable, key) {
2628
2745
  const props = $xeTable;
2629
2746
  const reactData = $xeTable;
2747
+ const {
2748
+ editConfig
2749
+ } = props;
2630
2750
  const {
2631
2751
  parentHeight
2632
2752
  } = reactData;
2633
- const val = props[key];
2753
+ let val = props[key];
2754
+ if (key === 'minHeight') {
2755
+ const defMinHeight = getConfig().table.minHeight;
2756
+ if (_xeUtils.default.eqNull(val)) {
2757
+ if ((0, _utils.eqEmptyValue)(defMinHeight)) {
2758
+ // 编辑模式默认最小高度
2759
+ if ((0, _utils.isEnableConf)(editConfig)) {
2760
+ val = 144;
2761
+ }
2762
+ } else {
2763
+ val = defMinHeight;
2764
+ }
2765
+ }
2766
+ }
2634
2767
  let num = 0;
2635
2768
  if (val) {
2636
2769
  if (val === '100%' || val === 'auto') {
@@ -2860,6 +2993,11 @@ function handleTargetEnterEvent($xeTable, isClear) {
2860
2993
  }
2861
2994
  }
2862
2995
  }
2996
+ function clearCrossTableDragStatus($xeTable) {
2997
+ const crossTableDragRowInfo = (0, _store.getCrossTableDragRowInfo)($xeTable);
2998
+ crossTableDragRowObj = null;
2999
+ crossTableDragRowInfo.row = null;
3000
+ }
2863
3001
  function clearDragStatus($xeTable) {
2864
3002
  const reactData = $xeTable;
2865
3003
  const {
@@ -2870,6 +3008,7 @@ function clearDragStatus($xeTable) {
2870
3008
  clearColDropOrigin($xeTable);
2871
3009
  clearRowDropOrigin($xeTable);
2872
3010
  hideDropTip($xeTable);
3011
+ clearCrossTableDragStatus($xeTable);
2873
3012
  reactData.dragRow = null;
2874
3013
  reactData.dragCol = null;
2875
3014
  }
@@ -3074,6 +3213,26 @@ function hideDropTip($xeTable) {
3074
3213
  cdLineEl.style.display = '';
3075
3214
  }
3076
3215
  }
3216
+ function clearRowDragData($xeTable) {
3217
+ const $xeGantt = $xeTable.$xeGantt;
3218
+ const reactData = $xeTable;
3219
+ const internalData = $xeTable;
3220
+ let wrapperEl = $xeTable.$refs.refElem;
3221
+ const dtClss = ['.vxe-body--row'];
3222
+ if ($xeGantt) {
3223
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
3224
+ if (ganttContainerElem) {
3225
+ wrapperEl = ganttContainerElem;
3226
+ }
3227
+ dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
3228
+ }
3229
+ hideDropTip($xeTable);
3230
+ clearRowDropOrigin($xeTable);
3231
+ (0, _anime.clearRowAnimate)(wrapperEl, dtClss);
3232
+ internalData.prevDragToChild = false;
3233
+ reactData.dragRow = null;
3234
+ reactData.dragCol = null;
3235
+ }
3077
3236
  /**
3078
3237
  * 处理显示 tooltip
3079
3238
  * @param {Event} evnt 事件
@@ -3153,13 +3312,24 @@ function handleDefaultMergeCells($xeTable) {
3153
3312
  $xeTable.setMergeCells(mergeCells);
3154
3313
  }
3155
3314
  }
3315
+ function handleDefaultMergeHeaderItems($xeTable) {
3316
+ const props = $xeTable;
3317
+ const {
3318
+ mergeHeaderCells
3319
+ } = props;
3320
+ if (mergeHeaderCells) {
3321
+ $xeTable.setMergeHeaderCells(mergeHeaderCells);
3322
+ }
3323
+ }
3156
3324
  function handleDefaultMergeFooterItems($xeTable) {
3157
3325
  const props = $xeTable;
3158
3326
  const {
3327
+ mergeFooterCells,
3159
3328
  mergeFooterItems
3160
3329
  } = props;
3161
- if (mergeFooterItems) {
3162
- $xeTable.setMergeFooterItems(mergeFooterItems);
3330
+ const mFooterCells = mergeFooterCells || mergeFooterItems;
3331
+ if (mFooterCells) {
3332
+ $xeTable.setMergeFooterCells(mFooterCells);
3163
3333
  }
3164
3334
  }
3165
3335
  // 计算可视渲染相关数据
@@ -3665,6 +3835,10 @@ function loadTableData($xeTable, datas, isReset) {
3665
3835
  }
3666
3836
  handleReserveStatus($xeTable);
3667
3837
  $xeTable.checkSelectionStatus();
3838
+ $xeTable.dispatchEvent('data-change', {
3839
+ visibleColumn: internalData.visibleColumn,
3840
+ visibleData: internalData.afterFullData
3841
+ }, null);
3668
3842
  return new Promise(resolve => {
3669
3843
  $xeTable.$nextTick().then(() => handleRecalculateStyle($xeTable, false, false, false)).then(() => {
3670
3844
  handleRecalculateStyle($xeTable, false, true, true);
@@ -3721,6 +3895,7 @@ function handleLoadDefaults($xeTable) {
3721
3895
  handleDefaultTreeExpand($xeTable);
3722
3896
  handleDefaultRowGroupExpand($xeTable);
3723
3897
  handleDefaultMergeCells($xeTable);
3898
+ handleDefaultMergeHeaderItems($xeTable);
3724
3899
  handleDefaultMergeFooterItems($xeTable);
3725
3900
  $xeTable.$nextTick(() => setTimeout(() => $xeTable.recalculate()));
3726
3901
  }
@@ -5633,7 +5808,9 @@ const Methods = {
5633
5808
  }
5634
5809
  }
5635
5810
  }
5636
- return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
5811
+ const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
5812
+ clearRowDragData($xeTable);
5813
+ return rest;
5637
5814
  },
5638
5815
  /**
5639
5816
  * 获取表格的全量列
@@ -7213,7 +7390,7 @@ const Methods = {
7213
7390
  // 如果点击了当前表格之外
7214
7391
  !(0, _dom.getEventTargetNode)(evnt, $el).flag) {
7215
7392
  setTimeout(() => {
7216
- this.handleClearEdit(evnt).then(() => {
7393
+ $xeTable.handleClearEdit(evnt).then(() => {
7217
7394
  // 如果存在校验,点击了表格之外则清除
7218
7395
  if (!this.isActivated && editRules && validOpts.autoClear) {
7219
7396
  this.validErrorMaps = {};
@@ -7228,17 +7405,17 @@ const Methods = {
7228
7405
  }
7229
7406
  } else if (mouseConfig) {
7230
7407
  if (!(0, _dom.getEventTargetNode)(evnt, $el).flag && !($xeGGWrapper && (0, _dom.getEventTargetNode)(evnt, $xeGGWrapper.$el).flag) && !(tableMenu && (0, _dom.getEventTargetNode)(evnt, tableMenu.$el).flag) && !($toolbar && (0, _dom.getEventTargetNode)(evnt, $toolbar.$el).flag)) {
7231
- if (this.clearSelected) {
7232
- this.clearSelected();
7408
+ if ($xeTable.clearSelected) {
7409
+ $xeTable.clearSelected();
7233
7410
  }
7234
7411
  if (areaOpts.autoClear) {
7235
- if (this.getCellAreas) {
7236
- const cellAreas = this.getCellAreas();
7412
+ if ($xeTable.getCellAreas) {
7413
+ const cellAreas = $xeTable.getCellAreas();
7237
7414
  if (cellAreas && cellAreas.length && !(0, _dom.getEventTargetNode)(evnt, document.body, 'vxe-table--ignore-areas-clear').flag) {
7238
- this.preventEvent(evnt, 'event.clearAreas', {}, () => {
7239
- this.clearCellAreas();
7240
- this.clearCopyCellArea();
7241
- this.emitEvent('clear-cell-area-selection', {
7415
+ $xeTable.preventEvent(evnt, 'event.clearAreas', {}, () => {
7416
+ $xeTable.clearCellAreas();
7417
+ $xeTable.clearCopyCellArea();
7418
+ $xeTable.dispatchEvent('clear-cell-area-selection', {
7242
7419
  cellAreas
7243
7420
  }, evnt);
7244
7421
  });
@@ -7277,6 +7454,7 @@ const Methods = {
7277
7454
  * 表格键盘事件
7278
7455
  */
7279
7456
  keydownEvent(evnt) {
7457
+ const $xeTable = this;
7280
7458
  const {
7281
7459
  filterStore,
7282
7460
  ctxMenuStore,
@@ -7295,7 +7473,7 @@ const Methods = {
7295
7473
  const isEsc = keyCode === 27;
7296
7474
  if (isEsc) {
7297
7475
  this.preventEvent(evnt, 'event.keydown', null, () => {
7298
- this.emitEvent('keydown-start', {}, evnt);
7476
+ $xeTable.dispatchEvent('keydown-start', {}, evnt);
7299
7477
  if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardCellAreaEvent) {
7300
7478
  this.handleKeyboardCellAreaEvent(evnt);
7301
7479
  } else if (actived.row || filterStore.visible || ctxMenuStore.visible) {
@@ -7315,8 +7493,8 @@ const Methods = {
7315
7493
  }
7316
7494
  }
7317
7495
  }
7318
- this.emitEvent('keydown', {}, evnt);
7319
- this.emitEvent('keydown-end', {}, evnt);
7496
+ $xeTable.dispatchEvent('keydown', {}, evnt);
7497
+ $xeTable.dispatchEvent('keydown-end', {}, evnt);
7320
7498
  });
7321
7499
  }
7322
7500
  },
@@ -7656,6 +7834,7 @@ const Methods = {
7656
7834
  }
7657
7835
  },
7658
7836
  handleGlobalPasteEvent(evnt) {
7837
+ const $xeTable = this;
7659
7838
  const {
7660
7839
  isActivated,
7661
7840
  keyboardConfig,
@@ -7674,10 +7853,11 @@ const Methods = {
7674
7853
  this.handlePasteCellAreaEvent(evnt);
7675
7854
  }
7676
7855
  }
7677
- this.emitEvent('paste', {}, evnt);
7856
+ $xeTable.dispatchEvent('paste', {}, evnt);
7678
7857
  }
7679
7858
  },
7680
7859
  handleGlobalCopyEvent(evnt) {
7860
+ const $xeTable = this;
7681
7861
  const {
7682
7862
  isActivated,
7683
7863
  keyboardConfig,
@@ -7696,10 +7876,11 @@ const Methods = {
7696
7876
  this.handleCopyCellAreaEvent(evnt);
7697
7877
  }
7698
7878
  }
7699
- this.emitEvent('copy', {}, evnt);
7879
+ $xeTable.dispatchEvent('copy', {}, evnt);
7700
7880
  }
7701
7881
  },
7702
7882
  handleGlobalCutEvent(evnt) {
7883
+ const $xeTable = this;
7703
7884
  const {
7704
7885
  isActivated,
7705
7886
  keyboardConfig,
@@ -7718,7 +7899,7 @@ const Methods = {
7718
7899
  this.handleCutCellAreaEvent(evnt);
7719
7900
  }
7720
7901
  }
7721
- this.emitEvent('cut', {}, evnt);
7902
+ $xeTable.dispatchEvent('cut', {}, evnt);
7722
7903
  }
7723
7904
  },
7724
7905
  handleGlobalResizeEvent() {
@@ -7741,6 +7922,16 @@ const Methods = {
7741
7922
  internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
7742
7923
  reactData.mergeBodyFlag++;
7743
7924
  },
7925
+ handleUpdateHeaderMerge() {
7926
+ const $xeTable = this;
7927
+ const reactData = $xeTable;
7928
+ const internalData = $xeTable;
7929
+ const {
7930
+ mergeHeaderList
7931
+ } = internalData;
7932
+ internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList);
7933
+ reactData.mergeHeadFlag++;
7934
+ },
7744
7935
  handleUpdateFooterMerge() {
7745
7936
  const $xeTable = this;
7746
7937
  const reactData = $xeTable;
@@ -9120,7 +9311,8 @@ const Methods = {
9120
9311
  return $xeTable.$nextTick();
9121
9312
  },
9122
9313
  triggerHeaderCellDblclickEvent(evnt, params) {
9123
- this.emitEvent('header-cell-dblclick', Object.assign({
9314
+ const $xeTable = this;
9315
+ $xeTable.dispatchEvent('header-cell-dblclick', Object.assign({
9124
9316
  cell: evnt.currentTarget
9125
9317
  }, params), evnt);
9126
9318
  },
@@ -9338,7 +9530,7 @@ const Methods = {
9338
9530
  }
9339
9531
  }
9340
9532
  }
9341
- this.emitEvent('cell-dblclick', params, evnt);
9533
+ $xeTable.dispatchEvent('cell-dblclick', params, evnt);
9342
9534
  },
9343
9535
  handleColumnSortEvent(evnt, column) {
9344
9536
  const $xeTable = this;
@@ -9837,12 +10029,273 @@ const Methods = {
9837
10029
  }
9838
10030
  return Promise.resolve(errRest);
9839
10031
  },
9840
- handleRowDragDragendEvent(evnt) {
10032
+ /**
10033
+ * 处理跨表拖拽完成
10034
+ */
10035
+ handleCrossTableRowDragFinishEvent(evnt) {
10036
+ const $xeTable = this;
10037
+ const $xeGantt = $xeTable.$xeGantt;
10038
+ const reactData = $xeTable;
10039
+ const internalData = $xeTable;
10040
+ const crossTableDragRowInfo = (0, _store.getCrossTableDragRowInfo)($xeTable);
10041
+ const {
10042
+ tableData
10043
+ } = reactData;
10044
+ const {
10045
+ fullAllDataRowIdData
10046
+ } = internalData;
10047
+ const rowOpts = $xeTable.computeRowOpts;
10048
+ const cellOpts = $xeTable.computeCellOpts;
10049
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
10050
+ const rowDragOpts = $xeTable.computeRowDragOpts;
10051
+ const {
10052
+ animation,
10053
+ isCrossTableDrag
10054
+ } = rowDragOpts;
10055
+ const treeOpts = $xeTable.computeTreeOpts;
10056
+ const {
10057
+ mapChildrenField
10058
+ } = treeOpts;
10059
+ const el = $xeTable.$refs.refElem;
10060
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
10061
+ const {
10062
+ row: dragRow
10063
+ } = crossTableDragRowInfo;
10064
+ if (dragRow) {
10065
+ const dragRowid = (0, _util.getRowid)($xeTable, dragRow);
10066
+ const dragRowRest = fullAllDataRowIdData[dragRowid];
10067
+ let dragRowHeight = 0;
10068
+ let rsIndex = -1;
10069
+ if (dragRowRest) {
10070
+ if (animation) {
10071
+ dragRowHeight = (0, _util.getCellRestHeight)(dragRowRest, cellOpts, rowOpts, defaultRowHeight);
10072
+ }
10073
+ rsIndex = dragRowRest.$index;
10074
+ }
10075
+ const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : [];
10076
+ const dragList = _xeUtils.default.toTreeArray([dragRow], {
10077
+ updated: true,
10078
+ children: mapChildrenField
10079
+ });
10080
+ $xeTable.remove(dragList).then(() => {
10081
+ if (animation && dragRowHeight && dragRangeList.length) {
10082
+ const $xeGanttView = internalData.xeGanttView;
10083
+ let wrapperEl = el;
10084
+ if ($xeGantt && $xeGanttView) {
10085
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
10086
+ if (ganttContainerElem) {
10087
+ wrapperEl = ganttContainerElem;
10088
+ }
10089
+ }
10090
+ const dtClss = [];
10091
+ dragRangeList.forEach(row => {
10092
+ const rowid = (0, _util.getRowid)($xeTable, row);
10093
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
10094
+ if ($xeGantt) {
10095
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
10096
+ }
10097
+ });
10098
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
10099
+ (0, _anime.moveRowAnimateToTb)(dtTrList, dragRowHeight);
10100
+ }
10101
+ });
10102
+ $xeTable.dispatchEvent('row-remove-dragend', {
10103
+ row: dragRow
10104
+ }, evnt);
10105
+ clearRowDragData($xeTable);
10106
+ clearCrossTableDragStatus($xeTable);
10107
+ }
10108
+ }
10109
+ },
10110
+ /**
10111
+ * 处理跨表拖至新的空表
10112
+ */
10113
+ handleCrossTableRowDragoverEmptyEvent(evnt) {
10114
+ const $xeTable = this;
10115
+ const reactData = $xeTable;
10116
+ const internalData = $xeTable;
10117
+ const {
10118
+ tableData
10119
+ } = reactData;
10120
+ const rowDragOpts = $xeTable.computeRowDragOpts;
10121
+ const {
10122
+ isCrossTableDrag
10123
+ } = rowDragOpts;
10124
+ if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
10125
+ const {
10126
+ $oldTable
10127
+ } = crossTableDragRowObj;
10128
+ if ($oldTable && $oldTable.xID !== $xeTable.xID) {
10129
+ evnt.preventDefault();
10130
+ crossTableDragRowObj.$newTable = $xeTable;
10131
+ internalData.prevDragRow = null;
10132
+ }
10133
+ }
10134
+ },
10135
+ /**
10136
+ * 处理跨表拖插入
10137
+ */
10138
+ handleCrossTableRowDragInsertEvent(evnt) {
9841
10139
  const $xeTable = this;
9842
10140
  const $xeGantt = $xeTable.$xeGantt;
9843
10141
  const props = $xeTable;
9844
10142
  const reactData = $xeTable;
9845
10143
  const internalData = $xeTable;
10144
+ const crossTableDragRowInfo = (0, _store.getCrossTableDragRowInfo)($xeTable);
10145
+ const {
10146
+ treeConfig
10147
+ } = props;
10148
+ const {
10149
+ prevDragRow,
10150
+ prevDragPos,
10151
+ prevDragToChild
10152
+ } = internalData;
10153
+ const rowDragOpts = $xeTable.computeRowDragOpts;
10154
+ const {
10155
+ animation,
10156
+ isSelfToChildDrag,
10157
+ isCrossTableDrag,
10158
+ dragEndMethod,
10159
+ dragToChildMethod
10160
+ } = rowDragOpts;
10161
+ const rowOpts = $xeTable.computeRowOpts;
10162
+ const cellOpts = $xeTable.computeCellOpts;
10163
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
10164
+ const treeOpts = $xeTable.computeTreeOpts;
10165
+ const {
10166
+ parentField,
10167
+ mapChildrenField
10168
+ } = treeOpts;
10169
+ const childrenField = treeOpts.children || treeOpts.childrenField;
10170
+ // 跨表拖拽
10171
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
10172
+ const {
10173
+ row: oldRow
10174
+ } = crossTableDragRowInfo;
10175
+ const {
10176
+ $oldTable
10177
+ } = crossTableDragRowObj;
10178
+ const el = $xeTable.$refs.refElem;
10179
+ if ($oldTable && oldRow) {
10180
+ const dragRow = oldRow;
10181
+ let dragOffsetIndex = -1;
10182
+ if (prevDragRow) {
10183
+ dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
10184
+ }
10185
+ const dragParams = {
10186
+ oldRow: dragRow,
10187
+ newRow: prevDragRow,
10188
+ dragRow,
10189
+ dragPos: prevDragPos,
10190
+ dragToChild: !!prevDragToChild,
10191
+ offsetIndex: dragOffsetIndex
10192
+ };
10193
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
10194
+ const errRest = {
10195
+ status: false
10196
+ };
10197
+ Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then(status => {
10198
+ if (!status) {
10199
+ return errRest;
10200
+ }
10201
+ let insertRest = Promise.resolve();
10202
+ if (treeConfig) {
10203
+ const dragList = _xeUtils.default.toTreeArray([dragRow], {
10204
+ updated: true,
10205
+ children: mapChildrenField
10206
+ });
10207
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
10208
+ if (prevDragRow) {
10209
+ dragRow[parentField] = prevDragRow[parentField];
10210
+ } else {
10211
+ dragRow[parentField] = null;
10212
+ }
10213
+ dragList.forEach(row => {
10214
+ row[childrenField] = undefined;
10215
+ row[mapChildrenField] = undefined;
10216
+ });
10217
+ if (prevDragRow) {
10218
+ if (prevDragPos === 'bottom') {
10219
+ insertRest = $xeTable.insertNextAt(dragList, prevDragRow);
10220
+ } else {
10221
+ insertRest = $xeTable.insertAt(dragList, prevDragRow);
10222
+ }
10223
+ } else {
10224
+ insertRest = $xeTable.insert(dragList);
10225
+ }
10226
+ } else {
10227
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
10228
+ if (prevDragRow) {
10229
+ if (prevDragPos === 'bottom') {
10230
+ insertRest = $xeTable.insertNextAt(dragRow, prevDragRow);
10231
+ } else {
10232
+ insertRest = $xeTable.insertAt(dragRow, prevDragRow);
10233
+ }
10234
+ } else {
10235
+ insertRest = $xeTable.insert(dragRow);
10236
+ }
10237
+ }
10238
+ $xeTable.dispatchEvent('row-insert-dragend', {
10239
+ oldRow,
10240
+ newRow: prevDragRow,
10241
+ dragRow,
10242
+ dragPos: prevDragPos,
10243
+ dragToChild: isDragToChildFlag,
10244
+ offsetIndex: dragOffsetIndex
10245
+ }, evnt);
10246
+ clearRowDragData($xeTable);
10247
+ insertRest.then(() => {
10248
+ const {
10249
+ tableData
10250
+ } = reactData;
10251
+ const {
10252
+ fullAllDataRowIdData
10253
+ } = internalData;
10254
+ const oldRowid = (0, _util.getRowid)($xeTable, dragRow);
10255
+ const oldRowRest = fullAllDataRowIdData[oldRowid];
10256
+ let dragRowHeight = 0;
10257
+ let rsIndex = -1;
10258
+ if (oldRowRest) {
10259
+ if (animation) {
10260
+ dragRowHeight = (0, _util.getCellRestHeight)(oldRowRest, cellOpts, rowOpts, defaultRowHeight);
10261
+ }
10262
+ rsIndex = oldRowRest.$index;
10263
+ }
10264
+ const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : [];
10265
+ if (animation && dragRowHeight && dragRangeList.length) {
10266
+ const $xeGanttView = internalData.xeGanttView;
10267
+ let wrapperEl = el;
10268
+ if ($xeGantt && $xeGanttView) {
10269
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
10270
+ if (ganttContainerElem) {
10271
+ wrapperEl = ganttContainerElem;
10272
+ }
10273
+ }
10274
+ const dtClss = [];
10275
+ dragRangeList.forEach(row => {
10276
+ const rowid = (0, _util.getRowid)($xeTable, row);
10277
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
10278
+ if ($xeGantt) {
10279
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
10280
+ }
10281
+ });
10282
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
10283
+ (0, _anime.moveRowAnimateToTb)(dtTrList, -dragRowHeight);
10284
+ }
10285
+ });
10286
+ });
10287
+ }
10288
+ }
10289
+ },
10290
+ hideCrossTableRowDropClearStatus() {
10291
+ const $xeTable = this;
10292
+ hideDropTip($xeTable);
10293
+ },
10294
+ handleRowDragDragendEvent(evnt) {
10295
+ const $xeTable = this;
10296
+ const props = $xeTable;
10297
+ const reactData = $xeTable;
10298
+ const internalData = $xeTable;
9846
10299
  const {
9847
10300
  treeConfig
9848
10301
  } = props;
@@ -9862,7 +10315,23 @@ const Methods = {
9862
10315
  prevDragRow,
9863
10316
  prevDragPos
9864
10317
  } = internalData;
9865
- let wrapperEl = $xeTable.$refs.refElem;
10318
+ const rowDragOpts = $xeTable.computeRowDragOpts;
10319
+ const {
10320
+ isCrossTableDrag,
10321
+ isCrossDrag
10322
+ } = rowDragOpts;
10323
+ // 跨表拖拽
10324
+ if (isCrossTableDrag && crossTableDragRowObj) {
10325
+ const {
10326
+ $newTable
10327
+ } = crossTableDragRowObj;
10328
+ if ($newTable && $newTable.xID !== $xeTable.xID) {
10329
+ if (!treeConfig || isCrossDrag) {
10330
+ $newTable.handleCrossTableRowDragInsertEvent(evnt);
10331
+ }
10332
+ return;
10333
+ }
10334
+ }
9866
10335
  if (treeConfig && lazy && prevDragToChild) {
9867
10336
  // 懒加载
9868
10337
  const newRowid = (0, _util.getRowid)($xeTable, prevDragRow);
@@ -9877,20 +10346,8 @@ const Methods = {
9877
10346
  } else {
9878
10347
  $xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild);
9879
10348
  }
9880
- const dtClss = ['.vxe-body--row'];
9881
- if ($xeGantt) {
9882
- const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
9883
- if (ganttContainerElem) {
9884
- wrapperEl = ganttContainerElem;
9885
- }
9886
- dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
9887
- }
9888
- hideDropTip($xeTable);
9889
- clearRowDropOrigin($xeTable);
9890
- (0, _anime.clearRowAnimate)(wrapperEl, dtClss);
9891
- internalData.prevDragToChild = false;
9892
- reactData.dragRow = null;
9893
- reactData.dragCol = null;
10349
+ clearRowDragData($xeTable);
10350
+ clearCrossTableDragStatus($xeTable);
9894
10351
  },
9895
10352
  handleRowDragDragoverEvent(evnt) {
9896
10353
  const $xeTable = this;
@@ -9917,9 +10374,10 @@ const Methods = {
9917
10374
  const {
9918
10375
  isPeerDrag,
9919
10376
  isCrossDrag,
9920
- isToChildDrag
10377
+ isToChildDrag,
10378
+ isCrossTableDrag
9921
10379
  } = rowDragOpts;
9922
- if (!dragRow) {
10380
+ if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
9923
10381
  evnt.preventDefault();
9924
10382
  return;
9925
10383
  }
@@ -9928,18 +10386,40 @@ const Methods = {
9928
10386
  const rowid = trEl.getAttribute('rowid') || '';
9929
10387
  const rest = fullAllDataRowIdData[rowid];
9930
10388
  if (rest) {
10389
+ evnt.preventDefault();
9931
10390
  const row = rest.row;
9932
10391
  const rowid = (0, _util.getRowid)($xeTable, row);
9933
10392
  const rowRest = fullAllDataRowIdData[rowid];
9934
- evnt.preventDefault();
9935
- const {
9936
- dragRow
9937
- } = reactData;
9938
10393
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
9939
10394
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
9940
- internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag && isControlKey);
10395
+ internalData.prevDragToChild = !!(treeConfig && transform && isCrossDrag && isToChildDrag && isControlKey);
9941
10396
  internalData.prevDragRow = row;
9942
10397
  internalData.prevDragPos = dragPos;
10398
+ // 跨表拖拽
10399
+ if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
10400
+ const {
10401
+ $oldTable,
10402
+ $newTable
10403
+ } = crossTableDragRowObj;
10404
+ if ($oldTable) {
10405
+ const oldTableReactData = $oldTable;
10406
+ if ($oldTable.xID === $xeTable.xID) {
10407
+ if ($newTable) {
10408
+ $newTable.hideCrossTableRowDropClearStatus();
10409
+ }
10410
+ reactData.isCrossDragRow = false;
10411
+ oldTableReactData.isCrossDragRow = false;
10412
+ crossTableDragRowObj.$newTable = null;
10413
+ } else if (!treeConfig || isCrossDrag) {
10414
+ $oldTable.hideCrossTableRowDropClearStatus();
10415
+ oldTableReactData.isCrossDragRow = true;
10416
+ reactData.dragTipText = oldTableReactData.dragTipText;
10417
+ crossTableDragRowObj.$newTable = $xeTable;
10418
+ showDropTip($xeTable, evnt, trEl, null, true, dragPos);
10419
+ return;
10420
+ }
10421
+ }
10422
+ }
9943
10423
  if ($xeTable.eqRow(dragRow, row) || isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded || !isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level)) {
9944
10424
  showDropTip($xeTable, evnt, trEl, null, false, dragPos);
9945
10425
  return;
@@ -9957,12 +10437,14 @@ const Methods = {
9957
10437
  const $xeTable = this;
9958
10438
  const props = $xeTable;
9959
10439
  const reactData = $xeTable;
10440
+ const crossTableDragRowInfo = (0, _store.getCrossTableDragRowInfo)($xeTable);
9960
10441
  evnt.stopPropagation();
9961
10442
  const {
9962
10443
  dragConfig
9963
10444
  } = props;
9964
10445
  const rowDragOpts = $xeTable.computeRowDragOpts;
9965
10446
  const {
10447
+ isCrossTableDrag,
9966
10448
  trigger,
9967
10449
  dragStartMethod
9968
10450
  } = rowDragOpts;
@@ -9978,10 +10460,19 @@ const Methods = {
9978
10460
  trEl.draggable = false;
9979
10461
  reactData.dragRow = null;
9980
10462
  reactData.dragCol = null;
10463
+ clearCrossTableDragStatus($xeTable);
9981
10464
  hideDropTip($xeTable);
9982
10465
  return;
9983
10466
  }
10467
+ if (isCrossTableDrag) {
10468
+ crossTableDragRowInfo.row = row;
10469
+ crossTableDragRowObj = {
10470
+ $oldTable: $xeTable,
10471
+ $newTable: null
10472
+ };
10473
+ }
9984
10474
  reactData.dragRow = row;
10475
+ reactData.isCrossDragRow = false;
9985
10476
  reactData.dragCol = null;
9986
10477
  trEl.draggable = true;
9987
10478
  updateRowDropOrigin($xeTable, row);
@@ -10327,6 +10818,7 @@ const Methods = {
10327
10818
  internalData.prevDragToChild = false;
10328
10819
  reactData.dragRow = null;
10329
10820
  reactData.dragCol = null;
10821
+ clearCrossTableDragStatus($xeTable);
10330
10822
  },
10331
10823
  handleHeaderCellDragDragoverEvent(evnt) {
10332
10824
  const $xeTable = this;
@@ -10421,11 +10913,13 @@ const Methods = {
10421
10913
  reactData.dragRow = null;
10422
10914
  reactData.dragCol = null;
10423
10915
  hideDropTip($xeTable);
10916
+ clearCrossTableDragStatus($xeTable);
10424
10917
  return;
10425
10918
  }
10426
10919
  reactData.dragCol = column;
10427
10920
  reactData.dragRow = null;
10428
10921
  thEl.draggable = true;
10922
+ clearCrossTableDragStatus($xeTable);
10429
10923
  updateColDropOrigin($xeTable, column);
10430
10924
  updateColDropTipContent($xeTable, thEl);
10431
10925
  $xeTable.dispatchEvent('column-dragstart', params, evnt);
@@ -10435,6 +10929,7 @@ const Methods = {
10435
10929
  const reactData = $xeTable;
10436
10930
  clearColDropOrigin($xeTable);
10437
10931
  hideDropTip($xeTable);
10932
+ clearCrossTableDragStatus($xeTable);
10438
10933
  reactData.dragRow = null;
10439
10934
  reactData.dragCol = null;
10440
10935
  },
@@ -12665,6 +13160,10 @@ const Methods = {
12665
13160
  }
12666
13161
  reactData.footerTableData = footData;
12667
13162
  $xeTable.handleUpdateFooterMerge();
13163
+ $xeTable.dispatchEvent('footer-data-change', {
13164
+ visibleColumn: internalData.visibleColumn,
13165
+ footData
13166
+ }, null);
12668
13167
  return $xeTable.$nextTick();
12669
13168
  },
12670
13169
  /**
@@ -12751,45 +13250,101 @@ const Methods = {
12751
13250
  return updateStyle($xeTable);
12752
13251
  });
12753
13252
  },
12754
- setMergeFooterItems(merges) {
13253
+ setMergeHeaderCells(merges) {
13254
+ const $xeTable = this;
13255
+ handleHeaderMerge($xeTable, merges);
13256
+ $xeTable.handleUpdateHeaderMerge();
13257
+ return $xeTable.$nextTick().then(() => {
13258
+ return updateStyle($xeTable);
13259
+ });
13260
+ },
13261
+ /**
13262
+ * 移除表头单元格合并 [{row:Row|number, col:ColumnInfo|number}]
13263
+ */
13264
+ removeMergeHeaderCells(merges) {
13265
+ const $xeTable = this;
13266
+ const rest = removeHeaderMerges($xeTable, merges);
13267
+ $xeTable.handleUpdateHeaderMerge();
13268
+ return $xeTable.$nextTick().then(() => {
13269
+ updateStyle($xeTable);
13270
+ return rest;
13271
+ });
13272
+ },
13273
+ /**
13274
+ * 获取所有被合并的表头单元格
13275
+ */
13276
+ getMergeHeaderCells() {
13277
+ const $xeTable = this;
13278
+ const internalData = $xeTable;
13279
+ return internalData.mergeHeaderList.slice(0);
13280
+ },
13281
+ /**
13282
+ * 清除所有表头单元格合并
13283
+ */
13284
+ clearMergeHeaderCells() {
13285
+ const $xeTable = this;
13286
+ const reactData = $xeTable;
13287
+ const internalData = $xeTable;
13288
+ internalData.mergeHeaderList = [];
13289
+ internalData.mergeHeaderMaps = {};
13290
+ internalData.mergeHeaderCellMaps = {};
13291
+ reactData.mergeHeadFlag++;
13292
+ return $xeTable.$nextTick().then(() => {
13293
+ return updateStyle($xeTable);
13294
+ });
13295
+ },
13296
+ setMergeFooterCells(merges) {
12755
13297
  const $xeTable = this;
12756
13298
  const props = $xeTable;
12757
13299
  if (props.footerSpanMethod) {
12758
- (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
13300
+ (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
12759
13301
  }
12760
13302
  handleFooterMerge($xeTable, merges);
12761
13303
  $xeTable.handleUpdateFooterMerge();
12762
13304
  return $xeTable.$nextTick().then(() => {
12763
- $xeTable.updateCellAreas();
12764
13305
  return updateStyle($xeTable);
12765
13306
  });
12766
13307
  },
12767
- removeMergeFooterItems(merges) {
13308
+ setMergeFooterItems(merges) {
13309
+ const $xeTable = this;
13310
+ // errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
13311
+ return $xeTable.setMergeFooterCells(merges);
13312
+ },
13313
+ removeMergeFooterCells(merges) {
12768
13314
  const $xeTable = this;
12769
13315
  const props = $xeTable;
12770
13316
  if (props.footerSpanMethod) {
12771
- (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
13317
+ (0, _log.errLog)('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
12772
13318
  }
12773
13319
  const rest = removeFooterMerges($xeTable, merges);
12774
13320
  $xeTable.handleUpdateFooterMerge();
12775
13321
  return $xeTable.$nextTick().then(() => {
12776
- $xeTable.updateCellAreas();
12777
13322
  updateStyle($xeTable);
12778
13323
  return rest;
12779
13324
  });
12780
13325
  },
13326
+ removeMergeFooterItems(merges) {
13327
+ const $xeTable = this;
13328
+ // errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
13329
+ return $xeTable.removeMergeFooterCells(merges);
13330
+ },
12781
13331
  /**
12782
13332
  * 获取所有被合并的表尾
12783
13333
  */
12784
- getMergeFooterItems() {
13334
+ getMergeFooterCells() {
12785
13335
  const $xeTable = this;
12786
13336
  const internalData = $xeTable;
12787
13337
  return internalData.mergeFooterList.slice(0);
12788
13338
  },
13339
+ getMergeFooterItems() {
13340
+ const $xeTable = this;
13341
+ // errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
13342
+ return $xeTable.getMergeFooterCells();
13343
+ },
12789
13344
  /**
12790
13345
  * 清除所有表尾合并
12791
13346
  */
12792
- clearMergeFooterItems() {
13347
+ clearMergeFooterCells() {
12793
13348
  const $xeTable = this;
12794
13349
  const reactData = $xeTable;
12795
13350
  const internalData = $xeTable;
@@ -12801,6 +13356,11 @@ const Methods = {
12801
13356
  return updateStyle($xeTable);
12802
13357
  });
12803
13358
  },
13359
+ clearMergeFooterItems() {
13360
+ const $xeTable = this;
13361
+ // errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
13362
+ return $xeTable.clearMergeFooterCells();
13363
+ },
12804
13364
  handleUpdateAggData() {
12805
13365
  const $xeTable = this;
12806
13366
  const internalData = $xeTable;
@@ -12838,14 +13398,7 @@ const Methods = {
12838
13398
  // 已废弃,使用 dispatchEvent
12839
13399
  emitEvent(type, params, evnt) {
12840
13400
  const $xeTable = this;
12841
- const $xeGrid = $xeTable.$xeGrid;
12842
- const $xeGantt = $xeTable.$xeGantt;
12843
- $xeTable.$emit(type, createEvent(evnt, {
12844
- $table: $xeTable,
12845
- $grid: $xeGrid,
12846
- $gantt: $xeGantt,
12847
- $event: evnt
12848
- }));
13401
+ $xeTable.dispatchEvent(type, params, evnt);
12849
13402
  },
12850
13403
  focus() {
12851
13404
  this.isActivated = true;