vxe-table 3.25.0-beta.3 → 3.25.0-beta.5

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 (54) 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 +4 -7
  6. package/es/table/module/filter/panel.js +47 -48
  7. package/es/table/src/methods.js +29 -197
  8. package/es/table/src/table.js +50 -27
  9. package/es/table/src/util.js +1 -2
  10. package/es/table/style.css +31 -12
  11. package/es/table/style.min.css +1 -1
  12. package/es/ui/index.js +2 -2
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-table/style.css +31 -12
  15. package/es/vxe-table/style.min.css +1 -1
  16. package/lib/index.css +1 -1
  17. package/lib/index.min.css +1 -1
  18. package/lib/index.umd.js +108 -94
  19. package/lib/index.umd.min.js +1 -1
  20. package/lib/style.css +1 -1
  21. package/lib/style.min.css +1 -1
  22. package/lib/table/module/filter/mixin.js +5 -7
  23. package/lib/table/module/filter/mixin.min.js +1 -1
  24. package/lib/table/module/filter/panel.js +41 -37
  25. package/lib/table/module/filter/panel.min.js +1 -1
  26. package/lib/table/src/methods.js +7 -13
  27. package/lib/table/src/methods.min.js +1 -1
  28. package/lib/table/src/table.js +51 -32
  29. package/lib/table/src/table.min.js +1 -1
  30. package/lib/table/src/util.js +1 -2
  31. package/lib/table/src/util.min.js +1 -1
  32. package/lib/table/style/style.css +31 -12
  33. package/lib/table/style/style.min.css +1 -1
  34. package/lib/ui/index.js +2 -2
  35. package/lib/ui/index.min.js +1 -1
  36. package/lib/ui/src/log.js +1 -1
  37. package/lib/ui/src/log.min.js +1 -1
  38. package/lib/vxe-table/style/style.css +31 -12
  39. package/lib/vxe-table/style/style.min.css +1 -1
  40. package/package.json +2 -2
  41. package/packages/grid/src/grid.ts +2 -1
  42. package/packages/table/module/filter/mixin.ts +4 -7
  43. package/packages/table/module/filter/panel.ts +50 -48
  44. package/packages/table/src/methods.ts +32 -213
  45. package/packages/table/src/table.ts +68 -42
  46. package/packages/table/src/util.ts +1 -2
  47. package/packages/ui/index.ts +1 -1
  48. package/styles/components/table-module/filter.scss +25 -14
  49. /package/es/{iconfont.1792117667851.ttf → iconfont.1792220310836.ttf} +0 -0
  50. /package/es/{iconfont.1792117667851.woff → iconfont.1792220310836.woff} +0 -0
  51. /package/es/{iconfont.1792117667851.woff2 → iconfont.1792220310836.woff2} +0 -0
  52. /package/lib/{iconfont.1792117667851.ttf → iconfont.1792220310836.ttf} +0 -0
  53. /package/lib/{iconfont.1792117667851.woff → iconfont.1792220310836.woff} +0 -0
  54. /package/lib/{iconfont.1792117667851.woff2 → iconfont.1792220310836.woff2} +0 -0
@@ -25,6 +25,25 @@ import validatorMixin from '../module/validator/mixin';
25
25
  import customMixin from '../module/custom/mixin';
26
26
  const { warnLog, errLog } = createComponentLog('table');
27
27
  const { getConfig, getIcon, getI18n, renderer, globalResize, globalEvents, domUtils, globalMixins, renderEmptyElement } = VxeUI;
28
+ function bindScrollbarResize($xeTable) {
29
+ const internalData = $xeTable;
30
+ const { elemStore } = internalData;
31
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
32
+ if (isVScrollbar) {
33
+ const el = $xeTable.$refs.refElem;
34
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
35
+ const scrollObserver = globalResize.create(() => {
36
+ $xeTable.reScrollFlag++;
37
+ });
38
+ if (el) {
39
+ scrollObserver.observe(el);
40
+ }
41
+ if (viewInnerEl) {
42
+ scrollObserver.observe(viewInnerEl);
43
+ }
44
+ internalData.scrollObserver = scrollObserver;
45
+ }
46
+ }
28
47
  function handleUpdateMergeBodyCells($xeTable, merges) {
29
48
  const internalData = $xeTable;
30
49
  internalData.mergeBodyList = [];
@@ -527,13 +546,12 @@ function renderNativeBody(h, $xeTable) {
527
546
  ]);
528
547
  }
