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
package/lib/index.umd.js CHANGED
@@ -2002,7 +2002,7 @@ function getClass(property, params) {
2002
2002
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
2003
2003
 
2004
2004
 
2005
- const version = "3.18.1";
2005
+ const version = "3.18.3";
2006
2006
  core_.VxeUI.version = version;
2007
2007
  core_.VxeUI.tableVersion = version;
2008
2008
  core_.VxeUI.setConfig({
@@ -2678,7 +2678,7 @@ function isNodeElement(elem) {
2678
2678
  const {
2679
2679
  log: log_log
2680
2680
  } = core_.VxeUI;
2681
- const log_version = `table v${"3.18.1"}`;
2681
+ const log_version = `table v${"3.18.3"}`;
2682
2682
  const warnLog = log_log.create('warn', log_version);
2683
2683
  const errLog = log_log.create('error', log_version);
2684
2684
  ;// CONCATENATED MODULE: ./packages/table/src/columnInfo.ts
@@ -2781,6 +2781,7 @@ class ColumnInfo {
2781
2781
  headerClassName: _vm.headerClassName,
2782
2782
  footerClassName: _vm.footerClassName,
2783
2783
  formatter,
2784
+ headerFormatter: _vm.headerFormatter,
2784
2785
  footerFormatter: _vm.footerFormatter,
2785
2786
  padding: _vm.padding,
2786
2787
  verticalAlign: _vm.verticalAlign,
@@ -2971,14 +2972,19 @@ function createInternalData() {
2971
2972
  sourceDataRowIdData: {},
2972
2973
  fullColumnIdData: {},
2973
2974
  fullColumnFieldData: {},
2975
+ // 合并表头单元格的数据
2976
+ mergeHeaderList: [],
2977
+ mergeHeaderMaps: {},
2978
+ // 已合并单元格数据集合
2979
+ mergeHeaderCellMaps: {},
2974
2980
  // 合并单元格的数据
2975
2981
  mergeBodyList: [],
2976
2982
  mergeBodyMaps: {},
2983
+ // 已合并单元格数据集合
2984
+ mergeBodyCellMaps: {},
2977
2985
  // 合并表尾的数据
2978
2986
  mergeFooterList: [],
2979
2987
  mergeFooterMaps: {},
2980
- // 已合并单元格数据集合
2981
- mergeBodyCellMaps: {},
2982
2988
  // 已合并表尾数据集合
2983
2989
  mergeFooterCellMaps: {},
2984
2990
  // 已展开的行集合
@@ -3069,6 +3075,72 @@ const convertHeaderColumnToRows = originColumns => {
3069
3075
  });
3070
3076
  return rows;
3071
3077
  };
3078
+ function convertHeaderToGridRows(spanColumns) {
3079
+ const rSize = spanColumns.length;
3080
+ const cSize = spanColumns[0].reduce((sum, cell) => sum + cell.colSpan, 0);
3081
+ const occupiedRows = [];
3082
+ const fullRows = [];
3083
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
3084
+ const oCols = [];
3085
+ const dCols = [];
3086
+ for (let cIndex = 0; cIndex < cSize; cIndex++) {
3087
+ oCols.push(false);
3088
+ dCols.push('');
3089
+ }
3090
+ occupiedRows.push(oCols);
3091
+ fullRows.push(dCols);
3092
+ }
3093
+ for (let rIndex = 0; rIndex < rSize; rIndex++) {
3094
+ let currColIndex = 0;
3095
+ for (const column of spanColumns[rIndex]) {
3096
+ const {
3097
+ colSpan,
3098
+ rowSpan
3099
+ } = column;
3100
+ let startColIndex = -1;
3101
+ for (let ccIndex = currColIndex; ccIndex <= cSize - colSpan; ccIndex++) {
3102
+ let oFlag = true;
3103
+ for (let csIndex = 0; csIndex < colSpan; csIndex++) {
3104
+ if (occupiedRows[rIndex][ccIndex + csIndex]) {
3105
+ oFlag = false;
3106
+ break;
3107
+ }
3108
+ }
3109
+ if (oFlag) {
3110
+ startColIndex = ccIndex;
3111
+ break;
3112
+ }
3113
+ }
3114
+ if (startColIndex === -1) {
3115
+ for (let j = 0; j <= cSize - colSpan; j++) {
3116
+ let oFlag = true;
3117
+ for (let k = 0; k < colSpan; k++) {
3118
+ if (occupiedRows[rIndex][j + k]) {
3119
+ oFlag = false;
3120
+ break;
3121
+ }
3122
+ }
3123
+ if (oFlag) {
3124
+ startColIndex = j;
3125
+ break;
3126
+ }
3127
+ }
3128
+ if (startColIndex === -1) {
3129
+ // error
3130
+ break;
3131
+ }
3132
+ }
3133
+ for (let srIndex = rIndex; srIndex < rIndex + rowSpan; srIndex++) {
3134
+ for (let scIndex = startColIndex; scIndex < startColIndex + colSpan; scIndex++) {
3135
+ occupiedRows[srIndex][scIndex] = true;
3136
+ fullRows[srIndex][scIndex] = column;
3137
+ }
3138
+ }
3139
+ currColIndex = startColIndex + colSpan;
3140
+ }
3141
+ }
3142
+ return fullRows;
3143
+ }
3072
3144
  function restoreScrollLocation($xeTable, scrollLeft, scrollTop) {
3073
3145
  const internalData = $xeTable;
3074
3146
  if (scrollLeft || scrollTop) {
@@ -3615,25 +3687,31 @@ function colToVisible($xeTable, column, row) {
3615
3687
  function getOnName(type) {
3616
3688
  return external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().kebabCase(type);
3617
3689
  }
3618
- function getModelEvent(renderOpts) {
3619
- switch (renderOpts.name) {
3620
- case 'input':
3621
- case 'textarea':
3622
- return 'input';
3690
+ function getModelEvent(name) {
3691
+ switch (name) {
3692
+ case 'VxeInput':
3693
+ case 'VxeTextarea':
3694
+ case 'VxeNumberInput':
3695
+ case 'VxeSelect':
3696
+ case 'VxeTreeSelect':
3697
+ case 'VxeTableSelect':
3698
+ case 'VxeDatePicker':
3699
+ case 'VxeDateRangePicker':
3700
+ return 'modelValue';
3623
3701
  case 'select':
3624
3702
  return 'change';
3625
3703
  }
3626
- return 'modelValue';
3704
+ return 'input';
3627
3705
  }
3628
- function getChangeEvent(renderOpts) {
3629
- switch (renderOpts.name) {
3706
+ function getChangeEvent(name) {
3707
+ switch (name) {
3630
3708
  case 'input':
3631
3709
  case 'textarea':
3632
3710
  case 'VxeInput':
3633
- case 'VxeNumberInput':
3634
3711
  case 'VxeTextarea':
3635
- case '$input':
3712
+ case '$input': // 已废弃
3636
3713
  case '$textarea':
3714
+ // 已废弃
3637
3715
  return 'input';
3638
3716
  }
3639
3717
  return 'change';
@@ -5163,6 +5241,8 @@ const columnProps = {
5163
5241
  footerClassName: [String, Function],
5164
5242
  // 格式化显示内容
5165
5243
  formatter: [Function, Array, String],
5244
+ // 格式化表头显示内容
5245
+ headerFormatter: [Function, Array, String],
5166
5246
  // 格式化表尾显示内容
5167
5247
  footerFormatter: [Function, Array, String],
5168
5248
  // 是否显示间距
@@ -5392,7 +5472,7 @@ const tableProps = {
5392
5472
  // 表格的最小高度
5393
5473
  minHeight: {
5394
5474
  type: [Number, String],
5395
- default: () => props_getConfig().table.minHeight
5475
+ default: () => null
5396
5476
  },
5397
5477
  // 表格的最大高度
5398
5478
  maxHeight: [Number, String],
@@ -5511,9 +5591,17 @@ const tableProps = {
5511
5591
  headerRowStyle: [Object, Function],
5512
5592
  // 给表尾行附加样式
5513
5593
  footerRowStyle: [Object, Function],
5514
- // 合并指定单元格
5594
+ // 用于分组表头,显示为自定义列头,配合 mergeHeaderCells 灵活实现自定义合并
5595
+ showCustomHeader: {
5596
+ type: Boolean,
5597
+ default: () => props_getConfig().table.showCustomHeader
5598
+ },
5599
+ // 临时合并指定的表头单元格
5600
+ mergeHeaderCells: Array,
5601
+ // 临时合并指定的单元格
5515
5602
  mergeCells: Array,
5516
- // 合并指定的表尾
5603
+ // 临时合并指定的表尾单元格
5604
+ mergeFooterCells: Array,
5517
5605
  mergeFooterItems: Array,
5518
5606
  // 自定义合并行或列的方法
5519
5607
  spanMethod: Function,
@@ -7070,7 +7158,7 @@ function updateStyle($xeTable) {
7070
7158
  }
7071
7159
  if (xRightCornerEl) {
7072
7160
  xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
7073
- xRightCornerEl.style.display = scrollbarXToTop ? '' : overflowX && osbHeight ? 'block' : '';
7161
+ xRightCornerEl.style.display = scrollbarXToTop ? '' : xScrollbarVisible === 'visible' ? 'block' : '';
7074
7162
  }
7075
7163
  const scrollYVirtualEl = $xeTable.$refs.refScrollYVirtualElem;
7076
7164
  if (scrollYVirtualEl) {
@@ -7081,7 +7169,7 @@ function updateStyle($xeTable) {
7081
7169
  const yTopCornerEl = $xeTable.$refs.refScrollYTopCornerElem;
7082
7170
  if (yTopCornerEl) {
7083
7171
  yTopCornerEl.style.height = `${tHeaderHeight}px`;
7084
- yTopCornerEl.style.display = overflowY && tHeaderHeight ? 'block' : '';
7172
+ yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
7085
7173
  }
7086
7174
  const yWrapperEl = $xeTable.$refs.refScrollYWrapperElem;
7087
7175
  if (yWrapperEl) {
@@ -7092,7 +7180,7 @@ function updateStyle($xeTable) {
7092
7180
  if (yBottomCornerEl) {
7093
7181
  yBottomCornerEl.style.height = `${tFooterHeight}px`;
7094
7182
  yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
7095
- yBottomCornerEl.style.display = overflowY && tFooterHeight ? 'block' : '';
7183
+ yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
7096
7184
  }
7097
7185
  const rowExpandEl = $xeTable.$refs.refRowExpandElem;
7098
7186
  if (rowExpandEl) {
@@ -8120,15 +8208,71 @@ function handleBodyMerge($xeTable, merges) {
8120
8208
  });
8121
8209
  }
8122
8210
  }
8123
- function handleFooterMerge($xeTable, merges) {
8211
+ function removeBodyMerges($xeTable, merges) {
8212
+ const internalData = $xeTable;
8213
+ const {
8214
+ mergeBodyList,
8215
+ fullColumnIdData,
8216
+ fullAllDataRowIdData,
8217
+ mergeBodyMaps
8218
+ } = internalData;
8219
+ const rest = [];
8220
+ if (merges) {
8221
+ const {
8222
+ handleGetRowId
8223
+ } = createHandleGetRowId($xeTable);
8224
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(merges)) {
8225
+ merges = [merges];
8226
+ }
8227
+ merges.forEach(item => {
8228
+ const {
8229
+ row: margeRow,
8230
+ col: margeCol
8231
+ } = item;
8232
+ let mergeRowIndex = -1;
8233
+ let mergeColumnIndex = -1;
8234
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeRow)) {
8235
+ mergeRowIndex = margeRow;
8236
+ } else {
8237
+ const rowid = margeRow ? handleGetRowId(margeRow) : null;
8238
+ const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
8239
+ if (rowRest) {
8240
+ mergeRowIndex = rowRest._index;
8241
+ }
8242
+ }
8243
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeCol)) {
8244
+ mergeColumnIndex = margeCol;
8245
+ } else {
8246
+ const colid = margeCol ? margeCol.id : null;
8247
+ const colRest = colid ? fullColumnIdData[colid] : null;
8248
+ if (colRest) {
8249
+ mergeColumnIndex = colRest._index;
8250
+ }
8251
+ }
8252
+ const mcIndex = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
8253
+ if (mcIndex > -1) {
8254
+ const rItems = mergeBodyList.splice(mcIndex, 1);
8255
+ const item = rItems[0];
8256
+ if (item) {
8257
+ rest.push(rItems[0]);
8258
+ if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
8259
+ delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8260
+ }
8261
+ }
8262
+ }
8263
+ });
8264
+ }
8265
+ return rest;
8266
+ }
8267
+ function handleHeaderMerge($xeTable, merges) {
8124
8268
  const reactData = $xeTable;
8125
8269
  const internalData = $xeTable;
8126
8270
  const {
8127
8271
  footerTableData
8128
8272
  } = reactData;
8129
8273
  const {
8130
- mergeFooterList,
8131
- mergeFooterMaps,
8274
+ mergeHeaderList,
8275
+ mergeHeaderMaps,
8132
8276
  fullColumnIdData
8133
8277
  } = internalData;
8134
8278
  if (merges) {
@@ -8162,7 +8306,7 @@ function handleFooterMerge($xeTable, merges) {
8162
8306
  if (rowspan > 1 || colspan > 1) {
8163
8307
  const row = footerTableData[mergeRowIndex];
8164
8308
  const column = visibleColumn[mergeColumnIndex];
8165
- let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8309
+ let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8166
8310
  if (mergeItem) {
8167
8311
  mergeItem.rowspan = rowspan;
8168
8312
  mergeItem.colspan = colspan;
@@ -8179,27 +8323,23 @@ function handleFooterMerge($xeTable, merges) {
8179
8323
  _rowspan: rowspan,
8180
8324
  _colspan: colspan
8181
8325
  };
8182
- mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
8183
- mergeFooterList.push(mergeItem);
8326
+ mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
8327
+ mergeHeaderList.push(mergeItem);
8184
8328
  }
8185
8329
  }
8186
8330
  }
8187
8331
  });
8188
8332
  }
8189
8333
  }
8190
- function removeBodyMerges($xeTable, merges) {
8334
+ function removeHeaderMerges($xeTable, merges) {
8191
8335
  const internalData = $xeTable;
8192
8336
  const {
8193
- mergeBodyList,
8337
+ mergeHeaderList,
8194
8338
  fullColumnIdData,
8195
- fullAllDataRowIdData,
8196
- mergeBodyMaps
8339
+ mergeHeaderMaps
8197
8340
  } = internalData;
8198
8341
  const rest = [];
8199
8342
  if (merges) {
8200
- const {
8201
- handleGetRowId
8202
- } = createHandleGetRowId($xeTable);
8203
8343
  if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(merges)) {
8204
8344
  merges = [merges];
8205
8345
  }
@@ -8208,17 +8348,8 @@ function removeBodyMerges($xeTable, merges) {
8208
8348
  row: margeRow,
8209
8349
  col: margeCol
8210
8350
  } = item;
8211
- let mergeRowIndex = -1;
8351
+ const mergeRowIndex = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeRow) ? margeRow : -1;
8212
8352
  let mergeColumnIndex = -1;
8213
- if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeRow)) {
8214
- mergeRowIndex = margeRow;
8215
- } else {
8216
- const rowid = margeRow ? handleGetRowId(margeRow) : null;
8217
- const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
8218
- if (rowRest) {
8219
- mergeRowIndex = rowRest._index;
8220
- }
8221
- }
8222
8353
  if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeCol)) {
8223
8354
  mergeColumnIndex = margeCol;
8224
8355
  } else {
@@ -8228,14 +8359,14 @@ function removeBodyMerges($xeTable, merges) {
8228
8359
  mergeColumnIndex = colRest._index;
8229
8360
  }
8230
8361
  }
8231
- const mcIndex = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
8362
+ const mcIndex = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
8232
8363
  if (mcIndex > -1) {
8233
- const rItems = mergeBodyList.splice(mcIndex, 1);
8364
+ const rItems = mergeHeaderList.splice(mcIndex, 1);
8234
8365
  const item = rItems[0];
8235
8366
  if (item) {
8236
- rest.push(rItems[0]);
8237
- if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
8238
- delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8367
+ rest.push(item);
8368
+ if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
8369
+ delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8239
8370
  }
8240
8371
  }
8241
8372
  }
@@ -8243,6 +8374,73 @@ function removeBodyMerges($xeTable, merges) {
8243
8374
  }
8244
8375
  return rest;
8245
8376
  }
8377
+ function handleFooterMerge($xeTable, merges) {
8378
+ const reactData = $xeTable;
8379
+ const internalData = $xeTable;
8380
+ const {
8381
+ footerTableData
8382
+ } = reactData;
8383
+ const {
8384
+ mergeFooterList,
8385
+ mergeFooterMaps,
8386
+ fullColumnIdData
8387
+ } = internalData;
8388
+ if (merges) {
8389
+ const {
8390
+ visibleColumn
8391
+ } = internalData;
8392
+ if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(merges)) {
8393
+ merges = [merges];
8394
+ }
8395
+ merges.forEach(item => {
8396
+ let {
8397
+ row: margeRow,
8398
+ col: margeCol,
8399
+ rowspan,
8400
+ colspan
8401
+ } = item;
8402
+ const mergeRowIndex = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeRow) ? margeRow : -1;
8403
+ let mergeColumnIndex = -1;
8404
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(margeCol)) {
8405
+ mergeColumnIndex = margeCol;
8406
+ } else {
8407
+ const colid = margeCol ? margeCol.id : null;
8408
+ const colRest = colid ? fullColumnIdData[colid] : null;
8409
+ if (colRest) {
8410
+ mergeColumnIndex = colRest._index;
8411
+ }
8412
+ }
8413
+ if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
8414
+ rowspan = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(rowspan) || 1;
8415
+ colspan = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(colspan) || 1;
8416
+ if (rowspan > 1 || colspan > 1) {
8417
+ const row = footerTableData[mergeRowIndex];
8418
+ const column = visibleColumn[mergeColumnIndex];
8419
+ let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
8420
+ if (mergeItem) {
8421
+ mergeItem.rowspan = rowspan;
8422
+ mergeItem.colspan = colspan;
8423
+ mergeItem._rowspan = rowspan;
8424
+ mergeItem._colspan = colspan;
8425
+ } else {
8426
+ mergeItem = {
8427
+ row: mergeRowIndex,
8428
+ col: mergeColumnIndex,
8429
+ rowspan,
8430
+ colspan,
8431
+ _row: row,
8432
+ _col: column,
8433
+ _rowspan: rowspan,
8434
+ _colspan: colspan
8435
+ };
8436
+ mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
8437
+ mergeFooterList.push(mergeItem);
8438
+ }
8439
+ }
8440
+ }
8441
+ });
8442
+ }
8443
+ }
8246
8444
  function removeFooterMerges($xeTable, merges) {
8247
8445
  const internalData = $xeTable;
8248
8446
  const {
@@ -8370,10 +8568,26 @@ function clearAllSort($xeTable) {
8370
8568
  function calcTableHeight($xeTable, key) {
8371
8569
  const props = $xeTable;
8372
8570
  const reactData = $xeTable;
8571
+ const {
8572
+ editConfig
8573
+ } = props;
8373
8574
  const {
8374
8575
  parentHeight
8375
8576
  } = reactData;
8376
- const val = props[key];
8577
+ let val = props[key];
8578
+ if (key === 'minHeight') {
8579
+ const defMinHeight = methods_getConfig().table.minHeight;
8580
+ if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eqNull(val)) {
8581
+ if (eqEmptyValue(defMinHeight)) {
8582
+ // 编辑模式默认最小高度
8583
+ if (isEnableConf(editConfig)) {
8584
+ val = 144;
8585
+ }
8586
+ } else {
8587
+ val = defMinHeight;
8588
+ }
8589
+ }
8590
+ }
8377
8591
  let num = 0;
8378
8592
  if (val) {
8379
8593
  if (val === '100%' || val === 'auto') {
@@ -8922,13 +9136,24 @@ function handleDefaultMergeCells($xeTable) {
8922
9136
  $xeTable.setMergeCells(mergeCells);
8923
9137
  }
8924
9138
  }
9139
+ function handleDefaultMergeHeaderItems($xeTable) {
9140
+ const props = $xeTable;
9141
+ const {
9142
+ mergeHeaderCells
9143
+ } = props;
9144
+ if (mergeHeaderCells) {
9145
+ $xeTable.setMergeHeaderCells(mergeHeaderCells);
9146
+ }
9147
+ }
8925
9148
  function handleDefaultMergeFooterItems($xeTable) {
8926
9149
  const props = $xeTable;
8927
9150
  const {
9151
+ mergeFooterCells,
8928
9152
  mergeFooterItems
8929
9153
  } = props;
8930
- if (mergeFooterItems) {
8931
- $xeTable.setMergeFooterItems(mergeFooterItems);
9154
+ const mFooterCells = mergeFooterCells || mergeFooterItems;
9155
+ if (mFooterCells) {
9156
+ $xeTable.setMergeFooterCells(mFooterCells);
8932
9157
  }
8933
9158
  }
8934
9159
  // 计算可视渲染相关数据
@@ -9434,6 +9659,10 @@ function loadTableData($xeTable, datas, isReset) {
9434
9659
  }
9435
9660
  handleReserveStatus($xeTable);
9436
9661
  $xeTable.checkSelectionStatus();
9662
+ $xeTable.dispatchEvent('data-change', {
9663
+ visibleColumn: internalData.visibleColumn,
9664
+ visibleData: internalData.afterFullData
9665
+ }, null);
9437
9666
  return new Promise(resolve => {
9438
9667
  $xeTable.$nextTick().then(() => handleRecalculateStyle($xeTable, false, false, false)).then(() => {
9439
9668
  handleRecalculateStyle($xeTable, false, true, true);
@@ -9490,6 +9719,7 @@ function handleLoadDefaults($xeTable) {
9490
9719
  handleDefaultTreeExpand($xeTable);
9491
9720
  handleDefaultRowGroupExpand($xeTable);
9492
9721
  handleDefaultMergeCells($xeTable);
9722
+ handleDefaultMergeHeaderItems($xeTable);
9493
9723
  handleDefaultMergeFooterItems($xeTable);
9494
9724
  $xeTable.$nextTick(() => setTimeout(() => $xeTable.recalculate()));
9495
9725
  }
@@ -13523,6 +13753,16 @@ const Methods = {
13523
13753
  internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
13524
13754
  reactData.mergeBodyFlag++;
13525
13755
  },
13756
+ handleUpdateHeaderMerge() {
13757
+ const $xeTable = this;
13758
+ const reactData = $xeTable;
13759
+ const internalData = $xeTable;
13760
+ const {
13761
+ mergeHeaderList
13762
+ } = internalData;
13763
+ internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList);
13764
+ reactData.mergeHeadFlag++;
13765
+ },
13526
13766
  handleUpdateFooterMerge() {
13527
13767
  const $xeTable = this;
13528
13768
  const reactData = $xeTable;
@@ -18754,6 +18994,10 @@ const Methods = {
18754
18994
  }
18755
18995
  reactData.footerTableData = footData;
18756
18996
  $xeTable.handleUpdateFooterMerge();
18997
+ $xeTable.dispatchEvent('footer-data-change', {
18998
+ visibleColumn: internalData.visibleColumn,
18999
+ footData
19000
+ }, null);
18757
19001
  return $xeTable.$nextTick();
18758
19002
  },
18759
19003
  /**
@@ -18840,45 +19084,101 @@ const Methods = {
18840
19084
  return updateStyle($xeTable);
18841
19085
  });
18842
19086
  },
18843
- setMergeFooterItems(merges) {
19087
+ setMergeHeaderCells(merges) {
19088
+ const $xeTable = this;
19089
+ handleHeaderMerge($xeTable, merges);
19090
+ $xeTable.handleUpdateHeaderMerge();
19091
+ return $xeTable.$nextTick().then(() => {
19092
+ return updateStyle($xeTable);
19093
+ });
19094
+ },
19095
+ /**
19096
+ * 移除表头单元格合并 [{row:Row|number, col:ColumnInfo|number}]
19097
+ */
19098
+ removeMergeHeaderCells(merges) {
19099
+ const $xeTable = this;
19100
+ const rest = removeHeaderMerges($xeTable, merges);
19101
+ $xeTable.handleUpdateHeaderMerge();
19102
+ return $xeTable.$nextTick().then(() => {
19103
+ updateStyle($xeTable);
19104
+ return rest;
19105
+ });
19106
+ },
19107
+ /**
19108
+ * 获取所有被合并的表头单元格
19109
+ */
19110
+ getMergeHeaderCells() {
19111
+ const $xeTable = this;
19112
+ const internalData = $xeTable;
19113
+ return internalData.mergeHeaderList.slice(0);
19114
+ },
19115
+ /**
19116
+ * 清除所有表头单元格合并
19117
+ */
19118
+ clearMergeHeaderCells() {
19119
+ const $xeTable = this;
19120
+ const reactData = $xeTable;
19121
+ const internalData = $xeTable;
19122
+ internalData.mergeHeaderList = [];
19123
+ internalData.mergeHeaderMaps = {};
19124
+ internalData.mergeHeaderCellMaps = {};
19125
+ reactData.mergeHeadFlag++;
19126
+ return $xeTable.$nextTick().then(() => {
19127
+ return updateStyle($xeTable);
19128
+ });
19129
+ },
19130
+ setMergeFooterCells(merges) {
18844
19131
  const $xeTable = this;
18845
19132
  const props = $xeTable;
18846
19133
  if (props.footerSpanMethod) {
18847
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
19134
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
18848
19135
  }
18849
19136
  handleFooterMerge($xeTable, merges);
18850
19137
  $xeTable.handleUpdateFooterMerge();
18851
19138
  return $xeTable.$nextTick().then(() => {
18852
- $xeTable.updateCellAreas();
18853
19139
  return updateStyle($xeTable);
18854
19140
  });
18855
19141
  },
18856
- removeMergeFooterItems(merges) {
19142
+ setMergeFooterItems(merges) {
19143
+ const $xeTable = this;
19144
+ // errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
19145
+ return $xeTable.setMergeFooterCells(merges);
19146
+ },
19147
+ removeMergeFooterCells(merges) {
18857
19148
  const $xeTable = this;
18858
19149
  const props = $xeTable;
18859
19150
  if (props.footerSpanMethod) {
18860
- errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
19151
+ errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
18861
19152
  }
18862
19153
  const rest = removeFooterMerges($xeTable, merges);
18863
19154
  $xeTable.handleUpdateFooterMerge();
18864
19155
  return $xeTable.$nextTick().then(() => {
18865
- $xeTable.updateCellAreas();
18866
19156
  updateStyle($xeTable);
18867
19157
  return rest;
18868
19158
  });
18869
19159
  },
19160
+ removeMergeFooterItems(merges) {
19161
+ const $xeTable = this;
19162
+ // errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
19163
+ return $xeTable.removeMergeFooterCells(merges);
19164
+ },
18870
19165
  /**
18871
19166
  * 获取所有被合并的表尾
18872
19167
  */
18873
- getMergeFooterItems() {
19168
+ getMergeFooterCells() {
18874
19169
  const $xeTable = this;
18875
19170
  const internalData = $xeTable;
18876
19171
  return internalData.mergeFooterList.slice(0);
18877
19172
  },
19173
+ getMergeFooterItems() {
19174
+ const $xeTable = this;
19175
+ // errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
19176
+ return $xeTable.getMergeFooterCells();
19177
+ },
18878
19178
  /**
18879
19179
  * 清除所有表尾合并
18880
19180
  */
18881
- clearMergeFooterItems() {
19181
+ clearMergeFooterCells() {
18882
19182
  const $xeTable = this;
18883
19183
  const reactData = $xeTable;
18884
19184
  const internalData = $xeTable;
@@ -18890,6 +19190,11 @@ const Methods = {
18890
19190
  return updateStyle($xeTable);
18891
19191
  });
18892
19192
  },
19193
+ clearMergeFooterItems() {
19194
+ const $xeTable = this;
19195
+ // errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
19196
+ return $xeTable.clearMergeFooterCells();
19197
+ },
18893
19198
  handleUpdateAggData() {
18894
19199
  const $xeTable = this;
18895
19200
  const internalData = $xeTable;
@@ -19258,14 +19563,13 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
19258
19563
  // hover 进入事件
19259
19564
  if (showTitle || showTooltip || showAllTip || tooltipConfig) {
19260
19565
  tdOns.mouseenter = evnt => {
19261
- if (isVMScrollProcess($xeTable)) {
19262
- return;
19263
- }
19264
- if (showTitle) {
19265
- updateCellTitle(evnt.currentTarget, column);
19266
- } else if (showTooltip || showAllTip) {
19267
- // 如果配置了显示 tooltip
19268
- $xeTable.triggerBodyTooltipEvent(evnt, cellParams);
19566
+ if (!isVMScrollProcess($xeTable)) {
19567
+ if (showTitle) {
19568
+ updateCellTitle(evnt.currentTarget, column);
19569
+ } else if (showTooltip || showAllTip) {
19570
+ // 如果配置了显示 tooltip
19571
+ $xeTable.triggerBodyTooltipEvent(evnt, cellParams);
19572
+ }
19269
19573
  }
19270
19574
  $xeTable.dispatchEvent('cell-mouseenter', Object.assign({
19271
19575
  cell: evnt.currentTarget
@@ -19275,11 +19579,10 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
19275
19579
  // hover 退出事件
19276
19580
  if (showTooltip || showAllTip || tooltipConfig) {
19277
19581
  tdOns.mouseleave = evnt => {
19278
- if (isVMScrollProcess($xeTable)) {
19279
- return;
19280
- }
19281
- if (showTooltip || showAllTip) {
19282
- $xeTable.handleTargetLeaveEvent(evnt);
19582
+ if (!isVMScrollProcess($xeTable)) {
19583
+ if (showTooltip || showAllTip) {
19584
+ $xeTable.handleTargetLeaveEvent(evnt);
19585
+ }
19283
19586
  }
19284
19587
  $xeTable.dispatchEvent('cell-mouseleave', Object.assign({
19285
19588
  cell: evnt.currentTarget
@@ -20027,7 +20330,7 @@ const {
20027
20330
  renderEmptyElement: header_renderEmptyElement
20028
20331
  } = core_.VxeUI;
20029
20332
  const cellType = 'header';
20030
- const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) => {
20333
+ function header_renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, $rowIndex, cols) {
20031
20334
  const props = _vm;
20032
20335
  const $xeTable = _vm.$parent;
20033
20336
  const $xeGrid = $xeTable.$xeGrid;
@@ -20041,6 +20344,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20041
20344
  const {
20042
20345
  resizable: allResizable,
20043
20346
  columnKey,
20347
+ showCustomHeader,
20044
20348
  headerCellClassName,
20045
20349
  headerCellStyle,
20046
20350
  showHeaderOverflow: allColumnHeaderOverflow,
@@ -20054,11 +20358,14 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20054
20358
  scrollXLoad,
20055
20359
  scrollYLoad,
20056
20360
  overflowX,
20361
+ mergeHeadFlag,
20057
20362
  tableColumn
20058
20363
  } = tableReactData;
20059
20364
  const {
20060
20365
  fullColumnIdData,
20061
- scrollXStore
20366
+ scrollXStore,
20367
+ mergeHeaderList,
20368
+ mergeHeaderCellMaps
20062
20369
  } = tableInternalData;
20063
20370
  const virtualXOpts = $xeTable.computeVirtualXOpts;
20064
20371
  const columnOpts = $xeTable.computeColumnOpts;
@@ -20072,6 +20379,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20072
20379
  isCrossDrag,
20073
20380
  isPeerDrag
20074
20381
  } = columnDragOpts;
20382
+ const isLastRow = $rowIndex === headerGroups.length - 1;
20075
20383
  return cols.map((column, $columnIndex) => {
20076
20384
  const {
20077
20385
  type,
@@ -20104,7 +20412,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20104
20412
  hasFilter = filters.some(item => item.checked);
20105
20413
  }
20106
20414
  const columnIndex = colRest.index;
20107
- const _columnIndex = colRest._index;
20415
+ const _columnIndex = showCustomHeader ? $columnIndex : colRest._index;
20108
20416
  const cellParams = {
20109
20417
  $table: $xeTable,
20110
20418
  $grid: $xeGrid,
@@ -20121,10 +20429,34 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20121
20429
  hasFilter
20122
20430
  };
20123
20431
  const thAttrs = {
20124
- colid,
20125
- colspan: column.colSpan > 1 ? column.colSpan : null,
20126
- rowspan: column.rowSpan > 1 ? column.rowSpan : null
20432
+ colid
20127
20433
  };
20434
+ let isMergeCell = false;
20435
+ // 合并行或列
20436
+ if (!showCustomHeader) {
20437
+ thAttrs.colspan = column.colSpan > 1 ? column.colSpan : null;
20438
+ thAttrs.rowspan = column.rowSpan > 1 ? column.rowSpan : null;
20439
+ }
20440
+ if (mergeHeadFlag && mergeHeaderList.length && (showCustomHeader || isLastRow)) {
20441
+ const spanRest = mergeHeaderCellMaps[`${$rowIndex}:${showCustomHeader ? $columnIndex : _columnIndex}`];
20442
+ if (spanRest) {
20443
+ const {
20444
+ rowspan,
20445
+ colspan
20446
+ } = spanRest;
20447
+ if (!rowspan || !colspan) {
20448
+ return null;
20449
+ }
20450
+ if (rowspan > 1) {
20451
+ isMergeCell = true;
20452
+ thAttrs.rowspan = rowspan;
20453
+ }
20454
+ if (colspan > 1) {
20455
+ isMergeCell = true;
20456
+ thAttrs.colspan = colspan;
20457
+ }
20458
+ }
20459
+ }
20128
20460
  const thOns = {
20129
20461
  click: evnt => $xeTable.triggerHeaderCellClickEvent(evnt, cellParams),
20130
20462
  dblclick: evnt => $xeTable.triggerHeaderCellDblclickEvent(evnt, cellParams)
@@ -20151,7 +20483,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20151
20483
  const showResizable = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isBoolean(column.resizable) ? column.resizable : columnOpts.resizable || allResizable;
20152
20484
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
20153
20485
  let isVNPreEmptyStatus = false;
20154
- if (isOptimizeMode && overflowX && !isGroup) {
20486
+ if (isOptimizeMode && overflowX && !isGroup && !isMergeCell) {
20155
20487
  if (!dragCol || dragCol.id !== colid) {
20156
20488
  if (scrollXLoad && tableColumn.length > 10 && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
20157
20489
  isVNPreEmptyStatus = true;
@@ -20165,7 +20497,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20165
20497
  tcStyle.minHeight = `${currCellHeight}px`;
20166
20498
  }
20167
20499
  return h('th', {
20168
- class: ['vxe-table--column vxe-header--column', colid, {
20500
+ class: ['vxe-table--column vxe-header--column', colid, fixedHiddenColumn ? 'fixed--hidden' : 'fixed--visible', {
20169
20501
  [`col--${headAlign}`]: headAlign,
20170
20502
  [`col--${type}`]: type,
20171
20503
  'col--last': isLastColumn,
@@ -20173,7 +20505,6 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20173
20505
  'col--group': isColGroup,
20174
20506
  'col--ellipsis': hasEllipsis,
20175
20507
  'fixed--width': !isAutoCellWidth,
20176
- 'fixed--hidden': fixedHiddenColumn,
20177
20508
  'is--padding': isPadding,
20178
20509
  'is--sortable': column.sortable,
20179
20510
  'col--filter': !!filters,
@@ -20185,7 +20516,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20185
20516
  attrs: thAttrs,
20186
20517
  style: headerCellStyle ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(headerCellStyle) ? headerCellStyle(cellParams) : headerCellStyle : undefined,
20187
20518
  on: thOns,
20188
- key: columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag || isColGroup ? colid : $columnIndex
20519
+ key: showCustomHeader ? `${colid}${$columnIndex}` : columnKey || scrollXLoad || scrollYLoad || columnOpts.useKey || columnOpts.drag || isColGroup ? colid : $columnIndex
20189
20520
  }, [h('div', {
20190
20521
  class: ['vxe-cell', {
20191
20522
  'c--title': showTitle,
@@ -20200,9 +20531,9 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20200
20531
  class: 'vxe-cell--wrapper vxe-header-cell--wrapper'
20201
20532
  }, column.renderHeader(h, cellParams))]),
20202
20533
  /**
20203
- * 列宽拖动
20204
- */
20205
- !fixedHiddenColumn && showResizable ? h('div', {
20534
+ * 列宽拖动
20535
+ */
20536
+ !fixedHiddenColumn && showResizable && (!showCustomHeader || isLastRow) ? h('div', {
20206
20537
  class: 'vxe-cell--col-resizable',
20207
20538
  on: {
20208
20539
  mousedown: evnt => $xeTable.handleColResizeMousedownEvent(evnt, fixedType, cellParams),
@@ -20210,7 +20541,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
20210
20541
  }
20211
20542
  }) : header_renderEmptyElement($xeTable)]);
20212
20543
  });
20213
- };
20544
+ }
20214
20545
  function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20215
20546
  const props = _vm;
20216
20547
  const $xeTable = _vm.$parent;
@@ -20233,7 +20564,7 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20233
20564
  key: $rowIndex,
20234
20565
  class: ['vxe-header--row', headerRowClassName ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(headerRowClassName) ? headerRowClassName(params) : headerRowClassName : ''],
20235
20566
  style: headerRowStyle ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(headerRowStyle) ? headerRowStyle(params) : headerRowStyle : undefined
20236
- }, header_renderRows(h, _vm, isGroup, isOptimizeMode, cols, $rowIndex));
20567
+ }, header_renderRows(h, _vm, isGroup, isOptimizeMode, headerGroups, $rowIndex, cols));
20237
20568
  });
20238
20569
  }
20239
20570
  /* harmony default export */ var header = ({
@@ -20255,11 +20586,13 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20255
20586
  },
20256
20587
  watch: {
20257
20588
  tableColumn() {
20258
- this.uploadColumn();
20589
+ const _vm = this;
20590
+ _vm.uploadColumn();
20259
20591
  }
20260
20592
  },
20261
20593
  created() {
20262
- this.uploadColumn();
20594
+ const _vm = this;
20595
+ _vm.uploadColumn();
20263
20596
  },
20264
20597
  mounted() {
20265
20598
  const _vm = this;
@@ -20282,8 +20615,9 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20282
20615
  elemStore[`${prefix}repair`] = _vm.$refs.refHeaderBorderRepair;
20283
20616
  },
20284
20617
  destroyed() {
20285
- const props = this;
20286
- const $xeTable = this.$parent;
20618
+ const _vm = this;
20619
+ const props = _vm;
20620
+ const $xeTable = _vm.$parent;
20287
20621
  const internalData = $xeTable;
20288
20622
  const {
20289
20623
  fixedType
@@ -20301,8 +20635,9 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20301
20635
  elemStore[`${prefix}repair`] = null;
20302
20636
  },
20303
20637
  render(h) {
20304
- const props = this;
20305
- const $xeTable = this.$parent;
20638
+ const _vm = this;
20639
+ const props = _vm;
20640
+ const $xeTable = _vm.$parent;
20306
20641
  const tableProps = $xeTable;
20307
20642
  const tableReactData = $xeTable;
20308
20643
  const tableInternalData = $xeTable;
@@ -20316,7 +20651,7 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20316
20651
  } = props;
20317
20652
  const {
20318
20653
  headerColumn
20319
- } = this;
20654
+ } = _vm;
20320
20655
  const {
20321
20656
  mouseConfig,
20322
20657
  showHeaderOverflow: allColumnHeaderOverflow,
@@ -20435,7 +20770,7 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20435
20770
  */
20436
20771
  h('thead', {
20437
20772
  ref: 'refHeaderTHead'
20438
- }, renderHeads(h, this, isGroup, isOptimizeMode, renderHeaderList))]), mouseConfig && mouseOpts.area ? h('div', {
20773
+ }, renderHeads(h, _vm, isGroup, isOptimizeMode, renderHeaderList))]), mouseConfig && mouseOpts.area ? h('div', {
20439
20774
  class: 'vxe-table--cell-area'
20440
20775
  }, [h('span', {
20441
20776
  class: 'vxe-table--cell-main-area'
@@ -20453,12 +20788,37 @@ function renderHeads(h, _vm, isGroup, isOptimizeMode, headerGroups) {
20453
20788
  },
20454
20789
  methods: {
20455
20790
  uploadColumn() {
20456
- const $xeTable = this.$parent;
20791
+ const _vm = this;
20792
+ const $xeTable = _vm.$parent;
20793
+ const tableProps = $xeTable;
20457
20794
  const tableReactData = $xeTable;
20795
+ const tableInternalData = $xeTable;
20796
+ const props = _vm;
20797
+ const {
20798
+ showCustomHeader
20799
+ } = tableProps;
20800
+ const {
20801
+ collectColumn,
20802
+ visibleColumn
20803
+ } = tableInternalData;
20804
+ const {
20805
+ tableGroupColumn
20806
+ } = props;
20458
20807
  const {
20459
20808
  isGroup
20460
20809
  } = tableReactData;
20461
- this.headerColumn = isGroup ? convertHeaderColumnToRows(this.tableGroupColumn) : [];
20810
+ let spanColumns = isGroup ? convertHeaderColumnToRows(tableGroupColumn) : [];
20811
+ let visibleColgroups = [];
20812
+ if (showCustomHeader && spanColumns.length > 1) {
20813
+ visibleColgroups = convertHeaderToGridRows(spanColumns);
20814
+ spanColumns = visibleColgroups;
20815
+ }
20816
+ _vm.headerColumn = spanColumns;
20817
+ $xeTable.dispatchEvent('columns-change', {
20818
+ visibleColgroups,
20819
+ collectColumn,
20820
+ visibleColumn
20821
+ }, null);
20462
20822
  }
20463
20823
  }
20464
20824
  });
@@ -20756,8 +21116,9 @@ function footer_renderHeads(h, _vm, isOptimizeMode, renderColumnList) {
20756
21116
  elemStore[`${prefix}xSpace`] = _vm.$refs.refFooterXSpace;
20757
21117
  },
20758
21118
  destroyed() {
20759
- const props = this;
20760
- const $xeTable = this.$parent;
21119
+ const _vm = this;
21120
+ const props = _vm;
21121
+ const $xeTable = _vm.$parent;
20761
21122
  const tableInternalData = $xeTable;
20762
21123
  const {
20763
21124
  fixedType
@@ -20774,8 +21135,9 @@ function footer_renderHeads(h, _vm, isOptimizeMode, renderColumnList) {
20774
21135
  elemStore[`${prefix}xSpace`] = null;
20775
21136
  },
20776
21137
  render(h) {
20777
- const props = this;
20778
- const $xeTable = this.$parent;
21138
+ const _vm = this;
21139
+ const props = _vm;
21140
+ const $xeTable = _vm.$parent;
20779
21141
  const tableProps = $xeTable;
20780
21142
  const tableReactData = $xeTable;
20781
21143
  const tableInternalData = $xeTable;
@@ -20894,7 +21256,7 @@ function footer_renderHeads(h, _vm, isOptimizeMode, renderColumnList) {
20894
21256
  */
20895
21257
  h('tfoot', {
20896
21258
  ref: 'refFooterTFoot'
20897
- }, footer_renderHeads(h, this, isOptimizeMode, renderColumnList))])])]);
21259
+ }, footer_renderHeads(h, _vm, isOptimizeMode, renderColumnList))])])]);
20898
21260
  }
20899
21261
  });
20900
21262
  ;// CONCATENATED MODULE: ./packages/table/module/custom/panel.ts
@@ -23251,7 +23613,8 @@ const {
23251
23613
 
23252
23614
 
23253
23615
  const {
23254
- getIcon: menu_panel_getIcon
23616
+ getIcon: menu_panel_getIcon,
23617
+ renderEmptyElement: menu_panel_renderEmptyElement
23255
23618
  } = core_.VxeUI;
23256
23619
  /* harmony default export */ var menu_panel = ({
23257
23620
  name: 'VxeTableMenuPanel',
@@ -23272,18 +23635,18 @@ const {
23272
23635
  },
23273
23636
  render(h) {
23274
23637
  const $xeTable = this.$parent;
23638
+ const tableReactData = $xeTable;
23275
23639
  const {
23276
- _e,
23277
- ctxMenuOpts,
23278
23640
  ctxMenuStore
23279
- } = this;
23641
+ } = tableReactData;
23642
+ const menuOpts = $xeTable.computeMenuOpts;
23280
23643
  return h('div', {
23281
- class: ['vxe-table--context-menu-wrapper', ctxMenuOpts.className, {
23644
+ class: ['vxe-table--context-menu-wrapper', menuOpts.className, {
23282
23645
  'is--visible': ctxMenuStore.visible
23283
23646
  }],
23284
23647
  style: ctxMenuStore.style
23285
23648
  }, ctxMenuStore.list.map((options, gIndex) => {
23286
- return options.every(item => item.visible === false) ? _e() : h('ul', {
23649
+ return options.every(item => item.visible === false) ? menu_panel_renderEmptyElement($xeTable) : h('ul', {
23287
23650
  class: 'vxe-context-menu--option-wrapper',
23288
23651
  key: gIndex
23289
23652
  }, options.map((item, index) => {
@@ -23314,7 +23677,7 @@ const {
23314
23677
  class: ['vxe-context-menu--link-prefix', prefixOpts.className || '']
23315
23678
  }, [h('i', {
23316
23679
  class: prefixOpts.icon || item.prefixIcon
23317
- }), prefixOpts.content ? h('span', {}, `${prefixOpts.content}`) : _e()]), h('span', {
23680
+ }), prefixOpts.content ? h('span', {}, `${prefixOpts.content}`) : menu_panel_renderEmptyElement($xeTable)]), h('span', {
23318
23681
  class: 'vxe-context-menu--link-content',
23319
23682
  attrs: {
23320
23683
  title: menuContent
@@ -23323,7 +23686,7 @@ const {
23323
23686
  class: ['vxe-context-menu--link-suffix', suffixOpts.className || '']
23324
23687
  }, [h('i', {
23325
23688
  class: suffixOpts.icon || item.suffixIcon || (hasChildMenus ? menu_panel_getIcon().TABLE_MENU_OPTIONS : '')
23326
- }), suffixOpts.content ? h('span', `${suffixOpts.content}`) : _e()])]), hasChildMenus ? h('ul', {
23689
+ }), suffixOpts.content ? h('span', `${suffixOpts.content}`) : menu_panel_renderEmptyElement($xeTable)])]), hasChildMenus ? h('ul', {
23327
23690
  class: ['vxe-table--context-menu-clild-wrapper', {
23328
23691
  'is--show': item === ctxMenuStore.selected && ctxMenuStore.showChild
23329
23692
  }]
@@ -23354,7 +23717,7 @@ const {
23354
23717
  class: ['vxe-context-menu--link-prefix', childPrefixOpts.className || '']
23355
23718
  }, [h('i', {
23356
23719
  class: childPrefixOpts.icon || child.prefixIcon
23357
- }), childPrefixOpts.content ? h('span', `${childPrefixOpts.content}`) : _e()]), h('span', {
23720
+ }), childPrefixOpts.content ? h('span', `${childPrefixOpts.content}`) : menu_panel_renderEmptyElement($xeTable)]), h('span', {
23358
23721
  class: 'vxe-context-menu--link-content',
23359
23722
  attrs: {
23360
23723
  title: childMenuContent
@@ -23363,7 +23726,7 @@ const {
23363
23726
  class: ['vxe-context-menu--link-suffix', childSuffixOpts.className || '']
23364
23727
  }, [h('i', {
23365
23728
  class: childSuffixOpts.icon
23366
- }), childSuffixOpts.content ? h('span', `${childSuffixOpts.content}`) : _e()])])]);
23729
+ }), childSuffixOpts.content ? h('span', `${childSuffixOpts.content}`) : menu_panel_renderEmptyElement($xeTable)])])]);
23367
23730
  })) : null]);
