vxe-table 3.15.1 → 3.15.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 (61) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/filter/mixin.js +29 -10
  6. package/es/table/module/filter/panel.js +173 -142
  7. package/es/table/src/body.js +5 -3
  8. package/es/table/src/footer.js +4 -2
  9. package/es/table/src/header.js +2 -1
  10. package/es/table/src/methods.js +125 -101
  11. package/es/table/src/table.js +3 -0
  12. package/es/table/style.css +18 -0
  13. package/es/table/style.min.css +1 -1
  14. package/es/ui/index.js +1 -1
  15. package/es/ui/src/log.js +1 -1
  16. package/es/vxe-table/style.css +18 -0
  17. package/es/vxe-table/style.min.css +1 -1
  18. package/lib/index.css +1 -1
  19. package/lib/index.min.css +1 -1
  20. package/lib/index.umd.js +355 -262
  21. package/lib/index.umd.min.js +1 -1
  22. package/lib/style.css +1 -1
  23. package/lib/style.min.css +1 -1
  24. package/lib/table/module/filter/mixin.js +33 -9
  25. package/lib/table/module/filter/mixin.min.js +1 -1
  26. package/lib/table/module/filter/panel.js +153 -122
  27. package/lib/table/module/filter/panel.min.js +1 -1
  28. package/lib/table/src/body.js +5 -2
  29. package/lib/table/src/body.min.js +1 -1
  30. package/lib/table/src/footer.js +4 -2
  31. package/lib/table/src/footer.min.js +1 -1
  32. package/lib/table/src/header.js +2 -1
  33. package/lib/table/src/header.min.js +1 -1
  34. package/lib/table/src/methods.js +151 -122
  35. package/lib/table/src/methods.min.js +1 -1
  36. package/lib/table/src/table.js +3 -0
  37. package/lib/table/src/table.min.js +1 -1
  38. package/lib/table/style/style.css +18 -0
  39. package/lib/table/style/style.min.css +1 -1
  40. package/lib/ui/index.js +1 -1
  41. package/lib/ui/index.min.js +1 -1
  42. package/lib/ui/src/log.js +1 -1
  43. package/lib/ui/src/log.min.js +1 -1
  44. package/lib/vxe-table/style/style.css +18 -0
  45. package/lib/vxe-table/style/style.min.css +1 -1
  46. package/package.json +2 -2
  47. package/packages/table/module/filter/mixin.ts +27 -10
  48. package/packages/table/module/filter/panel.ts +178 -143
  49. package/packages/table/src/body.ts +5 -3
  50. package/packages/table/src/footer.ts +4 -2
  51. package/packages/table/src/header.ts +2 -1
  52. package/packages/table/src/methods.ts +132 -106
  53. package/packages/table/src/table.ts +3 -0
  54. package/styles/components/table-module/filter.scss +16 -0
  55. package/styles/components/table.scss +6 -1
  56. /package/es/{iconfont.1744336394111.ttf → iconfont.1744609828798.ttf} +0 -0
  57. /package/es/{iconfont.1744336394111.woff → iconfont.1744609828798.woff} +0 -0
  58. /package/es/{iconfont.1744336394111.woff2 → iconfont.1744609828798.woff2} +0 -0
  59. /package/lib/{iconfont.1744336394111.ttf → iconfont.1744609828798.ttf} +0 -0
  60. /package/lib/{iconfont.1744336394111.woff → iconfont.1744609828798.woff} +0 -0
  61. /package/lib/{iconfont.1744336394111.woff2 → iconfont.1744609828798.woff2} +0 -0
