vxe-table 3.18.1 → 3.18.3

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/grid/src/grid.js +5 -1
  2. package/es/index.css +1 -1
  3. package/es/index.min.css +1 -1
  4. package/es/style.css +1 -1
  5. package/es/style.min.css +1 -1
  6. package/es/table/module/menu/mixin.js +67 -43
  7. package/es/table/module/menu/panel.js +10 -8
  8. package/es/table/src/body.js +12 -14
  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 +233 -39
  14. package/es/table/src/props.js +23 -6
  15. package/es/table/src/table.js +43 -19
  16. package/es/table/src/util.js +70 -2
  17. package/es/table/style.css +11 -21
  18. package/es/table/style.min.css +1 -1
  19. package/es/ui/index.js +1 -1
  20. package/es/ui/src/log.js +1 -1
  21. package/es/ui/src/vn.js +16 -11
  22. package/es/vxe-table/style.css +11 -21
  23. package/es/vxe-table/style.min.css +1 -1
  24. package/lib/grid/src/grid.js +6 -0
  25. package/lib/grid/src/grid.min.js +1 -1
  26. package/lib/index.css +1 -1
  27. package/lib/index.min.css +1 -1
  28. package/lib/index.umd.js +610 -185
  29. package/lib/index.umd.min.js +1 -1
  30. package/lib/style.css +1 -1
  31. package/lib/style.min.css +1 -1
  32. package/lib/table/module/menu/mixin.js +84 -58
  33. package/lib/table/module/menu/mixin.min.js +1 -1
  34. package/lib/table/module/menu/panel.js +11 -10
  35. package/lib/table/module/menu/panel.min.js +1 -1
  36. package/lib/table/src/body.js +11 -13
  37. package/lib/table/src/body.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 +259 -42
  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/table.js +46 -16
  50. package/lib/table/src/table.min.js +1 -1
  51. package/lib/table/src/util.js +74 -2
  52. package/lib/table/src/util.min.js +1 -1
  53. package/lib/table/style/style.css +11 -21
  54. package/lib/table/style/style.min.css +1 -1
  55. package/lib/ui/index.js +1 -1
  56. package/lib/ui/index.min.js +1 -1
  57. package/lib/ui/src/log.js +1 -1
  58. package/lib/ui/src/log.min.js +1 -1
  59. package/lib/ui/src/vn.js +16 -10
  60. package/lib/ui/src/vn.min.js +1 -1
  61. package/lib/vxe-table/style/style.css +11 -21
  62. package/lib/vxe-table/style/style.min.css +1 -1
  63. package/package.json +1 -1
  64. package/packages/grid/src/grid.ts +5 -1
  65. package/packages/table/module/menu/mixin.ts +79 -50
  66. package/packages/table/module/menu/panel.ts +11 -9
  67. package/packages/table/src/body.ts +11 -13
  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 +245 -40
  73. package/packages/table/src/props.ts +29 -12
  74. package/packages/table/src/table.ts +53 -16
  75. package/packages/table/src/util.ts +76 -2
  76. package/packages/ui/src/vn.ts +16 -11
  77. package/styles/components/table.scss +33 -56
  78. /package/es/{iconfont.1756272539382.ttf → iconfont.1756629700380.ttf} +0 -0
  79. /package/es/{iconfont.1756272539382.woff → iconfont.1756629700380.woff} +0 -0
  80. /package/es/{iconfont.1756272539382.woff2 → iconfont.1756629700380.woff2} +0 -0
  81. /package/lib/{iconfont.1756272539382.ttf → iconfont.1756629700380.ttf} +0 -0
  82. /package/lib/{iconfont.1756272539382.woff → iconfont.1756629700380.woff} +0 -0
  83. /package/lib/{iconfont.1756272539382.woff2 → iconfont.1756629700380.woff2} +0 -0
@@ -1022,7 +1022,7 @@ function updateStyle($xeTable) {
1022
1022
  }
1023
1023
  if (xRightCornerEl) {
1024
1024
  xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
1025
- xRightCornerEl.style.display = scrollbarXToTop ? '' : (overflowX && osbHeight ? 'block' : '');
1025
+ xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '');
1026
1026
  }
