vxe-table 3.25.0-beta.1 → 3.25.0-beta.2

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 (52) 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/src/methods.js +246 -44
  6. package/es/table/src/props.js +2 -1
  7. package/es/table/src/scrollbar.js +54 -0
  8. package/es/table/src/table.js +266 -64
  9. package/es/table/src/util.js +11 -2
  10. package/es/table/style.css +30 -0
  11. package/es/table/style.min.css +1 -1
  12. package/es/ui/index.js +1 -1
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-table/style.css +30 -0
  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 +337 -66
  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/src/methods.js +21 -11
  23. package/lib/table/src/methods.min.js +1 -1
  24. package/lib/table/src/props.js +2 -1
  25. package/lib/table/src/props.min.js +1 -1
  26. package/lib/table/src/scrollbar.js +63 -0
  27. package/lib/table/src/scrollbar.min.js +1 -0
  28. package/lib/table/src/table.js +249 -52
  29. package/lib/table/src/table.min.js +1 -1
  30. package/lib/table/src/util.js +11 -2
  31. package/lib/table/src/util.min.js +1 -1
  32. package/lib/table/style/style.css +30 -0
  33. package/lib/table/style/style.min.css +1 -1
  34. package/lib/ui/index.js +1 -1
  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 +30 -0
  39. package/lib/vxe-table/style/style.min.css +1 -1
  40. package/package.json +2 -2
  41. package/packages/table/src/methods.ts +258 -44
  42. package/packages/table/src/props.ts +2 -1
  43. package/packages/table/src/scrollbar.ts +57 -0
  44. package/packages/table/src/table.ts +300 -69
  45. package/packages/table/src/util.ts +15 -2
  46. package/styles/components/table.scss +65 -0
  47. /package/es/{iconfont.1791954189007.ttf → iconfont.1792035018941.ttf} +0 -0
  48. /package/es/{iconfont.1791954189007.woff → iconfont.1792035018941.woff} +0 -0
  49. /package/es/{iconfont.1791954189007.woff2 → iconfont.1792035018941.woff2} +0 -0
  50. /package/lib/{iconfont.1791954189007.ttf → iconfont.1792035018941.ttf} +0 -0
  51. /package/lib/{iconfont.1791954189007.woff → iconfont.1792035018941.woff} +0 -0
  52. /package/lib/{iconfont.1791954189007.woff2 → iconfont.1792035018941.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;
@@ -1194,12 +1343,8 @@ export default {
1194
1343
  },
1195
1344
  computeTableStyle() {
1196
1345
  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);
1346
+ const barWidth = $xeTable.computeScrollYWidth;
1347
+ const barHeight = $xeTable.computeScrollXHeight;
1203
1348
  const stys = {};
1204
1349
  if (barWidth || barHeight) {
1205
1350
  stys['--vxe-ui-table-view-scrollbar-width'] = toCssUnit(barWidth || barHeight);
@@ -1408,17 +1553,6 @@ export default {
1408
1553
  },
1409
1554
  computeVxeLanguage() {
1410
1555
  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
1556
  } }),