package/lib/index.umd.js CHANGED
@@ -2220,7 +2220,7 @@ function getClass(property, params) {
2220
2220
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
2221
2221
 
2222
2222
 
2223
- const version = "3.15.1";
2223
+ const version = "3.15.3";
2224
2224
  core_.VxeUI.version = version;
2225
2225
  core_.VxeUI.tableVersion = version;
2226
2226
  core_.VxeUI.setConfig({
@@ -2843,7 +2843,7 @@ function isNodeElement(elem) {
2843
2843
  const {
2844
2844
  log: log_log
2845
2845
  } = core_.VxeUI;
2846
- const log_version = `table v${"3.15.1"}`;
2846
+ const log_version = `table v${"3.15.3"}`;
2847
2847
  const warnLog = log_log.create('warn', log_version);
2848
2848
  const errLog = log_log.create('error', log_version);
2849
2849
  ;// CONCATENATED MODULE: ./packages/table/src/columnInfo.ts
@@ -5507,6 +5507,116 @@ const updateScrollYStatus = ($xeTable, fullData) => {
5507
5507
  reactData.scrollYLoad = scrollYLoad;
5508
5508
  return scrollYLoad;
5509
5509
  };
5510
+ /**
5511
+ * 展开与收起树节点
5512
+ * @param rows
5513
+ * @param expanded
5514
+ * @returns
5515
+ */
5516
+ function handleBaseTreeExpand($xeTable, rows, expanded) {
5517
+ const reactData = $xeTable;
5518
+ const internalData = $xeTable;
5519
+ const {
5520
+ treeNodeColumn
5521
+ } = reactData;
5522
+ const {
5523
+ fullAllDataRowIdData,
5524
+ tableFullData,
5525
+ treeExpandedMaps,
5526
+ treeExpandLazyLoadedMaps
5527
+ } = internalData;
5528
+ const treeOpts = $xeTable.computeTreeOpts;
5529
+ const {
5530
+ reserve,
5531
+ lazy,
5532
+ accordion,
5533
+ toggleMethod
5534
+ } = treeOpts;
5535
+ const childrenField = treeOpts.children || treeOpts.childrenField;
5536
+ const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
5537
+ const result = [];
5538
+ const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
5539
+ const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
5540
+ const {
5541
+ handleGetRowId
5542
+ } = createHandleGetRowId($xeTable);
5543
+ let validRows = toggleMethod ? rows.filter(row => toggleMethod({
5544
+ $table: $xeTable,
5545
+ expanded,
5546
+ column: treeNodeColumn,
5547
+ columnIndex,
5548
+ $columnIndex,
5549
+ row
5550
+ })) : rows;
5551
+ if (accordion) {
5552
+ validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
5553
+ // 同一级只能展开一个
5554
+ const matchObj = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().findTree(tableFullData, item => item === validRows[0], {
5555
+ children: childrenField
5556
+ });
5557
+ if (matchObj) {
5558
+ matchObj.items.forEach(item => {
5559
+ const rowid = handleGetRowId(item);
5560
+ if (treeExpandedMaps[rowid]) {
5561
+ delete treeExpandedMaps[rowid];
5562
+ }
5563
+ });
5564
+ }
5565
+ }
5566
+ if (expanded) {
5567
+ validRows.forEach(row => {
5568
+ const rowid = handleGetRowId(row);
5569
+ if (!treeExpandedMaps[rowid]) {
5570
+ const rowRest = fullAllDataRowIdData[rowid];
5571
+ if (rowRest) {
5572
+ const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
5573
+ // 是否使用懒加载
5574
+ if (isLoad) {
5575
+ result.push(handleAsyncTreeExpandChilds($xeTable, row));
5576
+ } else {
5577
+ if (row[childrenField] && row[childrenField].length) {
5578
+ treeExpandedMaps[rowid] = row;
5579
+ }
5580
+ }
5581
+ }
5582
+ }
5583
+ });
5584
+ } else {
5585
+ validRows.forEach(item => {
5586
+ const rowid = handleGetRowId(item);
5587
+ if (treeExpandedMaps[rowid]) {
5588
+ delete treeExpandedMaps[rowid];
5589
+ }
5590
+ });
5591
+ }
5592
+ if (reserve) {
5593
+ validRows.forEach(row => handleTreeExpandReserve($xeTable, row, expanded));
5594
+ }
5595
+ reactData.treeExpandedFlag++;
5596
+ return Promise.all(result).then(() => {
5597
+ return $xeTable.recalculate();
5598
+ });
5599
+ }
5600
+ /**
5601
+ * 虚拟树的展开与收起
5602
+ * @param rows
5603
+ * @param expanded
5604
+ * @returns
5605
+ */
5606
+ function handleVirtualTreeExpand($xeTable, rows, expanded) {
5607
+ return handleBaseTreeExpand($xeTable, rows, expanded).then(() => {
5608
+ handleVirtualTreeToList($xeTable);
5609
+ $xeTable.handleTableData();
5610
+ updateAfterDataIndex($xeTable);
5611
+ return $xeTable.$nextTick();
5612
+ }).then(() => {
5613
+ return $xeTable.recalculate(true);
5614
+ }).then(() => {
5615
+ setTimeout(() => {
5616
+ $xeTable.updateCellAreas();
5617
+ }, 30);
5618
+ });
5619
+ }
5510
5620
  function updateAfterListIndex($xeTable) {
5511
5621
  const props = $xeTable;
5512
5622
  const internalData = $xeTable;
@@ -8476,7 +8586,11 @@ const Methods = {
8476
8586
  handleReserveStatus($xeTable);
8477
8587
  $xeTable.checkSelectionStatus();
8478
8588
  return new Promise(resolve => {
8479
- this.$nextTick().then(() => $xeTable.recalculate()).then(() => {
8589
+ this.$nextTick().then(() => handleRecalculateLayout($xeTable, false)).then(() => {
8590
+ calcCellHeight($xeTable);
8591
+ updateRowOffsetTop($xeTable);
8592
+ return handleRecalculateLayout($xeTable, false);
8593
+ }).then(() => {
8480
8594
  let targetScrollLeft = lastScrollLeft;
8481
8595
  let targetScrollTop = lastScrollTop;
8482
8596
  const virtualXOpts = $xeTable.computeVirtualXOpts;
@@ -8489,8 +8603,7 @@ const Methods = {
8489
8603
  targetScrollTop = 0;
8490
8604
  }
8491
8605
  reactData.isRowLoading = false;
8492
- calcCellHeight($xeTable);
8493
- updateRowOffsetTop($xeTable);
8606
+ handleRecalculateLayout($xeTable, false);
8494
8607
  // 是否变更虚拟滚动
8495
8608
  if (oldScrollYLoad === sYLoad) {
8496
8609
  restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop).then(() => {
@@ -12645,6 +12758,12 @@ const Methods = {
12645
12758
  const {
12646
12759
  column: newValue
12647
12760
  } = params;
12761
+ const {
12762
+ trigger
12763
+ } = currentColumnOpts;
12764
+ if (trigger === 'manual') {
12765
+ return;
12766
+ }
12648
12767
  const isChange = oldValue !== newValue;
12649
12768
  if (!beforeRowMethod || beforeRowMethod({
12650
12769
  column: newValue,
@@ -12674,6 +12793,12 @@ const Methods = {
12674
12793
  const {
12675
12794
  row: newValue
12676
12795
  } = params;
12796
+ const {
12797
+ trigger
12798
+ } = currentRowOpts;
12799
+ if (trigger === 'manual') {
12800
+ return;
12801
+ }
12677
12802
  const isChange = oldValue !== newValue;
12678
12803
  if (!beforeRowMethod || beforeRowMethod({
12679
12804
  row: newValue,
@@ -14465,8 +14590,8 @@ const Methods = {
14465
14590
  columnIndex,
14466
14591
  $columnIndex,
14467
14592
  row,
14468
- rowIndex: this.getRowIndex(row),
14469
- $rowIndex: this.getVMRowIndex(row)
14593
+ rowIndex: $xeTable.getRowIndex(row),
14594
+ $rowIndex: $xeTable.getVMRowIndex(row)
14470
14595
  })) : rows;
14471
14596
  if (expanded) {
14472
14597
  validRows.forEach(row => {
@@ -14691,7 +14816,8 @@ const Methods = {
14691
14816
  const $xeTable = this;
14692
14817
  const internalData = $xeTable;
14693
14818
  const {
14694
- treeExpandLazyLoadedMaps
14819
+ treeExpandLazyLoadedMaps,
14820
+ treeEATime
14695
14821
  } = internalData;
14696
14822
  const treeOpts = $xeTable.computeTreeOpts;
14697
14823
  const {
@@ -14700,7 +14826,8 @@ const Methods = {
14700
14826
  } = params;
14701
14827
  const {
14702
14828
  lazy,
14703
- trigger
14829
+ trigger,
14830
+ accordion
14704
14831
  } = treeOpts;
14705
14832
  if (trigger === 'manual') {
14706
14833
  return;
@@ -14711,7 +14838,17 @@ const Methods = {
14711
14838
  const expanded = !$xeTable.isTreeExpandByRow(row);
14712
14839
  const columnIndex = $xeTable.getColumnIndex(column);
14713
14840
  const $columnIndex = $xeTable.getVMColumnIndex(column);
14714
- $xeTable.setTreeExpand(row, expanded);
14841
+ if (treeEATime) {
14842
+ clearTimeout(treeEATime);
14843
+ }
14844
+ $xeTable.setTreeExpand(row, expanded).then(() => {
14845
+ if (accordion) {
14846
+ internalData.treeEATime = setTimeout(() => {
14847
+ internalData.treeEATime = undefined;
14848
+ $xeTable.scrollToRow(row);
14849
+ }, 30);
14850
+ }
14851
+ });
14715
14852
  $xeTable.dispatchEvent('toggle-tree-expand', {
14716
14853
  expanded,
14717
14854
  column,
@@ -14751,117 +14888,6 @@ const Methods = {
14751
14888
  });
14752
14889
  return this.setTreeExpand(expandeds, expanded);
14753
14890
  },
14754
- /**
14755
- * 默认,展开与收起树节点
14756
- * @param rows
14757
- * @param expanded
14758
- * @returns
14759
- */
14760
- handleBaseTreeExpand(rows, expanded) {
14761
- const $xeTable = this;
14762
- const reactData = $xeTable;
14763
- const internalData = $xeTable;
14764
- const {
14765
- treeNodeColumn
14766
- } = reactData;
14767
- const {
14768
- fullAllDataRowIdData,
14769
- tableFullData,
14770
- treeExpandedMaps,
14771
- treeExpandLazyLoadedMaps
14772
- } = internalData;
14773
- const treeOpts = $xeTable.computeTreeOpts;
14774
- const {
14775
- reserve,
14776
- lazy,
14777
- accordion,
14778
- toggleMethod
14779
- } = treeOpts;
14780
- const childrenField = treeOpts.children || treeOpts.childrenField;
14781
- const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
14782
- const result = [];
14783
- const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
14784
- const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
14785
- const {
14786
- handleGetRowId
14787
- } = createHandleGetRowId($xeTable);
14788
- let validRows = toggleMethod ? rows.filter(row => toggleMethod({
14789
- $table: $xeTable,
14790
- expanded,
14791
- column: treeNodeColumn,
14792
- columnIndex,
14793
- $columnIndex,
14794
- row
14795
- })) : rows;
14796
- if (accordion) {
14797
- validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
14798
- // 同一级只能展开一个
14799
- const matchObj = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().findTree(tableFullData, item => item === validRows[0], {
14800
- children: childrenField
14801
- });
14802
- if (matchObj) {
14803
- matchObj.items.forEach(item => {
14804
- const rowid = handleGetRowId(item);
14805
- if (treeExpandedMaps[rowid]) {
14806
- delete treeExpandedMaps[rowid];
14807
- }
14808
- });
14809
- }
14810
- }
14811
- if (expanded) {
14812
- validRows.forEach(row => {
14813
- const rowid = handleGetRowId(row);
14814
- if (!treeExpandedMaps[rowid]) {
14815
- const rowRest = fullAllDataRowIdData[rowid];
14816
- if (rowRest) {
14817
- const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
14818
- // 是否使用懒加载
14819
- if (isLoad) {
14820
- result.push(handleAsyncTreeExpandChilds($xeTable, row));
14821
- } else {
14822
- if (row[childrenField] && row[childrenField].length) {
14823
- treeExpandedMaps[rowid] = row;
14824
- }
14825
- }
14826
- }
14827
- }
14828
- });
14829
- } else {
14830
- validRows.forEach(item => {
14831
- const rowid = handleGetRowId(item);
14832
- if (treeExpandedMaps[rowid]) {
14833
- delete treeExpandedMaps[rowid];
14834
- }
14835
- });
14836
- }
14837
- if (reserve) {
14838
- validRows.forEach(row => handleTreeExpandReserve($xeTable, row, expanded));
14839
- }
14840
- reactData.treeExpandedFlag++;
14841
- return Promise.all(result).then(() => {
14842
- return $xeTable.recalculate();
14843
- });
14844
- },
14845
- /**
14846
- * 虚拟树的展开与收起
14847
- * @param rows
14848
- * @param expanded
14849
- * @returns
14850
- */
14851
- handleVirtualTreeExpand(rows, expanded) {
14852
- const $xeTable = this;
14853
- return this.handleBaseTreeExpand(rows, expanded).then(() => {
14854
- handleVirtualTreeToList($xeTable);
14855
- this.handleTableData();
14856
- updateAfterDataIndex($xeTable);
14857
- }).then(() => {
14858
- return this.recalculate();
14859
- }).then(() => {
14860
- setTimeout(() => {
14861
- this.updateCellAreas();
14862
- }, 30);
14863
- });
14864
- },
14865
14891
  /**
14866
14892
  * 设置展开树形节点,二个参数设置这一行展开与否
14867
14893
  * 支持单行
@@ -14870,6 +14896,7 @@ const Methods = {
14870
14896
  * @param {Boolean} expanded 是否展开
14871
14897
  */
14872
14898
  setTreeExpand(rows, expanded) {
14899
+ const $xeTable = this;
14873
14900
  const {
14874
14901
  treeOpts
14875
14902
  } = this;
@@ -14883,9 +14910,9 @@ const Methods = {
14883
14910
  if (rows.length) {
14884
14911
  // 如果为虚拟树
14885
14912
  if (transform) {
14886
- return this.handleVirtualTreeExpand(rows, expanded);
14913
+ return handleVirtualTreeExpand($xeTable, rows, expanded);
14887
14914
  } else {
14888
- return this.handleBaseTreeExpand(rows, expanded);
14915
+ return handleBaseTreeExpand($xeTable, rows, expanded);
14889
14916
  }
14890
14917
  }
14891
14918
  }
@@ -15594,7 +15621,8 @@ const Methods = {
15594
15621
  if (isScrollXBig && mouseOpts.area) {
15595
15622
  errLog('vxe.error.notProp', ['mouse-config.area']);
15596
15623
  }
15597
- $xeTable.$nextTick(() => {
15624
+ calcScrollbar($xeTable);
15625
+ return $xeTable.$nextTick(() => {
15598
15626
  updateStyle($xeTable);
15599
15627
  });
15600
15628
  }
@@ -15713,6 +15741,7 @@ const Methods = {
15713
15741
  if (isScrollYBig && mouseOpts.area) {
15714
15742
  errLog('vxe.error.notProp', ['mouse-config.area']);
15715
15743
  }
15744
+ calcScrollbar($xeTable);
15716
15745
  return $xeTable.$nextTick().then(() => {
15717
15746
  updateStyle($xeTable);
15718
15747
  });
@@ -16237,6 +16266,7 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
16237
16266
  showOverflow: allShowOverflow,
16238
16267
  border,
16239
16268
  height,
16269
+ treeConfig,
16240
16270
  cellClassName: allCellClassName,
16241
16271
  cellStyle,
16242
16272
  align: allAlign,
@@ -16277,6 +16307,8 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
16277
16307
  const checkboxOpts = $xeTable.computeCheckboxOpts;
16278
16308
  const editOpts = $xeTable.computeEditOpts;
16279
16309
  const tooltipOpts = $xeTable.computeTooltipOpts;
16310
+ const virtualXOpts = $xeTable.computeVirtualXOpts;
16311
+ const virtualYOpts = $xeTable.computeVirtualYOpts;
16280
16312
  const {
16281
16313
  isAllColumnDrag,
16282
16314
  isAllRowDrag
@@ -16480,9 +16512,9 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
16480
16512
  let isVNPreEmptyStatus = false;
16481
16513
  if (!isMergeCell) {
16482
16514
  if (!dragRow || getRowid($xeTable, dragRow) !== rowid) {
16483
- if (scrollYLoad && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
16515
+ if (scrollYLoad && !treeConfig && !virtualYOpts.immediate && (_rowIndex < scrollYStore.visibleStartIndex - scrollYStore.preloadSize || _rowIndex > scrollYStore.visibleEndIndex + scrollYStore.preloadSize)) {
16484
16516
  isVNPreEmptyStatus = true;
16485
- } else if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
16517
+ } else if (scrollXLoad && !virtualXOpts.immediate && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
16486
16518
  isVNPreEmptyStatus = true;
16487
16519
  }
16488
16520
  }
@@ -17155,6 +17187,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
17155
17187
  fullColumnIdData,
17156
17188
  scrollXStore
17157
17189
  } = tableInternalData;
17190
+ const virtualXOpts = $xeTable.computeVirtualXOpts;
17158
17191
  const columnOpts = $xeTable.computeColumnOpts;
17159
17192
  const columnDragOpts = $xeTable.computeColumnDragOpts;
17160
17193
  const cellOpts = $xeTable.computeCellOpts;
@@ -17250,7 +17283,7 @@ const header_renderRows = (h, _vm, isGroup, isOptimizeMode, cols, $rowIndex) =>
17250
17283
  let isVNPreEmptyStatus = false;
17251
17284
  if (!isGroup) {
17252
17285
  if (!dragCol || dragCol.id !== colid) {
17253
- if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
17286
+ if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
17254
17287
  isVNPreEmptyStatus = true;
17255
17288
  }
17256
17289
  }
@@ -17621,10 +17654,12 @@ function footer_renderRows(h, _vm, tableColumn, footerTableData, row, $rowIndex,
17621
17654
  mergeFooterCellMaps,
17622
17655
  scrollXStore
17623
17656
  } = tableInternalData;
17657
+ const virtualXOpts = $xeTable.computeVirtualXOpts;
17624
17658
  const tooltipOpts = $xeTable.computeTooltipOpts;
17659
+ const resizableOpts = $xeTable.resizableOpts;
17625
17660
  const {
17626
17661
  isAllColumnDrag
17627
- } = $xeTable.resizableOpts;
17662
+ } = resizableOpts;
17628
17663
  const columnOpts = $xeTable.computeColumnOpts;
17629
17664
  const defaultRowHeight = $xeTable.computeDefaultRowHeight;
17630
17665
  const cellOpts = $xeTable.computeCellOpts;
@@ -17750,7 +17785,7 @@ function footer_renderRows(h, _vm, tableColumn, footerTableData, row, $rowIndex,
17750
17785
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto');
17751
17786
  let isVNPreEmptyStatus = false;
17752
17787
  if (!isMergeCell) {
17753
- if (scrollXLoad && !column.fixed && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
17788
+ if (scrollXLoad && !column.fixed && !virtualXOpts.immediate && (_columnIndex < scrollXStore.visibleStartIndex - scrollXStore.preloadSize || _columnIndex > scrollXStore.visibleEndIndex + scrollXStore.preloadSize)) {
17754
17789
  isVNPreEmptyStatus = true;
17755
17790
  }
17756
17791
  }
@@ -19493,28 +19528,169 @@ const renderPopupPanel = (h, _vm) => {
19493
19528
  const {
19494
19529
  getI18n: filter_panel_getI18n,
19495
19530
  getIcon: filter_panel_getIcon,
19496
- renderer: panel_renderer
19531
+ renderer: panel_renderer,
19532
+ globalMixins
19497
19533
  } = core_.VxeUI;
19534
+ function renderOptions($xeFilterPanel, h, filterRender, compConf) {
19535
+ const props = $xeFilterPanel;
19536
+ const $xeTable = $xeFilterPanel.$xeTable;
19537
+ const tableInternalData = $xeTable;
19538
+ const {
19539
+ filterStore
19540
+ } = props;
19541
+ const {
19542
+ column,
19543
+ multiple,
19544
+ maxHeight
19545
+ } = filterStore;
19546
+ const slots = column ? column.slots : null;
19547
+ const filterSlot = slots ? slots.filter : null;
19548
+ const params = Object.assign({}, tableInternalData._currFilterParams, {
19549
+ $panel: $xeFilterPanel,
19550
+ $table: $xeTable
19551
+ });
19552
+ const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
19553
+ if (filterSlot) {
19554
+ return [h('div', {
19555
+ class: 'vxe-table--filter-template',
19556
+ style: maxHeight ? {
19557
+ maxHeight: `${maxHeight}px`
19558
+ } : {}
19559
+ }, $xeTable.callSlot(filterSlot, params, h))];
19560
+ } else if (rtFilter) {
19561
+ return [h('div', {
19562
+ class: 'vxe-table--filter-template',
19563
+ style: maxHeight ? {
19564
+ maxHeight: `${maxHeight}px`
19565
+ } : {}
19566
+ }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))];
19567
+ }
19568
+ const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
19569
+ const isAllIndeterminate = multiple && filterStore.isIndeterminate;
19570
+ return [h('ul', {
19571
+ class: 'vxe-table--filter-header'
19572
+ }, [h('li', {
19573
+ class: ['vxe-table--filter-option', {
19574
+ 'is--checked': isAllChecked,
19575
+ 'is--indeterminate': isAllIndeterminate
19576
+ }],
19577
+ attrs: {
19578
+ title: filter_panel_getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
19579
+ },
19580
+ on: {
19581
+ click: evnt => {
19582
+ $xeFilterPanel.changeAllOption(evnt, !filterStore.isAllSelected);
19583
+ }
19584
+ }
19585
+ }, (multiple ? [h('span', {
19586
+ class: ['vxe-checkbox--icon', isAllIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19587
+ })] : []).concat([h('span', {
19588
+ class: 'vxe-checkbox--label'
19589
+ }, filter_panel_getI18n('vxe.table.allFilter'))]))]), h('ul', {
19590
+ class: 'vxe-table--filter-body',
19591
+ style: maxHeight ? {
19592
+ maxHeight: `${maxHeight}px`
19593
+ } : {}
19594
+ }, filterStore.options.map(item => {
19595
+ const isChecked = item._checked;
19596
+ const isIndeterminate = false;
19597
+ return h('li', {
19598
+ class: ['vxe-table--filter-option', {
19599
+ 'is--checked': isChecked
19600
+ }],
19601
+ attrs: {
19602
+ title: item.label
19603
+ },
19604
+ on: {
19605
+ click: evnt => {
19606
+ $xeFilterPanel.changeOption(evnt, !item._checked, item);
19607
+ }
19608
+ }
19609
+ }, (multiple ? [h('span', {
19610
+ class: ['vxe-checkbox--icon', isIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19611
+ })] : []).concat([h('span', {
19612
+ class: 'vxe-checkbox--label'
19613
+ }, formatText(item.label, 1))]));
19614
+ }))];
19615
+ }
19616
+ function renderFooter($xeFilterPanel, h) {
19617
+ const props = $xeFilterPanel;
19618
+ const $xeTable = $xeFilterPanel.$xeTable;
19619
+ const {
19620
+ filterStore
19621
+ } = props;
19622
+ const {
19623
+ column,
19624
+ multiple
19625
+ } = filterStore;
19626
+ const filterOpts = $xeTable.computeFilterOpts;
19627
+ const hasCheckOption = $xeFilterPanel.computeHasCheckOption;
19628
+ const filterRender = column.filterRender;
19629
+ const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19630
+ const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
19631
+ return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
19632
+ class: 'vxe-table--filter-footer'
19633
+ }, [h('button', {
19634
+ class: {
19635
+ 'is--disabled': isDisabled
19636
+ },
19637
+ attrs: {
19638
+ disabled: isDisabled
19639
+ },
19640
+ on: {
19641
+ click: $xeFilterPanel.confirmFilter
19642
+ }
19643
+ }, filterOpts.confirmButtonText || filter_panel_getI18n('vxe.table.confirmFilter')), h('button', {
19644
+ on: {
19645
+ click: $xeFilterPanel.resetFilter
19646
+ }
19647
+ }, filterOpts.resetButtonText || filter_panel_getI18n('vxe.table.resetFilter'))])] : [];
19648
+ }
19498
19649
  /* harmony default export */ var filter_panel = ({
19499
19650
  name: 'VxeTableFilterPanel',
19651
+ mixins: [globalMixins.sizeMixin],
19500
19652
  props: {
19501
19653
  filterStore: Object
19502
19654
  },
19655
+ inject: {
19656
+ $xeTable: {
19657
+ default: null
19658
+ }
19659
+ },
19503
19660
  computed: {
19504
- hasCheckOption() {
19661
+ computeHasCheckOption() {
19505
19662
  const {
19506
19663
  filterStore
19507
19664
  } = this;
19508
19665
  return filterStore && filterStore.options.some(option => option.checked);
19509
19666
  }
19510
19667
  },
19668
+ mounted() {
19669
+ const $xeFilterPanel = this;
19670
+ const $xeTable = $xeFilterPanel.$xeTable;
19671
+ const filterOpts = $xeTable.computeFilterOpts;
19672
+ const {
19673
+ transfer
19674
+ } = filterOpts;
19675
+ const el = this.$refs.refElem;
19676
+ if (transfer && el) {
19677
+ document.body.appendChild(el);
19678
+ }
19679
+ },
19680
+ beforeDestroy() {
19681
+ const el = this.$refs.refElem;
19682
+ if (el && el.parentNode) {
19683
+ el.parentNode.removeChild(el);
19684
+ }
19685
+ },
19511
19686
  render(h) {
19512
- const $panel = this;
19513
- const $xeTable = this.$parent;
19687
+ const $xeFilterPanel = this;
19688
+ const props = $xeFilterPanel;
19689
+ const $xeTable = $xeFilterPanel.$xeTable;
19514
19690
  const tableInternalData = $xeTable;
19515
19691
  const {
19516
19692
  filterStore
19517
- } = this;
19693
+ } = props;
19518
19694
  const {
19519
19695
  visible,
19520
19696
  multiple,
@@ -19524,137 +19700,27 @@ const {
19524
19700
  const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19525
19701
  const filterClassName = compConf ? compConf.tableFilterClassName || compConf.filterClassName : '';
19526
19702
  const params = Object.assign({}, tableInternalData._currFilterParams, {
19527
- $panel,
19703
+ $panel: $xeFilterPanel,
19528
19704
  $table: $xeTable
19529
19705
  });
19706
+ const tableProps = $xeTable;
19707
+ const vSize = $xeFilterPanel.computeSize;
19530
19708
  const filterOpts = $xeTable.computeFilterOpts;
19531
19709
  const {
19532
19710
  destroyOnClose
19533
19711
  } = filterOpts;
19534
19712
  return h('div', {
19713
+ ref: 'refElem',
19535
19714
  class: ['vxe-table--filter-wrapper', 'filter--prevent-default', compConf && compConf.className ? compConf.className : '', getClass(filterClassName, params), {
19536
- 'is--animat': $xeTable.animat,
19715
+ [`size--${vSize}`]: vSize,
19716
+ 'is--animat': tableProps.animat,
19537
19717
  'is--multiple': multiple,
19538
19718
  'is--active': visible
19539
19719
  }],
19540
19720
  style: filterStore.style
19541
- }, filterStore.visible && (destroyOnClose ? visible : true) && column ? this.renderOptions(h, filterRender, compConf).concat(this.renderFooter(h)) : []);
19721
+ }, filterStore.visible && (destroyOnClose ? visible : true) && column ? renderOptions($xeFilterPanel, h, filterRender, compConf).concat(renderFooter($xeFilterPanel, h)) : []);
19542
19722
  },
19543
19723
  methods: {
19544
- renderOptions(h, filterRender, compConf) {
19545
- const $panel = this;
19546
- const $xeTable = this.$parent;
19547
- const tableInternalData = $xeTable;
19548
- const {
19549
- filterStore
19550
- } = this;
19551
- const {
19552
- column,
19553
- multiple,
19554
- maxHeight
19555
- } = filterStore;
19556
- const slots = column ? column.slots : null;
19557
- const filterSlot = slots ? slots.filter : null;
19558
- const params = Object.assign({}, tableInternalData._currFilterParams, {
19559
- $panel,
19560
- $table: $xeTable
19561
- });
19562
- const rtFilter = compConf ? compConf.renderTableFilter || compConf.renderFilter : null;
19563
- if (filterSlot) {
19564
- return [h('div', {
19565
- class: 'vxe-table--filter-template',
19566
- style: maxHeight ? {
19567
- maxHeight: `${maxHeight}px`
19568
- } : {}
19569
- }, $xeTable.callSlot(filterSlot, params, h))];
19570
- } else if (rtFilter) {
19571
- return [h('div', {
19572
- class: 'vxe-table--filter-template',
19573
- style: maxHeight ? {
19574
- maxHeight: `${maxHeight}px`
19575
- } : {}
19576
- }, getSlotVNs(rtFilter.call($xeTable, h, filterRender, params)))];
19577
- }
19578
- const isAllChecked = multiple ? filterStore.isAllSelected : !filterStore.options.some(item => item._checked);
19579
- const isAllIndeterminate = multiple && filterStore.isIndeterminate;
19580
- return [h('ul', {
19581
- class: 'vxe-table--filter-header'
19582
- }, [h('li', {
19583
- class: ['vxe-table--filter-option', {
19584
- 'is--checked': isAllChecked,
19585
- 'is--indeterminate': isAllIndeterminate
19586
- }],
19587
- attrs: {
19588
- title: filter_panel_getI18n(multiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter')
19589
- },
19590
- on: {
19591
- click: evnt => {
19592
- this.changeAllOption(evnt, !filterStore.isAllSelected);
19593
- }
19594
- }
19595
- }, (multiple ? [h('span', {
19596
- class: ['vxe-checkbox--icon', isAllIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19597
- })] : []).concat([h('span', {
19598
- class: 'vxe-checkbox--label'
19599
- }, filter_panel_getI18n('vxe.table.allFilter'))]))]), h('ul', {
19600
- class: 'vxe-table--filter-body',
19601
- style: maxHeight ? {
19602
- maxHeight: `${maxHeight}px`
19603
- } : {}
19604
- }, filterStore.options.map(item => {
19605
- const isChecked = item._checked;
19606
- const isIndeterminate = false;
19607
- return h('li', {
19608
- class: ['vxe-table--filter-option', {
19609
- 'is--checked': isChecked
19610
- }],
19611
- attrs: {
19612
- title: item.label
19613
- },
19614
- on: {
19615
- click: evnt => {
19616
- this.changeOption(evnt, !item._checked, item);
19617
- }
19618
- }
19619
- }, (multiple ? [h('span', {
19620
- class: ['vxe-checkbox--icon', isIndeterminate ? filter_panel_getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? filter_panel_getIcon().TABLE_CHECKBOX_CHECKED : filter_panel_getIcon().TABLE_CHECKBOX_UNCHECKED]
19621
- })] : []).concat([h('span', {
19622
- class: 'vxe-checkbox--label'
19623
- }, formatText(item.label, 1))]));
19624
- }))];
19625
- },
19626
- renderFooter(h) {
19627
- const $xeTable = this.$parent;
19628
- const {
19629
- hasCheckOption,
19630
- filterStore
19631
- } = this;
19632
- const {
19633
- column,
19634
- multiple
19635
- } = filterStore;
19636
- const filterOpts = $xeTable.computeFilterOpts;
19637
- const filterRender = column.filterRender;
19638
- const compConf = isEnableConf(filterRender) ? panel_renderer.get(filterRender.name) : null;
19639
- const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
19640
- return multiple && (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : true) ? [h('div', {
19641
- class: 'vxe-table--filter-footer'
19642
- }, [h('button', {
19643
- class: {
19644
- 'is--disabled': isDisabled
19645
- },
19646
- attrs: {
19647
- disabled: isDisabled
19648
- },
19649
- on: {
19650
- click: this.confirmFilter
19651
- }
19652
- }, filterOpts.confirmButtonText || filter_panel_getI18n('vxe.table.confirmFilter')), h('button', {
19653
- on: {
19654
- click: this.resetFilter
19655
- }
19656
- }, filterOpts.resetButtonText || filter_panel_getI18n('vxe.table.resetFilter'))])] : [];
19657
- },
19658
19724
  // 全部筛选事件
19659
19725
  filterCheckAllEvent(evnt, value) {
19660
19726
  const filterStore = this.filterStore;
@@ -19725,12 +19791,12 @@ const {
19725
19791
  const {
19726
19792
  getI18n: import_panel_getI18n,
19727
19793
  getIcon: import_panel_getIcon,
19728
- globalMixins,
19794
+ globalMixins: import_panel_globalMixins,
19729
19795
  renderEmptyElement: import_panel_renderEmptyElement
19730
19796
  } = core_.VxeUI;
19731
19797
  /* harmony default export */ var import_panel = ({
19732
19798
  name: 'VxeTableImportPanel',
19733
- mixins: [globalMixins.sizeMixin],
19799
+ mixins: [import_panel_globalMixins.sizeMixin],
19734
19800
  props: {
19735
19801
  defaultOptions: Object,
19736
19802
  storeData: Object
@@ -20668,6 +20734,16 @@ const {
20668
20734
  filterStore.visible = false;
20669
20735
  } else {
20670
20736
  const el = $xeTable.$refs.refElem;
20737
+ const {
20738
+ scrollTop,
20739
+ scrollLeft,
20740
+ visibleHeight,
20741
+ visibleWidth
20742
+ } = getDomNode();
20743
+ const filterOpts = $xeTable.computeFilterOpts;
20744
+ const {
20745
+ transfer
20746
+ } = filterOpts;
20671
20747
  const tableRect = el.getBoundingClientRect();
20672
20748
  const btnElem = evnt.currentTarget;
20673
20749
  const {
@@ -20715,23 +20791,37 @@ const {
20715
20791
  return;
20716
20792
  }
20717
20793
  const btnRect = btnElem.getBoundingClientRect();
20718
- const filterWidth = filterWrapperElem.offsetWidth;
20719
20794
  const filterHeadElem = filterWrapperElem.querySelector('.vxe-table--filter-header');
20720
20795
  const filterFootElem = filterWrapperElem.querySelector('.vxe-table--filter-footer');
20796
+ const filterWidth = filterWrapperElem.offsetWidth;
20721
20797
  const centerWidth = filterWidth / 2;
20722
- let left = btnRect.left - tableRect.left - centerWidth;
20723
- const top = btnRect.top - tableRect.top + btnElem.clientHeight;
20724
- // 判断面板不能大于表格高度
20725
- const maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
20726
- if (left < 1) {
20727
- left = 1;
20728
- } else if (left > el.clientWidth - filterWidth - 1) {
20729
- left = el.clientWidth - filterWidth - 1;
20798
+ let left = 0;
20799
+ let top = 0;
20800
+ let maxHeight = 0;
20801
+ if (transfer) {
20802
+ left = btnRect.left - centerWidth + scrollLeft;
20803
+ top = btnRect.top + btnElem.clientHeight + scrollTop;
20804
+ maxHeight = Math.min(Math.max(tableRect.height, Math.floor(visibleHeight / 2)), Math.max(80, visibleHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 28));
20805
+ if (left < 16) {
20806
+ left = 16;
20807
+ } else if (left > visibleWidth - filterWidth - 16) {
20808
+ left = visibleWidth - filterWidth - 16;
20809
+ }
20810
+ } else {
20811
+ left = btnRect.left - tableRect.left - centerWidth;
20812
+ top = btnRect.top - tableRect.top + btnElem.clientHeight;
20813
+ maxHeight = Math.max(40, el.clientHeight - top - (filterHeadElem ? filterHeadElem.clientHeight : 0) - (filterFootElem ? filterFootElem.clientHeight : 0) - 14);
20814
+ if (left < 1) {
20815
+ left = 1;
20816
+ } else if (left > el.clientWidth - filterWidth - 1) {
20817
+ left = el.clientWidth - filterWidth - 1;
20818
+ }
20730
20819
  }
20731
20820
  filterStore.style = {
20732
20821
  top: toCssUnit(top),
20733
20822
  left: toCssUnit(left)
20734
20823
  };
20824
+ // 判断面板不能大于表格高度
20735
20825
  filterStore.maxHeight = maxHeight;
20736
20826
  });
20737
20827
  }
@@ -27510,6 +27600,9 @@ function renderBody(h, $xeTable) {
27510
27600
  if (this.highlightHoverColumn) {
27511
27601
  warnLog('vxe.error.delProp', ['highlight-hover-column', 'column-config.isHover']);
27512
27602
  }
27603
+ if (props.resizable) {
27604
+ warnLog('vxe.error.delProp', ['resizable', 'column-config.resizable']);
27605
+ }
27513
27606
  // if (props.scrollY) {
27514
27607
  // warnLog('vxe.error.delProp', ['scroll-y', 'virtual-y-config'])
27515
27608
  // }