1027
1027
  const scrollYVirtualEl = $xeTable.$refs.refScrollYVirtualElem;
1028
1028
  if (scrollYVirtualEl) {
@@ -1033,7 +1033,7 @@ function updateStyle($xeTable) {
1033
1033
  const yTopCornerEl = $xeTable.$refs.refScrollYTopCornerElem;
1034
1034
  if (yTopCornerEl) {
1035
1035
  yTopCornerEl.style.height = `${tHeaderHeight}px`;
1036
- yTopCornerEl.style.display = overflowY && tHeaderHeight ? 'block' : '';
1036
+ yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1037
1037
  }
1038
1038
  const yWrapperEl = $xeTable.$refs.refScrollYWrapperElem;
1039
1039
  if (yWrapperEl) {
@@ -1044,7 +1044,7 @@ function updateStyle($xeTable) {
1044
1044
  if (yBottomCornerEl) {
1045
1045
  yBottomCornerEl.style.height = `${tFooterHeight}px`;
1046
1046
  yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
1047
- yBottomCornerEl.style.display = overflowY && tFooterHeight ? 'block' : '';
1047
+ yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
1048
1048
  }
1049
1049
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
1050
1050
  if (rowExpandEl) {
@@ -1934,11 +1934,59 @@ function handleBodyMerge($xeTable, merges) {
1934
1934
  });
1935
1935
  }
1936
1936
  }
1937
- 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) {
1938
1986
  const reactData = $xeTable;
1939
1987
  const internalData = $xeTable;
1940
1988
  const { footerTableData } = reactData;
1941
- const { mergeFooterList, mergeFooterMaps, fullColumnIdData } = internalData;
1989
+ const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData;
1942
1990
  if (merges) {
1943
1991
  const { visibleColumn } = internalData;
1944
1992
  if (!XEUtils.isArray(merges)) {
@@ -1964,7 +2012,7 @@ function handleFooterMerge($xeTable, merges) {
1964
2012
  if (rowspan > 1 || colspan > 1) {
1965
2013
  const row = footerTableData[mergeRowIndex];
1966
2014
  const column = visibleColumn[mergeColumnIndex];
1967
- let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2015
+ let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
1968
2016
  if (mergeItem) {
1969
2017
  mergeItem.rowspan = rowspan;
1970
2018
  mergeItem.colspan = colspan;
@@ -1982,37 +2030,26 @@ function handleFooterMerge($xeTable, merges) {
1982
2030
  _rowspan: rowspan,
1983
2031
  _colspan: colspan
1984
2032
  };
1985
- mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
1986
- mergeFooterList.push(mergeItem);
2033
+ mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
2034
+ mergeHeaderList.push(mergeItem);
1987
2035
  }
1988
2036
  }
1989
2037
  }
1990
2038
  });
1991
2039
  }
1992
2040
  }
