vxe-gantt 3.0.5 → 3.0.7

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 (42) hide show
  1. package/es/gantt/src/gantt-chart.js +18 -4
  2. package/es/gantt/src/gantt-header.js +19 -10
  3. package/es/gantt/src/gantt-view.js +265 -154
  4. package/es/gantt/src/gantt.js +10 -10
  5. package/es/gantt/style.css +7 -1
  6. package/es/gantt/style.min.css +1 -1
  7. package/es/style.css +1 -1
  8. package/es/style.min.css +1 -1
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/log.js +1 -1
  11. package/es/vxe-gantt/style.css +7 -1
  12. package/es/vxe-gantt/style.min.css +1 -1
  13. package/lib/gantt/src/gantt-chart.js +22 -5
  14. package/lib/gantt/src/gantt-chart.min.js +1 -1
  15. package/lib/gantt/src/gantt-header.js +24 -15
  16. package/lib/gantt/src/gantt-header.min.js +1 -1
  17. package/lib/gantt/src/gantt-view.js +285 -158
  18. package/lib/gantt/src/gantt-view.min.js +1 -1
  19. package/lib/gantt/src/gantt.js +9 -9
  20. package/lib/gantt/src/gantt.min.js +1 -1
  21. package/lib/gantt/style/style.css +7 -1
  22. package/lib/gantt/style/style.min.css +1 -1
  23. package/lib/index.umd.js +345 -190
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/style.min.css +1 -1
  27. package/lib/ui/index.js +1 -1
  28. package/lib/ui/index.min.js +1 -1
  29. package/lib/ui/src/log.js +1 -1
  30. package/lib/ui/src/log.min.js +1 -1
  31. package/lib/vxe-gantt/style/style.css +7 -1
  32. package/lib/vxe-gantt/style/style.min.css +1 -1
  33. package/package.json +3 -3
  34. package/packages/gantt/src/gantt-chart.ts +20 -4
  35. package/packages/gantt/src/gantt-header.ts +20 -11
  36. package/packages/gantt/src/gantt-view.ts +289 -168
  37. package/packages/gantt/src/gantt.ts +8 -8
  38. package/styles/components/gantt-module/gantt-chart.scss +2 -0
  39. package/styles/components/gantt.scss +6 -1
  40. package/styles/theme/base.scss +1 -1
  41. package/styles/theme/dark.scss +1 -0
  42. package/styles/theme/light.scss +1 -0
@@ -23,6 +23,7 @@ var globalEvents = _core.VxeUI.globalEvents;
23
23
  function createInternalData() {
24
24
  return {
25
25
  xeTable: null,
26
+ visibleColumn: [],
26
27
  startMaps: {},
27
28
  endMaps: {},
28
29
  chartMaps: {},
@@ -37,16 +38,9 @@ function createInternalData() {
37
38
  startIndex: 0,
38
39
  endIndex: 0
39
40
  },
40
- // 存放纵向 Y 虚拟滚动相关信息
41
- scrollYStore: {
42
- preloadSize: 0,
43
- offsetSize: 0,
44
- visibleSize: 0,
45
- visibleStartIndex: 0,
46
- visibleEndIndex: 0,
47
- startIndex: 0,
48
- endIndex: 0
49
- }
41
+ // 最后滚动位置
42
+ lastScrollTop: 0,
43
+ lastScrollLeft: 0
50
44
  };
51
45
  }
52
46
  var maxYHeight = 5e6;