529
548
  function renderVirtualBody(h, $xeTable) {
530
- const props = $xeTable;
531
549
  const reactData = $xeTable;
532
550
  const internalData = $xeTable;
533
551
  const $xeGantt = $xeTable.$xeGantt;
534
552
  const $xeGanttView = internalData.xeGanttView;
535
- const { useScrollbar } = props;
536
553
  const { xThumbWidth, yThumbHeight } = reactData;
554
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
537
555
  const scrollbarOpts = $xeTable.computeScrollbarOpts;
538
556
  const scrollXAutoHide = $xeTable.computeScrollXAutoHide;
539
557
  const scrollYAutoHide = $xeTable.computeScrollYAutoHide;
@@ -547,10 +565,10 @@ function renderVirtualBody(h, $xeTable) {
547
565
  return h('div', {
548
566
  key: 'lvb',
549
567
  class: ['vxe-table--layout-wrapper', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
550
- 'is--virtual-scrollbar': useScrollbar,
551
- 'ov-padding': useScrollbar && scrollbarOpts.padding,
552
- 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
553
- 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
568
+ 'is--virtual-scrollbar': isVScrollbar,
569
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
570
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
571
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
554
572
  'overflow-y': yThumbHeight,
555
573
  'overflow-x': xThumbWidth
556
574
  }]
@@ -608,6 +626,8 @@ export default {
608
626
  name: 'VxeTable',
609
627
  mixins: [
610
628
  globalMixins.sizeMixin,
629
+ globalMixins.vScrollbarMixin,
630
+ globalMixins.initVScrollbarMixin,
611
631
  filterMixin,
612
632
  menuMixin,
613
633
  editMixin,
@@ -992,8 +1012,8 @@ export default {
992
1012
  computeTooltipOpts() {
993
1013
  const $xeTable = this;
994
1014
  const props = $xeTable;
995
- const { useScrollbar } = props;
996
- return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
1015
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
1016
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
997
1017
  },
998
1018
  tipConfig() {
999
1019
  return Object.assign({}, this.tooltipOpts);
@@ -1056,7 +1076,8 @@ export default {
1056
1076
  computeFilterOpts() {
1057
1077
  const $xeTable = this;
1058
1078
  const props = $xeTable;
1059
- return Object.assign({}, getConfig().table.filterConfig, props.filterConfig);
1079
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
1080
+ return Object.assign({ useScrollbar: isVScrollbar }, getConfig().table.filterConfig, props.filterConfig);
1060
1081
  },
1061
1082
  computeFloatingFilterOpts() {
1062
1083
  const $xeTable = this;
@@ -1638,34 +1659,37 @@ export default {
1638
1659
  const $xeTable = this;
1639
1660
  $xeTable.reLayoutFlag++;
1640
1661
  },
1662
+ computeIsVScrollbar() {
1663
+ const $xeTable = this;
1664
+ $xeTable.$nextTick(() => {
1665
+ bindScrollbarResize($xeTable);
1666
+ $xeTable.$nextTick(() => {
1667
+ $xeTable.reLayoutFlag++;
1668
+ });
1669
+ });
1670
+ },
1641
1671
  computeScrollbarXToTop() {
1642
1672
  const $xeTable = this;
1643
- $xeTable.reScrollFlag++;
1644
1673
  $xeTable.reLayoutFlag++;
1645
1674
  },
1646
1675
  computeScrollbarYToLeft() {
1647
1676
  const $xeTable = this;
1648
- $xeTable.reScrollFlag++;
1649
1677
  $xeTable.reLayoutFlag++;
1650
1678
  },
1651
1679
  computeScrollXVisible() {
1652
1680
  const $xeTable = this;
1653
- $xeTable.reScrollFlag++;
1654
1681
  $xeTable.reLayoutFlag++;
1655
1682
  },
1656
1683
  computeScrollYVisible() {
1657
1684
  const $xeTable = this;
1658
- $xeTable.reScrollFlag++;
1659
1685
  $xeTable.reLayoutFlag++;
1660
1686
  },
1661
1687
  computeScrollXHeight() {
1662
1688
  const $xeTable = this;
1663
- $xeTable.reScrollFlag++;
1664
1689
  $xeTable.reLayoutFlag++;
1665
1690
  },
1666
1691
  computeScrollYWidth() {
1667
1692
  const $xeTable = this;
1668
- $xeTable.reScrollFlag++;
1669
1693
  $xeTable.reLayoutFlag++;
1670
1694
  },
1671
1695
  computeCellHeitht() {
@@ -1674,17 +1698,14 @@ export default {
1674
1698
  },
1675
1699
  reLayoutFlag() {
1676
1700
  const $xeTable = this;
1677
- $xeTable.$nextTick(() => {
1701
+ $xeTable.$nextTick().then(() => {
1678
1702
  $xeTable.recalculate(true);
1679
1703
  });
1680
1704
  },
1681
1705
  reScrollFlag() {
1682
1706
  const $xeTable = this;
1683
- $xeTable.$nextTick(() => {
1707
+ $xeTable.updateScrollbar().then(() => {
1684
1708
  $xeTable.updateScrollbar();
1685
- $xeTable.$nextTick(() => {
1686
- $xeTable.updateScrollbar();
1687
- });
1688
1709
  });
1689
1710
  },
1690
1711
  footerData() {
@@ -2130,12 +2151,13 @@ export default {
2130
2151
  warnLog('vxe.error.reqProp', ['tooltip-config']);
2131
2152
  }
2132
2153
  $xeTable.$nextTick(() => {
2133
- const { useScrollbar, autoResize } = props;
2154
+ const { autoResize } = props;
2134
2155
  const { elemStore } = internalData;
2135
2156
  // 使用已安装的组件,如果未安装则不渲染
2136
2157
  const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
2137
2158
  const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
2138
2159
  const { showOverflow, showHeaderOverflow, showFooterOverflow } = props;
2160
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
2139
2161
  const tooltipOpts = $xeTable.computeTooltipOpts;
2140
2162
  const headerTooltipOpts = $xeTable.computeHeaderTooltipOpts;
2141
2163
  const footerTooltipOpts = $xeTable.computeFooterTooltipOpts;
@@ -2176,7 +2198,7 @@ export default {
2176
2198
  }
2177
2199
  }
2178
2200
  const el = $xeTable.$refs.refElem;
2179
- if (useScrollbar) {
2201
+ if (isVScrollbar) {
2180
2202
  const viewInnerEl = getRefElem(elemStore['main-body-table']);
2181
2203
  const scrollObserver = globalResize.create(() => {
2182
2204
  $xeTable.reScrollFlag++;
@@ -2291,9 +2313,10 @@ export default {
2291
2313
  const slots = $xeTable.$scopedSlots;
2292
2314
  const reactData = $xeTable;
2293
2315
  const { xID } = $xeTable;
2294
- const { loading, stripe, useScrollbar, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
2316
+ const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules, importConfig, exportConfig, printConfig } = props;
2295
2317
  const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore, tooltipStore } = reactData;
2296
2318
  const { leftList, rightList } = columnStore;
2319
+ const isVScrollbar = $xeTable.computeIsVScrollbar;
2297
2320
  const loadingSlot = slots.loading;
2298
2321
  const tipSlots = {
2299
2322
  header: slots.headerTooltip || slots['header-tooltip'],
@@ -2335,7 +2358,7 @@ export default {
2335
2358
  }
2336
2359
  return h('div', {
2337
2360
  ref: 'refElem',
2338
- class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, useScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
2361
+ class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, isVScrollbar ? 'is--virtual-scrollbar' : 'is--native-scrollbar', `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
2339
2362
  [`size--${vSize}`]: vSize,
2340
2363
  [`valid-msg--${validOpts.msgMode}`]: !!editRules,
2341
2364
  'vxe-editable': !!editConfig,
@@ -2403,7 +2426,7 @@ export default {
2403
2426
  h('div', {
2404
2427
  key: 'tw',
2405
2428
  class: 'vxe-table--render-wrapper'
2406
- }, useScrollbar
2429
+ }, isVScrollbar
2407
2430
  ? [renderVirtualBody(h, $xeTable)]
2408
2431
  : (scrollbarXToTop
2409
2432
  ? [
@@ -2591,7 +2614,7 @@ export default {
2591
2614
  props: {
2592
2615
  isArrow: false,
2593
2616
  enterable: false,
2594
- useScrollbar
2617
+ useScrollbar: isVScrollbar
2595
2618
  }
2596
2619
  })
2597
2620
  : renderEmptyElement($xeTable),
@@ -2663,7 +2686,7 @@ export default {
2663
2686
  enterable: validTipConfig.enterable,
2664
2687
  enterDelay: validTipConfig.enterDelay,
2665
2688
  leaveDelay: validTipConfig.leaveDelay,
2666
- useScrollbar
2689
+ useScrollbar: validTipConfig.useScrollbar
2667
2690
  }
2668
2691
  })
2669
2692
  : renderEmptyElement($xeTable)
@@ -244,8 +244,7 @@ export function createReactData() {
244
244
  isIndeterminate: false,
245
245
  style: null,
246
246
  column: null,
247
- visible: false,
248
- maxHeight: null
247
+ visible: false
249
248
  },
250
249
  // 存放列相关的信息
251
250
  columnStore: {
@@ -1606,6 +1606,7 @@
1606
1606
  .vxe-table--filter-wrapper {
1607
1607
  display: none;
1608
1608
  position: absolute;
1609
+ flex-direction: column;
1609
1610
  top: 0;
1610
1611
  min-width: 100px;
1611
1612
  font-size: var(--vxe-ui-font-size-default);
@@ -1615,16 +1616,30 @@
1615
1616
  color: var(--vxe-ui-font-color);
1616
1617
  box-shadow: var(--vxe-ui-base-popup-box-shadow);
1617
1618
  z-index: 15;
1619
+ max-height: var(--vxe-ui-vxe-table-filter-default-max-height);
1618
1620
  }
1619
1621
  .vxe-table--filter-wrapper:not(.is--multiple) .vxe-table--filter-header,
1620
1622
  .vxe-table--filter-wrapper:not(.is--multiple) .vxe-table--filter-body {
1621
1623
  text-align: center;
1622
1624
  }
1623
1625
  .vxe-table--filter-wrapper.is--active {
1624
- display: block;
1626
+ display: flex;
1625
1627
  }
1626
- .vxe-table--filter-wrapper .vxe-table--filter-header > li,
1627
- .vxe-table--filter-wrapper .vxe-table--filter-body > li {
1628
+ .vxe-table--filter-wrapper .vxe-table--filter-body,
1629
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1630
+ overflow: auto;
1631
+ flex-grow: 1;
1632
+ }
1633
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1634
+ display: flex;
1635
+ flex-direction: column;
1636
+ }
1637
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--scrollbar-filter-body-view {
1638
+ flex-grow: 1;
1639
+ }
1640
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option,
1641
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option,
1642
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option {
1628
1643
  overflow: hidden;
1629
1644
  text-overflow: ellipsis;
1630
1645
  white-space: nowrap;
@@ -1632,22 +1647,25 @@
1632
1647
  padding: 0.25em 0.8em;
1633
1648
  cursor: pointer;
1634
1649
  }
1635
- .vxe-table--filter-wrapper .vxe-table--filter-header > li.is--checked,
1636
- .vxe-table--filter-wrapper .vxe-table--filter-body > li.is--checked {
1650
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option.is--checked,
1651
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option.is--checked,
1652
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option.is--checked {
1637
1653
  color: var(--vxe-ui-font-primary-color);
1638
1654
  }
1639
- .vxe-table--filter-wrapper .vxe-table--filter-header > li:hover,
1640
- .vxe-table--filter-wrapper .vxe-table--filter-body > li:hover {
1655
+ .vxe-table--filter-wrapper .vxe-table--filter-header .vxe-table--filter-option:hover,
1656
+ .vxe-table--filter-wrapper .vxe-table--filter-body .vxe-table--filter-option:hover,
1657
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body .vxe-table--filter-option:hover {
1641
1658
  background-color: var(--vxe-ui-table-row-hover-background-color);
1642
1659
  }
1643
1660
  .vxe-table--filter-wrapper .vxe-table--filter-header {
1644
1661
  padding-top: 0.2em;
1645
1662
  }
1646
- .vxe-table--filter-wrapper .vxe-table--filter-body {
1647
- max-height: var(--vxe-ui-vxe-table-filter-default-max-height);
1663
+ .vxe-table--filter-wrapper .vxe-table--filter-body,
1664
+ .vxe-table--filter-wrapper .vxe-table--scrollbar-filter-body {
1648
1665
  padding-bottom: 0.2em;
1649
1666
  }
1650
- .vxe-table--filter-wrapper > ul {
1667
+ .vxe-table--filter-wrapper .vxe-table--filter-header,
1668
+ .vxe-table--filter-wrapper .vxe-table--filter-body {
1651
1669
  list-style-type: none;
1652
1670
  padding: 0;
1653
1671
  margin: 0;
@@ -1657,8 +1675,9 @@
1657
1675
  -moz-user-select: none;
1658
1676
  user-select: none;
1659
1677
  }
1660
- .vxe-table--filter-wrapper.is--multiple > ul > li {
1661
- padding: 0.25em 0.8em 0.25em 1em;
1678
+ .vxe-table--filter-wrapper .vxe-table--filter-header,
1679
+ .vxe-table--filter-wrapper .vxe-table--filter-footer {
1680
+ flex-shrink: 0;
1662
1681
  }
1663
1682
  .vxe-table--filter-wrapper .vxe-table--filter-footer {
1664
1683
  border-top: 1px solid var(--vxe-ui-base-popup-border-color);