1993
- function removeBodyMerges($xeTable, merges) {
2041
+ function removeHeaderMerges($xeTable, merges) {
1994
2042
  const internalData = $xeTable;
1995
- const { mergeBodyList, fullColumnIdData, fullAllDataRowIdData, mergeBodyMaps } = internalData;
2043
+ const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData;
1996
2044
  const rest = [];
1997
2045
  if (merges) {
1998
- const { handleGetRowId } = createHandleGetRowId($xeTable);
1999
2046
  if (!XEUtils.isArray(merges)) {
2000
2047
  merges = [merges];
2001
2048
  }
2002
2049
  merges.forEach((item) => {
2003
2050
  const { row: margeRow, col: margeCol } = item;
2004
- let mergeRowIndex = -1;
2051
+ const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
2005
2052
  let mergeColumnIndex = -1;
2006
- if (XEUtils.isNumber(margeRow)) {
2007
- mergeRowIndex = margeRow;
2008
- }
2009
- else {
2010
- const rowid = margeRow ? handleGetRowId(margeRow) : null;
2011
- const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
2012
- if (rowRest) {
2013
- mergeRowIndex = rowRest._index;
2014
- }
2015
- }
2016
2053
  if (XEUtils.isNumber(margeCol)) {
2017
2054
  mergeColumnIndex = margeCol;
2018
2055
  }
@@ -2023,14 +2060,14 @@ function removeBodyMerges($xeTable, merges) {
2023
2060
  mergeColumnIndex = colRest._index;
2024
2061
  }
2025
2062
  }
2026
- 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);
2027
2064
  if (mcIndex > -1) {
2028
- const rItems = mergeBodyList.splice(mcIndex, 1);
2065
+ const rItems = mergeHeaderList.splice(mcIndex, 1);
2029
2066
  const item = rItems[0];
2030
2067
  if (item) {
2031
- rest.push(rItems[0]);
2032
- if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2033
- delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2068
+ rest.push(item);
2069
+ if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
2070
+ delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
2034
2071
  }
2035
2072
  }
2036
2073
  }
@@ -2038,6 +2075,62 @@ function removeBodyMerges($xeTable, merges) {
2038
2075
  }
2039
2076
  return rest;
2040
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
+ }
2041
2134
  function removeFooterMerges($xeTable, merges) {
2042
2135
  const internalData = $xeTable;
2043
2136
  const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData;
@@ -2148,8 +2241,23 @@ function clearAllSort($xeTable) {
2148
2241
  function calcTableHeight($xeTable, key) {
2149
2242
  const props = $xeTable;
2150
2243
  const reactData = $xeTable;
2244
+ const { editConfig } = props;
2151
2245
  const { parentHeight } = reactData;
2152
- 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
+ }
2153
2261
  let num = 0;
2154
2262
  if (val) {
2155
2263
  if (val === '100%' || val === 'auto') {
@@ -2648,11 +2756,19 @@ function handleDefaultMergeCells($xeTable) {
2648
2756
  $xeTable.setMergeCells(mergeCells);
2649
2757
  }
2650
2758
  }
2759
+ function handleDefaultMergeHeaderItems($xeTable) {
2760
+ const props = $xeTable;
2761
+ const { mergeHeaderCells } = props;
2762
+ if (mergeHeaderCells) {
2763
+ $xeTable.setMergeHeaderCells(mergeHeaderCells);
2764
+ }
2765
+ }
2651
2766
  function handleDefaultMergeFooterItems($xeTable) {
2652
2767
  const props = $xeTable;
2653
- const { mergeFooterItems } = props;
2654
- if (mergeFooterItems) {
2655
- $xeTable.setMergeFooterItems(mergeFooterItems);
2768
+ const { mergeFooterCells, mergeFooterItems } = props;
2769
+ const mFooterCells = mergeFooterCells || mergeFooterItems;
2770
+ if (mFooterCells) {
2771
+ $xeTable.setMergeFooterCells(mFooterCells);
2656
2772
  }
2657
2773
  }
2658
2774
  // 计算可视渲染相关数据
@@ -3105,6 +3221,10 @@ function loadTableData($xeTable, datas, isReset) {
3105
3221
  }
3106
3222
  handleReserveStatus($xeTable);
3107
3223
  $xeTable.checkSelectionStatus();
3224
+ $xeTable.dispatchEvent('data-change', {
3225
+ visibleColumn: internalData.visibleColumn,
3226
+ visibleData: internalData.afterFullData
3227
+ }, null);
3108
3228
  return new Promise(resolve => {
3109
3229
  $xeTable.$nextTick()
3110
3230
  .then(() => handleRecalculateStyle($xeTable, false, false, false))
@@ -3167,6 +3287,7 @@ function handleLoadDefaults($xeTable) {
3167
3287
  handleDefaultTreeExpand($xeTable);
3168
3288
  handleDefaultRowGroupExpand($xeTable);
3169
3289
  handleDefaultMergeCells($xeTable);
3290
+ handleDefaultMergeHeaderItems($xeTable);
3170
3291
  handleDefaultMergeFooterItems($xeTable);
3171
3292
  $xeTable.$nextTick(() => setTimeout(() => $xeTable.recalculate()));
3172
3293
  }
@@ -6677,6 +6798,14 @@ const Methods = {
6677
6798
  internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
6678
6799
  reactData.mergeBodyFlag++;
6679
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
+ },
6680
6809
  handleUpdateFooterMerge() {
6681
6810
  const $xeTable = this;
6682
6811
  const reactData = $xeTable;
@@ -11139,6 +11268,10 @@ const Methods = {
11139
11268
  }
11140
11269
  reactData.footerTableData = footData;
11141
11270
  $xeTable.handleUpdateFooterMerge();
11271
+ $xeTable.dispatchEvent('footer-data-change', {
11272
+ visibleColumn: internalData.visibleColumn,
11273
+ footData
11274
+ }, null);
11142
11275
  return $xeTable.$nextTick();
11143
11276
  },
11144
11277
  /**
@@ -11219,45 +11352,101 @@ const Methods = {
11219
11352
  return updateStyle($xeTable);
11220
11353
  });
11221
11354
  },
11222
- 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) {
11223
11399
  const $xeTable = this;
11224
11400
  const props = $xeTable;
11225
11401
  if (props.footerSpanMethod) {
11226
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
11402
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
11227
11403
  }
11228
11404
  handleFooterMerge($xeTable, merges);
11229
11405
  $xeTable.handleUpdateFooterMerge();
11230
11406
  return $xeTable.$nextTick().then(() => {
11231
- $xeTable.updateCellAreas();
11232
11407
  return updateStyle($xeTable);
11233
11408
  });
11234
11409
  },
11235
- 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) {
11236
11416
  const $xeTable = this;
11237
11417
  const props = $xeTable;
11238
11418
  if (props.footerSpanMethod) {
11239
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
11419
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
11240
11420
  }
11241
11421
  const rest = removeFooterMerges($xeTable, merges);
11242
11422
  $xeTable.handleUpdateFooterMerge();
11243
11423
  return $xeTable.$nextTick().then(() => {
11244
- $xeTable.updateCellAreas();
11245
11424
  updateStyle($xeTable);
11246
11425
  return rest;
11247
11426
  });
11248
11427
  },
11428
+ removeMergeFooterItems(merges) {
11429
+ const $xeTable = this;
11430
+ // errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
11431
+ return $xeTable.removeMergeFooterCells(merges);
11432
+ },
11249
11433
  /**
11250
11434
  * 获取所有被合并的表尾
11251
11435
  */
11252
- getMergeFooterItems() {
11436
+ getMergeFooterCells() {
11253
11437
  const $xeTable = this;
11254
11438
  const internalData = $xeTable;
11255
11439
  return internalData.mergeFooterList.slice(0);
11256
11440
  },
11441
+ getMergeFooterItems() {
11442
+ const $xeTable = this;
11443
+ // errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
11444
+ return $xeTable.getMergeFooterCells();
11445
+ },
11257
11446
  /**
11258
11447
  * 清除所有表尾合并
11259
11448
  */
11260
- clearMergeFooterItems() {
11449
+ clearMergeFooterCells() {
11261
11450
  const $xeTable = this;
11262
11451
  const reactData = $xeTable;
11263
11452
  const internalData = $xeTable;
@@ -11269,6 +11458,11 @@ const Methods = {
11269
11458
  return updateStyle($xeTable);
11270
11459
  });
11271
11460
  },
11461
+ clearMergeFooterItems() {
11462
+ const $xeTable = this;
11463
+ // errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
11464
+ return $xeTable.clearMergeFooterCells();
11465
+ },
11272
11466
  handleUpdateAggData() {
11273
11467
  const $xeTable = this;
11274
11468
  const internalData = $xeTable;
@@ -10,7 +10,7 @@ export const tableProps = {
10
10
  // 表格的最小高度
11
11
  minHeight: {
12
12
  type: [Number, String],
13
- default: () => getConfig().table.minHeight
13
+ default: () => null
14
14
  },
15
15
  // 表格的最大高度
16
16
  maxHeight: [Number, String],
@@ -129,20 +129,37 @@ export const tableProps = {
129
129
  headerRowStyle: [Object, Function],
130
130
  // 给表尾行附加样式
131
131
  footerRowStyle: [Object, Function],
132
- // 合并指定单元格
132
+ // 用于分组表头,显示为自定义列头,配合 mergeHeaderCells 灵活实现自定义合并
133
+ showCustomHeader: {
134
+ type: Boolean,
135
+ default: () => getConfig().table.showCustomHeader
136
+ },
137
+ // 临时合并指定的表头单元格
138
+ mergeHeaderCells: Array,
139
+ // 临时合并指定的单元格
133
140
  mergeCells: Array,
134
- // 合并指定的表尾
141
+ // 临时合并指定的表尾单元格
142
+ mergeFooterCells: Array,
135
143
  mergeFooterItems: Array,
136
144
  // 自定义合并行或列的方法
137
145
  spanMethod: Function,
138
146
  // 表尾合并行或列
139
147
  footerSpanMethod: Function,
140
148
  // 设置所有内容过长时显示为省略号
141
- showOverflow: { type: [Boolean, String], default: () => getConfig().table.showOverflow },
149
+ showOverflow: {
150
+ type: [Boolean, String],
151
+ default: () => getConfig().table.showOverflow
152
+ },
142
153
  // 设置表头所有内容过长时显示为省略号
143
- showHeaderOverflow: { type: [Boolean, String], default: () => getConfig().table.showHeaderOverflow },
154
+ showHeaderOverflow: {
155
+ type: [Boolean, String],
156
+ default: () => getConfig().table.showHeaderOverflow
157
+ },
144
158
  // 设置表尾所有内容过长时显示为省略号
145
- showFooterOverflow: { type: [Boolean, String], default: () => getConfig().table.showFooterOverflow },
159
+ showFooterOverflow: {
160
+ type: [Boolean, String],
161
+ default: () => getConfig().table.showFooterOverflow
162
+ },
146
163
  /** 高级属性 */
147
164
  /**
148
165
  * (即将废弃)columnKey 已废弃,被 column-config.useKey 替换
@@ -31,12 +31,19 @@ function handleUpdateMergeBodyCells($xeTable, merges) {
31
31
  internalData.mergeBodyCellMaps = {};
32
32
  $xeTable.setMergeCells(merges);
33
33
  }
34
+ function handleUpdateMergeHeaderCells($xeTable, merges) {
35
+ const internalData = $xeTable;
36
+ internalData.mergeHeaderList = [];
37
+ internalData.mergeHeaderMaps = {};
38
+ internalData.mergeHeaderCellMaps = {};
39
+ $xeTable.setMergeHeaderCells(merges);
40
+ }
34
41
  function handleUpdateMergeFooterCells($xeTable, merges) {
35
42
  const internalData = $xeTable;
36
43
  internalData.mergeFooterList = [];
37
44
  internalData.mergeFooterMaps = {};
38
45
  internalData.mergeFooterCellMaps = {};
39
- $xeTable.setMergeFooterItems(merges);
46
+ $xeTable.setMergeFooterCells(merges);
40
47
  }
41
48
  function handleKeyField($xeTable) {
42
49
  const internalData = $xeTable;
@@ -331,7 +338,10 @@ function renderScrollX(h, $xeTable) {
331
338
  ref: 'refScrollXSpaceElem',
332
339
  class: 'vxe-table--scroll-x-space'
333
340
  })
334
- ])
341
+ ]),
342
+ h('div', {
343
+ class: 'vxe-table--scroll-x-handle-appearance'
344
+ })
335
345
  ]),
336
346
  h('div', {
337
347
  ref: 'refScrollXRightCornerElem',
@@ -475,9 +485,7 @@ export default {
475
485
  },
476
486
  data() {
477
487
  const xID = XEUtils.uniqueId();
478
- return {
479
- xID,
480
- tId: xID,
488
+ const reactData = {
481
489
  // 低性能的静态列
482
490
  staticColumns: [],
483
491
  // 渲染的列分组
@@ -498,6 +506,8 @@ export default {
498
506
  scrollbarWidth: 0,
499
507
  // 横向滚动条的高度
500
508
  scrollbarHeight: 0,
509
+ // 最后滚动时间戳
510
+ lastScrollTime: 0,
501
511
  // 行高
502
512
  rowHeight: 0,
503
513
  // 表格父容器的高度
@@ -523,9 +533,13 @@ export default {
523
533
  expandColumn: null,
524
534
  checkboxColumn: null,
525
535
  radioColumn: null,
526
- hasFixedColumn: false,
527
536
  // 树节点列信息
528
537
  treeNodeColumn: null,
538
+ hasFixedColumn: false,
539
+ // 刷新列标识,当列筛选被改变时,触发表格刷新数据
540
+ upDataFlag: 0,
541
+ // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
542
+ reColumnFlag: 0,
529
543
  // 初始化标识
530
544
  initStore: {
531
545
  filter: false,
@@ -533,11 +547,6 @@ export default {
533
547
  export: false,
534
548
  custom: false
535
549
  },
536
- customColumnList: [],
537
- // 刷新列标识,当列筛选被改变时,触发表格刷新数据
538
- upDataFlag: 0,
539
- // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
540
- reColumnFlag: 0,
541
550
  // 自定义列相关的信息
542
551
  customStore: {
543
552
  btnEl: null,
@@ -551,6 +560,7 @@ export default {
551
560
  oldFixedMaps: {},
552
561
  oldVisibleMaps: {}
553
562
  },
563
+ customColumnList: [],
554
564
  // 当前选中的筛选列
555
565
  filterStore: {
556
566
  isAllSelected: false,
@@ -619,6 +629,7 @@ export default {
619
629
  tooltipStore: {
620
630
  row: null,
621
631
  column: null,
632
+ content: null,
622
633
  visible: false,
623
634
  currOpts: {}
624
635
  },
@@ -651,8 +662,8 @@ export default {
651
662
  columns: [],
652
663
  isPrint: false,
653
664
  hasFooter: false,
654
- hasTree: false,
655
665
  hasMerge: false,
666
+ hasTree: false,
656
667
  hasColgroup: false,
657
668
  visible: false
658
669
  },
@@ -683,6 +694,7 @@ export default {
683
694
  pendingRowFlag: 1,
684
695
  insertRowFlag: 1,
685
696
  removeRowFlag: 1,
697
+ mergeHeadFlag: 1,
686
698
  mergeBodyFlag: 1,
687
699
  mergeFootFlag: 1,
688
700
  rowHeightStore: {
@@ -699,6 +711,7 @@ export default {
699
711
  scrollXLeft: 0,
700
712
  scrollXWidth: 0,
701
713
  isScrollXBig: false,
714
+ lazScrollLoading: false,
702
715
  rowExpandHeightFlag: 1,
703
716
  calcCellHeightFlag: 1,
704
717
  resizeHeightFlag: 1,
@@ -711,12 +724,11 @@ export default {
711
724
  dragTipText: '',
712
725
  isDragResize: false,
713
726
  isRowLoading: false,
714
- isColLoading: false,
715
- reScrollFlag: 0,
716
- reLayoutFlag: 0,
717
- footFlag: 0,
718
- crossTableDragRowInfo: crossTableDragRowGlobal
727
+ isColLoading: false
719
728
  };
729
+ return Object.assign(Object.assign({ xID }, reactData), {
730
+ // 私有属性
731
+ reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
720
732
  },
721
733
  computed: Object.assign(Object.assign({}, {}), { tableId() {
722
734
  return this.computeTableId;
@@ -1395,9 +1407,21 @@ export default {
1395
1407
  const $xeTable = this;
1396
1408
  handleUpdateMergeBodyCells($xeTable, value);
1397
1409
  },
1398
- mergeFooterItems(value) {
1410
+ mergeHeaderCells(value) {
1411
+ const $xeTable = this;
1412
+ handleUpdateMergeHeaderCells($xeTable, value);
1413
+ },
1414
+ mergeFooterCells() {
1415
+ this.mergeFooteCellFlag++;
1416
+ },
1417
+ mergeFooterItems() {
1418
+ this.mergeFooteCellFlag++;
1419
+ },
1420
+ mergeFooteCellFlag() {
1399
1421
  const $xeTable = this;
1400
- handleUpdateMergeFooterCells($xeTable, value);
1422
+ const props = $xeTable;
1423
+ const mFooterCells = props.mergeFooterCells || props.mergeFooterItems;
1424
+ handleUpdateMergeFooterCells($xeTable, mFooterCells || []);
1401
1425
  },
1402
1426
  computeRowGroupFields(val) {
1403
1427
  const $xeTable = this;