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
@@ -7,12 +7,14 @@ import { getRowUniqueId, clearTableAllStatus, getColumnList, toFilters, getRowke
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from './anime';
9
9
  import { warnLog, errLog } from '../../ui/src/log';
10
+ import { getCrossTableDragRowInfo } from './store';
10
11
  const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
11
12
  const browseObj = XEUtils.browse();
12
13
  const supportMaxRow = 5e6;
13
14
  const customStorageKey = 'VXE_CUSTOM_STORE';
14
15
  const maxYHeight = 5e6;
15
16
  const maxXWidth = 5e6;
17
+ let crossTableDragRowObj = null;
16
18
  function eqCellValue(row1, row2, field) {
17
19
  const val1 = XEUtils.get(row1, field);
18
20
  const val2 = XEUtils.get(row2, field);
@@ -960,22 +962,28 @@ function updateStyle($xeTable) {
960
962
  emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
961
963
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
962
964
  }
965
+ const scrollbarXConf = scrollbarOpts.x || {};
963
966
  const scrollbarXToTop = $xeTable.computeScrollbarXToTop;
967
+ const scrollbarYConf = scrollbarOpts.y || {};
964
968
  const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
965
969
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
966
- if ($xeGanttView) {
970
+ if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
967
971
  osbHeight = scrollbarHeight;
968
972
  xScrollbarVisible = 'visible';
969
973
  }
970
- else if (scrollbarOpts.x && scrollbarOpts.x.visible === false) {
974
+ else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
971
975
  osbHeight = 0;
972
976
  xScrollbarVisible = 'hidden';
973
977
  }
974
978
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
975
- if ((scrollbarOpts.y && scrollbarOpts.y.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
979
+ if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
976
980
  osbWidth = 0;
977
981
  yScrollbarVisible = 'hidden';
978
982
  }
983
+ else if (scrollbarYConf.visible === 'visible') {
984
+ osbWidth = scrollbarWidth;
985
+ yScrollbarVisible = 'visible';
986
+ }
979
987
  let tbHeight = 0;
980
988
  let bodyMaxHeight = 0;
981
989
  const bodyMinHeight = customMinHeight - tHeaderHeight - tFooterHeight - osbHeight;
@@ -1014,7 +1022,7 @@ function updateStyle($xeTable) {
1014
1022
  }
1015
1023
  if (xRightCornerEl) {
1016
1024
  xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
1017
- xRightCornerEl.style.display = scrollbarXToTop ? '' : (overflowX && osbHeight ? 'block' : '');
1025
+ xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '');
1018
1026
  }
1019
1027
  const scrollYVirtualEl = $xeTable.$refs.refScrollYVirtualElem;
1020
1028
  if (scrollYVirtualEl) {
@@ -1025,7 +1033,7 @@ function updateStyle($xeTable) {
1025
1033
  const yTopCornerEl = $xeTable.$refs.refScrollYTopCornerElem;
1026
1034
  if (yTopCornerEl) {
1027
1035
  yTopCornerEl.style.height = `${tHeaderHeight}px`;
1028
- yTopCornerEl.style.display = overflowY && tHeaderHeight ? 'block' : '';
1036
+ yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1029
1037
  }
1030
1038
  const yWrapperEl = $xeTable.$refs.refScrollYWrapperElem;
1031
1039
  if (yWrapperEl) {
@@ -1036,7 +1044,7 @@ function updateStyle($xeTable) {
1036
1044
  if (yBottomCornerEl) {
1037
1045
  yBottomCornerEl.style.height = `${tFooterHeight}px`;
1038
1046
  yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
1039
- yBottomCornerEl.style.display = overflowY && tFooterHeight ? 'block' : '';
1047
+ yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1040
1048
  }
1041
1049
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
1042
1050
  if (rowExpandEl) {
@@ -1926,11 +1934,59 @@ function handleBodyMerge($xeTable, merges) {
1926
1934
  });
1927
1935
  }
1928
1936
  }
1929
- function handleFooterMerge($xeTable, merges) {
1937
+ function removeBodyMerges($xeTable, merges) {
1938
+ const internalData = $xeTable;
1939
+ const { mergeBodyList, fullColumnIdData, fullAllDataRowIdData, mergeBodyMaps } = internalData;
1940
+ const rest = [];
1941
+ if (merges) {
1942
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
1943
+ if (!XEUtils.isArray(merges)) {
1944
+ merges = [merges];
1945
+ }
1946
+ merges.forEach((item) => {
1947
+ const { row: margeRow, col: margeCol } = item;
1948
+ let mergeRowIndex = -1;
1949
+ let mergeColumnIndex = -1;
1950
+ if (XEUtils.isNumber(margeRow)) {
1951
+ mergeRowIndex = margeRow;
1952
+ }
1953
+ else {
1954
+ const rowid = margeRow ? handleGetRowId(margeRow) : null;
1955
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
1956
+ if (rowRest) {
1957
+ mergeRowIndex = rowRest._index;
1958
+ }
1959
+ }
1960
+ if (XEUtils.isNumber(margeCol)) {
1961
+ mergeColumnIndex = margeCol;
1962
+ }
1963
+ else {
1964
+ const colid = margeCol ? margeCol.id : null;
1965
+ const colRest = colid ? fullColumnIdData[colid] : null;
1966
+ if (colRest) {
1967
+ mergeColumnIndex = colRest._index;
1968
+ }
1969
+ }
1970
+ const mcIndex = XEUtils.findIndexOf(mergeBodyList, item => (item.row === mergeRowIndex) && (item.col === mergeColumnIndex));
1971
+ if (mcIndex > -1) {
1972
+ const rItems = mergeBodyList.splice(mcIndex, 1);
1973
+ const item = rItems[0];
1974
+ if (item) {
1975
+ rest.push(rItems[0]);
1976
+ if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
1977
+ delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1978
+ }
1979
+ }
1980
+ }
1981
+ });
1982
+ }
1983
+ return rest;
1984
+ }
1985
+ function handleHeaderMerge($xeTable, merges) {
1930
1986
  const reactData = $xeTable;
1931
1987
  const internalData = $xeTable;
1932
1988
  const { footerTableData } = reactData;
1933
- const { mergeFooterList, mergeFooterMaps, fullColumnIdData } = internalData;
1989
+ const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData;
1934
1990
  if (merges) {
1935
1991
  const { visibleColumn } = internalData;
1936
1992
  if (!XEUtils.isArray(merges)) {
@@ -1956,7 +2012,7 @@ function handleFooterMerge($xeTable, merges) {
1956
2012
  if (rowspan > 1 || colspan > 1) {
1957
2013
  const row = footerTableData[mergeRowIndex];
1958
2014
  const column = visibleColumn[mergeColumnIndex];
1959
- let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2015
+ let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1960
2016
  if (mergeItem) {
1961
2017
  mergeItem.rowspan = rowspan;
1962
2018
  mergeItem.colspan = colspan;
@@ -1974,37 +2030,26 @@ function handleFooterMerge($xeTable, merges) {
1974
2030
  _rowspan: rowspan,
1975
2031
  _colspan: colspan
1976
2032
  };
1977
- mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1978
- mergeFooterList.push(mergeItem);
2033
+ mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2034
+ mergeHeaderList.push(mergeItem);
1979
2035
  }
1980
2036
  }
1981
2037
  }
1982
2038
  });
1983
2039
  }
1984
2040
  }
1985
- function removeBodyMerges($xeTable, merges) {
2041
+ function removeHeaderMerges($xeTable, merges) {
1986
2042
  const internalData = $xeTable;
1987
- const { mergeBodyList, fullColumnIdData, fullAllDataRowIdData, mergeBodyMaps } = internalData;
2043
+ const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData;
1988
2044
  const rest = [];
1989
2045
  if (merges) {
1990
- const { handleGetRowId } = createHandleGetRowId($xeTable);
1991
2046
  if (!XEUtils.isArray(merges)) {
1992
2047
  merges = [merges];
1993
2048
  }
1994
2049
  merges.forEach((item) => {
1995
2050
  const { row: margeRow, col: margeCol } = item;
1996
- let mergeRowIndex = -1;
2051
+ const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
1997
2052
  let mergeColumnIndex = -1;
1998
- if (XEUtils.isNumber(margeRow)) {
1999
- mergeRowIndex = margeRow;
2000
- }
2001
- else {
2002
- const rowid = margeRow ? handleGetRowId(margeRow) : null;
2003
- const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
2004
- if (rowRest) {
2005
- mergeRowIndex = rowRest._index;
2006
- }
2007
- }
2008
2053
  if (XEUtils.isNumber(margeCol)) {
2009
2054
  mergeColumnIndex = margeCol;
2010
2055
  }
@@ -2015,14 +2060,14 @@ function removeBodyMerges($xeTable, merges) {
2015
2060
  mergeColumnIndex = colRest._index;
2016
2061
  }
2017
2062
  }
2018
- const mcIndex = XEUtils.findIndexOf(mergeBodyList, item => (item.row === mergeRowIndex) && (item.col === mergeColumnIndex));
2063
+ const mcIndex = XEUtils.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
2019
2064
  if (mcIndex > -1) {
2020
- const rItems = mergeBodyList.splice(mcIndex, 1);
2065
+ const rItems = mergeHeaderList.splice(mcIndex, 1);
2021
2066
  const item = rItems[0];
2022
2067
  if (item) {
2023
- rest.push(rItems[0]);
2024
- if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2025
- delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2068
+ rest.push(item);
2069
+ if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2070
+ delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2026
2071
  }
2027
2072
  }
2028
2073
  }
@@ -2030,6 +2075,62 @@ function removeBodyMerges($xeTable, merges) {
2030
2075
  }
2031
2076
  return rest;
2032
2077
  }
2078
+ function handleFooterMerge($xeTable, merges) {
2079
+ const reactData = $xeTable;
2080
+ const internalData = $xeTable;
2081
+ const { footerTableData } = reactData;
2082
+ const { mergeFooterList, mergeFooterMaps, fullColumnIdData } = internalData;
2083
+ if (merges) {
2084
+ const { visibleColumn } = internalData;
2085
+ if (!XEUtils.isArray(merges)) {
2086
+ merges = [merges];
2087
+ }
2088
+ merges.forEach((item) => {
2089
+ let { row: margeRow, col: margeCol, rowspan, colspan } = item;
2090
+ const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
2091
+ let mergeColumnIndex = -1;
2092
+ if (XEUtils.isNumber(margeCol)) {
2093
+ mergeColumnIndex = margeCol;
2094
+ }
2095
+ else {
2096
+ const colid = margeCol ? margeCol.id : null;
2097
+ const colRest = colid ? fullColumnIdData[colid] : null;
2098
+ if (colRest) {
2099
+ mergeColumnIndex = colRest._index;
2100
+ }
2101
+ }
2102
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
2103
+ rowspan = XEUtils.toNumber(rowspan) || 1;
2104
+ colspan = XEUtils.toNumber(colspan) || 1;
2105
+ if (rowspan > 1 || colspan > 1) {
2106
+ const row = footerTableData[mergeRowIndex];
2107
+ const column = visibleColumn[mergeColumnIndex];
2108
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2109
+ if (mergeItem) {
2110
+ mergeItem.rowspan = rowspan;
2111
+ mergeItem.colspan = colspan;
2112
+ mergeItem._rowspan = rowspan;
2113
+ mergeItem._colspan = colspan;
2114
+ }
2115
+ else {
2116
+ mergeItem = {
2117
+ row: mergeRowIndex,
2118
+ col: mergeColumnIndex,
2119
+ rowspan,
2120
+ colspan,
2121
+ _row: row,
2122
+ _col: column,
2123
+ _rowspan: rowspan,
2124
+ _colspan: colspan
2125
+ };
2126
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2127
+ mergeFooterList.push(mergeItem);
2128
+ }
2129
+ }
2130
+ }
2131
+ });
2132
+ }
2133
+ }
2033
2134
  function removeFooterMerges($xeTable, merges) {
2034
2135
  const internalData = $xeTable;
2035
2136
  const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData;
@@ -2140,8 +2241,23 @@ function clearAllSort($xeTable) {
2140
2241
  function calcTableHeight($xeTable, key) {
2141
2242
  const props = $xeTable;
2142
2243
  const reactData = $xeTable;
2244
+ const { editConfig } = props;
2143
2245
  const { parentHeight } = reactData;
2144
- const val = props[key];
2246
+ let val = props[key];
2247
+ if (key === 'minHeight') {
2248
+ const defMinHeight = getConfig().table.minHeight;
2249
+ if (XEUtils.eqNull(val)) {
2250
+ if (eqEmptyValue(defMinHeight)) {
2251
+ // 编辑模式默认最小高度
2252
+ if (isEnableConf(editConfig)) {
2253
+ val = 144;
2254
+ }
2255
+ }
2256
+ else {
2257
+ val = defMinHeight;
2258
+ }
2259
+ }
2260
+ }
2145
2261
  let num = 0;
2146
2262
  if (val) {
2147
2263
  if (val === '100%' || val === 'auto') {
@@ -2348,6 +2464,11 @@ function handleTargetEnterEvent($xeTable, isClear) {
2348
2464
  }
2349
2465
  }
2350
2466
  }
2467
+ function clearCrossTableDragStatus($xeTable) {
2468
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
2469
+ crossTableDragRowObj = null;
2470
+ crossTableDragRowInfo.row = null;
2471
+ }
2351
2472
  function clearDragStatus($xeTable) {
2352
2473
  const reactData = $xeTable;
2353
2474
  const { dragRow, dragCol } = reactData;
@@ -2355,6 +2476,7 @@ function clearDragStatus($xeTable) {
2355
2476
  clearColDropOrigin($xeTable);
2356
2477
  clearRowDropOrigin($xeTable);
2357
2478
  hideDropTip($xeTable);
2479
+ clearCrossTableDragStatus($xeTable);
2358
2480
  reactData.dragRow = null;
2359
2481
  reactData.dragCol = null;
2360
2482
  }
@@ -2548,6 +2670,26 @@ function hideDropTip($xeTable) {
2548
2670
  cdLineEl.style.display = '';
2549
2671
  }
2550
2672
  }
2673
+ function clearRowDragData($xeTable) {
2674
+ const $xeGantt = $xeTable.$xeGantt;
2675
+ const reactData = $xeTable;
2676
+ const internalData = $xeTable;
2677
+ let wrapperEl = $xeTable.$refs.refElem;
2678
+ const dtClss = ['.vxe-body--row'];
2679
+ if ($xeGantt) {
2680
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
2681
+ if (ganttContainerElem) {
2682
+ wrapperEl = ganttContainerElem;
2683
+ }
2684
+ dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
2685
+ }
2686
+ hideDropTip($xeTable);
2687
+ clearRowDropOrigin($xeTable);
2688
+ clearRowAnimate(wrapperEl, dtClss);
2689
+ internalData.prevDragToChild = false;
2690
+ reactData.dragRow = null;
2691
+ reactData.dragCol = null;
2692
+ }
2551
2693
  /**
2552
2694
  * 处理显示 tooltip
2553
2695
  * @param {Event} evnt 事件
@@ -2614,11 +2756,19 @@ function handleDefaultMergeCells($xeTable) {
2614
2756
  $xeTable.setMergeCells(mergeCells);
2615
2757
  }
2616
2758
  }
2759
+ function handleDefaultMergeHeaderItems($xeTable) {
2760
+ const props = $xeTable;
2761
+ const { mergeHeaderCells } = props;
2762
+ if (mergeHeaderCells) {
2763
+ $xeTable.setMergeHeaderCells(mergeHeaderCells);
2764
+ }
2765
+ }
2617
2766
  function handleDefaultMergeFooterItems($xeTable) {
2618
2767
  const props = $xeTable;
2619
- const { mergeFooterItems } = props;
2620
- if (mergeFooterItems) {
2621
- $xeTable.setMergeFooterItems(mergeFooterItems);
2768
+ const { mergeFooterCells, mergeFooterItems } = props;
2769
+ const mFooterCells = mergeFooterCells || mergeFooterItems;
2770
+ if (mFooterCells) {
2771
+ $xeTable.setMergeFooterCells(mFooterCells);
2622
2772
  }
2623
2773
  }
2624
2774
  // 计算可视渲染相关数据
@@ -3071,6 +3221,10 @@ function loadTableData($xeTable, datas, isReset) {
3071
3221
  }
3072
3222
  handleReserveStatus($xeTable);
3073
3223
  $xeTable.checkSelectionStatus();
3224
+ $xeTable.dispatchEvent('data-change', {
3225
+ visibleColumn: internalData.visibleColumn,
3226
+ visibleData: internalData.afterFullData
3227
+ }, null);
3074
3228
  return new Promise(resolve => {
3075
3229
  $xeTable.$nextTick()
3076
3230
  .then(() => handleRecalculateStyle($xeTable, false, false, false))
@@ -3133,6 +3287,7 @@ function handleLoadDefaults($xeTable) {
3133
3287
  handleDefaultTreeExpand($xeTable);
3134
3288
  handleDefaultRowGroupExpand($xeTable);
3135
3289
  handleDefaultMergeCells($xeTable);
3290
+ handleDefaultMergeHeaderItems($xeTable);
3136
3291
  handleDefaultMergeFooterItems($xeTable);
3137
3292
  $xeTable.$nextTick(() => setTimeout(() => $xeTable.recalculate()));
3138
3293
  }
@@ -4778,7 +4933,9 @@ const Methods = {
4778
4933
  }
4779
4934
  }
4780
4935
  }
4781
- return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4936
+ const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4937
+ clearRowDragData($xeTable);
4938
+ return rest;
4782
4939
  },
4783
4940
  /**
4784
4941
  * 获取表格的全量列
@@ -6162,7 +6319,7 @@ const Methods = {
6162
6319
  // 如果点击了当前表格之外
6163
6320
  !getEventTargetNode(evnt, $el).flag) {
6164
6321
  setTimeout(() => {
6165
- this.handleClearEdit(evnt).then(() => {
6322
+ $xeTable.handleClearEdit(evnt).then(() => {
6166
6323
  // 如果存在校验,点击了表格之外则清除
6167
6324
  if (!this.isActivated && editRules && validOpts.autoClear) {
6168
6325
  this.validErrorMaps = {};
@@ -6178,17 +6335,17 @@ const Methods = {
6178
6335
  }
6179
6336
  else if (mouseConfig) {
6180
6337
  if (!getEventTargetNode(evnt, $el).flag && !($xeGGWrapper && getEventTargetNode(evnt, $xeGGWrapper.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
6181
- if (this.clearSelected) {
6182
- this.clearSelected();
6338
+ if ($xeTable.clearSelected) {
6339
+ $xeTable.clearSelected();
6183
6340
  }
6184
6341
  if (areaOpts.autoClear) {
6185
- if (this.getCellAreas) {
6186
- const cellAreas = this.getCellAreas();
6342
+ if ($xeTable.getCellAreas) {
6343
+ const cellAreas = $xeTable.getCellAreas();
6187
6344
  if (cellAreas && cellAreas.length && !getEventTargetNode(evnt, document.body, 'vxe-table--ignore-areas-clear').flag) {
6188
- this.preventEvent(evnt, 'event.clearAreas', {}, () => {
6189
- this.clearCellAreas();
6190
- this.clearCopyCellArea();
6191
- this.emitEvent('clear-cell-area-selection', { cellAreas }, evnt);
6345
+ $xeTable.preventEvent(evnt, 'event.clearAreas', {}, () => {
6346
+ $xeTable.clearCellAreas();
6347
+ $xeTable.clearCopyCellArea();
6348
+ $xeTable.dispatchEvent('clear-cell-area-selection', { cellAreas }, evnt);
6192
6349
  });
6193
6350
  }
6194
6351
  }
@@ -6225,13 +6382,14 @@ const Methods = {
6225
6382
  * 表格键盘事件
6226
6383
  */
6227
6384
  keydownEvent(evnt) {
6385
+ const $xeTable = this;
6228
6386
  const { filterStore, ctxMenuStore, editStore, keyboardConfig, mouseConfig, mouseOpts, keyboardOpts } = this;
6229
6387
  const { actived } = editStore;
6230
6388
  const { keyCode } = evnt;
6231
6389
  const isEsc = keyCode === 27;
6232
6390
  if (isEsc) {
6233
6391
  this.preventEvent(evnt, 'event.keydown', null, () => {
6234
- this.emitEvent('keydown-start', {}, evnt);
6392
+ $xeTable.dispatchEvent('keydown-start', {}, evnt);
6235
6393
  if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardCellAreaEvent) {
6236
6394
  this.handleKeyboardCellAreaEvent(evnt);
6237
6395
  }
@@ -6252,8 +6410,8 @@ const Methods = {
6252
6410
  }
6253
6411
  }
6254
6412
  }
6255
- this.emitEvent('keydown', {}, evnt);
6256
- this.emitEvent('keydown-end', {}, evnt);
6413
+ $xeTable.dispatchEvent('keydown', {}, evnt);
6414
+ $xeTable.dispatchEvent('keydown-end', {}, evnt);
6257
6415
  });
6258
6416
  }
6259
6417
  },
@@ -6584,6 +6742,7 @@ const Methods = {
6584
6742
  }
6585
6743
  },
6586
6744
  handleGlobalPasteEvent(evnt) {
6745
+ const $xeTable = this;
6587
6746
  const { isActivated, keyboardConfig, keyboardOpts, mouseConfig, mouseOpts, editStore, filterStore } = this;
6588
6747
  const { actived } = editStore;
6589
6748
  if (isActivated && !filterStore.visible) {
@@ -6592,10 +6751,11 @@ const Methods = {
6592
6751
  this.handlePasteCellAreaEvent(evnt);
6593
6752
  }
6594
6753
  }
6595
- this.emitEvent('paste', {}, evnt);
6754
+ $xeTable.dispatchEvent('paste', {}, evnt);
6596
6755
  }
6597
6756
  },
6598
6757
  handleGlobalCopyEvent(evnt) {
6758
+ const $xeTable = this;
6599
6759
  const { isActivated, keyboardConfig, keyboardOpts, mouseConfig, mouseOpts, editStore, filterStore } = this;
6600
6760
  const { actived } = editStore;
6601
6761
  if (isActivated && !filterStore.visible) {
@@ -6604,10 +6764,11 @@ const Methods = {
6604
6764
  this.handleCopyCellAreaEvent(evnt);
6605
6765
  }
6606
6766
  }
6607
- this.emitEvent('copy', {}, evnt);
6767
+ $xeTable.dispatchEvent('copy', {}, evnt);
6608
6768
  }
6609
6769
  },
6610
6770
  handleGlobalCutEvent(evnt) {
6771
+ const $xeTable = this;
6611
6772
  const { isActivated, keyboardConfig, keyboardOpts, mouseConfig, mouseOpts, editStore, filterStore } = this;
6612
6773
  const { actived } = editStore;
6613
6774
  if (isActivated && !filterStore.visible) {
@@ -6616,7 +6777,7 @@ const Methods = {
6616
6777
  this.handleCutCellAreaEvent(evnt);
6617
6778
  }
6618
6779
  }
6619
- this.emitEvent('cut', {}, evnt);
6780
+ $xeTable.dispatchEvent('cut', {}, evnt);
6620
6781
  }
6621
6782
  },
