vxe-table 3.25.0-beta.1 → 3.25.0-beta.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 (60) 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/custom/panel.js +2 -2
  6. package/es/table/module/filter/mixin.js +1 -0
  7. package/es/table/src/methods.js +247 -45
  8. package/es/table/src/props.js +2 -1
  9. package/es/table/src/table.js +274 -68
  10. package/es/table/src/util.js +11 -2
  11. package/es/table/style.css +30 -0
  12. package/es/table/style.min.css +1 -1
  13. package/es/ui/index.js +1 -1
  14. package/es/ui/src/dom.js +11 -8
  15. package/es/ui/src/log.js +1 -1
  16. package/es/vxe-table/style.css +30 -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 +311 -83
  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/custom/panel.js +2 -2
  25. package/lib/table/module/custom/panel.min.js +1 -1
  26. package/lib/table/module/filter/mixin.js +1 -0
  27. package/lib/table/module/filter/mixin.min.js +1 -1
  28. package/lib/table/src/methods.js +21 -11
  29. package/lib/table/src/methods.min.js +1 -1
  30. package/lib/table/src/props.js +2 -1
  31. package/lib/table/src/props.min.js +1 -1
  32. package/lib/table/src/table.js +261 -56
  33. package/lib/table/src/table.min.js +1 -1
  34. package/lib/table/src/util.js +11 -2
  35. package/lib/table/src/util.min.js +1 -1
  36. package/lib/table/style/style.css +30 -0
  37. package/lib/table/style/style.min.css +1 -1
  38. package/lib/ui/index.js +1 -1
  39. package/lib/ui/index.min.js +1 -1
  40. package/lib/ui/src/dom.js +11 -7
  41. package/lib/ui/src/dom.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 +30 -0
  45. package/lib/vxe-table/style/style.min.css +1 -1
  46. package/package.json +2 -2
  47. package/packages/table/module/custom/panel.ts +2 -2
  48. package/packages/table/module/filter/mixin.ts +1 -0
  49. package/packages/table/src/methods.ts +260 -45
  50. package/packages/table/src/props.ts +2 -1
  51. package/packages/table/src/table.ts +308 -73
  52. package/packages/table/src/util.ts +15 -2
  53. package/packages/ui/src/dom.ts +12 -8
  54. package/styles/components/table.scss +65 -0
  55. /package/es/{iconfont.1791954189007.ttf → iconfont.1792117667851.ttf} +0 -0
  56. /package/es/{iconfont.1791954189007.woff → iconfont.1792117667851.woff} +0 -0
  57. /package/es/{iconfont.1791954189007.woff2 → iconfont.1792117667851.woff2} +0 -0
  58. /package/lib/{iconfont.1791954189007.ttf → iconfont.1792117667851.ttf} +0 -0
  59. /package/lib/{iconfont.1791954189007.woff → iconfont.1792117667851.woff} +0 -0
  60. /package/lib/{iconfont.1791954189007.woff2 → iconfont.1792117667851.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import XEUtils from 'xe-utils';
2
2
  import { getDefaultConfig, getFuncText, hasEnableConf, isEnableConf } from '../../ui/src/utils';
3
3
  import { initTpImg, toCssUnit } from '../../ui/src/dom';
4
- import { createReactData, createInternalData, createHandleGetRowId, getCalcHeight, hasDeepKey } from './util';
4
+ import { createReactData, createInternalData, createHandleGetRowId, getCalcHeight, hasDeepKey, getRefElem } from './util';
5
5
  import { VxeUI } from '../../ui';
6
6
  import methods from './methods';
7
7
  import TableBodyComponent from './body';
@@ -24,7 +24,7 @@ import keyboardMixin from '../module/keyboard/mixin';
24
24
  import validatorMixin from '../module/validator/mixin';
25
25
  import customMixin from '../module/custom/mixin';
26
26
  const { warnLog, errLog } = createComponentLog('table');
27
- const { getConfig, getIcon, getI18n, renderer, globalResize, globalEvents, globalMixins, renderEmptyElement } = VxeUI;
27
+ const { getConfig, getIcon, getI18n, renderer, globalResize, globalEvents, domUtils, globalMixins, renderEmptyElement } = VxeUI;
28
28
  function handleUpdateMergeBodyCells($xeTable, merges) {
29
29
  const internalData = $xeTable;
30
30
  internalData.mergeBodyList = [];
@@ -95,6 +95,8 @@ function renderViewFixed(h, $xeTable, fixedType) {
95
95
  const scrollbarOpts = $xeTable.computeScrollbarOpts;
96
96
  const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
97
97
  const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
98
+ const scrollXVisible = $xeTable.computeScrollXVisible;
99
+ const scrollYVisible = $xeTable.computeScrollYVisible;
98
100
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
99
101
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
100
102
  const isFixedLeft = fixedType === 'left';
@@ -105,8 +107,8 @@ function renderViewFixed(h, $xeTable, fixedType) {
105
107
  ref: isFixedLeft ? 'refLeftContainer' : 'refRightContainer',
106
108
  class: [
107
109
  `vxe-table--fixed-${fixedType}-wrapper`,
108
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
109
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
110
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
111
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`,
110
112
  {
111
113
  [`x-ob--${osXBehavior}`]: osXBehavior,
112
114
  [`y-ob--${osYBehavior}`]: osYBehavior
@@ -403,6 +405,7 @@ function renderScrollX(h, $xeTable) {
403
405
  }
404
406
  function renderScrollY(h, $xeTable) {
405
407
  return h('div', {
408
+ key: 'vsy',
406
409
  ref: 'refScrollYVirtualElem',
407
410
  class: 'vxe-table--scroll-y-virtual'
408
411
  }, [
@@ -441,12 +444,15 @@ function renderViewport(h, $xeTable) {
441
444
  const scrollbarOpts = $xeTable.computeScrollbarOpts;
442
445
  const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
443
446
  const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
447
+ const scrollXVisible = $xeTable.computeScrollXVisible;
448
+ const scrollYVisible = $xeTable.computeScrollYVisible;
444
449
  const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts;
445
450
  const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts;
446
451
  const { leftList, rightList } = columnStore;
447
452
  const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior;
448
453
  const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior;
449
454
  return h('div', {
455
+ key: 'tvw',
450
456
  ref: 'refTableViewportElem',
451
457
  class: ['vxe-table--viewport-wrapper', {
452
458
  [`x-ob--${osXBehavior}`]: osXBehavior,
@@ -456,8 +462,8 @@ function renderViewport(h, $xeTable) {
456
462
  h('div', {
457
463
  class: [
458
464
  'vxe-table--main-wrapper',
459
- `sx--${(scrollbarXOpts.visible === false || scrollbarXOpts.visible === 'hidden') ? 'hidden' : 'visible'}`,
460
- `sy--${(scrollbarYOpts.visible === false || scrollbarYOpts.visible === 'hidden') ? 'hidden' : 'visible'}`
465
+ `sx--${(scrollXVisible === false || scrollXVisible === 'hidden') ? 'hidden' : 'visible'}`,
466
+ `sy--${(scrollYVisible === false || scrollYVisible === 'hidden') ? 'hidden' : 'visible'}`
461
467
  ]
462
468
  }, [
463
469
  /**
@@ -505,9 +511,10 @@ function renderViewport(h, $xeTable) {
505
511
  renderRowExpandedVNs(h, $xeTable)
506
512
  ]);
507
513
  }
508
- function renderBody(h, $xeTable) {
514
+ function renderNativeBody(h, $xeTable) {
509
515
  const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
510
516
  return h('div', {
517
+ key: 'lnb',
511
518
  class: 'vxe-table--layout-wrapper'
512
519
  }, scrollbarYToLeft
513
520
  ? [
@@ -519,6 +526,84 @@ function renderBody(h, $xeTable) {
519
526
  renderScrollY(h, $xeTable)
520
527
  ]);
521
528
  }
529
+ function renderVirtualBody(h, $xeTable) {
530
+ const props = $xeTable;
531
+ const reactData = $xeTable;
532
+ const internalData = $xeTable;
533
+ const $xeGantt = $xeTable.$xeGantt;
534
+ const $xeGanttView = internalData.xeGanttView;
535
+ const { useScrollbar } = props;
536
+ const { xThumbWidth, yThumbHeight } = reactData;
537
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
538
+ const scrollXAutoHide = $xeTable.computeScrollXAutoHide;
539
+ const scrollYAutoHide = $xeTable.computeScrollYAutoHide;
540
+ const scrollXVisible = $xeTable.computeScrollXVisible;
541
+ const scrollYVisible = $xeTable.computeScrollYVisible;
542
+ const scrollbarXToTop = $xeTable.computeScrollbarXToTop;
543
+ const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
544
+ const scrollbarWrapperClss = $xeTable.computeScrollbarWrapperClss;
545
+ const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden';
546
+ const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden';
547
+ return h('div', {
548
+ key: 'lvb',
549
+ 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,
554
+ 'overflow-y': yThumbHeight,
555
+ 'overflow-x': xThumbWidth
556
+ }]
557
+ }, [
558
+ renderViewport(h, $xeTable),
559
+ h('div', {
560
+ class: scrollbarWrapperClss
561
+ }, [
562
+ hideXScroll
563
+ ? renderEmptyElement($xeTable)
564
+ : h('div', {
565
+ ref: 'refTrackXElem',
566
+ class: 'vxe-scrollbar--track-x',
567
+ on: {
568
+ click: $xeTable.clickTrackXEvent
569
+ }
570
+ }, [
571
+ h('div', {
572
+ ref: 'refThumbXElem',
573
+ class: 'vxe-scrollbar--thumb-x',
574
+ on: {
575
+ pointerdown: $xeTable.pointerdownThumbXEvent,
576
+ pointermove: $xeTable.pointermoveThumbXEvent,
577
+ pointerup: $xeTable.cleatPointerThumbEvent,
578
+ pointercancel: $xeTable.cleatPointerThumbEvent,
579
+ lostpointercapture: $xeTable.cleatPointerThumbEvent
580
+ }
581
+ })
582
+ ]),
583
+ hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)
584
+ ? renderEmptyElement($xeTable)
585
+ : h('div', {
586
+ ref: 'refTrackYElem',
587
+ class: 'vxe-scrollbar--track-y',
588
+ on: {
589
+ click: $xeTable.clickTrackYEvent
590
+ }
591
+ }, [
592
+ h('div', {
593
+ ref: 'refThumbYElem',
594
+ class: 'vxe-scrollbar--thumb-y',
595
+ on: {
596
+ pointerdown: $xeTable.pointerdownThumbYEvent,
597
+ pointermove: $xeTable.pointermoveThumbYEvent,
598
+ pointerup: $xeTable.cleatPointerThumbEvent,
599
+ pointercancel: $xeTable.cleatPointerThumbEvent,
600
+ lostpointercapture: $xeTable.cleatPointerThumbEvent
601
+ }
602
+ })
603
+ ])
604
+ ])
605
+ ]);
606
+ }
522
607
  export default {
523
608
  name: 'VxeTable',
524
609
  mixins: [
@@ -560,9 +645,9 @@ export default {
560
645
  data() {
561
646
  const xID = XEUtils.uniqueId();
562
647
  const reactData = createReactData();
563
- return Object.assign(Object.assign(Object.assign(Object.assign({}, {}), { xID }), reactData), {
648
+ return Object.assign(Object.assign({ xID }, reactData), {
564
649
  // 私有属性
565
- reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, kfFlag: 0, layoutReFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
650
+ reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, kfFlag: 0, layoutReFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal, scrollDefaultConf: Object.assign({}, getConfig().scrollbar) });
566
651
  },
567
652
  computed: Object.assign(Object.assign({}, {}), { tableId() {
568
653
  return this.computeTableId;
@@ -674,6 +759,46 @@ export default {
674
759
  const scrollbarOpts = $xeTable.computeScrollbarOpts;
675
760
  return scrollbarOpts.y ? Object.assign({}, scrollbarOpts.y, scrollbarOpts.yConfig) : (scrollbarOpts.yConfig || {});
676
761
  },
762
+ computeScrollXHeight() {
763
+ const $xeTable = this;
764
+ const scrollDefaultConf = $xeTable.scrollDefaultConf;
765
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
766
+ const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
767
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height));
768
+ },
769
+ computeScrollYWidth() {
770
+ const $xeTable = this;
771
+ const scrollDefaultConf = $xeTable.scrollDefaultConf;
772
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
773
+ const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
774
+ return XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width));
775
+ },
776
+ computeScrollXVisible() {
777
+ const $xeTable = this;
778
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
779
+ const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
780
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
781
+ },
782
+ computeScrollYVisible() {
783
+ const $xeTable = this;
784
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
785
+ const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
786
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
787
+ },
788
+ computeScrollXAutoHide() {
789
+ const $xeTable = this;
790
+ const scrollDefaultConf = $xeTable.scrollDefaultConf;
791
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
792
+ const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
793
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide);
794
+ },
795
+ computeScrollYAutoHide() {
796
+ const $xeTable = this;
797
+ const scrollDefaultConf = $xeTable.scrollDefaultConf;
798
+ const scrollbarOpts = $xeTable.computeScrollbarOpts;
799
+ const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
800
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), scrollDefaultConf.autoHide);
801
+ },
677
802
  computeScrollbarXToTop() {
678
803
  const $xeTable = this;
679
804
  const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
@@ -684,6 +809,25 @@ export default {
684
809
  const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
685
810
  return scrollbarYOpts.position === 'left';
686
811
  },
812
+ computeScrollbarWrapperClss() {
813
+ const $xeTable = this;
814
+ const reactData = $xeTable;
815
+ const { yThumbHeight, xThumbWidth } = reactData;
816
+ const scrollbarXToTop = $xeTable.computeScrollbarXToTop;
817
+ const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
818
+ const scrollXVisible = $xeTable.computeScrollXVisible;
819
+ const scrollYVisible = $xeTable.computeScrollYVisible;
820
+ return domUtils.buildClass([
821
+ 'vxe-scrollbar is--virtual',
822
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
823
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
824
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
825
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
826
+ ], {
827
+ 'overflow-y': yThumbHeight,
828
+ 'overflow-x': xThumbWidth
829
+ });
830
+ },
687
831
  computeScrollYThreshold() {
688
832
  const $xeTable = this;
689
833
  const virtualYOpts = $xeTable.computeVirtualYOpts;
@@ -729,6 +873,11 @@ export default {
729
873
  }
730
874
  return cellOpts;
731
875
  },
876
+ computeCellHeitht() {
877
+ const $xeTable = this;
878
+ const cellOpts = $xeTable.computeCellOpts;
879
+ return cellOpts.height;
880
+ },
732
881
  computeHeaderCellOpts() {
733
882
  const $xeTable = this;
734
883
  const $xeGantt = $xeTable.$xeGantt;
@@ -843,7 +992,8 @@ export default {
843
992
  computeTooltipOpts() {
844
993
  const $xeTable = this;
845
994
  const props = $xeTable;
846
- return Object.assign({}, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
995
+ const { useScrollbar } = props;
996
+ return Object.assign({ useScrollbar }, getConfig().tooltip, getConfig().table.tooltipConfig, props.tooltipConfig);
847
997
  },
848
998
  tipConfig() {
849
999
  return Object.assign({}, this.tooltipOpts);
@@ -1194,12 +1344,8 @@ export default {
1194
1344
  },
1195
1345
  computeTableStyle() {
1196
1346
  const $xeTable = this;
1197
- const scrollDefaultConf = $xeTable.scrollDefaultConf;
1198
- const scrollbarOpts = $xeTable.computeScrollbarOpts;
1199
- const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
1200
- const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
1201
- const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), scrollDefaultConf.width);
1202
- const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height);
1347
+ const barWidth = $xeTable.computeScrollYWidth;
1348
+ const barHeight = $xeTable.computeScrollXHeight;
1203
1349
  const stys = {};
1204
1350
  if (barWidth || barHeight) {
1205
1351
  stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight);
@@ -1408,17 +1554,6 @@ export default {
1408
1554
  },
1409
1555
  computeVxeLanguage() {
1410
1556
  return VxeUI.getLanguage();
1411
- },
1412
- computeScrollbarVisible() {
1413
- const $xeTable = this;
1414
- const scrollbarXOpts = $xeTable.computeScrollbarXOpts;
1415
- const scrollbarYOpts = $xeTable.computeScrollbarYOpts;
1416
- return `${scrollbarXOpts.visible}${scrollbarYOpts.visible}`;
1417
- },
1418
- computeCellConfHeitht() {
1419
- const $xeTable = this;
1420
- const cellOpts = $xeTable.computeCellOpts;
1421
- return cellOpts.height;
1422
1557
  } }),
1423
1558
  watch: {
1424
1559
  data(value) {
@@ -1459,55 +1594,98 @@ export default {
1459
1594
  this.$nextTick().then(() => this.refreshColumn());
1460
1595
  },
1461
1596
  computeSize() {
1462
- this.reLayoutFlag++;
1597
+ const $xeTable = this;
1598
+ $xeTable.reLayoutFlag++;
1463
1599
  },
1464
1600
  showHeader() {
1465
- this.reLayoutFlag++;
1601
+ const $xeTable = this;
1602
+ $xeTable.reLayoutFlag++;
1466
1603
  },
1467
1604
  showFooter() {
1468
- this.reLayoutFlag++;
1605
+ const $xeTable = this;
1606
+ $xeTable.reLayoutFlag++;
1469
1607
  },
1470
1608
  showHeaderOverflow() {
1471
- this.reLayoutFlag++;
1609
+ const $xeTable = this;
1610
+ $xeTable.reLayoutFlag++;
1472
1611
  },
1473
1612
  showOverflow() {
1474
1613
  const $xeTable = this;
1475
1614
  updateColumnAllOverflow($xeTable);
1476
- this.reLayoutFlag++;
1615
+ $xeTable.reLayoutFlag++;
1477
1616
  },
1478
1617
  showFooterOverflow() {
1479
- this.reLayoutFlag++;
1618
+ const $xeTable = this;
1619
+ $xeTable.reLayoutFlag++;
1480
1620
  },
1481
1621
  overflowX() {
1482
- this.reLayoutFlag++;
1622
+ const $xeTable = this;
1623
+ $xeTable.reLayoutFlag++;
1483
1624
  },
1484
1625
  overflowY() {
1485
- this.reLayoutFlag++;
1626
+ const $xeTable = this;
1627
+ $xeTable.reLayoutFlag++;
1486
1628
  },
1487
1629
  height() {
1488
- this.reLayoutFlag++;
1630
+ const $xeTable = this;
1631
+ $xeTable.reLayoutFlag++;
1489
1632
  },
1490
1633
  maxHeight() {
1491
- this.reLayoutFlag++;
1634
+ const $xeTable = this;
1635
+ $xeTable.reLayoutFlag++;
1636
+ },
1637
+ computeVxeLanguage() {
1638
+ const $xeTable = this;
1639
+ $xeTable.reLayoutFlag++;
1492
1640
  },
1493
1641
  computeScrollbarXToTop() {
1494
- this.reLayoutFlag++;
1642
+ const $xeTable = this;
1643
+ $xeTable.reScrollFlag++;
1644
+ $xeTable.reLayoutFlag++;
1495
1645
  },
1496
1646
  computeScrollbarYToLeft() {
1497
- this.reLayoutFlag++;
1647
+ const $xeTable = this;
1648
+ $xeTable.reScrollFlag++;
1649
+ $xeTable.reLayoutFlag++;
1498
1650
  },
1499
- computeVxeLanguage() {
1500
- this.reLayoutFlag++;
1651
+ computeScrollXVisible() {
1652
+ const $xeTable = this;
1653
+ $xeTable.reScrollFlag++;
1654
+ $xeTable.reLayoutFlag++;
1655
+ },
1656
+ computeScrollYVisible() {
1657
+ const $xeTable = this;
1658
+ $xeTable.reScrollFlag++;
1659
+ $xeTable.reLayoutFlag++;
1501
1660
  },
1502
- computeScrollbarVisible() {
1503
- this.reLayoutFlag++;
1661
+ computeScrollXHeight() {
1662
+ const $xeTable = this;
1663
+ $xeTable.reScrollFlag++;
1664
+ $xeTable.reLayoutFlag++;
1665
+ },
1666
+ computeScrollYWidth() {
1667
+ const $xeTable = this;
1668
+ $xeTable.reScrollFlag++;
1669
+ $xeTable.reLayoutFlag++;
1504
1670
  },
1505
- computeCellConfHeitht() {
1506
- this.reLayoutFlag++;
1671
+ computeCellHeitht() {
1672
+ const $xeTable = this;
1673
+ $xeTable.reLayoutFlag++;
1507
1674
  },
1508
1675
  reLayoutFlag() {
1509
1676
  const $xeTable = this;
1510
- $xeTable.$nextTick(() => $xeTable.recalculate(true));
1677
+ $xeTable.$nextTick(() => {
1678
+ $xeTable.recalculate(true);
1679
+ });
1680
+ },
1681
+ reScrollFlag() {
1682
+ const $xeTable = this;
1683
+ $xeTable.$nextTick(() => {
1684
+ $xeTable.updateScrollbar();
1685
+ $xeTable.$nextTick(() => {
1686
+ $xeTable.updateScrollbar();
1687
+ });
1688
+ });
1511
1689
  },
1512
1690
  footerData() {
1513
1691
  this.footFlag++;
@@ -1607,7 +1785,6 @@ export default {
1607
1785
  const $xeTable = this;
1608
1786
  const props = $xeTable;
1609
1787
  const internalData = $xeTable;
1610
- $xeTable.scrollDefaultConf = Object.assign({}, getConfig().scrollbar);
1611
1788
  XEUtils.assign(internalData, createInternalData());
1612
1789
  handleKeyField($xeTable);
1613
1790
  const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
@@ -1953,6 +2130,8 @@ export default {
1953
2130
  warnLog('vxe.error.reqProp', ['tooltip-config']);
1954
2131
  }
1955
2132
  $xeTable.$nextTick(() => {
2133
+ const { useScrollbar, autoResize } = props;
2134
+ const { elemStore } = internalData;
1956
2135
  // 使用已安装的组件,如果未安装则不渲染
1957
2136
  const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
1958
2137
  const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
@@ -1996,15 +2175,34 @@ export default {
1996
2175
  errLog('vxe.error.reqComp', ['vxe-tooltip']);
1997
2176
  }
1998
2177
  }
1999
- if (this.autoResize) {
2178
+ const el = $xeTable.$refs.refElem;
2179
+ if (useScrollbar) {
2180
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
2181
+ const scrollObserver = globalResize.create(() => {
2182
+ $xeTable.reScrollFlag++;
2183
+ });
2184
+ if (el) {
2185
+ scrollObserver.observe(el);
2186
+ }
2187
+ if (viewInnerEl) {
2188
+ scrollObserver.observe(viewInnerEl);
2189
+ }
2190
+ internalData.scrollObserver = scrollObserver;
2191
+ }
2192
+ if (autoResize) {
2193
+ const parentEl = $xeTable.getParentElem();
2000
2194
  const resizeObserver = globalResize.create(() => {
2001
- if (this.autoResize) {
2002
- this.layoutReFlag++;
2195
+ if (props.autoResize) {
2196
+ $xeTable.handleResizeEvent();
2003
2197
  }
2004
2198
  });
2005
- resizeObserver.observe(this.$el);
2006
- resizeObserver.observe(this.getParentElem());
2007
- this.$resize = resizeObserver;
2199
+ if (el) {
2200
+ resizeObserver.observe(el);
2201
+ }
2202
+ if (parentEl) {
2203
+ resizeObserver.observe(parentEl);
2204
+ }
2205
+ internalData.resizeObserver = resizeObserver;
2008
2206
  }
2009
2207
  });
2010
2208
  if (virtualYOpts.mode !== 'scroll') {
@@ -2035,7 +2233,7 @@ export default {
2035
2233
  const $xeTable = this;
2036
2234
  const reactData = $xeTable;
2037
2235
  const internalData = $xeTable;
2038
- const { _sToTime } = internalData;
2236
+ const { scrollObserver, resizeObserver, _sToTime } = internalData;
2039
2237
  if (_sToTime) {
2040
2238
  clearTimeout(_sToTime);
2041
2239
  }
@@ -2055,8 +2253,11 @@ export default {
2055
2253
  if (tableViewportEl) {
2056
2254
  tableViewportEl.removeEventListener('wheel', $xeTable.triggerBodyWheelEvent);
2057
2255
  }
2058
- if (this.$resize) {
2059
- this.$resize.disconnect();
2256
+ if (scrollObserver) {
2257
+ scrollObserver.disconnect();
2258
+ }
2259
+ if (resizeObserver) {
2260
+ resizeObserver.disconnect();
2060
2261
  }
2061
2262
  $xeTable.closeTooltip();
2062
2263
  $xeTable.closeFilter();
@@ -2202,15 +2403,17 @@ export default {
2202
2403
  h('div', {
2203
2404
  key: 'tw',
2204
2405
  class: 'vxe-table--render-wrapper'
2205
- }, scrollbarXToTop
2206
- ? [
2207
- renderScrollX(h, $xeTable),
2208
- renderBody(h, $xeTable)
2209
- ]
2210
- : [
2211
- renderBody(h, $xeTable),
2212
- renderScrollX(h, $xeTable)
2213
- ]),
2406
+ }, useScrollbar
2407
+ ? [renderVirtualBody(h, $xeTable)]
2408
+ : (scrollbarXToTop
2409
+ ? [
2410
+ renderScrollX(h, $xeTable),
2411
+ renderNativeBody(h, $xeTable)
2412
+ ]
2413
+ : [
2414
+ renderNativeBody(h, $xeTable),
2415
+ renderScrollX(h, $xeTable)
2416
+ ])),
2214
2417
  /**
2215
2418
  * 空数据
2216
2419
  */
@@ -2387,7 +2590,8 @@ export default {
2387
2590
  ref: 'refCommTooltip',
2388
2591
  props: {
2389
2592
  isArrow: false,
2390
- enterable: false
2593
+ enterable: false,
2594
+ useScrollbar
2391
2595
  }
2392
2596
  })
2393
2597
  : renderEmptyElement($xeTable),
@@ -2414,7 +2618,8 @@ export default {
2414
2618
  maxHeight: tableTipConfig.maxHeight,
2415
2619
  placement: tableTipConfig.placement,
2416
2620
  defaultPlacement: tableTipConfig.defaultPlacement,
2417
- popupClassName: tableTipConfig.popupClassName
2621
+ popupClassName: tableTipConfig.popupClassName,
2622
+ useScrollbar: tableTipConfig.useScrollbar
2418
2623
  },
2419
2624
  scopedSlots: currTooltipSlot
2420
2625
  ? {
@@ -2457,7 +2662,8 @@ export default {
2457
2662
  theme: validTipConfig.theme,
2458
2663
  enterable: validTipConfig.enterable,
2459
2664
  enterDelay: validTipConfig.enterDelay,
2460
- leaveDelay: validTipConfig.leaveDelay
2665
+ leaveDelay: validTipConfig.leaveDelay,
2666
+ useScrollbar
2461
2667
  }
2462
2668
  })
2463
2669
  : renderEmptyElement($xeTable)
@@ -43,9 +43,15 @@ export function createInternalData() {
43
43
  // 当前行
44
44
  currentRow: null,
45
45
  currentCol: null,
46
- // 最后滚动位置
47
- lastScrollLeft: 0,
46
+ // resizeObserver: undefined,
47
+ // 滚动条
48
+ // scrollObserver: undefined,
49
+ // isThumbDrag: false,
50
+ thumbDragOffset: 0,
51
+ yThumbTop: 0,
52
+ xThumbLeft: 0,
48
53
  lastScrollTop: 0,
54
+ lastScrollLeft: 0,
49
55
  // 单选框属性,已选中保留的行
50
56
  radioReserveRow: null,
51
57
  // 复选框属性,已选中保留的行集合
@@ -177,6 +183,9 @@ export function createReactData() {
177
183
  scrollbarWidth: 0,
178
184
  // 横向滚动条的高度
179
185
  scrollbarHeight: 0,
186
+ // 滚动条
187
+ yThumbHeight: 0,
188
+ xThumbWidth: 0,
180
189
  // 行高
181
190
  rowHeight: 0,
182
191
  // 表格父容器的高度
@@ -4024,4 +4024,34 @@ div.vxe-table--tooltip-wrapper.vxe-table--valid-error.old-cell-valid {
4024
4024
  }
4025
4025
  .vxe-table--footer-wrapper.body--wrapper {
4026
4026
  outline: 0;
4027
+ }
4028
+
4029
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-padding.overflow-x.sx-pos--top > .vxe-table--viewport-wrapper {
4030
+ padding-top: var(--vxe-ui-scrollbar-x-height);
4031
+ }
4032
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-padding.overflow-x.sx-pos--bottom > .vxe-table--viewport-wrapper {
4033
+ padding-bottom: var(--vxe-ui-scrollbar-x-height);
4034
+ }
4035
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-padding.overflow-y.sy-pos--left > .vxe-table--viewport-wrapper {
4036
+ padding-left: var(--vxe-ui-scrollbar-y-width);
4037
+ }
4038
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-padding.overflow-y.sy-pos--right > .vxe-table--viewport-wrapper {
4039
+ padding-right: var(--vxe-ui-scrollbar-y-width);
4040
+ }
4041
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-x--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-x {
4042
+ opacity: 1;
4043
+ }
4044
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-x--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-x {
4045
+ opacity: 0;
4046
+ transition: opacity 0.8s ease-in-out;
4047
+ }
4048
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-y--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-y {
4049
+ opacity: 1;
4050
+ }
4051
+ .vxe-table--layout-wrapper.is--virtual-scrollbar.ov-y--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-y {
4052
+ opacity: 0;
4053
+ transition: opacity 0.8s ease-in-out;
4054
+ }
4055
+ .vxe-table--layout-wrapper > .vxe-scrollbar {
4056
+ position: unset;
4027
4057
  }