vxe-gantt 4.0.23 → 4.0.24

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.
@@ -1,6 +1,8 @@
1
1
  import { h, inject, ref, onMounted, onUnmounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import { getCellRestHeight } from './util';
4
+ import { getClass } from '../../ui/src/utils';
5
+ import XEUtils from 'xe-utils';
4
6
  import GanttViewChartComponent from './gantt-chart';
5
7
  const sourceType = 'gantt';
6
8
  const viewType = 'body';
@@ -30,9 +32,10 @@ export default defineVxeComponent({
30
32
  const { headerGroups } = reactData;
31
33
  const { todayDateMaps } = internalData;
32
34
  const taskViewOpts = computeTaskViewOpts.value;
33
- const { showNowLine } = taskViewOpts;
35
+ const { showNowLine, viewStyle } = taskViewOpts;
34
36
  const { scaleItem } = headerGroups[headerGroups.length - 1] || {};
35
- const { field } = column;
37
+ const { field, dateObj } = column;
38
+ const { cellClassName, cellStyle } = viewStyle || {};
36
39
  const todayValue = showNowLine && scaleItem ? todayDateMaps[scaleItem.type] : null;
37
40
  const rowRest = fullAllDataRowIdData[rowid] || {};
38
41
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
@@ -71,16 +74,24 @@ export default defineVxeComponent({
71
74
  onDblclick: (evnt) => $xeTable.handleRowResizeDblclickEvent(evnt, cellParams)
72
75
  }));
73
76
  }
74
- const ctParams = { source: sourceType, type: viewType, row, column, $rowIndex, rowIndex, _rowIndex };
77
+ const ctParams = { source: sourceType, type: viewType, dateObj, row, column, $rowIndex, rowIndex, _rowIndex };
75
78
  return h('td', {
76
79
  key: $columnIndex,
77
- class: ['vxe-gantt-view--body-column', {
80
+ class: [
81
+ 'vxe-gantt-view--body-column',
82
+ {
78
83
  'is--now': showNowLine && todayValue === field,
79
84
  'col--rs-height': isRsHeight
80
- }],
81
- style: {
82
- height: `${cellHeight}px`
83
- },
85
+ },
86
+ getClass(cellClassName, ctParams)
87
+ ],
88
+ style: cellStyle
89
+ ? Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle(ctParams) : cellStyle, {
90
+ height: `${cellHeight}px`
91
+ })
92
+ : {
93
+ height: `${cellHeight}px`
94
+ },
84
95
  onClick(evnt) {
85
96
  $xeGantt.handleTaskCellClickEvent(evnt, { row, column });
86
97
  },
@@ -106,6 +117,9 @@ export default defineVxeComponent({
106
117
  const treeOpts = computeTreeOpts.value;
107
118
  const { transform } = treeOpts;
108
119
  const childrenField = treeOpts.children || treeOpts.childrenField;
120
+ const taskViewOpts = computeTaskViewOpts.value;
121
+ const { viewStyle } = taskViewOpts;
122
+ const { rowClassName, rowStyle } = viewStyle || {};
109
123
  const { tableColumn, scrollYLoad } = reactData;
110
124
  const trVNs = [];
111
125
  tableData.forEach((row, $rowIndex) => {
@@ -138,13 +152,18 @@ export default defineVxeComponent({
138
152
  trOns.onDragend = $xeTable.handleRowDragDragendEvent;
139
153
  trOns.onDragover = $xeTable.handleRowDragDragoverEvent;
140
154
  }
141
- trVNs.push(h('tr', Object.assign({ key: treeConfig ? rowid : $rowIndex, class: ['vxe-gantt-view--body-row', {
155
+ const rowParams = { source: sourceType, type: viewType, row, rowIndex, $rowIndex, _rowIndex };
156
+ trVNs.push(h('tr', Object.assign({ key: treeConfig ? rowid : $rowIndex, class: [
157
+ 'vxe-gantt-view--body-row',
158
+ {
142
159
  'row--stripe': stripe && (_rowIndex + 1) % 2 === 0,
143
160
  'is--new': isNewRow,
144
161
  'row--radio': radioOpts.highlight && $xeTable.eqRow(selectRadioRow, row),
145
162
  'row--checked': checkboxOpts.highlight && $xeTable.isCheckedByCheckboxRow(row),
146
163
  'row--pending': !!pendingRowFlag && !!pendingRowMaps[rowid]
147
- }], rowid }, trOns), tableColumn.map((column, $columnIndex) => renderColumn($xeTable, row, rowid, rowIndex, $rowIndex, _rowIndex, column, $columnIndex))));
164
+ },
165
+ getClass(rowClassName, rowParams)
166
+ ], rowid, style: rowStyle ? XEUtils.isFunction(rowStyle) ? rowStyle(rowParams) : rowStyle : undefined }, trOns), tableColumn.map((column, $columnIndex) => renderColumn($xeTable, row, rowid, rowIndex, $rowIndex, _rowIndex, column, $columnIndex))));
148
167
  let isExpandTree = false;
149
168
  let rowChildren = [];
150
169
  if (treeConfig && !scrollYLoad && !transform) {
@@ -8,6 +8,7 @@ import GanttViewHeaderComponent from './gantt-header';
8
8
  import GanttViewBodyComponent from './gantt-body';
9
9
  import GanttViewFooterComponent from './gantt-footer';
10
10
  const { globalEvents } = VxeUI;
11
+ const sourceType = 'gantt';
11
12
  function createInternalData() {
12
13
  return {
13
14
  xeTable: null,
@@ -781,8 +782,7 @@ export default defineVxeComponent({
781
782
  reactData.lazScrollLoading = false;
782
783
  }, 200);
783
784
  };
784
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
785
- const handleScrollEvent = (evnt, isRollY, isRollX, scrollTop, scrollLeft) => {
785
+ const handleScrollData = (isRollY, isRollX, scrollTop, scrollLeft) => {
786
786
  if (isRollX) {
787
787
  internalData.lastScrollLeft = scrollLeft;
788
788
  }
@@ -792,6 +792,91 @@ export default defineVxeComponent({
792
792
  reactData.lastScrollTime = Date.now();
793
793
  checkLastSyncScroll(isRollX, isRollY);
794
794
  };
795
+ const handleScrollEvent = (evnt, isRollY, isRollX, scrollTop, scrollLeft) => {
796
+ const $xeTable = internalData.xeTable;
797
+ const { lastScrollLeft, lastScrollTop } = internalData;
798
+ const xHandleEl = refScrollXHandleElem.value;
799
+ const yHandleEl = refScrollYHandleElem.value;
800
+ if (!xHandleEl || !yHandleEl) {
801
+ return;
802
+ }
803
+ if (!$xeTable) {
804
+ return;
805
+ }
806
+ const { computeScrollXThreshold, computeScrollYThreshold } = $xeTable.getComputeMaps();
807
+ const bodyHeight = yHandleEl.clientHeight;
808
+ const bodyWidth = xHandleEl.clientWidth;
809
+ const scrollHeight = yHandleEl.scrollHeight;
810
+ const scrollWidth = xHandleEl.scrollWidth;
811
+ let isTop = false;
812
+ let isBottom = false;
813
+ let isLeft = false;
814
+ let isRight = false;
815
+ let direction = '';
816
+ let isTopBoundary = false;
817
+ let isBottomBoundary = false;
818
+ let isLeftBoundary = false;
819
+ let isRightBoundary = false;
820
+ if (isRollX) {
821
+ const xThreshold = computeScrollXThreshold.value;
822
+ isLeft = scrollLeft <= 0;
823
+ if (!isLeft) {
824
+ isRight = scrollLeft + bodyWidth >= scrollWidth - 1;
825
+ }
826
+ if (scrollLeft > lastScrollLeft) {
827
+ direction = 'right';
828
+ if (scrollLeft + bodyWidth >= scrollWidth - xThreshold) {
829
+ isRightBoundary = true;
830
+ }
831
+ }
832
+ else {
833
+ direction = 'left';
834
+ if (scrollLeft <= xThreshold) {
835
+ isLeftBoundary = true;
836
+ }
837
+ }
838
+ }
839
+ if (isRollY) {
840
+ const yThreshold = computeScrollYThreshold.value;
841
+ isTop = scrollTop <= 0;
842
+ if (!isTop) {
843
+ isBottom = scrollTop + bodyHeight >= scrollHeight - 1;
844
+ }
845
+ if (scrollTop > lastScrollTop) {
846
+ direction = 'bottom';
847
+ if (scrollTop + bodyHeight >= scrollHeight - yThreshold) {
848
+ isBottomBoundary = true;
849
+ }
850
+ }
851
+ else {
852
+ direction = 'top';
853
+ if (scrollTop <= yThreshold) {
854
+ isTopBoundary = true;
855
+ }
856
+ }
857
+ }
858
+ handleScrollData(isRollY, isRollX, scrollTop, scrollLeft);
859
+ const evntParams = {
860
+ source: sourceType,
861
+ scrollTop,
862
+ scrollLeft,
863
+ bodyHeight,
864
+ bodyWidth,
865
+ scrollHeight,
866
+ scrollWidth,
867
+ isX: isRollX,
868
+ isY: isRollY,
869
+ isTop,
870
+ isBottom,
871
+ isLeft,
872
+ isRight,
873
+ direction
874
+ };
875
+ if (isBottomBoundary || isTopBoundary || isRightBoundary || isLeftBoundary) {
876
+ $xeGantt.dispatchEvent('scroll-boundary', evntParams, evnt);
877
+ }
878
+ $xeGantt.dispatchEvent('scroll', evntParams, evnt);
879
+ };
795
880
  const ganttViewMethods = {
796
881
  refreshData() {
797
882
  handleUpdateData();
@@ -911,7 +996,12 @@ export default defineVxeComponent({
911
996
  triggerScrollXEvent();
912
997
  }
913
998
  }
914
- handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
999
+ if (isRollY) {
1000
+ handleScrollData(isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
1001
+ }
1002
+ if (isRollX) {
1003
+ handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
1004
+ }
915
1005
  },
916
1006
  // triggerFooterScrollEvent (evnt) {
917
1007
  // const { inVirtualScroll, inHeaderScroll, inBodyScroll } = internalData
@@ -965,7 +1055,7 @@ export default defineVxeComponent({
965
1055
  internalData.inVirtualScroll = true;
966
1056
  setScrollTop(bodyScrollElem, currTopNum);
967
1057
  syncTableScrollTop(currTopNum);
968
- handleScrollEvent(evnt, isRollY, isRollX, currTopNum, wrapperEl.scrollLeft);
1058
+ handleScrollData(isRollY, isRollX, currTopNum, wrapperEl.scrollLeft);
969
1059
  }
970
1060
  },
971
1061
  handleUpdateSXSpace() {
package/es/ui/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  import { errLog } from './src/log';
3
3
  const { setConfig, setIcon, checkVersion } = VxeUI;
4
- VxeUI.ganttVersion = "4.0.23";
4
+ VxeUI.ganttVersion = "4.0.24";
5
5
  setConfig({
6
6
  gantt: {
7
7
  // size: null,
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `gantt v${"4.0.23"}`;
3
+ const version = `gantt v${"4.0.24"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);
@@ -42,3 +42,6 @@ export function eqEmptyValue(cellValue) {
42
42
  export function getStringValue(cellValue) {
43
43
  return eqEmptyValue(cellValue) ? '' : cellValue;
44
44
  }
45
+ export function getClass(property, params) {
46
+ return property ? XEUtils.isFunction(property) ? property(params) : property : '';
47
+ }
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
  var _vue = require("vue");
8
8
  var _comp = require("../../ui/src/comp");
9
9
  var _util = require("./util");
10
+ var _utils = require("../../ui/src/utils");
11
+ var _xeUtils = _interopRequireDefault(require("xe-utils"));
10
12
  var _ganttChart = _interopRequireDefault(require("./gantt-chart"));
11
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
14
  const sourceType = 'gantt';
@@ -59,14 +61,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
59
61
  } = internalData;
60
62
  const taskViewOpts = computeTaskViewOpts.value;
61
63
  const {
62
- showNowLine
64
+ showNowLine,
65
+ viewStyle
63
66
  } = taskViewOpts;
64
67
  const {
65
68
  scaleItem
66
69
  } = headerGroups[headerGroups.length - 1] || {};
67
70
  const {
68
- field
71
+ field,
72
+ dateObj
69
73
  } = column;
74
+ const {
75
+ cellClassName,
76
+ cellStyle
77
+ } = viewStyle || {};
70
78
  const todayValue = showNowLine && scaleItem ? todayDateMaps[scaleItem.type] : null;
71
79
  const rowRest = fullAllDataRowIdData[rowid] || {};
72
80
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
@@ -108,6 +116,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
108
116
  const ctParams = {
109
117
  source: sourceType,
110
118
  type: viewType,
119
+ dateObj,
111
120
  row,
112
121
  column,
113
122
  $rowIndex,
@@ -119,8 +128,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
119
128
  class: ['vxe-gantt-view--body-column', {
120
129
  'is--now': showNowLine && todayValue === field,
121
130
  'col--rs-height': isRsHeight
122
- }],
123
- style: {
131
+ }, (0, _utils.getClass)(cellClassName, ctParams)],
132
+ style: cellStyle ? Object.assign({}, _xeUtils.default.isFunction(cellStyle) ? cellStyle(ctParams) : cellStyle, {
133
+ height: `${cellHeight}px`
134
+ }) : {
124
135
  height: `${cellHeight}px`
125
136
  },
126
137
  onClick(evnt) {
@@ -175,6 +186,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
175
186
  transform
176
187
  } = treeOpts;
177
188
  const childrenField = treeOpts.children || treeOpts.childrenField;
189
+ const taskViewOpts = computeTaskViewOpts.value;
190
+ const {
191
+ viewStyle
192
+ } = taskViewOpts;
193
+ const {
194
+ rowClassName,
195
+ rowStyle
196
+ } = viewStyle || {};
178
197
  const {
179
198
  tableColumn,
180
199
  scrollYLoad
@@ -213,6 +232,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
213
232
  trOns.onDragend = $xeTable.handleRowDragDragendEvent;
214
233
  trOns.onDragover = $xeTable.handleRowDragDragoverEvent;
215
234
  }
235
+ const rowParams = {
236
+ source: sourceType,
237
+ type: viewType,
238
+ row,
239
+ rowIndex,
240
+ $rowIndex,
241
+ _rowIndex
242
+ };
216
243
  trVNs.push((0, _vue.h)('tr', Object.assign({
217
244
  key: treeConfig ? rowid : $rowIndex,
218
245
  class: ['vxe-gantt-view--body-row', {
@@ -221,8 +248,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
221
248
  'row--radio': radioOpts.highlight && $xeTable.eqRow(selectRadioRow, row),
222
249
  'row--checked': checkboxOpts.highlight && $xeTable.isCheckedByCheckboxRow(row),
223
250
  'row--pending': !!pendingRowFlag && !!pendingRowMaps[rowid]
224
- }],
225
- rowid
251
+ }, (0, _utils.getClass)(rowClassName, rowParams)],
252
+ rowid,
253
+ style: rowStyle ? _xeUtils.default.isFunction(rowStyle) ? rowStyle(rowParams) : rowStyle : undefined
226
254
  }, trOns), tableColumn.map((column, $columnIndex) => renderColumn($xeTable, row, rowid, rowIndex, $rowIndex, _rowIndex, column, $columnIndex))));
227
255
  let isExpandTree = false;
228
256
  let rowChildren = [];
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_util=require("./util"),_ganttChart=_interopRequireDefault(require("./gantt-chart"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let sourceType="gantt",viewType="body";var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttViewBody",setup(){let y=(0,_vue.inject)("$xeGantt",{}),l=(0,_vue.inject)("$xeGanttView",{}),b=y.getComputeMaps().computeTaskViewOpts,{reactData:M,internalData:D}=l,r=(0,_vue.ref)(),n=(0,_vue.ref)(),u=(0,_vue.ref)(),i=(0,_vue.ref)(),s=(0,_vue.ref)(),O=(a,o,e,l,r,n,t,u)=>{var i=a.reactData.resizeHeightFlag,{fullAllDataRowIdData:s,visibleColumn:d}=a.internalData,{computeCellOpts:v,computeRowOpts:p,computeDefaultRowHeight:c,computeResizableOpts:w}=a.getComputeMaps(),v=v.value,p=p.value,c=c.value,w=w.value.isAllRowDrag,h=M.headerGroups,g=D.todayDateMaps,x=b.value.showNowLine,h=(h[h.length-1]||{}).scaleItem,m=t.field,g=x&&h?g[h.type]:null,h=s[e]||{},s=0<(i?h.resizeHeight:0),i=(0,_util.getCellRestHeight)(h,v,p,c),h=[];if(w&&p.resizable){let t={$table:a,$grid:null,$gantt:y,seq:-1,rowid:e,row:o,rowIndex:l,$rowIndex:r,_rowIndex:n,column:d[0],columnIndex:0,$columnIndex:0,_columnIndex:0,fixed:"",source:sourceType,type:viewType,isHidden:!1,isEdit:!1,level:-1,visibleData:[],data:[],items:[]};h.push((0,_vue.h)("div",{class:"vxe-gantt-view-cell--row-resizable",onMousedown:e=>a.handleRowResizeMousedownEvent(e,t),onDblclick:e=>a.handleRowResizeDblclickEvent(e,t)}))}let _={source:sourceType,type:viewType,row:o,column:t,$rowIndex:r,rowIndex:l,_rowIndex:n};return(0,_vue.h)("td",{key:u,class:["vxe-gantt-view--body-column",{"is--now":x&&g===m,"col--rs-height":s}],style:{height:i+"px"},onClick(e){y.handleTaskCellClickEvent(e,{row:o,column:t})},onDblclick(e){y.handleTaskCellDblclickEvent(e,{row:o,column:t})},onContextmenu(e){y.handleTaskBodyContextmenuEvent(e,_)}},h)},H=(d,e)=>{let{treeConfig:v,stripe:p,highlightHoverRow:c,editConfig:w}=d.props,{treeExpandedFlag:h,selectRadioRow:g,pendingRowFlag:x,isRowGroupStatus:m}=d.reactData,{fullAllDataRowIdData:_,treeExpandedMaps:y,pendingRowMaps:b}=d.internalData;var{computeRadioOpts:t,computeCheckboxOpts:a,computeTreeOpts:o,computeRowOpts:l}=d.getComputeMaps();let D=t.value,f=a.value,R=l.value;t=o.value;let C=t.transform,k=t.children||t.childrenField,{tableColumn:I,scrollYLoad:E}=M,T=[];return e.forEach((a,o)=>{let l=d.getRowid(a);var e=_[l]||{},t={};let r=o,n=-1,u=(e&&(r=e.index,n=e._index),!1),i=(w&&(u=d.isInsertByRow(a)),(R.isHover||c)&&(t.onMouseenter=e=>{d.triggerHoverEvent(e,{row:a,rowIndex:r})},t.onMouseleave=()=>{d.clearHoverRow()}),!R.drag||m||v&&!C||(t.onDragstart=d.handleRowDragDragstartEvent,t.onDragend=d.handleRowDragDragendEvent,t.onDragover=d.handleRowDragDragoverEvent),T.push((0,_vue.h)("tr",Object.assign({key:v?l:o,class:["vxe-gantt-view--body-row",{"row--stripe":p&&(n+1)%2==0,"is--new":u,"row--radio":D.highlight&&d.eqRow(g,a),"row--checked":f.highlight&&d.isCheckedByCheckboxRow(a),"row--pending":!!x&&!!b[l]}],rowid:l},t),I.map((e,t)=>O(d,a,l,r,o,n,e,t)))),!1),s=[];!v||E||C||(s=a[k],i=!!h&&s&&0<s.length&&!!y[l]),i&&T.push(...H(d,s))}),T};return(0,_vue.onMounted)(()=>{var e=D.elemStore,t="main-body-";e[t+"wrapper"]=r,e[t+"scroll"]=n,e[t+"table"]=u,e[t+"xSpace"]=i,e[t+"ySpace"]=s}),(0,_vue.onUnmounted)(()=>{var e=D.elemStore,t="main-body-";e[t+"wrapper"]=null,e[t+"scroll"]=null,e[t+"table"]=null,e[t+"xSpace"]=null,e[t+"ySpace"]=null}),()=>{var e=l.internalData.xeTable;let{tableData:t,tableColumn:a,viewCellWidth:o}=M;return(0,_vue.h)("div",{ref:r,class:"vxe-gantt-view--body-wrapper"},[(0,_vue.h)("div",{ref:n,class:"vxe-gantt-view--body-inner-wrapper",onScroll:l.triggerBodyScrollEvent,onContextmenu(e){y.handleTaskBodyContextmenuEvent(e,{source:sourceType,type:viewType,rowIndex:-1,$rowIndex:-1,_rowIndex:-1})}},[(0,_vue.h)("div",{ref:i,class:"vxe-body--x-space"}),(0,_vue.h)("div",{ref:s,class:"vxe-body--y-space"}),(0,_vue.h)("table",{ref:u,class:"vxe-gantt-view--body-table"},[(0,_vue.h)("colgroup",{},a.map((e,t)=>(0,_vue.h)("col",{key:t,style:{width:o+"px"}}))),(0,_vue.h)("tbody",{},e?H(e,t):[])]),(0,_vue.h)(_ganttChart.default)])])}}});
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_util=require("./util"),_utils=require("../../ui/src/utils"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ganttChart=_interopRequireDefault(require("./gantt-chart"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let sourceType="gantt",viewType="body";var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttViewBody",setup(){let D=(0,_vue.inject)("$xeGantt",{}),o=(0,_vue.inject)("$xeGanttView",{}),S=D.getComputeMaps().computeTaskViewOpts,{reactData:q,internalData:R}=o,r=(0,_vue.ref)(),n=(0,_vue.ref)(),i=(0,_vue.ref)(),u=(0,_vue.ref)(),s=(0,_vue.ref)(),$=(l,a,e,o,r,n,t,i)=>{var u=l.reactData.resizeHeightFlag,{fullAllDataRowIdData:s,visibleColumn:d}=l.internalData,{computeCellOpts:v,computeRowOpts:c,computeDefaultRowHeight:p,computeResizableOpts:w}=l.getComputeMaps(),v=v.value,c=c.value,p=p.value,w=w.value.isAllRowDrag,g=q.headerGroups,h=R.todayDateMaps,{showNowLine:x,viewStyle:_}=S.value,g=(g[g.length-1]||{}).scaleItem,{field:y,dateObj:m}=t,{cellClassName:_,cellStyle:b}=_||{},h=x&&g?h[g.type]:null,g=s[e]||{},s=0<(u?g.resizeHeight:0),u=(0,_util.getCellRestHeight)(g,v,c,p),g=[];if(w&&c.resizable){let t={$table:l,$grid:null,$gantt:D,seq:-1,rowid:e,row:a,rowIndex:o,$rowIndex:r,_rowIndex:n,column:d[0],columnIndex:0,$columnIndex:0,_columnIndex:0,fixed:"",source:sourceType,type:viewType,isHidden:!1,isEdit:!1,level:-1,visibleData:[],data:[],items:[]};g.push((0,_vue.h)("div",{class:"vxe-gantt-view-cell--row-resizable",onMousedown:e=>l.handleRowResizeMousedownEvent(e,t),onDblclick:e=>l.handleRowResizeDblclickEvent(e,t)}))}let f={source:sourceType,type:viewType,dateObj:m,row:a,column:t,$rowIndex:r,rowIndex:o,_rowIndex:n};return(0,_vue.h)("td",{key:i,class:["vxe-gantt-view--body-column",{"is--now":x&&h===y,"col--rs-height":s},(0,_utils.getClass)(_,f)],style:b?Object.assign({},_xeUtils.default.isFunction(b)?b(f):b,{height:u+"px"}):{height:u+"px"},onClick(e){D.handleTaskCellClickEvent(e,{row:a,column:t})},onDblclick(e){D.handleTaskCellDblclickEvent(e,{row:a,column:t})},onContextmenu(e){D.handleTaskBodyContextmenuEvent(e,f)}},g)},H=(d,e)=>{let{treeConfig:v,stripe:c,highlightHoverRow:p,editConfig:w}=d.props,{treeExpandedFlag:g,selectRadioRow:h,pendingRowFlag:x,isRowGroupStatus:_}=d.reactData,{fullAllDataRowIdData:y,treeExpandedMaps:m,pendingRowMaps:b}=d.internalData;var{computeRadioOpts:t,computeCheckboxOpts:l,computeTreeOpts:a,computeRowOpts:o}=d.getComputeMaps();let f=t.value,D=l.value,R=o.value;t=a.value;let C=t.transform,I=t.children||t.childrenField;l=S.value.viewStyle;let{rowClassName:k,rowStyle:T}=l||{},{tableColumn:E,scrollYLoad:M}=q,O=[];return e.forEach((l,a)=>{let o=d.getRowid(l);var e=y[o]||{},t={};let r=a,n=-1,i=(e&&(r=e.index,n=e._index),!1);w&&(i=d.isInsertByRow(l)),(R.isHover||p)&&(t.onMouseenter=e=>{d.triggerHoverEvent(e,{row:l,rowIndex:r})},t.onMouseleave=()=>{d.clearHoverRow()}),!R.drag||_||v&&!C||(t.onDragstart=d.handleRowDragDragstartEvent,t.onDragend=d.handleRowDragDragendEvent,t.onDragover=d.handleRowDragDragoverEvent);e={source:sourceType,type:viewType,row:l,rowIndex:r,$rowIndex:a,_rowIndex:n};O.push((0,_vue.h)("tr",Object.assign({key:v?o:a,class:["vxe-gantt-view--body-row",{"row--stripe":c&&(n+1)%2==0,"is--new":i,"row--radio":f.highlight&&d.eqRow(h,l),"row--checked":D.highlight&&d.isCheckedByCheckboxRow(l),"row--pending":!!x&&!!b[o]},(0,_utils.getClass)(k,e)],rowid:o,style:T?_xeUtils.default.isFunction(T)?T(e):T:void 0},t),E.map((e,t)=>$(d,l,o,r,a,n,e,t))));let u=!1,s=[];!v||M||C||(s=l[I],u=!!g&&s&&0<s.length&&!!m[o]),u&&O.push(...H(d,s))}),O};return(0,_vue.onMounted)(()=>{var e=R.elemStore,t="main-body-";e[t+"wrapper"]=r,e[t+"scroll"]=n,e[t+"table"]=i,e[t+"xSpace"]=u,e[t+"ySpace"]=s}),(0,_vue.onUnmounted)(()=>{var e=R.elemStore,t="main-body-";e[t+"wrapper"]=null,e[t+"scroll"]=null,e[t+"table"]=null,e[t+"xSpace"]=null,e[t+"ySpace"]=null}),()=>{var e=o.internalData.xeTable;let{tableData:t,tableColumn:l,viewCellWidth:a}=q;return(0,_vue.h)("div",{ref:r,class:"vxe-gantt-view--body-wrapper"},[(0,_vue.h)("div",{ref:n,class:"vxe-gantt-view--body-inner-wrapper",onScroll:o.triggerBodyScrollEvent,onContextmenu(e){D.handleTaskBodyContextmenuEvent(e,{source:sourceType,type:viewType,rowIndex:-1,$rowIndex:-1,_rowIndex:-1})}},[(0,_vue.h)("div",{ref:u,class:"vxe-body--x-space"}),(0,_vue.h)("div",{ref:s,class:"vxe-body--y-space"}),(0,_vue.h)("table",{ref:i,class:"vxe-gantt-view--body-table"},[(0,_vue.h)("colgroup",{},l.map((e,t)=>(0,_vue.h)("col",{key:t,style:{width:a+"px"}}))),(0,_vue.h)("tbody",{},e?H(e,t):[])]),(0,_vue.h)(_ganttChart.default)])])}}});
@@ -17,6 +17,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
17
17
  const {
18
18
  globalEvents
19
19
  } = _core.VxeUI;
20
+ const sourceType = 'gantt';
20
21
  function createInternalData() {
21
22
  return {
22
23
  xeTable: null,
@@ -919,8 +920,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
919
920
  reactData.lazScrollLoading = false;
920
921
  }, 200);
921
922
  };
922
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
923
- const handleScrollEvent = (evnt, isRollY, isRollX, scrollTop, scrollLeft) => {
923
+ const handleScrollData = (isRollY, isRollX, scrollTop, scrollLeft) => {
924
924
  if (isRollX) {
925
925
  internalData.lastScrollLeft = scrollLeft;
926
926
  }
@@ -930,6 +930,95 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
930
930
  reactData.lastScrollTime = Date.now();
931
931
  checkLastSyncScroll(isRollX, isRollY);
932
932
  };
933
+ const handleScrollEvent = (evnt, isRollY, isRollX, scrollTop, scrollLeft) => {
934
+ const $xeTable = internalData.xeTable;
935
+ const {
936
+ lastScrollLeft,
937
+ lastScrollTop
938
+ } = internalData;
939
+ const xHandleEl = refScrollXHandleElem.value;
940
+ const yHandleEl = refScrollYHandleElem.value;
941
+ if (!xHandleEl || !yHandleEl) {
942
+ return;
943
+ }
944
+ if (!$xeTable) {
945
+ return;
946
+ }
947
+ const {
948
+ computeScrollXThreshold,
949
+ computeScrollYThreshold
950
+ } = $xeTable.getComputeMaps();
951
+ const bodyHeight = yHandleEl.clientHeight;
952
+ const bodyWidth = xHandleEl.clientWidth;
953
+ const scrollHeight = yHandleEl.scrollHeight;
954
+ const scrollWidth = xHandleEl.scrollWidth;
955
+ let isTop = false;
956
+ let isBottom = false;
957
+ let isLeft = false;
958
+ let isRight = false;
959
+ let direction = '';
960
+ let isTopBoundary = false;
961
+ let isBottomBoundary = false;
962
+ let isLeftBoundary = false;
963
+ let isRightBoundary = false;
964
+ if (isRollX) {
965
+ const xThreshold = computeScrollXThreshold.value;
966
+ isLeft = scrollLeft <= 0;
967
+ if (!isLeft) {
968
+ isRight = scrollLeft + bodyWidth >= scrollWidth - 1;
969
+ }
970
+ if (scrollLeft > lastScrollLeft) {
971
+ direction = 'right';
972
+ if (scrollLeft + bodyWidth >= scrollWidth - xThreshold) {
973
+ isRightBoundary = true;
974
+ }
975
+ } else {
976
+ direction = 'left';
977
+ if (scrollLeft <= xThreshold) {
978
+ isLeftBoundary = true;
979
+ }
980
+ }
981
+ }
982
+ if (isRollY) {
983
+ const yThreshold = computeScrollYThreshold.value;
984
+ isTop = scrollTop <= 0;
985
+ if (!isTop) {
986
+ isBottom = scrollTop + bodyHeight >= scrollHeight - 1;
987
+ }
988
+ if (scrollTop > lastScrollTop) {
989
+ direction = 'bottom';
990
+ if (scrollTop + bodyHeight >= scrollHeight - yThreshold) {
991
+ isBottomBoundary = true;
992
+ }
993
+ } else {
994
+ direction = 'top';
995
+ if (scrollTop <= yThreshold) {
996
+ isTopBoundary = true;
997
+ }
998
+ }
999
+ }
1000
+ handleScrollData(isRollY, isRollX, scrollTop, scrollLeft);
1001
+ const evntParams = {
1002
+ source: sourceType,
1003
+ scrollTop,
1004
+ scrollLeft,
1005
+ bodyHeight,
1006
+ bodyWidth,
1007
+ scrollHeight,
1008
+ scrollWidth,
1009
+ isX: isRollX,
1010
+ isY: isRollY,
1011
+ isTop,
1012
+ isBottom,
1013
+ isLeft,
1014
+ isRight,
1015
+ direction
1016
+ };
1017
+ if (isBottomBoundary || isTopBoundary || isRightBoundary || isLeftBoundary) {
1018
+ $xeGantt.dispatchEvent('scroll-boundary', evntParams, evnt);
1019
+ }
1020
+ $xeGantt.dispatchEvent('scroll', evntParams, evnt);
1021
+ };
933
1022
  const ganttViewMethods = {
934
1023
  refreshData() {
935
1024
  handleUpdateData();
@@ -1069,7 +1158,12 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1069
1158
  triggerScrollXEvent();
1070
1159
  }
1071
1160
  }
1072
- handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
1161
+ if (isRollY) {
1162
+ handleScrollData(isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
1163
+ }
1164
+ if (isRollX) {
1165
+ handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
1166
+ }
1073
1167
  },
1074
1168
  // triggerFooterScrollEvent (evnt) {
1075
1169
  // const { inVirtualScroll, inHeaderScroll, inBodyScroll } = internalData
@@ -1133,7 +1227,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1133
1227
  internalData.inVirtualScroll = true;
1134
1228
  (0, _dom.setScrollTop)(bodyScrollElem, currTopNum);
1135
1229
  syncTableScrollTop(currTopNum);
1136
- handleScrollEvent(evnt, isRollY, isRollX, currTopNum, wrapperEl.scrollLeft);
1230
+ handleScrollData(isRollY, isRollX, currTopNum, wrapperEl.scrollLeft);
1137
1231
  }
1138
1232
  },
1139
1233
  handleUpdateSXSpace() {
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_dom=require("../../ui/src/dom"),_core=require("@vxe-ui/core"),_util=require("./util"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ganttHeader=_interopRequireDefault(require("./gantt-header")),_ganttBody=_interopRequireDefault(require("./gantt-body")),_ganttFooter=_interopRequireDefault(require("./gantt-footer"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let globalEvents=_core.VxeUI.globalEvents;function createInternalData(){return{xeTable:null,visibleColumn:[],startMaps:{},endMaps:{},chartMaps:{},todayDateMaps:{},elemStore:{},scrollXStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0},lastScrollTop:0,lastScrollLeft:0}}let maxYHeight=5e6;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttView",setup(_,g){var e=_xeUtils.default.uniqueId();let U=(0,_vue.inject)("$xeGantt",{}),{computeTaskOpts:x,computeStartField:X,computeEndField:k,computeScrollbarOpts:S,computeScrollbarXToTop:w,computeScrollbarYToLeft:b}=U.getComputeMaps(),i=(0,_vue.ref)(),T=(0,_vue.ref)(),D=(0,_vue.ref)(),d=(0,_vue.ref)(),E=(0,_vue.ref)(),R=(0,_vue.ref)(),u=(0,_vue.ref)(),M=(0,_vue.ref)(),I=(0,_vue.ref)(),L=(0,_vue.ref)(),$=(0,_vue.ref)(),n=(0,_vue.ref)(),c=(0,_vue.ref)(),C=(0,_vue.ref)(),Y=(0,_vue.reactive)({scrollXLoad:!1,scrollYLoad:!1,overflowY:!0,overflowX:!0,scrollbarWidth:0,scrollbarHeight:0,lastScrollTime:0,lazScrollLoading:!1,scrollVMLoading:!1,scrollYHeight:0,scrollYTop:0,isScrollYBig:!1,scrollXLeft:0,scrollXWidth:0,isScrollXBig:!1,minViewDate:null,maxViewDate:null,tableData:[],tableColumn:[],headerGroups:[],viewCellWidth:20}),V=createInternalData(),y={refElem:i},q={},t={xID:e,props:_,context:g,reactData:Y,internalData:V,getRefMaps:()=>y,getComputeMaps:()=>q},W=e=>{var t=x.value.dateFormat;return _xeUtils.default.toStringDate(e,t||null)},z=()=>{var e=U.reactData.taskScaleList,e=e.find(e=>"week"===e.type),t=new Date,[l,r,a,i,o,s]=_xeUtils.default.toDateString(t,"yyyy-M-d-H-m-s").split("-"),n=t.getDay()+1,d=Math.ceil((t.getMonth()+1)/3),t=_xeUtils.default.getYearWeek(t,e?e.startDay:void 0);V.todayDateMaps={year:l,quarter:l+"_q"+d,month:l+"_"+r,week:l+"_W"+t,day:l+`_${r}_${a}_E`+n,date:l+`_${r}_`+a,hour:l+`_${r}_${a}_`+i,minute:l+`_${r}_${a}_${i}_`+o,second:l+`_${r}_${a}_${i}_${o}_`+s}},l=()=>{var e=U.props.treeConfig,t=V.scrollXStore,a=V.xeTable;let i=null,o=null;if(a){let l=X.value,r=k.value;var{computeAggregateOpts:s,computeTreeOpts:n}=a.getComputeMaps(),d=a.reactData.isRowGroupStatus,{afterFullData:a,afterTreeFullData:u,afterGroupFullData:c}=a.internalData,s=s.value,n=n.value,v=n.transform,h=n.children||n.childrenField,p=e=>{var t=_xeUtils.default.get(e,l),e=_xeUtils.default.get(e,r);t&&e&&(t=W(t),(!i||i.getTime()>t.getTime())&&(i=t),t=W(e),!o||o.getTime()<t.getTime())&&(o=t)};d?(d=s.mapChildrenField)&&_xeUtils.default.eachTree(c,p,{children:d}):e?_xeUtils.default.eachTree(u,p,{children:v?n.mapChildrenField:h}):a.forEach(p)}t.startIndex=0,t.endIndex=Math.max(1,t.visibleSize),Y.minViewDate=i,Y.maxViewDate=o,V.startMaps={},V.endMaps={},(()=>{var e=U.props.treeConfig,t=U.reactData.taskScaleList;let{minViewDate:u,maxViewDate:l}=Y;var r=_xeUtils.default.last(t);let a=[],c=[];if(r&&u&&l){let i=r.type;var v=t.find(e=>"week"===e.type);let n=864e5;switch(r.type){case"hour":n=36e5;break;case"minute":n=6e4;break;case"second":n=1e3}var h=u.getTime(),p=l.getTime()-u.getTime(),m=Math.max(5,Math.floor(p/n)+1);let o={year:[],quarter:[],month:[],week:[],day:[],date:[],hour:[],minute:[],second:[]},s={year:{},quarter:{},month:{},week:{},day:{},date:{},hour:{},minute:{},second:{}};var f=(t,l,r)=>{if(i!==t){var l=l[t],a=""+l.field;let e=s[t][a];e||(e=l,s[t][a]=e,o[t].push(e)),e&&(e.children||(e.children=[]),e.children.push(r))}};for(let e=0;e<m;e++){var _=new Date(h+e*n),[g,x,y,S,w,b]=_xeUtils.default.toDateString(_,"yyyy-M-d-H-m-s").split("-"),T=_.getDay(),D=T+1,E=Math.ceil((_.getMonth()+1)/3),_=_xeUtils.default.getYearWeek(_,v?v.startDay:void 0),T={yy:g,M:x,d:y,H:S,m:w,s:b,q:E,W:_,E:D,e:T},E={year:{field:g,title:g,dateObj:T},quarter:{field:g+"_q"+E,title:""+E,dateObj:T},month:{field:g+"_"+x,title:x,dateObj:T},week:{field:g+"_W"+_,title:""+_,dateObj:T},day:{field:g+`_${x}_${y}_E`+D,title:""+D,dateObj:T},date:{field:g+`_${x}_`+y,title:y,dateObj:T},hour:{field:g+`_${x}_${y}_`+S,title:S,dateObj:T},minute:{field:g+`_${x}_${y}_${S}_`+w,title:w,dateObj:T},second:{field:g+`_${x}_${y}_${S}_${w}_`+b,title:b,dateObj:T}},_=E[i];r.level<19&&f("year",E,_),r.level<17&&f("quarter",E,_),r.level<14&&f("month",E,_),r.level<13&&f("week",E,_),r.level<11&&f("day",E,_),r.level<12&&f("date",E,_),r.level<7&&f("hour",E,_),r.level<5&&f("minute",E,_),a.push(_)}t.forEach(e=>{var t;e.type===i?c.push({scaleItem:e,columns:a}):((t=o[e.type]||[])&&t.forEach(e=>{e.childCount=e.children?e.children.length:0,e.children=void 0}),c.push({scaleItem:e,columns:t}))});let d=V.xeTable;if(d){let i=X.value,o=k.value;var{computeAggregateOpts:p,computeTreeOpts:t}=d.getComputeMaps(),R=d.reactData.isRowGroupStatus,{afterFullData:M,afterTreeFullData:I,afterGroupFullData:L}=d.internalData,p=p.value,t=t.value,$=t.transform,C=t.children||t.childrenField;let s={};var H=e=>{var t,l=d.getRowid(e),r=_xeUtils.default.get(e,i),a=_xeUtils.default.get(e,o);r&&a&&(r=W(r),a=W(a),t=Math.floor((r.getTime()-u.getTime())/n),a=Math.floor((a.getTime()-r.getTime())/n)+1,s[l]={row:e,rowid:l,oLeftSize:t,oWidthSize:a})};R?(R=p.mapChildrenField)&&_xeUtils.default.eachTree(L,H,{children:R}):e?_xeUtils.default.eachTree(I,H,{children:$?t.mapChildrenField:C}):M.forEach(H),V.chartMaps=s}}V.visibleColumn=a,Y.headerGroups=c,z(),B(),j()})()},v=()=>{var{scrollXWidth:e,scrollYHeight:t}=Y,l=V.elemStore,r=S.value,l=(0,_util.getRefElem)(l["main-body-wrapper"]),a=d.value,i=u.value;l&&(t=t>l.clientHeight,i&&(Y.scrollbarWidth=r.width||i.offsetWidth-i.clientWidth||14),Y.overflowY=t,i=e>l.clientWidth,a&&(Y.scrollbarHeight=r.height||a.offsetHeight-a.clientHeight||14),Y.overflowX=i)},H=()=>{let l=Y.viewCellWidth,{elemStore:e,chartMaps:r}=V;var t=(0,_util.getRefElem)(e["main-chart-wrapper"]);return t&&_xeUtils.default.arrayEach(t.children,e=>{var t=e.children[0];t&&(e=(e=e.getAttribute("rowid"))?r[e]:null,t.style.left=`${e?l*e.oLeftSize:0}px`,t.style.width=`${e?l*e.oWidthSize:0}px`)}),(0,_vue.nextTick)()},h=()=>{var{scrollbarWidth:s,scrollbarHeight:n,headerGroups:d,tableColumn:u}=Y,{elemStore:c,visibleColumn:v}=V,h=V.xeTable,p=i.value;if(p){var m=S.value,f=w.value,_=b.value,g=E.value,x=R.value,y=T.value;let e=s;s=n;let t=0,l=0,r=0,a=(h&&(n=h.internalData,t=n.tBodyHeight,l=n.tHeaderHeight,r=n.tFooterHeight),"visible");(_||m.y&&!1===m.y.visible)&&(e=0,a="hidden");h=(0,_util.getRefElem)(c["main-header-scroll"]),n=(h&&(h.style.height=l+"px",h.style.setProperty("--vxe-ui-gantt-view-cell-height",l/d.length+"px")),(0,_util.getRefElem)(c["main-body-scroll"])),_=(n&&(n.style.height=t+"px"),(0,_util.getRefElem)(c["main-footer-scroll"])),m=(_&&(_.style.height=r+"px"),y&&(y.style.height=s+"px",y.style.visibility="visible"),I.value),h=(m&&(m.style.left=f?e+"px":"",m.style.width=p.clientWidth-e+"px"),g&&(g.style.width=f?e+"px":"",g.style.display=f&&s?"block":""),x&&(x.style.width=f?"":e+"px",x.style.display=!f&&s?"block":""),D.value),d=(h&&(h.style.width=e+"px",h.style.height=t+l+r+"px",h.style.visibility=a),M.value),_=(d&&(d.style.height=l+"px",d.style.display=l?"block":""),L.value),y=(_&&(_.style.height=t+"px",_.style.top=l+"px"),$.value),m=(y&&(y.style.height=r+"px",y.style.top=l+t+"px",y.style.display=r?"block":""),C.value);let i=40,o=(i=m?m.clientWidth||40:i)*v.length;n&&0<(g=(p=n.clientWidth)-o)&&(i+=g/v.length,o=p),Y.viewCellWidth=i;x=(0,_util.getRefElem)(c["main-header-table"]),f=(0,_util.getRefElem)(c["main-body-table"]),s=i*u.length;return x&&(x.style.width=o+"px"),f&&(f.style.width=s+"px"),Y.scrollXWidth=o,H()}},o=()=>{var e=i.value;return V.rceRunTime=Date.now(),(e&&e.clientWidth?(v(),h(),H(),F):(0,_vue.nextTick))()},r=()=>new Promise(e=>{var{rceTimeout:t,rceRunTime:l}=V,r=V.xeTable;let a=50;r&&(r=r.getComputeMaps().computeResizeOpts,r=r.value,a=r.refreshDelay||50),!t||(clearTimeout(t),l&&l+(a-5)<Date.now())?e(o()):(0,_vue.nextTick)(()=>{e()}),V.rceTimeout=setTimeout(()=>{V.rceTimeout=void 0,o()},a)}),F=()=>(0,_vue.nextTick)().then(()=>{var e,t=Y.scrollXLoad,l=V.scrollXStore;t?({toVisibleIndex:t,visibleSize:e}=p(),l.preloadSize=1,l.offsetSize=2,l.visibleSize=e,l.endIndex=Math.max(l.startIndex+l.visibleSize+2,l.endIndex),l.visibleStartIndex=Math.max(l.startIndex,t),l.visibleEndIndex=Math.min(l.endIndex,t+e),O().then(()=>{a()})):s()}),p=()=>{var e,t=Y.viewCellWidth,l=V.elemStore,l=(0,_util.getRefElem)(l["main-body-scroll"]);return l?(e=l.clientWidth,l=l.scrollLeft,l=Math.floor(l/t)-1,e=Math.ceil(e/t)+1,{toVisibleIndex:Math.max(0,l),visibleSize:Math.max(1,e)}):{toVisibleIndex:0,visibleSize:6}},a=()=>{var e=Y.isScrollXBig,t=V.scrollXStore,{preloadSize:l,startIndex:r,endIndex:a,offsetSize:i}=t,{toVisibleIndex:o,visibleSize:s}=p(),e={startIndex:Math.max(0,e?o-1:o-1-i-l),endIndex:e?o+s:o+s+i+l},{startIndex:i,endIndex:l}=(t.visibleStartIndex=o-1,t.visibleEndIndex=o+s+1,e);!(o<=r||a-s-1<=o)||r===i&&a===l||(t.startIndex=i,t.endIndex=l,O())},O=()=>(j(),s(),(0,_vue.nextTick)()),B=()=>Y.scrollXLoad=!0,j=()=>{var e=Y.scrollXLoad,{visibleColumn:t,scrollXStore:l}=V,e=e?t.slice(l.startIndex,l.endIndex):t.slice(0);Y.tableColumn=e},s=()=>{let{scrollXLoad:t,scrollXWidth:l,viewCellWidth:e}=Y,{elemStore:r,scrollXStore:a}=V;var i=(0,_util.getRefElem)(r["main-body-table"]),o=a.startIndex;let s=0;t&&(s=Math.max(0,o*e)),i&&(i.style.transform=`translate(${s}px, ${Y.scrollYTop||0}px)`);["header","body","footer"].forEach(e=>{e=(0,_util.getRefElem)(r[`main-${e}-xSpace`]);e&&(e.style.width=t?l+"px":"")});o=n.value;return o&&(o.style.width=l+"px"),v(),(0,_vue.nextTick)()},G=()=>{a()},m=(e,t,l,r,a)=>{l&&(V.lastScrollLeft=a),t&&(V.lastScrollTop=r),Y.lastScrollTime=Date.now(),l=V.lcsTimeout,Y.lazScrollLoading=!0,l&&clearTimeout(l),V.lcsTimeout=setTimeout(()=>{V.lcsRunTime=Date.now(),V.lcsTimeout=void 0,V.intoRunScroll=!1,V.inVirtualScroll=!1,V.inWheelScroll=!1,V.inHeaderScroll=!1,V.inBodyScroll=!1,V.inFooterScroll=!1,Y.lazScrollLoading=!1},200)},A=e=>{var t=V.xeTable;t&&(t=t.internalData.elemStore,t=(0,_util.getRefElem)(t["main-body-scroll"]))&&(t.scrollTop=e)};e={handleUpdateStyle:h,handleLazyRecalculate:r,handleUpdateCurrentRow(e){var t,l,r=V.xeTable,a=i.value;r&&a&&(e?(t=r.props,l=r.getComputeMaps().computeRowOpts,(l.value.isCurrent||t.highlightCurrentRow)&&_xeUtils.default.arrayEach(a.querySelectorAll(`.vxe-gantt-view--body-row[rowid="${r.getRowid(e)}"]`),e=>(0,_dom.addClass)(e,"row--current"))):_xeUtils.default.arrayEach(a.querySelectorAll(".vxe-gantt-view--body-row.row--current"),e=>(0,_dom.removeClass)(e,"row--current")))},handleUpdateHoverRow(e){var t=V.xeTable,l=i.value;t&&l&&(e?_xeUtils.default.arrayEach(l.querySelectorAll(`.vxe-gantt-view--body-row[rowid="${t.getRowid(e)}"]`),e=>(0,_dom.addClass)(e,"row--hover")):_xeUtils.default.arrayEach(l.querySelectorAll(".vxe-gantt-view--body-row.row--hover"),e=>(0,_dom.removeClass)(e,"row--hover")))},triggerHeaderScrollEvent(e){var{elemStore:t,inVirtualScroll:l,inBodyScroll:r,inFooterScroll:a}=V;l||r||a||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),a=d.value,r&&l&&(e=l.scrollLeft,V.inHeaderScroll=!0,(0,_dom.setScrollLeft)(a,e),(0,_dom.setScrollLeft)(r,e),m(0,!1,!0,l.scrollTop,e)))},triggerBodyScrollEvent(e){var t,l=Y.scrollXLoad,{elemStore:r,inVirtualScroll:a,inHeaderScroll:i,inFooterScroll:o,lastScrollLeft:s,lastScrollTop:n}=V;a||i||o||(a=e.currentTarget,i=(0,_util.getRefElem)(r["main-header-scroll"]),o=d.value,e=u.value,s=(r=a.scrollLeft)!==s,n=(t=a.scrollTop)!==n,V.inBodyScroll=!0,V.scrollRenderType="",n&&((0,_dom.setScrollTop)(e,t),A(t)),s&&(V.inBodyScroll=!0,(0,_dom.setScrollLeft)(o,r),(0,_dom.setScrollLeft)(i,r),l)&&G(),m(0,n,s,a.scrollTop,r))},triggerVirtualScrollXEvent(e){var t=Y.scrollXLoad,{elemStore:l,inHeaderScroll:r,inBodyScroll:a}=V;r||a||(r=e.currentTarget,a=(0,_util.getRefElem)(l["main-header-scroll"]),e=(0,_util.getRefElem)(l["main-body-scroll"]),r&&(l=r.scrollLeft,V.inVirtualScroll=!0,(0,_dom.setScrollLeft)(a,l),(0,_dom.setScrollLeft)(e,l),t&&G(),m(0,!1,!0,r.scrollTop,l)))},triggerVirtualScrollYEvent(e){var{elemStore:t,inHeaderScroll:l,inBodyScroll:r}=V;l||r||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),l&&(e=l.scrollTop,V.inVirtualScroll=!0,(0,_dom.setScrollTop)(r,e),A(e),m(0,!0,!1,e,l.scrollLeft)))},handleUpdateSXSpace(){return s()},handleUpdateSYSpace(){return(()=>{var e=V.elemStore,t=V.xeTable,l=(0,_util.getRefElem)(e["main-body-scroll"]),r=(0,_util.getRefElem)(e["main-body-table"]);let a=0,i=0,o=!1,s=(t&&(t=t.reactData,a=t.scrollYTop,i=t.scrollYHeight,o=t.isScrollYBig),i),n=a,d=0;l&&(d=l.clientHeight),o&&(n=l&&r&&l.scrollTop+d>=maxYHeight?maxYHeight-r.clientHeight:(maxYHeight-d)*(a/(i-d)),s=maxYHeight);t=(0,_util.getRefElem)(e["main-chart-wrapper"]),r&&(r.style.transform=`translate(${Y.scrollXLeft||0}px, ${n}px)`),t&&(t.style.transform=`translate(${Y.scrollXLeft||0}px, ${n}px)`),l=(0,_util.getRefElem)(e["main-body-ySpace"]),l&&(l.style.height=s?s+"px":""),r=c.value;return r&&(r.style.height=s?s+"px":""),Y.scrollYTop=n,Y.scrollYHeight=i,Y.isScrollYBig=o,v(),(0,_vue.nextTick)().then(()=>{h()})})()},handleUpdateSYStatus(e){Y.scrollYLoad=e}};let P=()=>{r()},N=(Object.assign(t,{refreshData(){return l(),r()},updateViewData(){var e=V.xeTable;return e&&(e=e.reactData.tableData,Y.tableData=e),(0,_vue.nextTick)()},connectUpdate({$table:e}){return e&&(V.xeTable=e),(0,_vue.nextTick)()}},e),()=>(0,_vue.h)("div",{key:"vsx",ref:T,class:"vxe-gantt-view--scroll-x-virtual"},[(0,_vue.h)("div",{ref:E,class:"vxe-gantt-view--scroll-x-left-corner"}),(0,_vue.h)("div",{ref:I,class:"vxe-gantt-view--scroll-x-wrapper"},[(0,_vue.h)("div",{ref:d,class:"vxe-gantt-view--scroll-x-handle",onScroll:t.triggerVirtualScrollXEvent},[(0,_vue.h)("div",{ref:n,class:"vxe-gantt-view--scroll-x-space"})]),(0,_vue.h)("div",{class:"vxe-gantt-view--scroll-x-handle-appearance"})]),(0,_vue.h)("div",{ref:R,class:"vxe-gantt-view--scroll-x-right-corner"})])),J=()=>(0,_vue.h)("div",{ref:D,class:"vxe-gantt-view--scroll-y-virtual"},[(0,_vue.h)("div",{ref:M,class:"vxe-gantt-view--scroll-y-top-corner"}),(0,_vue.h)("div",{ref:L,class:"vxe-gantt-view--scroll-y-wrapper"},[(0,_vue.h)("div",{ref:u,class:"vxe-gantt-view--scroll-y-handle",onScroll:t.triggerVirtualScrollYEvent},[(0,_vue.h)("div",{ref:c,class:"vxe-gantt-view--scroll-y-space"})]),(0,_vue.h)("div",{class:"vxe-gantt-view--scroll-y-handle-appearance"})]),(0,_vue.h)("div",{ref:$,class:"vxe-gantt-view--scroll-y-bottom-corner"})]),K=()=>(0,_vue.h)("div",{class:"vxe-gantt-view--viewport-wrapper"},[(0,_vue.h)(_ganttHeader.default),(0,_vue.h)(_ganttBody.default),(0,_vue.h)(_ganttFooter.default)]),Q=()=>{var e=b.value;return(0,_vue.h)("div",{class:"vxe-gantt-view--layout-wrapper"},e?[J(),K()]:[K(),J()])};let f=(0,_vue.ref)(0);return(0,_vue.watch)(()=>Y.tableData,()=>{f.value++}),(0,_vue.watch)(()=>Y.tableData.length,()=>{f.value++}),(0,_vue.watch)(f,()=>{l()}),(0,_vue.onMounted)(()=>{globalEvents.on(t,"resize",P)}),(0,_vue.onUnmounted)(()=>{globalEvents.off(t,"keydown"),_xeUtils.default.assign(V,createInternalData())}),t.renderVN=()=>{var{overflowX:e,overflowY:t,scrollXLoad:l,scrollYLoad:r}=Y,a=w.value;return(0,_vue.h)("div",{ref:i,class:["vxe-gantt-view",{"is--scroll-y":t,"is--scroll-x":e,"is--virtual-x":l,"is--virtual-y":r}]},[(0,_vue.h)("div",{class:"vxe-gantt-view--render-wrapper"},a?[N(),Q()]:[Q(),N()]),(0,_vue.h)("div",{class:"vxe-gantt-view--render-vars"},[(0,_vue.h)("div",{ref:C,class:"vxe-gantt-view--column-info"})])])},(0,_vue.provide)("$xeGanttView",t),t},render(){return this.renderVN()}});
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../ui/src/comp"),_dom=require("../../ui/src/dom"),_core=require("@vxe-ui/core"),_util=require("./util"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ganttHeader=_interopRequireDefault(require("./gantt-header")),_ganttBody=_interopRequireDefault(require("./gantt-body")),_ganttFooter=_interopRequireDefault(require("./gantt-footer"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let globalEvents=_core.VxeUI.globalEvents,sourceType="gantt";function createInternalData(){return{xeTable:null,visibleColumn:[],startMaps:{},endMaps:{},chartMaps:{},todayDateMaps:{},elemStore:{},scrollXStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0},lastScrollTop:0,lastScrollLeft:0}}let maxYHeight=5e6;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttView",setup(p,m){var e=_xeUtils.default.uniqueId();let W=(0,_vue.inject)("$xeGantt",{}),{computeTaskOpts:f,computeStartField:X,computeEndField:U,computeScrollbarOpts:S,computeScrollbarXToTop:w,computeScrollbarYToLeft:b}=W.getComputeMaps(),i=(0,_vue.ref)(),T=(0,_vue.ref)(),D=(0,_vue.ref)(),E=(0,_vue.ref)(),R=(0,_vue.ref)(),M=(0,_vue.ref)(),L=(0,_vue.ref)(),I=(0,_vue.ref)(),$=(0,_vue.ref)(),H=(0,_vue.ref)(),C=(0,_vue.ref)(),n=(0,_vue.ref)(),c=(0,_vue.ref)(),Y=(0,_vue.ref)(),k=(0,_vue.reactive)({scrollXLoad:!1,scrollYLoad:!1,overflowY:!0,overflowX:!0,scrollbarWidth:0,scrollbarHeight:0,lastScrollTime:0,lazScrollLoading:!1,scrollVMLoading:!1,scrollYHeight:0,scrollYTop:0,isScrollYBig:!1,scrollXLeft:0,scrollXWidth:0,isScrollXBig:!1,minViewDate:null,maxViewDate:null,tableData:[],tableColumn:[],headerGroups:[],viewCellWidth:20}),V=createInternalData(),g={refElem:i},_={},t={xID:e,props:p,context:m,reactData:k,internalData:V,getRefMaps:()=>g,getComputeMaps:()=>_},q=e=>{var t=f.value.dateFormat;return _xeUtils.default.toStringDate(e,t||null)},O=()=>{var e=W.reactData.taskScaleList,e=e.find(e=>"week"===e.type),t=new Date,[l,r,a,i,o,s]=_xeUtils.default.toDateString(t,"yyyy-M-d-H-m-s").split("-"),n=t.getDay()+1,d=Math.ceil((t.getMonth()+1)/3),t=_xeUtils.default.getYearWeek(t,e?e.startDay:void 0);V.todayDateMaps={year:l,quarter:l+"_q"+d,month:l+"_"+r,week:l+"_W"+t,day:l+`_${r}_${a}_E`+n,date:l+`_${r}_`+a,hour:l+`_${r}_${a}_`+i,minute:l+`_${r}_${a}_${i}_`+o,second:l+`_${r}_${a}_${i}_${o}_`+s}},l=()=>{var e=W.props.treeConfig,t=V.scrollXStore,a=V.xeTable;let i=null,o=null;if(a){let l=X.value,r=U.value;var{computeAggregateOpts:s,computeTreeOpts:n}=a.getComputeMaps(),d=a.reactData.isRowGroupStatus,{afterFullData:a,afterTreeFullData:c,afterGroupFullData:u}=a.internalData,s=s.value,n=n.value,v=n.transform,h=n.children||n.childrenField,p=e=>{var t=_xeUtils.default.get(e,l),e=_xeUtils.default.get(e,r);t&&e&&(t=q(t),(!i||i.getTime()>t.getTime())&&(i=t),t=q(e),!o||o.getTime()<t.getTime())&&(o=t)};d?(d=s.mapChildrenField)&&_xeUtils.default.eachTree(u,p,{children:d}):e?_xeUtils.default.eachTree(c,p,{children:v?n.mapChildrenField:h}):a.forEach(p)}t.startIndex=0,t.endIndex=Math.max(1,t.visibleSize),k.minViewDate=i,k.maxViewDate=o,V.startMaps={},V.endMaps={},(()=>{var e=W.props.treeConfig,t=W.reactData.taskScaleList;let{minViewDate:c,maxViewDate:l}=k;var r=_xeUtils.default.last(t);let a=[],u=[];if(r&&c&&l){let i=r.type;var v=t.find(e=>"week"===e.type);let n=864e5;switch(r.type){case"hour":n=36e5;break;case"minute":n=6e4;break;case"second":n=1e3}var h=c.getTime(),p=l.getTime()-c.getTime(),m=Math.max(5,Math.floor(p/n)+1);let o={year:[],quarter:[],month:[],week:[],day:[],date:[],hour:[],minute:[],second:[]},s={year:{},quarter:{},month:{},week:{},day:{},date:{},hour:{},minute:{},second:{}};var f=(t,l,r)=>{if(i!==t){var l=l[t],a=""+l.field;let e=s[t][a];e||(e=l,s[t][a]=e,o[t].push(e)),e&&(e.children||(e.children=[]),e.children.push(r))}};for(let e=0;e<m;e++){var g=new Date(h+e*n),[_,x,y,S,w,b]=_xeUtils.default.toDateString(g,"yyyy-M-d-H-m-s").split("-"),T=g.getDay(),D=T+1,E=Math.ceil((g.getMonth()+1)/3),g=_xeUtils.default.getYearWeek(g,v?v.startDay:void 0),T={yy:_,M:x,d:y,H:S,m:w,s:b,q:E,W:g,E:D,e:T},E={year:{field:_,title:_,dateObj:T},quarter:{field:_+"_q"+E,title:""+E,dateObj:T},month:{field:_+"_"+x,title:x,dateObj:T},week:{field:_+"_W"+g,title:""+g,dateObj:T},day:{field:_+`_${x}_${y}_E`+D,title:""+D,dateObj:T},date:{field:_+`_${x}_`+y,title:y,dateObj:T},hour:{field:_+`_${x}_${y}_`+S,title:S,dateObj:T},minute:{field:_+`_${x}_${y}_${S}_`+w,title:w,dateObj:T},second:{field:_+`_${x}_${y}_${S}_${w}_`+b,title:b,dateObj:T}},g=E[i];r.level<19&&f("year",E,g),r.level<17&&f("quarter",E,g),r.level<14&&f("month",E,g),r.level<13&&f("week",E,g),r.level<11&&f("day",E,g),r.level<12&&f("date",E,g),r.level<7&&f("hour",E,g),r.level<5&&f("minute",E,g),a.push(g)}t.forEach(e=>{var t;e.type===i?u.push({scaleItem:e,columns:a}):((t=o[e.type]||[])&&t.forEach(e=>{e.childCount=e.children?e.children.length:0,e.children=void 0}),u.push({scaleItem:e,columns:t}))});let d=V.xeTable;if(d){let i=X.value,o=U.value;var{computeAggregateOpts:p,computeTreeOpts:t}=d.getComputeMaps(),R=d.reactData.isRowGroupStatus,{afterFullData:M,afterTreeFullData:L,afterGroupFullData:I}=d.internalData,p=p.value,t=t.value,$=t.transform,H=t.children||t.childrenField;let s={};var C=e=>{var t,l=d.getRowid(e),r=_xeUtils.default.get(e,i),a=_xeUtils.default.get(e,o);r&&a&&(r=q(r),a=q(a),t=Math.floor((r.getTime()-c.getTime())/n),a=Math.floor((a.getTime()-r.getTime())/n)+1,s[l]={row:e,rowid:l,oLeftSize:t,oWidthSize:a})};R?(R=p.mapChildrenField)&&_xeUtils.default.eachTree(I,C,{children:R}):e?_xeUtils.default.eachTree(L,C,{children:$?t.mapChildrenField:H}):M.forEach(C),V.chartMaps=s}}V.visibleColumn=a,k.headerGroups=u,O(),j(),G()})()},u=()=>{var{scrollXWidth:e,scrollYHeight:t}=k,l=V.elemStore,r=S.value,l=(0,_util.getRefElem)(l["main-body-wrapper"]),a=E.value,i=L.value;l&&(t=t>l.clientHeight,i&&(k.scrollbarWidth=r.width||i.offsetWidth-i.clientWidth||14),k.overflowY=t,i=e>l.clientWidth,a&&(k.scrollbarHeight=r.height||a.offsetHeight-a.clientHeight||14),k.overflowX=i)},z=()=>{let l=k.viewCellWidth,{elemStore:e,chartMaps:r}=V;var t=(0,_util.getRefElem)(e["main-chart-wrapper"]);return t&&_xeUtils.default.arrayEach(t.children,e=>{var t=e.children[0];t&&(e=(e=e.getAttribute("rowid"))?r[e]:null,t.style.left=`${e?l*e.oLeftSize:0}px`,t.style.width=`${e?l*e.oWidthSize:0}px`)}),(0,_vue.nextTick)()},v=()=>{var{scrollbarWidth:s,scrollbarHeight:n,headerGroups:d,tableColumn:c}=k,{elemStore:u,visibleColumn:v}=V,h=V.xeTable,p=i.value;if(p){var m=S.value,f=w.value,g=b.value,_=R.value,x=M.value,y=T.value;let e=s;s=n;let t=0,l=0,r=0,a=(h&&(n=h.internalData,t=n.tBodyHeight,l=n.tHeaderHeight,r=n.tFooterHeight),"visible");(g||m.y&&!1===m.y.visible)&&(e=0,a="hidden");h=(0,_util.getRefElem)(u["main-header-scroll"]),n=(h&&(h.style.height=l+"px",h.style.setProperty("--vxe-ui-gantt-view-cell-height",l/d.length+"px")),(0,_util.getRefElem)(u["main-body-scroll"])),g=(n&&(n.style.height=t+"px"),(0,_util.getRefElem)(u["main-footer-scroll"])),m=(g&&(g.style.height=r+"px"),y&&(y.style.height=s+"px",y.style.visibility="visible"),$.value),h=(m&&(m.style.left=f?e+"px":"",m.style.width=p.clientWidth-e+"px"),_&&(_.style.width=f?e+"px":"",_.style.display=f&&s?"block":""),x&&(x.style.width=f?"":e+"px",x.style.display=!f&&s?"block":""),D.value),d=(h&&(h.style.width=e+"px",h.style.height=t+l+r+"px",h.style.visibility=a),I.value),g=(d&&(d.style.height=l+"px",d.style.display=l?"block":""),H.value),y=(g&&(g.style.height=t+"px",g.style.top=l+"px"),C.value),m=(y&&(y.style.height=r+"px",y.style.top=l+t+"px",y.style.display=r?"block":""),Y.value);let i=40,o=(i=m?m.clientWidth||40:i)*v.length;n&&0<(_=(p=n.clientWidth)-o)&&(i+=_/v.length,o=p),k.viewCellWidth=i;x=(0,_util.getRefElem)(u["main-header-table"]),f=(0,_util.getRefElem)(u["main-body-table"]),s=i*c.length;return x&&(x.style.width=o+"px"),f&&(f.style.width=s+"px"),k.scrollXWidth=o,z()}},o=()=>{var e=i.value;return V.rceRunTime=Date.now(),(e&&e.clientWidth?(u(),v(),z(),x):(0,_vue.nextTick))()},r=()=>new Promise(e=>{var{rceTimeout:t,rceRunTime:l}=V,r=V.xeTable;let a=50;r&&(r=r.getComputeMaps().computeResizeOpts,r=r.value,a=r.refreshDelay||50),!t||(clearTimeout(t),l&&l+(a-5)<Date.now())?e(o()):(0,_vue.nextTick)(()=>{e()}),V.rceTimeout=setTimeout(()=>{V.rceTimeout=void 0,o()},a)}),x=()=>(0,_vue.nextTick)().then(()=>{var e,t=k.scrollXLoad,l=V.scrollXStore;t?({toVisibleIndex:t,visibleSize:e}=d(),l.preloadSize=1,l.offsetSize=2,l.visibleSize=e,l.endIndex=Math.max(l.startIndex+l.visibleSize+2,l.endIndex),l.visibleStartIndex=Math.max(l.startIndex,t),l.visibleEndIndex=Math.min(l.endIndex,t+e),B().then(()=>{y()})):a()}),d=()=>{var e,t=k.viewCellWidth,l=V.elemStore,l=(0,_util.getRefElem)(l["main-body-scroll"]);return l?(e=l.clientWidth,l=l.scrollLeft,l=Math.floor(l/t)-1,e=Math.ceil(e/t)+1,{toVisibleIndex:Math.max(0,l),visibleSize:Math.max(1,e)}):{toVisibleIndex:0,visibleSize:6}},y=()=>{var e=k.isScrollXBig,t=V.scrollXStore,{preloadSize:l,startIndex:r,endIndex:a,offsetSize:i}=t,{toVisibleIndex:o,visibleSize:s}=d(),e={startIndex:Math.max(0,e?o-1:o-1-i-l),endIndex:e?o+s:o+s+i+l},{startIndex:i,endIndex:l}=(t.visibleStartIndex=o-1,t.visibleEndIndex=o+s+1,e);!(o<=r||a-s-1<=o)||r===i&&a===l||(t.startIndex=i,t.endIndex=l,B())},B=()=>(G(),a(),(0,_vue.nextTick)()),j=()=>k.scrollXLoad=!0,G=()=>{var e=k.scrollXLoad,{visibleColumn:t,scrollXStore:l}=V,e=e?t.slice(l.startIndex,l.endIndex):t.slice(0);k.tableColumn=e},a=()=>{let{scrollXLoad:t,scrollXWidth:l,viewCellWidth:e}=k,{elemStore:r,scrollXStore:a}=V;var i=(0,_util.getRefElem)(r["main-body-table"]),o=a.startIndex;let s=0;t&&(s=Math.max(0,o*e)),i&&(i.style.transform=`translate(${s}px, ${k.scrollYTop||0}px)`);["header","body","footer"].forEach(e=>{e=(0,_util.getRefElem)(r[`main-${e}-xSpace`]);e&&(e.style.width=t?l+"px":"")});o=n.value;return o&&(o.style.width=l+"px"),u(),(0,_vue.nextTick)()},A=()=>{y()},P=(e,t)=>{var l=V.lcsTimeout;k.lazScrollLoading=!0,l&&clearTimeout(l),V.lcsTimeout=setTimeout(()=>{V.lcsRunTime=Date.now(),V.lcsTimeout=void 0,V.intoRunScroll=!1,V.inVirtualScroll=!1,V.inWheelScroll=!1,V.inHeaderScroll=!1,V.inBodyScroll=!1,V.inFooterScroll=!1,k.lazScrollLoading=!1},200)},F=(e,t,l,r)=>{t&&(V.lastScrollLeft=r),e&&(V.lastScrollTop=l),k.lastScrollTime=Date.now(),P(t,e)},h=(d,c,u,v,h)=>{var p=V.xeTable,{lastScrollLeft:m,lastScrollTop:f}=V,g=E.value,_=L.value;if(g&&_&&p){var{computeScrollXThreshold:p,computeScrollYThreshold:x}=p.getComputeMaps(),y=_.clientHeight,S=g.clientWidth,_=_.scrollHeight,g=g.scrollWidth;let e=!1,t=!1,l=!1,r=!1,a="",i=!1,o=!1,s=!1,n=!1;u&&(p=p.value,(l=h<=0)||(r=g-1<=h+S),m<h?(a="right",g-p<=h+S&&(n=!0)):(a="left",h<=p&&(s=!0))),c&&(m=x.value,(e=v<=0)||(t=_-1<=v+y),f<v?(a="bottom",_-m<=v+y&&(o=!0)):(a="top",v<=m&&(i=!0))),F(c,u,v,h);p={source:sourceType,scrollTop:v,scrollLeft:h,bodyHeight:y,bodyWidth:S,scrollHeight:_,scrollWidth:g,isX:u,isY:c,isTop:e,isBottom:t,isLeft:l,isRight:r,direction:a};(o||i||n||s)&&W.dispatchEvent("scroll-boundary",p,d),W.dispatchEvent("scroll",p,d)}},N=e=>{var t=V.xeTable;t&&(t=t.internalData.elemStore,t=(0,_util.getRefElem)(t["main-body-scroll"]))&&(t.scrollTop=e)};e={handleUpdateStyle:v,handleLazyRecalculate:r,handleUpdateCurrentRow(e){var t,l,r=V.xeTable,a=i.value;r&&a&&(e?(t=r.props,l=r.getComputeMaps().computeRowOpts,(l.value.isCurrent||t.highlightCurrentRow)&&_xeUtils.default.arrayEach(a.querySelectorAll(`.vxe-gantt-view--body-row[rowid="${r.getRowid(e)}"]`),e=>(0,_dom.addClass)(e,"row--current"))):_xeUtils.default.arrayEach(a.querySelectorAll(".vxe-gantt-view--body-row.row--current"),e=>(0,_dom.removeClass)(e,"row--current")))},handleUpdateHoverRow(e){var t=V.xeTable,l=i.value;t&&l&&(e?_xeUtils.default.arrayEach(l.querySelectorAll(`.vxe-gantt-view--body-row[rowid="${t.getRowid(e)}"]`),e=>(0,_dom.addClass)(e,"row--hover")):_xeUtils.default.arrayEach(l.querySelectorAll(".vxe-gantt-view--body-row.row--hover"),e=>(0,_dom.removeClass)(e,"row--hover")))},triggerHeaderScrollEvent(e){var{elemStore:t,inVirtualScroll:l,inBodyScroll:r,inFooterScroll:a}=V;l||r||a||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),a=E.value,r&&l&&(t=l.scrollLeft,V.inHeaderScroll=!0,(0,_dom.setScrollLeft)(a,t),(0,_dom.setScrollLeft)(r,t),h(e,!1,!0,l.scrollTop,t)))},triggerBodyScrollEvent(e){var t,l,r=k.scrollXLoad,{elemStore:a,inVirtualScroll:i,inHeaderScroll:o,inFooterScroll:s,lastScrollLeft:n,lastScrollTop:d}=V;i||o||s||(i=e.currentTarget,o=(0,_util.getRefElem)(a["main-header-scroll"]),s=E.value,a=L.value,n=(t=i.scrollLeft)!==n,d=(l=i.scrollTop)!==d,V.inBodyScroll=!0,V.scrollRenderType="",d&&((0,_dom.setScrollTop)(a,l),N(l)),n&&(V.inBodyScroll=!0,(0,_dom.setScrollLeft)(s,t),(0,_dom.setScrollLeft)(o,t),r)&&A(),d&&F(d,n,i.scrollTop,t),n&&h(e,d,n,i.scrollTop,t))},triggerVirtualScrollXEvent(e){var t,l=k.scrollXLoad,{elemStore:r,inHeaderScroll:a,inBodyScroll:i}=V;a||i||(a=e.currentTarget,i=(0,_util.getRefElem)(r["main-header-scroll"]),r=(0,_util.getRefElem)(r["main-body-scroll"]),a&&(t=a.scrollLeft,V.inVirtualScroll=!0,(0,_dom.setScrollLeft)(i,t),(0,_dom.setScrollLeft)(r,t),l&&A(),h(e,!1,!0,a.scrollTop,t)))},triggerVirtualScrollYEvent(e){var{elemStore:t,inHeaderScroll:l,inBodyScroll:r}=V;l||r||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),l&&(e=l.scrollTop,V.inVirtualScroll=!0,(0,_dom.setScrollTop)(r,e),N(e),F(!0,!1,e,l.scrollLeft)))},handleUpdateSXSpace(){return a()},handleUpdateSYSpace(){return(()=>{var e=V.elemStore,t=V.xeTable,l=(0,_util.getRefElem)(e["main-body-scroll"]),r=(0,_util.getRefElem)(e["main-body-table"]);let a=0,i=0,o=!1,s=(t&&(t=t.reactData,a=t.scrollYTop,i=t.scrollYHeight,o=t.isScrollYBig),i),n=a,d=0;l&&(d=l.clientHeight),o&&(n=l&&r&&l.scrollTop+d>=maxYHeight?maxYHeight-r.clientHeight:(maxYHeight-d)*(a/(i-d)),s=maxYHeight);t=(0,_util.getRefElem)(e["main-chart-wrapper"]),r&&(r.style.transform=`translate(${k.scrollXLeft||0}px, ${n}px)`),t&&(t.style.transform=`translate(${k.scrollXLeft||0}px, ${n}px)`),l=(0,_util.getRefElem)(e["main-body-ySpace"]),l&&(l.style.height=s?s+"px":""),r=c.value;return r&&(r.style.height=s?s+"px":""),k.scrollYTop=n,k.scrollYHeight=i,k.isScrollYBig=o,u(),(0,_vue.nextTick)().then(()=>{v()})})()},handleUpdateSYStatus(e){k.scrollYLoad=e}};let J=()=>{r()},K=(Object.assign(t,{refreshData(){return l(),r()},updateViewData(){var e=V.xeTable;return e&&(e=e.reactData.tableData,k.tableData=e),(0,_vue.nextTick)()},connectUpdate({$table:e}){return e&&(V.xeTable=e),(0,_vue.nextTick)()}},e),()=>(0,_vue.h)("div",{key:"vsx",ref:T,class:"vxe-gantt-view--scroll-x-virtual"},[(0,_vue.h)("div",{ref:R,class:"vxe-gantt-view--scroll-x-left-corner"}),(0,_vue.h)("div",{ref:$,class:"vxe-gantt-view--scroll-x-wrapper"},[(0,_vue.h)("div",{ref:E,class:"vxe-gantt-view--scroll-x-handle",onScroll:t.triggerVirtualScrollXEvent},[(0,_vue.h)("div",{ref:n,class:"vxe-gantt-view--scroll-x-space"})]),(0,_vue.h)("div",{class:"vxe-gantt-view--scroll-x-handle-appearance"})]),(0,_vue.h)("div",{ref:M,class:"vxe-gantt-view--scroll-x-right-corner"})])),Q=()=>(0,_vue.h)("div",{ref:D,class:"vxe-gantt-view--scroll-y-virtual"},[(0,_vue.h)("div",{ref:I,class:"vxe-gantt-view--scroll-y-top-corner"}),(0,_vue.h)("div",{ref:H,class:"vxe-gantt-view--scroll-y-wrapper"},[(0,_vue.h)("div",{ref:L,class:"vxe-gantt-view--scroll-y-handle",onScroll:t.triggerVirtualScrollYEvent},[(0,_vue.h)("div",{ref:c,class:"vxe-gantt-view--scroll-y-space"})]),(0,_vue.h)("div",{class:"vxe-gantt-view--scroll-y-handle-appearance"})]),(0,_vue.h)("div",{ref:C,class:"vxe-gantt-view--scroll-y-bottom-corner"})]),Z=()=>(0,_vue.h)("div",{class:"vxe-gantt-view--viewport-wrapper"},[(0,_vue.h)(_ganttHeader.default),(0,_vue.h)(_ganttBody.default),(0,_vue.h)(_ganttFooter.default)]),ee=()=>{var e=b.value;return(0,_vue.h)("div",{class:"vxe-gantt-view--layout-wrapper"},e?[Q(),Z()]:[Z(),Q()])};let s=(0,_vue.ref)(0);return(0,_vue.watch)(()=>k.tableData,()=>{s.value++}),(0,_vue.watch)(()=>k.tableData.length,()=>{s.value++}),(0,_vue.watch)(s,()=>{l()}),(0,_vue.onMounted)(()=>{globalEvents.on(t,"resize",J)}),(0,_vue.onUnmounted)(()=>{globalEvents.off(t,"keydown"),_xeUtils.default.assign(V,createInternalData())}),t.renderVN=()=>{var{overflowX:e,overflowY:t,scrollXLoad:l,scrollYLoad:r}=k,a=w.value;return(0,_vue.h)("div",{ref:i,class:["vxe-gantt-view",{"is--scroll-y":t,"is--scroll-x":e,"is--virtual-x":l,"is--virtual-y":r}]},[(0,_vue.h)("div",{class:"vxe-gantt-view--render-wrapper"},a?[K(),ee()]:[ee(),K()]),(0,_vue.h)("div",{class:"vxe-gantt-view--render-vars"},[(0,_vue.h)("div",{ref:Y,class:"vxe-gantt-view--column-info"})])])},(0,_vue.provide)("$xeGanttView",t),t},render(){return this.renderVN()}});