6622
6783
  handleGlobalResizeEvent() {
@@ -6637,6 +6798,14 @@ const Methods = {
6637
6798
  internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
6638
6799
  reactData.mergeBodyFlag++;
6639
6800
  },
6801
+ handleUpdateHeaderMerge() {
6802
+ const $xeTable = this;
6803
+ const reactData = $xeTable;
6804
+ const internalData = $xeTable;
6805
+ const { mergeHeaderList } = internalData;
6806
+ internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList);
6807
+ reactData.mergeHeadFlag++;
6808
+ },
6640
6809
  handleUpdateFooterMerge() {
6641
6810
  const $xeTable = this;
6642
6811
  const reactData = $xeTable;
@@ -7789,7 +7958,8 @@ const Methods = {
7789
7958
  return $xeTable.$nextTick();
7790
7959
  },
7791
7960
  triggerHeaderCellDblclickEvent(evnt, params) {
7792
- this.emitEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt);
7961
+ const $xeTable = this;
7962
+ $xeTable.dispatchEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt);
7793
7963
  },
7794
7964
  getCurrentColumn() {
7795
7965
  return this.columnOpts.isCurrent || this.highlightCurrentColumn ? this.currentColumn : null;
@@ -7975,7 +8145,7 @@ const Methods = {
7975
8145
  }
7976
8146
  }