23368
23731
  }));
23369
23732
  }));
@@ -23794,13 +24157,15 @@ const {
23794
24157
  * 关闭快捷菜单
23795
24158
  */
23796
24159
  _closeMenu() {
23797
- Object.assign(this.ctxMenuStore, {
24160
+ const $xeTable = this;
24161
+ const reactData = $xeTable;
24162
+ Object.assign(reactData.ctxMenuStore, {
23798
24163
  visible: false,
23799
24164
  selected: null,
23800
24165
  selectChild: null,
23801
24166
  showChild: false
23802
24167
  });
23803
- return this.$nextTick();
24168
+ return $xeTable.$nextTick();
23804
24169
  },
23805
24170
  // 处理菜单的移动
23806
24171
  moveCtxMenu(evnt, ctxMenuStore, property, hasOper, operRest, menuList) {
@@ -23841,25 +24206,34 @@ const {
23841
24206
  const $xeTable = this;
23842
24207
  const $xeGrid = $xeTable.$xeGrid;
23843
24208
  const $xeGantt = $xeTable.$xeGantt;
24209
+ const props = $xeTable;
24210
+ const reactData = $xeTable;
23844
24211
  const internalData = $xeTable;
23845
24212
  const {
23846
- $refs,
23847
- tId,
23848
- editStore,
23849
- menuConfig,
23850
- contextMenu,
23851
- ctxMenuStore,
23852
- ctxMenuOpts,
24213
+ xID
24214
+ } = $xeTable;
24215
+ const {
23853
24216
  mouseConfig,
23854
- mouseOpts
23855
- } = this;
24217
+ menuConfig
24218
+ } = props;
24219
+ const {
24220
+ editStore,
24221
+ ctxMenuStore
24222
+ } = reactData;
24223
+ const {
24224
+ visibleColumn
24225
+ } = internalData;
24226
+ const tableFilter = $xeTable.$refs.refTableFilter;
24227
+ const tableMenu = $xeTable.$refs.refTableMenu;
24228
+ const mouseOpts = $xeTable.computeMouseOpts;
24229
+ const menuOpts = $xeTable.computeMenuOpts;
24230
+ const el = $xeTable.$refs.refElem;
23856
24231
  const {
23857
24232
  selected
23858
24233
  } = editStore;
23859
- const tableFilter = $xeTable.$refs.refTableFilter;
23860
24234
  const layoutList = ['header', 'body', 'footer'];
23861
- if (isEnableConf(menuConfig) || contextMenu) {
23862
- if (ctxMenuStore.visible && $refs.refTableMenu && getEventTargetNode(evnt, $refs.refTableMenu.$el).flag) {
24235
+ if (isEnableConf(menuConfig)) {
24236
+ if (ctxMenuStore.visible && tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) {
23863
24237
  evnt.preventDefault();
23864
24238
  return;
23865
24239
  }
@@ -23871,16 +24245,16 @@ const {
23871
24245
  $grid: $xeGrid,
23872
24246
  $gantt: $xeGantt,
23873
24247
  keyboard: true,
23874
- columns: this.visibleColumn.slice(0),
24248
+ columns: visibleColumn.slice(0),
23875
24249
  $event: evnt
23876
24250
  };
23877
24251
  // 如果开启单元格区域
23878
24252
  if (mouseConfig && mouseOpts.area) {
23879
- const activeArea = this.getActiveCellArea();
24253
+ const activeArea = $xeTable.getActiveCellArea();
23880
24254
  if (activeArea && activeArea.row && activeArea.column) {
23881
24255
  params.row = activeArea.row;
23882
24256
  params.column = activeArea.column;
23883
- this.handleOpenMenuEvent(evnt, type, params);
24257
+ $xeTable.handleOpenMenuEvent(evnt, type, params);
23884
24258
  return;
23885
24259
  }
23886
24260
  } else if (mouseConfig && mouseOpts.selected) {
@@ -23888,7 +24262,7 @@ const {
23888
24262
  if (selected.row && selected.column) {
23889
24263
  params.row = selected.row;
23890
24264
  params.column = selected.column;
23891
- this.handleOpenMenuEvent(evnt, type, params);
24265
+ $xeTable.handleOpenMenuEvent(evnt, type, params);
23892
24266
  return;
23893
24267
  }
23894
24268
  }
@@ -23896,16 +24270,16 @@ const {
23896
24270
  // 分别匹配表尾、内容、表尾的快捷菜单
23897
24271
  for (let index = 0; index < layoutList.length; index++) {
23898
24272
  const layout = layoutList[index];
23899
- const columnTargetNode = getEventTargetNode(evnt, this.$el, `vxe-${layout}--column`, target => {
24273
+ const columnTargetNode = getEventTargetNode(evnt, el, `vxe-${layout}--column`, target => {
23900
24274
  // target=td|th,直接向上找 table 去匹配即可
23901
- return target.parentNode.parentNode.parentNode.getAttribute('xid') === tId;
24275
+ return target.parentNode.parentNode.parentNode.getAttribute('xid') === xID;
23902
24276
  });
23903
24277
  const params = {
23904
24278
  type: layout,
23905
24279
  $table: $xeTable,
23906
24280
  $grid: $xeGrid,
23907
24281
  $gantt: $xeGantt,
23908
- columns: this.visibleColumn.slice(0),
24282
+ columns: visibleColumn.slice(0),
23909
24283
  $event: evnt
23910
24284
  };
23911
24285
  if (columnTargetNode.flag) {
@@ -23930,41 +24304,44 @@ const {
23930
24304
  }
23931
24305
  }
23932
24306
  const eventType = `${typePrefix}cell-menu`;
23933
- this.handleOpenMenuEvent(evnt, layout, params);
24307
+ $xeTable.handleOpenMenuEvent(evnt, layout, params);
23934
24308
  // 在 v4 中废弃事件 cell-context-menu、header-cell-context-menu、footer-cell-context-menu
23935
- if (this.$listeners[`${typePrefix}cell-context-menu`]) {
24309
+ if ($xeTable.$listeners[`${typePrefix}cell-context-menu`]) {
23936
24310
  warnLog('vxe.error.delEvent', [`${typePrefix}cell-context-menu`, `${typePrefix}cell-menu`]);
23937
24311
  $xeTable.dispatchEvent(`${typePrefix}cell-context-menu`, params, evnt);
23938
24312
  } else {
23939
24313
  $xeTable.dispatchEvent(eventType, params, evnt);
23940
24314
  }
23941
24315
  return;
23942
- } else if (getEventTargetNode(evnt, this.$el, `vxe-table--${layout}-wrapper`, target => target.getAttribute('xid') === tId).flag) {
23943
- if (ctxMenuOpts.trigger === 'cell') {
24316
+ } else if (getEventTargetNode(evnt, $xeTable.$el, `vxe-table--${layout}-wrapper`, target => target.getAttribute('xid') === xID).flag) {
24317
+ if (menuOpts.trigger === 'cell') {
23944
24318
  evnt.preventDefault();
23945
24319
  } else {
23946
- this.handleOpenMenuEvent(evnt, layout, params);
24320
+ $xeTable.handleOpenMenuEvent(evnt, layout, params);
23947
24321
  }
23948
24322
  return;
23949
24323
  }
23950
24324
  }
23951
24325
  }
23952
24326
  if (tableFilter && !getEventTargetNode(evnt, tableFilter.$el).flag) {
23953
- this.closeFilter();
24327
+ $xeTable.closeFilter();
23954
24328
  }
23955
- this.closeMenu();
24329
+ $xeTable.closeMenu();
23956
24330
  },
23957
24331
  /**
23958
24332
  * 显示快捷菜单
23959
24333
  */
23960
24334
  handleOpenMenuEvent(evnt, type, params) {
24335
+ const $xeTable = this;
24336
+ const reactData = $xeTable;
24337
+ const internalData = $xeTable;
23961
24338
  const {
23962
- isCtxMenu,
23963
- ctxMenuStore,
23964
- ctxMenuOpts
23965
- } = this;
23966
- const config = ctxMenuOpts[type];
23967
- const visibleMethod = ctxMenuOpts.visibleMethod;
24339
+ ctxMenuStore
24340
+ } = reactData;
24341
+ const isMenu = $xeTable.computeIsMenu;
24342
+ const menuOpts = $xeTable.computeMenuOpts;
24343
+ const config = menuOpts[type];
24344
+ const visibleMethod = menuOpts.visibleMethod;
23968
24345
  if (config) {
23969
24346
  const {
23970
24347
  options,
@@ -23972,12 +24349,12 @@ const {
23972
24349
  } = config;
23973
24350
  if (disabled) {
23974
24351
  evnt.preventDefault();
23975
- } else if (isCtxMenu && options && options.length) {
24352
+ } else if (isMenu && options && options.length) {
23976
24353
  params.options = options;
23977
- this.preventEvent(evnt, 'event.showMenu', params, () => {
24354
+ $xeTable.preventEvent(evnt, 'event.showMenu', params, () => {
23978
24355
  if (!visibleMethod || visibleMethod(params)) {
23979
24356
  evnt.preventDefault();
23980
- this.updateZindex();
24357
+ $xeTable.updateZindex();
23981
24358
  const {
23982
24359
  scrollTop,
23983
24360
  scrollLeft,
@@ -23987,21 +24364,22 @@ const {
23987
24364
  let top = evnt.clientY + scrollTop;
23988
24365
  let left = evnt.clientX + scrollLeft;
23989
24366
  const handleVisible = () => {
24367
+ internalData._currMenuParams = params;
23990
24368
  Object.assign(ctxMenuStore, {
23991
- args: params,
23992
24369
  visible: true,
23993
24370
  list: options,
23994
24371
  selected: null,
23995
24372
  selectChild: null,
23996
24373
  showChild: false,
23997
24374
  style: {
23998
- zIndex: this.tZindex,
24375
+ zIndex: internalData.tZindex,
23999
24376
  top: `${top}px`,
24000
24377
  left: `${left}px`
24001
24378
  }
24002
24379
  });
24003
- this.$nextTick(() => {
24004
- const ctxElem = this.$refs.refTableMenu.$el;
24380
+ $xeTable.$nextTick(() => {
24381
+ const tableMenu = $xeTable.$refs.refTableMenu;
24382
+ const ctxElem = tableMenu.$el;
24005
24383
  const clientHeight = ctxElem.clientHeight;
24006
24384
  const clientWidth = ctxElem.clientWidth;
24007
24385
  const {
@@ -24024,30 +24402,36 @@ const {
24024
24402
  column
24025
24403
  } = params;
24026
24404
  if (keyboard && row && column) {
24027
- this.scrollToRow(row, column).then(() => {
24028
- const cell = this.getCellElement(row, column);
24029
- const {
24030
- boundingTop,
24031
- boundingLeft
24032
- } = getAbsolutePos(cell);
24033
- top = boundingTop + scrollTop + Math.floor(cell.offsetHeight / 2);
24034
- left = boundingLeft + scrollLeft + Math.floor(cell.offsetWidth / 2);
24405
+ $xeTable.scrollToRow(row, column).then(() => {
24406
+ const cell = $xeTable.getCellElement(row, column);
24407
+ if (cell) {
24408
+ const {
24409
+ boundingTop,
24410
+ boundingLeft
24411
+ } = getAbsolutePos(cell);
24412
+ top = boundingTop + scrollTop + Math.floor(cell.offsetHeight / 2);
24413
+ left = boundingLeft + scrollLeft + Math.floor(cell.offsetWidth / 2);
24414
+ }
24035
24415
  handleVisible();
24036
24416
  });
24037
24417
  } else {
24038
24418
  handleVisible();
24039
24419
  }
24040
24420
  } else {
24041
- this.closeMenu();
24421
+ $xeTable.closeMenu();
24042
24422
  }
24043
24423
  });
24044
24424
  }
24045
24425
  }
24046
- this.closeFilter();
24426
+ $xeTable.closeFilter();
24047
24427
  },
24048
24428
  ctxMenuMouseoverEvent(evnt, item, child) {
24429
+ const $xeTable = this;
24430
+ const reactData = $xeTable;
24049
24431
  const menuElem = evnt.currentTarget;
24050
- const ctxMenuStore = this.ctxMenuStore;
24432
+ const {
24433
+ ctxMenuStore
24434
+ } = reactData;
24051
24435
  evnt.preventDefault();
24052
24436
  evnt.stopPropagation();
24053
24437
  ctxMenuStore.selected = item;
@@ -24055,7 +24439,7 @@ const {
24055
24439
  if (!child) {
24056
24440
  ctxMenuStore.showChild = hasChildrenList(item);
24057
24441
  if (ctxMenuStore.showChild) {
24058
- this.$nextTick(() => {
24442
+ $xeTable.$nextTick(() => {
24059
24443
  const childWrapperElem = menuElem.nextElementSibling;
24060
24444
  if (childWrapperElem) {
24061
24445
  const {
@@ -24090,7 +24474,11 @@ const {
24090
24474
  }
24091
24475
  },
24092
24476
  ctxMenuMouseoutEvent(evnt, item) {
24093
- const ctxMenuStore = this.ctxMenuStore;
24477
+ const $xeTable = this;
24478
+ const reactData = $xeTable;
24479
+ const {
24480
+ ctxMenuStore
24481
+ } = reactData;
24094
24482
  if (!item.children) {
24095
24483
  ctxMenuStore.selected = null;
24096
24484
  }
@@ -24103,27 +24491,28 @@ const {
24103
24491
  const $xeTable = this;
24104
24492
  const $xeGrid = $xeTable.$xeGrid;
24105
24493
  const $xeGantt = $xeTable.$xeGantt;
24494
+ const internalData = $xeTable;
24106
24495
  // 如果一级菜单有配置 code 则允许点击,否则不能点击
24107
24496
  if (!menu.disabled && (menu.code || !menu.children || !menu.children.length)) {
24108
24497
  const gMenuOpts = mixin_menus.get(menu.code);
24109
- const params = Object.assign({
24498
+ const params = Object.assign({}, internalData._currMenuParams, {
24110
24499
  menu,
24111
24500
  $table: $xeTable,
24112
24501
  $grid: $xeGrid,
24113
24502
  $gantt: $xeGantt,
24114
24503
  $event: evnt
24115
- }, this.ctxMenuStore.args);
24504
+ });
24116
24505
  if (gMenuOpts && gMenuOpts.menuMethod) {
24117
24506
  gMenuOpts.menuMethod(params, evnt);
24118
24507
  }
24119
24508
  // 在 v4 中废弃事件 context-menu-click
24120
- if (this.$listeners['context-menu-click']) {
24509
+ if ($xeTable.$listeners['context-menu-click']) {
24121
24510
  warnLog('vxe.error.delEvent', ['context-menu-click', 'menu-click']);
24122
24511
  $xeTable.dispatchEvent('context-menu-click', params, evnt);
24123
24512
  } else {
24124
24513
  $xeTable.dispatchEvent('menu-click', params, evnt);
24125
24514
  }
24126
- this.closeMenu();
24515
+ $xeTable.closeMenu();
24127
24516
  }
24128
24517
  }
24129
24518
  }
@@ -29115,12 +29504,19 @@ function handleUpdateMergeBodyCells($xeTable, merges) {
29115
29504
  internalData.mergeBodyCellMaps = {};
29116
29505
  $xeTable.setMergeCells(merges);
29117
29506
  }
29507
+ function handleUpdateMergeHeaderCells($xeTable, merges) {
29508
+ const internalData = $xeTable;
29509
+ internalData.mergeHeaderList = [];
29510
+ internalData.mergeHeaderMaps = {};
29511
+ internalData.mergeHeaderCellMaps = {};
29512
+ $xeTable.setMergeHeaderCells(merges);
29513
+ }
29118
29514
  function handleUpdateMergeFooterCells($xeTable, merges) {
29119
29515
  const internalData = $xeTable;
29120
29516
  internalData.mergeFooterList = [];
29121
29517
  internalData.mergeFooterMaps = {};
29122
29518
  internalData.mergeFooterCellMaps = {};
29123
- $xeTable.setMergeFooterItems(merges);
29519
+ $xeTable.setMergeFooterCells(merges);
29124
29520
  }
29125
29521
  function handleKeyField($xeTable) {
29126
29522
  const internalData = $xeTable;
@@ -29427,7 +29823,9 @@ function renderScrollX(h, $xeTable) {
29427
29823
  }, [h('div', {
29428
29824
  ref: 'refScrollXSpaceElem',
29429
29825
  class: 'vxe-table--scroll-x-space'
29430
- })])]), h('div', {
29826
+ })]), h('div', {
29827
+ class: 'vxe-table--scroll-x-handle-appearance'
29828
+ })]), h('div', {
29431
29829
  ref: 'refScrollXRightCornerElem',
29432
29830
  class: 'vxe-table--scroll-x-right-corner'
29433
29831
  })]);
@@ -29544,9 +29942,7 @@ function renderBody(h, $xeTable) {
29544
29942
  },
29545
29943
  data() {
29546
29944
  const xID = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().uniqueId();
29547
- return {
29548
- xID,
29549
- tId: xID,
29945
+ const reactData = {
29550
29946
  // 低性能的静态列
29551
29947
  staticColumns: [],
29552
29948
  // 渲染的列分组
@@ -29567,6 +29963,8 @@ function renderBody(h, $xeTable) {
29567
29963
  scrollbarWidth: 0,
29568
29964
  // 横向滚动条的高度
29569
29965
  scrollbarHeight: 0,
29966
+ // 最后滚动时间戳
29967
+ lastScrollTime: 0,
29570
29968
  // 行高
29571
29969
  rowHeight: 0,
29572
29970
  // 表格父容器的高度
@@ -29592,9 +29990,13 @@ function renderBody(h, $xeTable) {
29592
29990
  expandColumn: null,
29593
29991
  checkboxColumn: null,
29594
29992
  radioColumn: null,
29595
- hasFixedColumn: false,
29596
29993
  // 树节点列信息
29597
29994
  treeNodeColumn: null,
29995
+ hasFixedColumn: false,
29996
+ // 刷新列标识,当列筛选被改变时,触发表格刷新数据
29997
+ upDataFlag: 0,
29998
+ // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
29999
+ reColumnFlag: 0,
29598
30000
  // 初始化标识
29599
30001
  initStore: {
29600
30002
  filter: false,
@@ -29602,11 +30004,6 @@ function renderBody(h, $xeTable) {
29602
30004
  export: false,
29603
30005
  custom: false
29604
30006
  },
29605
- customColumnList: [],
29606
- // 刷新列标识,当列筛选被改变时,触发表格刷新数据
29607
- upDataFlag: 0,
29608
- // 刷新列标识,当列的特定属性被改变时,触发表格刷新列
29609
- reColumnFlag: 0,
29610
30007
  // 自定义列相关的信息
29611
30008
  customStore: {
29612
30009
  btnEl: null,
@@ -29620,6 +30017,7 @@ function renderBody(h, $xeTable) {
29620
30017
  oldFixedMaps: {},
29621
30018
  oldVisibleMaps: {}
29622
30019
  },
30020
+ customColumnList: [],
29623
30021
  // 当前选中的筛选列
29624
30022
  filterStore: {
29625
30023
  isAllSelected: false,
@@ -29688,6 +30086,7 @@ function renderBody(h, $xeTable) {
29688
30086
  tooltipStore: {
29689
30087
  row: null,
29690
30088
  column: null,
30089
+ content: null,
29691
30090
  visible: false,
29692
30091
  currOpts: {}
29693
30092
  },
@@ -29720,8 +30119,8 @@ function renderBody(h, $xeTable) {
29720
30119
  columns: [],
29721
30120
  isPrint: false,
29722
30121
  hasFooter: false,
29723
- hasTree: false,
29724
30122
  hasMerge: false,
30123
+ hasTree: false,
29725
30124
  hasColgroup: false,
29726
30125
  visible: false
29727
30126
  },
@@ -29752,6 +30151,7 @@ function renderBody(h, $xeTable) {
29752
30151
  pendingRowFlag: 1,
29753
30152
  insertRowFlag: 1,
29754
30153
  removeRowFlag: 1,
30154
+ mergeHeadFlag: 1,
29755
30155
  mergeBodyFlag: 1,
29756
30156
  mergeFootFlag: 1,
29757
30157
  rowHeightStore: {
@@ -29768,6 +30168,7 @@ function renderBody(h, $xeTable) {
29768
30168
  scrollXLeft: 0,
29769
30169
  scrollXWidth: 0,
29770
30170
  isScrollXBig: false,
30171
+ lazScrollLoading: false,
29771
30172
  rowExpandHeightFlag: 1,
29772
30173
  calcCellHeightFlag: 1,
29773
30174
  resizeHeightFlag: 1,
@@ -29780,10 +30181,16 @@ function renderBody(h, $xeTable) {
29780
30181
  dragTipText: '',
29781
30182
  isDragResize: false,
29782
30183
  isRowLoading: false,
29783
- isColLoading: false,
30184
+ isColLoading: false
30185
+ };
30186
+ return {
30187
+ xID,
30188
+ ...reactData,
30189
+ // 私有属性
29784
30190
  reScrollFlag: 0,
29785
30191
  reLayoutFlag: 0,
29786
30192
  footFlag: 0,
30193
+ mergeFooteCellFlag: 0,
29787
30194
  crossTableDragRowInfo: crossTableDragRowGlobal
29788
30195
  };
29789
30196
  },
@@ -30548,9 +30955,21 @@ function renderBody(h, $xeTable) {
30548
30955
  const $xeTable = this;
30549
30956
  handleUpdateMergeBodyCells($xeTable, value);
30550
30957
  },
30551
- mergeFooterItems(value) {
30958
+ mergeHeaderCells(value) {
30552
30959
  const $xeTable = this;
30553
- handleUpdateMergeFooterCells($xeTable, value);
30960
+ handleUpdateMergeHeaderCells($xeTable, value);
30961
+ },
30962
+ mergeFooterCells() {
30963
+ this.mergeFooteCellFlag++;
30964
+ },
30965
+ mergeFooterItems() {
30966
+ this.mergeFooteCellFlag++;
30967
+ },
30968
+ mergeFooteCellFlag() {
30969
+ const $xeTable = this;
30970
+ const props = $xeTable;
30971
+ const mFooterCells = props.mergeFooterCells || props.mergeFooterItems;
30972
+ handleUpdateMergeFooterCells($xeTable, mFooterCells || []);
30554
30973
  },
30555
30974
  computeRowGroupFields(val) {
30556
30975
  const $xeTable = this;
@@ -32705,6 +33124,8 @@ function grid_createInternalData() {
32705
33124
  let itemValue = null;
32706
33125
  if (itemRender) {
32707
33126
  const {
33127
+ startField,
33128
+ endField,
32708
33129
  defaultValue
32709
33130
  } = itemRender;
32710
33131
  if (external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(defaultValue)) {
@@ -32714,6 +33135,10 @@ function grid_createInternalData() {
32714
33135
  } else if (!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isUndefined(defaultValue)) {
32715
33136
  itemValue = defaultValue;
32716
33137
  }
33138
+ if (startField && endField) {
33139
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(fData, startField, null);
33140
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().set(fData, endField, null);
33141
+ }
32717
33142
  }
32718
33143
  fData[field] = itemValue;
32719
33144
  }