@@ -67,9 +61,12 @@ function handleParseColumn($xeGanttView) {
67
61
  var taskScaleList = ganttReactData.taskScaleList;
68
62
  var minViewDate = reactData.minViewDate,
69
63
  maxViewDate = reactData.maxViewDate;
64
+ var scrollXStore = internalData.scrollXStore;
70
65
  var minScale = _xeUtils.default.last(taskScaleList);
71
66
  var fullCols = [];
72
67
  var groupCols = [];
68
+ scrollXStore.startIndex = 0;
69
+ scrollXStore.endIndex = 1;
73
70
  if (minScale && minViewDate && maxViewDate) {
74
71
  var minSType = minScale.type;
75
72
  var weekScale = taskScaleList.find(function (item) {
@@ -94,37 +91,37 @@ function handleParseColumn($xeGanttView) {
94
91
  var currTime = minViewDate.getTime();
95
92
  var diffDayNum = maxViewDate.getTime() - minViewDate.getTime();
96
93
  var countSize = Math.max(5, Math.floor(diffDayNum / gapTime) + 1);
97
- switch (minScale.type) {
98
- case 'day':
99
- case 'date':
100
- if (diffDayNum > 1000 * 60 * 60 * 24 * 366 * 3) {
101
- reactData.tableColumn = [];
102
- reactData.headerGroups = [];
103
- return;
104
- }
105
- break;
106
- case 'hour':
107
- if (diffDayNum > 1000 * 60 * 60 * 24 * 31 * 3) {
108
- reactData.tableColumn = [];
109
- reactData.headerGroups = [];
110
- return;
111
- }
112
- break;
113
- case 'minute':
114
- if (diffDayNum > 1000 * 60 * 60 * 24 * 3) {
115
- reactData.tableColumn = [];
116
- reactData.headerGroups = [];
117
- return;
118
- }
119
- break;
120
- case 'second':
121
- if (diffDayNum > 1000 * 60 * 60 * 3) {
122
- reactData.tableColumn = [];
123
- reactData.headerGroups = [];
124
- return;
125
- }
126
- break;
127
- }
94
+ // switch (minScale.type) {
95
+ // case 'day':
96
+ // case 'date':
97
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 366 * 3)) {
98
+ // reactData.tableColumn = []
99
+ // reactData.headerGroups = []
100
+ // return
101
+ // }
102
+ // break
103
+ // case 'hour':
104
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 31 * 3)) {
105
+ // reactData.tableColumn = []
106
+ // reactData.headerGroups = []
107
+ // return
108
+ // }
109
+ // break
110
+ // case 'minute':
111
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 3)) {
112
+ // reactData.tableColumn = []
113
+ // reactData.headerGroups = []
114
+ // return
115
+ // }
116
+ // break
117
+ // case 'second':
118
+ // if (diffDayNum > (1000 * 60 * 60 * 3)) {
119
+ // reactData.tableColumn = []
120
+ // reactData.headerGroups = []
121
+ // return
122
+ // }
123
+ // break
124
+ // }
128
125
  var renderListMaps = {
129
126
  year: [],
130
127
  quarter: [],
@@ -196,47 +193,47 @@ function handleParseColumn($xeGanttView) {
196
193
  year: {
197
194
  field: yyyy,
198
195
  title: yyyy,
199
- params: dateObj
196
+ dateObj: dateObj
200
197
  },
201
198
  quarter: {
202
199
  field: "".concat(yyyy, "_q").concat(q),
203
- title: q,
204
- params: dateObj
200
+ title: "".concat(q),
201
+ dateObj: dateObj
205
202
  },
206
203
  month: {
207
204
  field: "".concat(yyyy, "_").concat(MM),
208
205
  title: MM,
209
- params: dateObj
206
+ dateObj: dateObj
210
207
  },
211
208
  week: {
212
209
  field: "".concat(yyyy, "_W").concat(W),
213
- title: W,
214
- params: dateObj
210
+ title: "".concat(W),
211
+ dateObj: dateObj
215
212
  },
216
213
  day: {
217
214
  field: "".concat(yyyy, "_").concat(MM, "_").concat(dd, "_E").concat(E),
218
- title: E,
219
- params: dateObj
215
+ title: "".concat(E),
216
+ dateObj: dateObj
220
217
  },
221
218
  date: {
222
219
  field: "".concat(yyyy, "_").concat(MM, "_").concat(dd),
223
220
  title: dd,
224
- params: dateObj
221
+ dateObj: dateObj
225
222
  },
226
223
  hour: {
227
224
  field: "".concat(yyyy, "_").concat(MM, "_").concat(dd, "_").concat(HH),
228
225
  title: HH,
229
- params: dateObj
226
+ dateObj: dateObj
230
227
  },
231
228
  minute: {
232
229
  field: "".concat(yyyy, "_").concat(MM, "_").concat(dd, "_").concat(HH, "_").concat(mm),
233
230
  title: mm,
234
- params: dateObj
231
+ dateObj: dateObj
235
232
  },
236
233
  second: {
237
234
  field: "".concat(yyyy, "_").concat(MM, "_").concat(dd, "_").concat(HH, "_").concat(mm, "_").concat(ss),
238
235
  title: ss,
239
- params: dateObj
236
+ dateObj: dateObj
240
237
  }
241
238
  };
242
239
  var minCol = colMaps[minSType];
@@ -324,8 +321,10 @@ function handleParseColumn($xeGanttView) {
324
321
  internalData.chartMaps = ctMaps;
325
322
  }
326
323
  }
327
- reactData.tableColumn = fullCols;
324
+ internalData.visibleColumn = fullCols;
328
325
  reactData.headerGroups = groupCols;
326
+ updateScrollXStatus($xeGanttView);
327
+ handleTableColumn($xeGanttView);
329
328
  }
330
329
  function handleUpdateData($xeGanttView) {
331
330
  var $xeGantt = $xeGanttView.$xeGantt;
@@ -430,9 +429,10 @@ function updateStyle($xeGanttView) {
430
429
  var internalData = $xeGanttView.internalData;
431
430
  var scrollbarWidth = reactData.scrollbarWidth,
432
431
  scrollbarHeight = reactData.scrollbarHeight,
433
- tableColumn = reactData.tableColumn,
434
- headerGroups = reactData.headerGroups;
435
- var elemStore = internalData.elemStore;
432
+ headerGroups = reactData.headerGroups,
433
+ tableColumn = reactData.tableColumn;
434
+ var elemStore = internalData.elemStore,
435
+ visibleColumn = internalData.visibleColumn;
436
436
  var $xeTable = internalData.xeTable;
437
437
  var el = $xeGanttView.$refs.refElem;
438
438
  if (!el || !el.clientHeight) {
@@ -513,82 +513,210 @@ function updateStyle($xeGanttView) {
513
513
  yBottomCornerEl.style.display = tFooterHeight ? 'block' : '';
514
514
  }
515
515
  var colInfoElem = $xeGanttView.$refs.refColInfoElem;
516
+ var viewCellWidth = 40;
516
517
  if (colInfoElem) {
517
- reactData.viewCellWidth = colInfoElem.clientWidth || 40;
518
+ viewCellWidth = colInfoElem.clientWidth || 40;
518
519
  }
519
- var viewTableWidth = reactData.viewCellWidth * tableColumn.length;
520
+ var viewTableWidth = viewCellWidth * visibleColumn.length;
520
521
  if (bodyScrollElem) {
521
522
  var viewWidth = bodyScrollElem.clientWidth;
522
523
  var remainWidth = viewWidth - viewTableWidth;
523
524
  if (remainWidth > 0) {
524
- reactData.viewCellWidth += Math.floor(remainWidth / tableColumn.length);
525
+ viewCellWidth += Math.floor(remainWidth / visibleColumn.length);
525
526
  viewTableWidth = viewWidth;
526
527
  }
527
528
  }
529
+ reactData.viewCellWidth = viewCellWidth;
528
530
  var headerTableElem = (0, _util.getRefElem)(elemStore['main-header-table']);
529
531
  var bodyTableElem = (0, _util.getRefElem)(elemStore['main-body-table']);
532
+ var vmTableWidth = viewCellWidth * tableColumn.length;
530
533
  if (headerTableElem) {
531
534
  headerTableElem.style.width = "".concat(viewTableWidth, "px");
532
535
  }
533
536
  if (bodyTableElem) {
534
- bodyTableElem.style.width = "".concat(viewTableWidth, "px");
537
+ bodyTableElem.style.width = "".concat(vmTableWidth, "px");
535
538
  }
536
539
  reactData.scrollXWidth = viewTableWidth;
537
540
  return updateChart($xeGanttView);
538
541
  }
539
- function _handleLazyRecalculate($xeGanttView) {
542
+ function handleRecalculateStyle($xeGanttView) {
543
+ var internalData = $xeGanttView.internalData;
544
+ var el = $xeGanttView.$refs.refElem;
545
+ internalData.rceRunTime = Date.now();
546
+ if (!el || !el.clientWidth) {
547
+ return $xeGanttView.$nextTick();
548
+ }
540
549
  calcScrollbar($xeGanttView);
541
550
  updateStyle($xeGanttView);
542
551
  updateChart($xeGanttView);
552
+ return computeScrollLoad($xeGanttView);
553
+ }
554
+ function _handleLazyRecalculate($xeGanttView) {
555
+ var internalData = $xeGanttView.internalData;
556
+ return new Promise(function (resolve) {
557
+ var rceTimeout = internalData.rceTimeout,
558
+ rceRunTime = internalData.rceRunTime;
559
+ var $xeTable = internalData.xeTable;
560
+ var refreshDelay = 50;
561
+ if ($xeTable) {
562
+ var resizeOpts = $xeTable.computeResizeOpts;
563
+ refreshDelay = resizeOpts.refreshDelay || 50;
564
+ }
565
+ if (rceTimeout) {
566
+ clearTimeout(rceTimeout);
567
+ if (rceRunTime && rceRunTime + (refreshDelay - 5) < Date.now()) {
568
+ resolve(handleRecalculateStyle($xeGanttView));
569
+ } else {
570
+ $xeGanttView.$nextTick(function () {
571
+ resolve();
572
+ });
573
+ }
574
+ } else {
575
+ resolve(handleRecalculateStyle($xeGanttView));
576
+ }
577
+ internalData.rceTimeout = setTimeout(function () {
578
+ internalData.rceTimeout = undefined;
579
+ handleRecalculateStyle($xeGanttView);
580
+ }, refreshDelay);
581
+ });
582
+ }
583
+ function computeScrollLoad($xeGanttView) {
584
+ var reactData = $xeGanttView.reactData;
585
+ var internalData = $xeGanttView.internalData;
586
+ return $xeGanttView.$nextTick().then(function () {
587
+ var scrollXLoad = reactData.scrollXLoad;
588
+ var scrollXStore = internalData.scrollXStore;
589
+ // 计算 X 逻辑
590
+ if (scrollXLoad) {
591
+ var _handleVirtualXVisibl = handleVirtualXVisible($xeGanttView),
592
+ toXVisibleIndex = _handleVirtualXVisibl.toVisibleIndex,
593
+ visibleXSize = _handleVirtualXVisibl.visibleSize;
594
+ var offsetXSize = 2;
595
+ scrollXStore.preloadSize = 1;
596
+ scrollXStore.offsetSize = offsetXSize;
597
+ scrollXStore.visibleSize = visibleXSize;
598
+ scrollXStore.endIndex = Math.max(scrollXStore.startIndex + scrollXStore.visibleSize + offsetXSize, scrollXStore.endIndex);
599
+ scrollXStore.visibleStartIndex = Math.max(scrollXStore.startIndex, toXVisibleIndex);
600
+ scrollXStore.visibleEndIndex = Math.min(scrollXStore.endIndex, toXVisibleIndex + visibleXSize);
601
+ updateScrollXData($xeGanttView).then(function () {
602
+ loadScrollXData($xeGanttView);
603
+ });
604
+ } else {
605
+ updateScrollXSpace($xeGanttView);
606
+ }
607
+ });
608
+ }
609
+ function handleVirtualXVisible($xeGanttView) {
610
+ var reactData = $xeGanttView.reactData;
611
+ var internalData = $xeGanttView.internalData;
612
+ var viewCellWidth = reactData.viewCellWidth;
613
+ var elemStore = internalData.elemStore;
614
+ var bodyScrollElem = (0, _util.getRefElem)(elemStore['main-body-scroll']);
615
+ if (bodyScrollElem) {
616
+ var clientWidth = bodyScrollElem.clientWidth;
617
+ var scrollLeft = bodyScrollElem.scrollLeft;
618
+ var toVisibleIndex = Math.floor(scrollLeft / viewCellWidth) - 1;
619
+ var visibleSize = Math.ceil(clientWidth / viewCellWidth) + 1;
620
+ return {
621
+ toVisibleIndex: Math.max(0, toVisibleIndex),
622
+ visibleSize: Math.max(1, visibleSize)
623
+ };
624
+ }
625
+ return {
626
+ toVisibleIndex: 0,
627
+ visibleSize: 6
628
+ };
629
+ }
630
+ function loadScrollXData($xeGanttView) {
631
+ var reactData = $xeGanttView.reactData;
632
+ var internalData = $xeGanttView.internalData;
633
+ var isScrollXBig = reactData.isScrollXBig;
634
+ var scrollXStore = internalData.scrollXStore;
635
+ var preloadSize = scrollXStore.preloadSize,
636
+ startIndex = scrollXStore.startIndex,
637
+ endIndex = scrollXStore.endIndex,
638
+ offsetSize = scrollXStore.offsetSize;
639
+ var _handleVirtualXVisibl2 = handleVirtualXVisible($xeGanttView),
640
+ toVisibleIndex = _handleVirtualXVisibl2.toVisibleIndex,
641
+ visibleSize = _handleVirtualXVisibl2.visibleSize;
642
+ var offsetItem = {
643
+ startIndex: Math.max(0, isScrollXBig ? toVisibleIndex - 1 : toVisibleIndex - 1 - offsetSize - preloadSize),
644
+ endIndex: isScrollXBig ? toVisibleIndex + visibleSize : toVisibleIndex + visibleSize + offsetSize + preloadSize
645
+ };
646
+ scrollXStore.visibleStartIndex = toVisibleIndex - 1;
647
+ scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
648
+ var offsetStartIndex = offsetItem.startIndex,
649
+ offsetEndIndex = offsetItem.endIndex;
650
+ if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
651
+ if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
652
+ scrollXStore.startIndex = offsetStartIndex;
653
+ scrollXStore.endIndex = offsetEndIndex;
654
+ updateScrollXData($xeGanttView);
655
+ }
656
+ }
657
+ }
658
+ function updateScrollXData($xeGanttView) {
659
+ handleTableColumn($xeGanttView);
660
+ updateScrollXSpace($xeGanttView);
543
661
  return $xeGanttView.$nextTick();
544
662
  }
545
- // function updateScrollXSpace ($xeGanttView: VxeGanttViewConstructor & VxeGanttViewPrivateMethods) {
546
- // const reactData = $xeGanttView.reactData
547
- // const internalData = $xeGanttView.internalData
548
- // const { scrollXLoad, scrollXWidth } = reactData
549
- // const { elemStore } = internalData
550
- // const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
551
- // const bodyTableElem = getRefElem(elemStore['main-body-table'])
552
- // let xSpaceLeft = 0
553
- // let clientWidth = 0
554
- // if (bodyScrollElem) {
555
- // clientWidth = bodyScrollElem.clientWidth
556
- // }
557
- // // 虚拟渲染
558
- // let isScrollXBig = false
559
- // let ySpaceWidth = scrollXWidth
560
- // if (scrollXWidth > maxXWidth) {
561
- // // 触右
562
- // if (bodyScrollElem && bodyTableElem && bodyScrollElem.scrollLeft + clientWidth >= maxXWidth) {
563
- // xSpaceLeft = maxXWidth - bodyTableElem.clientWidth
564
- // } else {
565
- // xSpaceLeft = (maxXWidth - clientWidth) * (xSpaceLeft / (scrollXWidth - clientWidth))
566
- // }
567
- // ySpaceWidth = maxXWidth
568
- // isScrollXBig = true
569
- // }
570
- // if (bodyTableElem) {
571
- // bodyTableElem.style.transform = `translate(${xSpaceLeft}px, ${reactData.scrollYTop || 0}px)`
572
- // }
573
- // const layoutList = ['header', 'body', 'footer']
574
- // layoutList.forEach(layout => {
575
- // const xSpaceElem = getRefElem(elemStore[`main-${layout}-xSpace`])
576
- // if (xSpaceElem) {
577
- // xSpaceElem.style.width = scrollXLoad ? `${ySpaceWidth}px` : ''
578
- // }
579
- // })
580
- // reactData.scrollXLeft = xSpaceLeft
581
- // reactData.scrollXWidth = ySpaceWidth
582
- // reactData.isScrollXBig = isScrollXBig
583
- // const scrollXSpaceEl = $xeGanttView.$refs.refScrollXSpaceElem as HTMLDivElement
584
- // if (scrollXSpaceEl) {
585
- // scrollXSpaceEl.style.width = `${ySpaceWidth}px`
586
- // }
587
- // calcScrollbar($xeGanttView)
588
- // return $xeGanttView.$nextTick().then(() => {
589
- // updateStyle($xeGanttView)
590
- // })
591
- // }
663
+ function updateScrollXStatus($xeGanttView) {
664
+ var reactData = $xeGanttView.reactData;
665
+ var scrollXLoad = true;
666
+ reactData.scrollXLoad = scrollXLoad;
667
+ return scrollXLoad;
668
+ }
669
+ function handleTableColumn($xeGanttView) {
670
+ var reactData = $xeGanttView.reactData;
671
+ var internalData = $xeGanttView.internalData;
672
+ var scrollXLoad = reactData.scrollXLoad;
673
+ var visibleColumn = internalData.visibleColumn,
674
+ scrollXStore = internalData.scrollXStore;
675
+ var tableColumn = scrollXLoad ? visibleColumn.slice(scrollXStore.startIndex, scrollXStore.endIndex) : visibleColumn.slice(0);
676
+ reactData.tableColumn = tableColumn;
677
+ }
678
+ function updateScrollXSpace($xeGanttView) {
679
+ var reactData = $xeGanttView.reactData;
680
+ var internalData = $xeGanttView.internalData;
681
+ var scrollXLoad = reactData.scrollXLoad,
682
+ scrollXWidth = reactData.scrollXWidth,
683
+ viewCellWidth = reactData.viewCellWidth;
684
+ var elemStore = internalData.elemStore,
685
+ scrollXStore = internalData.scrollXStore;
686
+ var bodyTableElem = (0, _util.getRefElem)(elemStore['main-body-table']);
687
+ // const headerTableElem = getRefElem(elemStore['main-header-table'])
688
+ // const footerTableElem = getRefElem(elemStore['main-footer-table'])
689
+ var startIndex = scrollXStore.startIndex;
690
+ var xSpaceLeft = 0;
691
+ if (scrollXLoad) {
692
+ xSpaceLeft = Math.max(0, startIndex * viewCellWidth);
693
+ }
694
+ // if (headerTableElem) {
695
+ // headerTableElem.style.transform = `translate(${xSpaceLeft}px, 0px)`
696
+ // }
697
+ if (bodyTableElem) {
698
+ bodyTableElem.style.transform = "translate(".concat(xSpaceLeft, "px, ").concat(reactData.scrollYTop || 0, "px)");
699
+ }
700
+ // if (footerTableElem) {
701
+ // footerTableElem.style.transform = `translate(${xSpaceLeft}px, 0px)`
702
+ // }
703
+ var layoutList = ['header', 'body', 'footer'];
704
+ layoutList.forEach(function (layout) {
705
+ var xSpaceElem = (0, _util.getRefElem)(elemStore["main-".concat(layout, "-xSpace")]);
706
+ if (xSpaceElem) {
707
+ xSpaceElem.style.width = scrollXLoad ? "".concat(scrollXWidth, "px") : '';
708
+ }
709
+ });
710
+ var scrollXSpaceEl = $xeGanttView.$refs.refScrollXSpaceElem;
711
+ if (scrollXSpaceEl) {
712
+ scrollXSpaceEl.style.width = "".concat(scrollXWidth, "px");
713
+ }
714
+ calcScrollbar($xeGanttView);
715
+ return $xeGanttView.$nextTick();
716
+ }
717
+ function triggerScrollXEvent($xeGanttView) {
718
+ loadScrollXData($xeGanttView);
719
+ }
592
720
  function updateScrollYSpace($xeGanttView) {
593
721
  var reactData = $xeGanttView.reactData;
594
722
  var internalData = $xeGanttView.internalData;
@@ -717,6 +845,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
717
845
  scrollbarWidth: 0,
718
846
  // 横向滚动条的高度
719
847
  scrollbarHeight: 0,
848
+ // 最后滚动时间戳
849
+ lastScrollTime: 0,
720
850
  lazScrollLoading: false,
721
851
  scrollVMLoading: false,
722
852
  scrollYHeight: 0,
@@ -845,11 +975,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
845
975
  },
846
976
  triggerBodyScrollEvent: function triggerBodyScrollEvent(evnt) {
847
977
  var $xeGanttView = this;
978
+ var reactData = $xeGanttView.reactData;
848
979
  var internalData = $xeGanttView.internalData;
980
+ var scrollXLoad = reactData.scrollXLoad;
849
981
  var elemStore = internalData.elemStore,
850
982
  inVirtualScroll = internalData.inVirtualScroll,
851
983
  inHeaderScroll = internalData.inHeaderScroll,
852
- inFooterScroll = internalData.inFooterScroll;
984
+ inFooterScroll = internalData.inFooterScroll,
985
+ lastScrollLeft = internalData.lastScrollLeft,
986
+ lastScrollTop = internalData.lastScrollTop;
853
987
  if (inVirtualScroll) {
854
988
  return;
855
989
  }
@@ -860,42 +994,49 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
860
994
  var headerScrollElem = (0, _util.getRefElem)(elemStore['main-header-scroll']);
861
995
  var xHandleEl = $xeGanttView.$refs.refScrollXHandleElem;
862
996
  var yHandleEl = $xeGanttView.$refs.refScrollYHandleElem;
863
- if (headerScrollElem && wrapperEl) {
864
- var isRollX = true;
865
- var isRollY = true;
866
- var currLeftNum = wrapperEl.scrollLeft;
867
- var currTopNum = wrapperEl.scrollTop;
868
- internalData.inBodyScroll = true;
869
- (0, _dom.setScrollLeft)(xHandleEl, currLeftNum);
870
- (0, _dom.setScrollLeft)(headerScrollElem, currLeftNum);
871
- (0, _dom.setScrollTop)(yHandleEl, currTopNum);
872
- syncTableScrollTop($xeGanttView, currTopNum);
873
- handleScrollEvent($xeGanttView, evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
997
+ var scrollLeft = wrapperEl.scrollLeft;
998
+ var scrollTop = wrapperEl.scrollTop;
999
+ var isRollX = scrollLeft !== lastScrollLeft;
1000
+ var isRollY = scrollTop !== lastScrollTop;
1001
+ internalData.inBodyScroll = true;
1002
+ internalData.scrollRenderType = '';
1003
+ if (isRollY) {
1004
+ (0, _dom.setScrollTop)(yHandleEl, scrollTop);
1005
+ syncTableScrollTop($xeGanttView, scrollTop);
874
1006
  }
875
- },
876
- triggerFooterScrollEvent: function triggerFooterScrollEvent(evnt) {
877
- var $xeGanttView = this;
878
- var internalData = $xeGanttView.internalData;
879
- var inVirtualScroll = internalData.inVirtualScroll,
880
- inHeaderScroll = internalData.inHeaderScroll,
881
- inBodyScroll = internalData.inBodyScroll;
882
- if (inVirtualScroll) {
883
- return;
884
- }
885
- if (inHeaderScroll || inBodyScroll) {
886
- return;
887
- }
888
- var wrapperEl = evnt.currentTarget;
889
- if (wrapperEl) {
890
- var isRollX = true;
891
- var isRollY = false;
892
- var currLeftNum = wrapperEl.scrollLeft;
893
- handleScrollEvent($xeGanttView, evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
1007
+ if (isRollX) {
1008
+ internalData.inBodyScroll = true;
1009
+ (0, _dom.setScrollLeft)(xHandleEl, scrollLeft);
1010
+ (0, _dom.setScrollLeft)(headerScrollElem, scrollLeft);
1011
+ if (scrollXLoad) {
1012
+ triggerScrollXEvent($xeGanttView);
1013
+ }
894
1014
  }
1015
+ handleScrollEvent($xeGanttView, evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
895
1016
  },
1017
+ // triggerFooterScrollEvent (evnt: Event) {
1018
+ // const $xeGanttView = this
1019
+ // const internalData = $xeGanttView.internalData
1020
+ // const { inVirtualScroll, inHeaderScroll, inBodyScroll } = internalData
1021
+ // if (inVirtualScroll) {
1022
+ // return
1023
+ // }
1024
+ // if (inHeaderScroll || inBodyScroll) {
1025
+ // return
1026
+ // }
1027
+ // const wrapperEl = evnt.currentTarget as HTMLDivElement
1028
+ // if (wrapperEl) {
1029
+ // const isRollX = true
1030
+ // const isRollY = false
1031
+ // const currLeftNum = wrapperEl.scrollLeft
1032
+ // handleScrollEvent($xeGanttView, evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum)
1033
+ // }
1034
+ // },
896
1035
  triggerVirtualScrollXEvent: function triggerVirtualScrollXEvent(evnt) {
897
1036
  var $xeGanttView = this;
1037
+ var reactData = $xeGanttView.reactData;
898
1038
  var internalData = $xeGanttView.internalData;
1039
+ var scrollXLoad = reactData.scrollXLoad;
899
1040
  var elemStore = internalData.elemStore,
900
1041
  inHeaderScroll = internalData.inHeaderScroll,
901
1042
  inBodyScroll = internalData.inBodyScroll;
@@ -912,6 +1053,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
912
1053
  internalData.inVirtualScroll = true;
913
1054
  (0, _dom.setScrollLeft)(headerScrollElem, currLeftNum);
914
1055
  (0, _dom.setScrollLeft)(bodyScrollElem, currLeftNum);
1056
+ if (scrollXLoad) {
1057
+ triggerScrollXEvent($xeGanttView);
1058
+ }
915
1059
  handleScrollEvent($xeGanttView, evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
916
1060
  }
917
1061
  },
@@ -938,24 +1082,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
938
1082
  },
939
1083
  handleUpdateSXSpace: function handleUpdateSXSpace() {
940
1084
  var $xeGanttView = this;
941
- var reactData = $xeGanttView.reactData;
942
- var internalData = $xeGanttView.internalData;
943
- var scrollXLoad = reactData.scrollXLoad,
944
- scrollXWidth = reactData.scrollXWidth;
945
- var elemStore = internalData.elemStore;
946
- var layoutList = ['header', 'body', 'footer'];
947
- layoutList.forEach(function (layout) {
948
- var xSpaceElem = (0, _util.getRefElem)(elemStore["main-".concat(layout, "-xSpace")]);
949
- if (xSpaceElem) {
950
- xSpaceElem.style.width = scrollXLoad ? "".concat(scrollXWidth, "px") : '';
951
- }
952
- });
953
- var scrollXSpaceEl = $xeGanttView.$refs.refScrollXSpaceElem;
954
- if (scrollXSpaceEl) {
955
- scrollXSpaceEl.style.width = "".concat(scrollXWidth, "px");
956
- }
957
- calcScrollbar($xeGanttView);
958
- return $xeGanttView.$nextTick();
1085
+ return updateScrollXSpace($xeGanttView);
959
1086
  },
960
1087
  handleUpdateSYSpace: function handleUpdateSYSpace() {
961
1088
  var $xeGanttView = this;