1423
1557
  watch: {
1424
1558
  data(value) {
@@ -1459,55 +1593,98 @@ export default {
1459
1593
  this.$nextTick().then(() => this.refreshColumn());
1460
1594
  },
1461
1595
  computeSize() {
1462
- this.reLayoutFlag++;
1596
+ const $xeTable = this;
1597
+ $xeTable.reLayoutFlag++;
1463
1598
  },
1464
1599
  showHeader() {
1465
- this.reLayoutFlag++;
1600
+ const $xeTable = this;
1601
+ $xeTable.reLayoutFlag++;
1466
1602
  },
1467
1603
  showFooter() {
1468
- this.reLayoutFlag++;
1604
+ const $xeTable = this;
1605
+ $xeTable.reLayoutFlag++;
1469
1606
  },
1470
1607
  showHeaderOverflow() {
1471
- this.reLayoutFlag++;
1608
+ const $xeTable = this;
1609
+ $xeTable.reLayoutFlag++;
1472
1610
  },
1473
1611
  showOverflow() {
1474
1612
  const $xeTable = this;
1475
1613
  updateColumnAllOverflow($xeTable);
1476
- this.reLayoutFlag++;
1614
+ $xeTable.reLayoutFlag++;
1477
1615
  },
1478
1616
  showFooterOverflow() {
1479
- this.reLayoutFlag++;
1617
+ const $xeTable = this;
1618
+ $xeTable.reLayoutFlag++;
1480
1619
  },
1481
1620
  overflowX() {
1482
- this.reLayoutFlag++;
1621
+ const $xeTable = this;
1622
+ $xeTable.reLayoutFlag++;
1483
1623
  },
1484
1624
  overflowY() {
1485
- this.reLayoutFlag++;
1625
+ const $xeTable = this;
1626
+ $xeTable.reLayoutFlag++;
1486
1627
  },
1487
1628
  height() {
1488
- this.reLayoutFlag++;
1629
+ const $xeTable = this;
1630
+ $xeTable.reLayoutFlag++;
1489
1631
  },
1490
1632
  maxHeight() {
1491
- this.reLayoutFlag++;
1633
+ const $xeTable = this;
1634
+ $xeTable.reLayoutFlag++;
1635
+ },
1636
+ computeVxeLanguage() {
1637
+ const $xeTable = this;
1638
+ $xeTable.reLayoutFlag++;
1492
1639
  },
1493
1640
  computeScrollbarXToTop() {
1494
- this.reLayoutFlag++;
1641
+ const $xeTable = this;
1642
+ $xeTable.reScrollFlag++;
1643
+ $xeTable.reLayoutFlag++;
1495
1644
  },
1496
1645
  computeScrollbarYToLeft() {
1497
- this.reLayoutFlag++;
1646
+ const $xeTable = this;
1647
+ $xeTable.reScrollFlag++;
1648
+ $xeTable.reLayoutFlag++;
1498
1649
  },
1499
- computeVxeLanguage() {
1500
- this.reLayoutFlag++;
1650
+ computeScrollXVisible() {
1651
+ const $xeTable = this;
1652
+ $xeTable.reScrollFlag++;
1653
+ $xeTable.reLayoutFlag++;
1654
+ },
1655
+ computeScrollYVisible() {
1656
+ const $xeTable = this;
1657
+ $xeTable.reScrollFlag++;
1658
+ $xeTable.reLayoutFlag++;
1501
1659
  },
1502
- computeScrollbarVisible() {
1503
- this.reLayoutFlag++;
1660
+ computeScrollXHeight() {
1661
+ const $xeTable = this;
1662
+ $xeTable.reScrollFlag++;
1663
+ $xeTable.reLayoutFlag++;
1664
+ },
1665
+ computeScrollYWidth() {
1666
+ const $xeTable = this;
1667
+ $xeTable.reScrollFlag++;
1668
+ $xeTable.reLayoutFlag++;
1504
1669
  },
1505
- computeCellConfHeitht() {
1506
- this.reLayoutFlag++;
1670
+ computeCellHeitht() {
1671
+ const $xeTable = this;
1672
+ $xeTable.reLayoutFlag++;
1507
1673
  },
1508
1674
  reLayoutFlag() {
1509
1675
  const $xeTable = this;
1510
- $xeTable.$nextTick(() => $xeTable.recalculate(true));
1676
+ $xeTable.$nextTick(() => {
1677
+ $xeTable.recalculate(true);
1678
+ });
1679
+ },
1680
+ reScrollFlag() {
1681
+ const $xeTable = this;
1682
+ $xeTable.$nextTick(() => {
1683
+ $xeTable.updateScrollbar();
1684
+ $xeTable.$nextTick(() => {
1685
+ $xeTable.updateScrollbar();
1686
+ });
1687
+ });
1511
1688
  },
1512
1689
  footerData() {
1513
1690
  this.footFlag++;
@@ -1607,7 +1784,6 @@ export default {
1607
1784
  const $xeTable = this;
1608
1785
  const props = $xeTable;
1609
1786
  const internalData = $xeTable;
1610
- $xeTable.scrollDefaultConf = Object.assign({}, getConfig().scrollbar);
1611
1787
  XEUtils.assign(internalData, createInternalData());
1612
1788
  handleKeyField($xeTable);
1613
1789
  const { editConfig, exportConfig, importConfig, treeConfig, minHeight, keepSource, areaConfig } = props;
@@ -1953,6 +2129,8 @@ export default {
1953
2129
  warnLog('vxe.error.reqProp', ['tooltip-config']);
1954
2130
  }
1955
2131
  $xeTable.$nextTick(() => {
2132
+ const { useScrollbar, autoResize } = props;
2133
+ const { elemStore } = internalData;
1956
2134
  // 使用已安装的组件,如果未安装则不渲染
1957
2135
  const VxeUILoadingComponent = VxeUI.getComponent('VxeLoading');
1958
2136
  const VxeUITooltipComponent = VxeUI.getComponent('VxeTooltip');
@@ -1996,15 +2174,34 @@ export default {
1996
2174
  errLog('vxe.error.reqComp', ['vxe-tooltip']);
1997
2175
  }
1998
2176
  }
1999
- if (this.autoResize) {
2177
+ const el = $xeTable.$refs.refElem;
2178
+ if (useScrollbar) {
2179
+ const viewInnerEl = getRefElem(elemStore['main-body-table']);
2180
+ const scrollObserver = globalResize.create(() => {
2181
+ $xeTable.reScrollFlag++;
2182
+ });
2183
+ if (el) {
2184
+ scrollObserver.observe(el);
2185
+ }
2186
+ if (viewInnerEl) {
2187
+ scrollObserver.observe(viewInnerEl);
2188
+ }
2189
+ internalData.scrollObserver = scrollObserver;
2190
+ }
2191
+ if (autoResize) {
2192
+ const parentEl = $xeTable.getParentElem();
2000
2193
  const resizeObserver = globalResize.create(() => {
2001
- if (this.autoResize) {
2002
- this.layoutReFlag++;
2194
+ if (props.autoResize) {
2195
+ $xeTable.handleResizeEvent();
2003
2196
  }
2004
2197
  });
2005
- resizeObserver.observe(this.$el);
2006
- resizeObserver.observe(this.getParentElem());
2007
- this.$resize = resizeObserver;
2198
+ if (el) {
2199
+ resizeObserver.observe(el);
2200
+ }
2201
+ if (parentEl) {
2202
+ resizeObserver.observe(parentEl);
2203
+ }
2204
+ internalData.resizeObserver = resizeObserver;
2008
2205
  }
2009
2206
  });
2010
2207
  if (virtualYOpts.mode !== 'scroll') {
@@ -2035,7 +2232,7 @@ export default {
2035
2232
  const $xeTable = this;
2036
2233
  const reactData = $xeTable;
2037
2234
  const internalData = $xeTable;
2038
- const { _sToTime } = internalData;
2235
+ const { scrollObserver, resizeObserver, _sToTime } = internalData;
2039
2236
  if (_sToTime) {
2040
2237
  clearTimeout(_sToTime);
2041
2238
  }
@@ -2055,8 +2252,11 @@ export default {
2055
2252
  if (tableViewportEl) {
2056
2253
  tableViewportEl.removeEventListener('wheel', $xeTable.triggerBodyWheelEvent);
2057
2254
  }
2058
- if (this.$resize) {
2059
- this.$resize.disconnect();
2255
+ if (scrollObserver) {
2256
+ scrollObserver.disconnect();
2257
+ }
2258
+ if (resizeObserver) {
2259
+ resizeObserver.disconnect();
2060
2260
  }
2061
2261
  $xeTable.closeTooltip();
2062
2262
  $xeTable.closeFilter();
@@ -2202,15 +2402,17 @@ export default {
2202
2402
  h('div', {
2203
2403
  key: 'tw',
2204
2404
  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
- ]),
2405
+ }, useScrollbar
2406
+ ? [renderVirtualBody(h, $xeTable)]
2407
+ : (scrollbarXToTop
2408
+ ? [
2409
+ renderScrollX(h, $xeTable),
2410
+ renderNativeBody(h, $xeTable)
2411
+ ]
2412
+ : [
2413
+ renderNativeBody(h, $xeTable),
2414
+ renderScrollX(h, $xeTable)
2415
+ ])),
2214
2416
  /**
2215
2417
  * 空数据
2216
2418
  */
@@ -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
  }