7977
8147
  }
7978
- this.emitEvent('cell-dblclick', params, evnt);
8148
+ $xeTable.dispatchEvent('cell-dblclick', params, evnt);
7979
8149
  },
7980
8150
  handleColumnSortEvent(evnt, column) {
7981
8151
  const $xeTable = this;
@@ -8399,12 +8569,239 @@ const Methods = {
8399
8569
  }
8400
8570
  return Promise.resolve(errRest);
8401
8571
  },
8402
- handleRowDragDragendEvent(evnt) {
8572
+ /**
8573
+ * 处理跨表拖拽完成
8574
+ */
8575
+ handleCrossTableRowDragFinishEvent(evnt) {
8576
+ const $xeTable = this;
8577
+ const $xeGantt = $xeTable.$xeGantt;
8578
+ const reactData = $xeTable;
8579
+ const internalData = $xeTable;
8580
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
8581
+ const { tableData } = reactData;
8582
+ const { fullAllDataRowIdData } = internalData;
8583
+ const rowOpts = $xeTable.computeRowOpts;
8584
+ const cellOpts = $xeTable.computeCellOpts;
8585
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
8586
+ const rowDragOpts = $xeTable.computeRowDragOpts;
8587
+ const { animation, isCrossTableDrag } = rowDragOpts;
8588
+ const treeOpts = $xeTable.computeTreeOpts;
8589
+ const { mapChildrenField } = treeOpts;
8590
+ const el = $xeTable.$refs.refElem;
8591
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
8592
+ const { row: dragRow } = crossTableDragRowInfo;
8593
+ if (dragRow) {
8594
+ const dragRowid = getRowid($xeTable, dragRow);
8595
+ const dragRowRest = fullAllDataRowIdData[dragRowid];
8596
+ let dragRowHeight = 0;
8597
+ let rsIndex = -1;
8598
+ if (dragRowRest) {
8599
+ if (animation) {
8600
+ dragRowHeight = getCellRestHeight(dragRowRest, cellOpts, rowOpts, defaultRowHeight);
8601
+ }
8602
+ rsIndex = dragRowRest.$index;
8603
+ }
8604
+ const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : [];
8605
+ const dragList = XEUtils.toTreeArray([dragRow], {
8606
+ updated: true,
8607
+ children: mapChildrenField
8608
+ });
8609
+ $xeTable.remove(dragList).then(() => {
8610
+ if (animation && dragRowHeight && dragRangeList.length) {
8611
+ const $xeGanttView = internalData.xeGanttView;
8612
+ let wrapperEl = el;
8613
+ if ($xeGantt && $xeGanttView) {
8614
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
8615
+ if (ganttContainerElem) {
8616
+ wrapperEl = ganttContainerElem;
8617
+ }
8618
+ }
8619
+ const dtClss = [];
8620
+ dragRangeList.forEach(row => {
8621
+ const rowid = getRowid($xeTable, row);
8622
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
8623
+ if ($xeGantt) {
8624
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
8625
+ }
8626
+ });
8627
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
8628
+ moveRowAnimateToTb(dtTrList, dragRowHeight);
8629
+ }
8630
+ });
8631
+ $xeTable.dispatchEvent('row-remove-dragend', {
8632
+ row: dragRow
8633
+ }, evnt);
8634
+ clearRowDragData($xeTable);
8635
+ clearCrossTableDragStatus($xeTable);
8636
+ }
8637
+ }
8638
+ },
8639
+ /**
8640
+ * 处理跨表拖至新的空表
8641
+ */
8642
+ handleCrossTableRowDragoverEmptyEvent(evnt) {
8643
+ const $xeTable = this;
8644
+ const reactData = $xeTable;
8645
+ const internalData = $xeTable;
8646
+ const { tableData } = reactData;
8647
+ const rowDragOpts = $xeTable.computeRowDragOpts;
8648
+ const { isCrossTableDrag } = rowDragOpts;
8649
+ if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
8650
+ const { $oldTable } = crossTableDragRowObj;
8651
+ if ($oldTable && $oldTable.xID !== $xeTable.xID) {
8652
+ evnt.preventDefault();
8653
+ crossTableDragRowObj.$newTable = $xeTable;
8654
+ internalData.prevDragRow = null;
8655
+ }
8656
+ }
8657
+ },
8658
+ /**
8659
+ * 处理跨表拖插入
8660
+ */
8661
+ handleCrossTableRowDragInsertEvent(evnt) {
8403
8662
  const $xeTable = this;
8404
8663
  const $xeGantt = $xeTable.$xeGantt;
8405
8664
  const props = $xeTable;
8406
8665
  const reactData = $xeTable;
8407
8666
  const internalData = $xeTable;
8667
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
8668
+ const { treeConfig } = props;
8669
+ const { prevDragRow, prevDragPos, prevDragToChild } = internalData;
8670
+ const rowDragOpts = $xeTable.computeRowDragOpts;
8671
+ const { animation, isSelfToChildDrag, isCrossTableDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
8672
+ const rowOpts = $xeTable.computeRowOpts;
8673
+ const cellOpts = $xeTable.computeCellOpts;
8674
+ const defaultRowHeight = $xeTable.computeDefaultRowHeight;
8675
+ const treeOpts = $xeTable.computeTreeOpts;
8676
+ const { parentField, mapChildrenField } = treeOpts;
8677
+ const childrenField = treeOpts.children || treeOpts.childrenField;
8678
+ // 跨表拖拽
8679
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
8680
+ const { row: oldRow } = crossTableDragRowInfo;
8681
+ const { $oldTable } = crossTableDragRowObj;
8682
+ const el = $xeTable.$refs.refElem;
8683
+ if ($oldTable && oldRow) {
8684
+ const dragRow = oldRow;
8685
+ let dragOffsetIndex = -1;
8686
+ if (prevDragRow) {
8687
+ dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
8688
+ }
8689
+ const dragParams = {
8690
+ oldRow: dragRow,
8691
+ newRow: prevDragRow,
8692
+ dragRow,
8693
+ dragPos: prevDragPos,
8694
+ dragToChild: !!prevDragToChild,
8695
+ offsetIndex: dragOffsetIndex
8696
+ };
8697
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
8698
+ const errRest = {
8699
+ status: false
8700
+ };
8701
+ Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
8702
+ if (!status) {
8703
+ return errRest;
8704
+ }
8705
+ let insertRest = Promise.resolve();
8706
+ if (treeConfig) {
8707
+ const dragList = XEUtils.toTreeArray([dragRow], {
8708
+ updated: true,
8709
+ children: mapChildrenField
8710
+ });
8711
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
8712
+ if (prevDragRow) {
8713
+ dragRow[parentField] = prevDragRow[parentField];
8714
+ }
8715
+ else {
8716
+ dragRow[parentField] = null;
8717
+ }
8718
+ dragList.forEach(row => {
8719
+ row[childrenField] = undefined;
8720
+ row[mapChildrenField] = undefined;
8721
+ });
8722
+ if (prevDragRow) {
8723
+ if (prevDragPos === 'bottom') {
8724
+ insertRest = $xeTable.insertNextAt(dragList, prevDragRow);
8725
+ }
8726
+ else {
8727
+ insertRest = $xeTable.insertAt(dragList, prevDragRow);
8728
+ }
8729
+ }
8730
+ else {
8731
+ insertRest = $xeTable.insert(dragList);
8732
+ }
8733
+ }
8734
+ else {
8735
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
8736
+ if (prevDragRow) {
8737
+ if (prevDragPos === 'bottom') {
8738
+ insertRest = $xeTable.insertNextAt(dragRow, prevDragRow);
8739
+ }
8740
+ else {
8741
+ insertRest = $xeTable.insertAt(dragRow, prevDragRow);
8742
+ }
8743
+ }
8744
+ else {
8745
+ insertRest = $xeTable.insert(dragRow);
8746
+ }
8747
+ }
8748
+ $xeTable.dispatchEvent('row-insert-dragend', {
8749
+ oldRow,
8750
+ newRow: prevDragRow,
8751
+ dragRow,
8752
+ dragPos: prevDragPos,
8753
+ dragToChild: isDragToChildFlag,
8754
+ offsetIndex: dragOffsetIndex
8755
+ }, evnt);
8756
+ clearRowDragData($xeTable);
8757
+ insertRest.then(() => {
8758
+ const { tableData } = reactData;
8759
+ const { fullAllDataRowIdData } = internalData;
8760
+ const oldRowid = getRowid($xeTable, dragRow);
8761
+ const oldRowRest = fullAllDataRowIdData[oldRowid];
8762
+ let dragRowHeight = 0;
8763
+ let rsIndex = -1;
8764
+ if (oldRowRest) {
8765
+ if (animation) {
8766
+ dragRowHeight = getCellRestHeight(oldRowRest, cellOpts, rowOpts, defaultRowHeight);
8767
+ }
8768
+ rsIndex = oldRowRest.$index;
8769
+ }
8770
+ const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : [];
8771
+ if (animation && dragRowHeight && dragRangeList.length) {
8772
+ const $xeGanttView = internalData.xeGanttView;
8773
+ let wrapperEl = el;
8774
+ if ($xeGantt && $xeGanttView) {
8775
+ const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
8776
+ if (ganttContainerElem) {
8777
+ wrapperEl = ganttContainerElem;
8778
+ }
8779
+ }
8780
+ const dtClss = [];
8781
+ dragRangeList.forEach(row => {
8782
+ const rowid = getRowid($xeTable, row);
8783
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
8784
+ if ($xeGantt) {
8785
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
8786
+ }
8787
+ });
8788
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
8789
+ moveRowAnimateToTb(dtTrList, -dragRowHeight);
8790
+ }
8791
+ });
8792
+ });
8793
+ }
8794
+ }
8795
+ },
8796
+ hideCrossTableRowDropClearStatus() {
8797
+ const $xeTable = this;
8798
+ hideDropTip($xeTable);
8799
+ },
8800
+ handleRowDragDragendEvent(evnt) {
8801
+ const $xeTable = this;
8802
+ const props = $xeTable;
8803
+ const reactData = $xeTable;
8804
+ const internalData = $xeTable;
8408
8805
  const { treeConfig } = props;
8409
8806
  const { fullAllDataRowIdData, prevDragToChild } = internalData;
8410
8807
  const { dragRow } = reactData;
@@ -8412,7 +8809,18 @@ const Methods = {
8412
8809
  const { lazy } = treeOpts;
8413
8810
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
8414
8811
  const { prevDragRow, prevDragPos } = internalData;
8415
- let wrapperEl = $xeTable.$refs.refElem;
8812
+ const rowDragOpts = $xeTable.computeRowDragOpts;
8813
+ const { isCrossTableDrag, isCrossDrag } = rowDragOpts;
8814
+ // 跨表拖拽
8815
+ if (isCrossTableDrag && crossTableDragRowObj) {
8816
+ const { $newTable } = crossTableDragRowObj;
8817
+ if ($newTable && $newTable.xID !== $xeTable.xID) {
8818
+ if (!treeConfig || isCrossDrag) {
8819
+ $newTable.handleCrossTableRowDragInsertEvent(evnt);
8820
+ }
8821
+ return;
8822
+ }
8823
+ }
8416
8824
  if (treeConfig && lazy && prevDragToChild) {
8417
8825
  // 懒加载
8418
8826
  const newRowid = getRowid($xeTable, prevDragRow);
@@ -8429,20 +8837,8 @@ const Methods = {
8429
8837
  else {
8430
8838
  $xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild);
8431
8839
  }
8432
- const dtClss = ['.vxe-body--row'];
8433
- if ($xeGantt) {
8434
- const ganttContainerElem = $xeGantt.$refs.refGanttContainerElem;
8435
- if (ganttContainerElem) {
8436
- wrapperEl = ganttContainerElem;
8437
- }
8438
- dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
8439
- }
8440
- hideDropTip($xeTable);
8441
- clearRowDropOrigin($xeTable);
8442
- clearRowAnimate(wrapperEl, dtClss);
8443
- internalData.prevDragToChild = false;
8444
- reactData.dragRow = null;
8445
- reactData.dragCol = null;
8840
+ clearRowDragData($xeTable);
8841
+ clearCrossTableDragStatus($xeTable);
8446
8842
  },
8447
8843
  handleRowDragDragoverEvent(evnt) {
8448
8844
  const $xeTable = this;
@@ -8456,8 +8852,8 @@ const Methods = {
8456
8852
  const { lazy, transform, parentField } = treeOpts;
8457
8853
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
8458
8854
  const rowDragOpts = $xeTable.computeRowDragOpts;
8459
- const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts;
8460
- if (!dragRow) {
8855
+ const { isPeerDrag, isCrossDrag, isToChildDrag, isCrossTableDrag } = rowDragOpts;
8856
+ if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
8461
8857
  evnt.preventDefault();
8462
8858
  return;
8463
8859
  }
@@ -8466,16 +8862,38 @@ const Methods = {
8466
8862
  const rowid = trEl.getAttribute('rowid') || '';
8467
8863
  const rest = fullAllDataRowIdData[rowid];
8468
8864
  if (rest) {
8865
+ evnt.preventDefault();
8469
8866
  const row = rest.row;
8470
8867
  const rowid = getRowid($xeTable, row);
8471
8868
  const rowRest = fullAllDataRowIdData[rowid];
8472
- evnt.preventDefault();
8473
- const { dragRow } = reactData;
8474
8869
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
8475
8870
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
8476
- internalData.prevDragToChild = !!(treeConfig && transform && isToChildDrag && isControlKey);
8871
+ internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey);
8477
8872
  internalData.prevDragRow = row;
8478
8873
  internalData.prevDragPos = dragPos;
8874
+ // 跨表拖拽
8875
+ if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
8876
+ const { $oldTable, $newTable } = crossTableDragRowObj;
8877
+ if ($oldTable) {
8878
+ const oldTableReactData = $oldTable;
8879
+ if ($oldTable.xID === $xeTable.xID) {
8880
+ if ($newTable) {
8881
+ $newTable.hideCrossTableRowDropClearStatus();
8882
+ }
8883
+ reactData.isCrossDragRow = false;
8884
+ oldTableReactData.isCrossDragRow = false;
8885
+ crossTableDragRowObj.$newTable = null;
8886
+ }
8887
+ else if (!treeConfig || isCrossDrag) {
8888
+ $oldTable.hideCrossTableRowDropClearStatus();
8889
+ oldTableReactData.isCrossDragRow = true;
8890
+ reactData.dragTipText = oldTableReactData.dragTipText;
8891
+ crossTableDragRowObj.$newTable = $xeTable;
8892
+ showDropTip($xeTable, evnt, trEl, null, true, dragPos);
8893
+ return;
8894
+ }
8895
+ }
8896
+ }
8479
8897
  if ($xeTable.eqRow(dragRow, row) ||
8480
8898
  (isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
8481
8899
  (!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))) {
@@ -8495,10 +8913,11 @@ const Methods = {
8495
8913
  const $xeTable = this;
8496
8914
  const props = $xeTable;
8497
8915
  const reactData = $xeTable;
8916
+ const crossTableDragRowInfo = getCrossTableDragRowInfo($xeTable);
8498
8917
  evnt.stopPropagation();
8499
8918
  const { dragConfig } = props;
8500
8919
  const rowDragOpts = $xeTable.computeRowDragOpts;
8501
- const { trigger, dragStartMethod } = rowDragOpts;
8920
+ const { isCrossTableDrag, trigger, dragStartMethod } = rowDragOpts;
8502
8921
  const { row } = params;
8503
8922
  const dragEl = evnt.currentTarget;
8504
8923
  const tdEl = trigger === 'cell' || trigger === 'row' ? dragEl : (_a = dragEl.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
@@ -8509,10 +8928,16 @@ const Methods = {
8509
8928
  trEl.draggable = false;
8510
8929
  reactData.dragRow = null;
8511
8930
  reactData.dragCol = null;
8931
+ clearCrossTableDragStatus($xeTable);
8512
8932
  hideDropTip($xeTable);
8513
8933
  return;
8514
8934
  }
8935
+ if (isCrossTableDrag) {
8936
+ crossTableDragRowInfo.row = row;
8937
+ crossTableDragRowObj = { $oldTable: $xeTable, $newTable: null };
8938
+ }
8515
8939
  reactData.dragRow = row;
8940
+ reactData.isCrossDragRow = false;
8516
8941
  reactData.dragCol = null;
8517
8942
  trEl.draggable = true;
8518
8943
  updateRowDropOrigin($xeTable, row);
@@ -8832,6 +9257,7 @@ const Methods = {
8832
9257
  internalData.prevDragToChild = false;
8833
9258
  reactData.dragRow = null;
8834
9259
  reactData.dragCol = null;
9260
+ clearCrossTableDragStatus($xeTable);
8835
9261
  },
8836
9262
  handleHeaderCellDragDragoverEvent(evnt) {
8837
9263
  const $xeTable = this;
@@ -8916,11 +9342,13 @@ const Methods = {
8916
9342
  reactData.dragRow = null;
8917
9343
  reactData.dragCol = null;
8918
9344
  hideDropTip($xeTable);
9345
+ clearCrossTableDragStatus($xeTable);
8919
9346
  return;
8920
9347
  }
8921
9348
  reactData.dragCol = column;
8922
9349
  reactData.dragRow = null;
8923
9350
  thEl.draggable = true;
9351
+ clearCrossTableDragStatus($xeTable);
8924
9352
  updateColDropOrigin($xeTable, column);
8925
9353
  updateColDropTipContent($xeTable, thEl);
8926
9354
  $xeTable.dispatchEvent('column-dragstart', params, evnt);
@@ -8930,6 +9358,7 @@ const Methods = {
8930
9358
  const reactData = $xeTable;
8931
9359
  clearColDropOrigin($xeTable);
8932
9360
  hideDropTip($xeTable);
9361
+ clearCrossTableDragStatus($xeTable);
8933
9362
  reactData.dragRow = null;
8934
9363
  reactData.dragCol = null;
8935
9364
  },
@@ -10839,6 +11268,10 @@ const Methods = {
10839
11268
  }
10840
11269
  reactData.footerTableData = footData;
10841
11270
  $xeTable.handleUpdateFooterMerge();
11271
+ $xeTable.dispatchEvent('footer-data-change', {
11272
+ visibleColumn: internalData.visibleColumn,
11273
+ footData
11274
+ }, null);
10842
11275
  return $xeTable.$nextTick();
10843
11276
  },
10844
11277
  /**
@@ -10919,45 +11352,101 @@ const Methods = {
10919
11352
  return updateStyle($xeTable);
10920
11353
  });
10921
11354
  },
10922
- setMergeFooterItems(merges) {
11355
+ setMergeHeaderCells(merges) {
11356
+ const $xeTable = this;
11357
+ handleHeaderMerge($xeTable, merges);
11358
+ $xeTable.handleUpdateHeaderMerge();
11359
+ return $xeTable.$nextTick().then(() => {
11360
+ return updateStyle($xeTable);
11361
+ });
11362
+ },
11363
+ /**
11364
+ * 移除表头单元格合并 [{row:Row|number, col:ColumnInfo|number}]
11365
+ */
11366
+ removeMergeHeaderCells(merges) {
11367
+ const $xeTable = this;
11368
+ const rest = removeHeaderMerges($xeTable, merges);
11369
+ $xeTable.handleUpdateHeaderMerge();
11370
+ return $xeTable.$nextTick().then(() => {
11371
+ updateStyle($xeTable);
11372
+ return rest;
11373
+ });
11374
+ },
11375
+ /**
11376
+ * 获取所有被合并的表头单元格
11377
+ */
11378
+ getMergeHeaderCells() {
11379
+ const $xeTable = this;
11380
+ const internalData = $xeTable;
11381
+ return internalData.mergeHeaderList.slice(0);
11382
+ },
11383
+ /**
11384
+ * 清除所有表头单元格合并
11385
+ */
11386
+ clearMergeHeaderCells() {
11387
+ const $xeTable = this;
11388
+ const reactData = $xeTable;
11389
+ const internalData = $xeTable;
11390
+ internalData.mergeHeaderList = [];
11391
+ internalData.mergeHeaderMaps = {};
11392
+ internalData.mergeHeaderCellMaps = {};
11393
+ reactData.mergeHeadFlag++;
11394
+ return $xeTable.$nextTick().then(() => {
11395
+ return updateStyle($xeTable);
11396
+ });
11397
+ },
11398
+ setMergeFooterCells(merges) {
10923
11399
  const $xeTable = this;
10924
11400
  const props = $xeTable;
10925
11401
  if (props.footerSpanMethod) {
10926
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
11402
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
10927
11403
  }
10928
11404
  handleFooterMerge($xeTable, merges);
10929
11405
  $xeTable.handleUpdateFooterMerge();
10930
11406
  return $xeTable.$nextTick().then(() => {
10931
- $xeTable.updateCellAreas();
10932
11407
  return updateStyle($xeTable);
10933
11408
  });
10934
11409
  },
10935
- removeMergeFooterItems(merges) {
11410
+ setMergeFooterItems(merges) {
11411
+ const $xeTable = this;
11412
+ // errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
11413
+ return $xeTable.setMergeFooterCells(merges);
11414
+ },
11415
+ removeMergeFooterCells(merges) {
10936
11416
  const $xeTable = this;
10937
11417
  const props = $xeTable;
10938
11418
  if (props.footerSpanMethod) {
10939
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
11419
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
10940
11420
  }
10941
11421
  const rest = removeFooterMerges($xeTable, merges);
10942
11422
  $xeTable.handleUpdateFooterMerge();
10943
11423
  return $xeTable.$nextTick().then(() => {
10944
- $xeTable.updateCellAreas();
10945
11424
  updateStyle($xeTable);
10946
11425
  return rest;
10947
11426
  });
10948
11427
  },
11428
+ removeMergeFooterItems(merges) {
11429
+ const $xeTable = this;
11430
+ // errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
11431
+ return $xeTable.removeMergeFooterCells(merges);
11432
+ },
10949
11433
  /**
10950
11434
  * 获取所有被合并的表尾
10951
11435
  */
10952
- getMergeFooterItems() {
11436
+ getMergeFooterCells() {
10953
11437
  const $xeTable = this;
10954
11438
  const internalData = $xeTable;
10955
11439
  return internalData.mergeFooterList.slice(0);
10956
11440
  },
11441
+ getMergeFooterItems() {
11442
+ const $xeTable = this;
11443
+ // errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
11444
+ return $xeTable.getMergeFooterCells();
11445
+ },
10957
11446
  /**
10958
11447
  * 清除所有表尾合并
10959
11448
  */
10960
- clearMergeFooterItems() {
11449
+ clearMergeFooterCells() {
10961
11450
  const $xeTable = this;
10962
11451
  const reactData = $xeTable;
10963
11452
  const internalData = $xeTable;
@@ -10969,6 +11458,11 @@ const Methods = {
10969
11458
  return updateStyle($xeTable);
10970
11459
  });
10971
11460
  },
11461
+ clearMergeFooterItems() {
11462
+ const $xeTable = this;
11463
+ // errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
11464
+ return $xeTable.clearMergeFooterCells();
11465
+ },
10972
11466
  handleUpdateAggData() {
10973
11467
  const $xeTable = this;
10974
11468
  const internalData = $xeTable;
@@ -11001,9 +11495,7 @@ const Methods = {
11001
11495
  // 已废弃,使用 dispatchEvent
11002
11496
  emitEvent(type, params, evnt) {
11003
11497
  const $xeTable = this;
11004
- const $xeGrid = $xeTable.$xeGrid;
11005
- const $xeGantt = $xeTable.$xeGantt;
11006
- $xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, $event: evnt }));
11498
+ $xeTable.dispatchEvent(type, params, evnt);
11007
11499
  },
11008
11500
  focus() {
11009
11501
  this.isActivated = true;