vxe-gantt 4.0.4 → 4.0.6

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 (48) hide show
  1. package/es/gantt/src/emits.js +3 -1
  2. package/es/gantt/src/gantt-chart.js +18 -4
  3. package/es/gantt/src/gantt-header.js +29 -6
  4. package/es/gantt/src/gantt-view.js +232 -89
  5. package/es/gantt/src/gantt.js +60 -3
  6. package/es/gantt/src/util.js +6 -0
  7. package/es/gantt/style.css +2 -0
  8. package/es/gantt/style.min.css +1 -1
  9. package/es/style.css +1 -1
  10. package/es/style.min.css +1 -1
  11. package/es/ui/index.js +6 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-gantt/style.css +2 -0
  14. package/es/vxe-gantt/style.min.css +1 -1
  15. package/lib/gantt/src/emits.js +1 -1
  16. package/lib/gantt/src/emits.min.js +1 -1
  17. package/lib/gantt/src/gantt-chart.js +24 -4
  18. package/lib/gantt/src/gantt-chart.min.js +1 -1
  19. package/lib/gantt/src/gantt-header.js +44 -6
  20. package/lib/gantt/src/gantt-header.min.js +1 -1
  21. package/lib/gantt/src/gantt-view.js +255 -99
  22. package/lib/gantt/src/gantt-view.min.js +1 -1
  23. package/lib/gantt/src/gantt.js +75 -2
  24. package/lib/gantt/src/gantt.min.js +1 -1
  25. package/lib/gantt/src/util.js +7 -0
  26. package/lib/gantt/src/util.min.js +1 -1
  27. package/lib/gantt/style/style.css +2 -0
  28. package/lib/gantt/style/style.min.css +1 -1
  29. package/lib/index.umd.js +461 -121
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/style.css +1 -1
  32. package/lib/style.min.css +1 -1
  33. package/lib/ui/index.js +6 -1
  34. package/lib/ui/index.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/lib/vxe-gantt/style/style.css +2 -0
  38. package/lib/vxe-gantt/style/style.min.css +1 -1
  39. package/package.json +3 -3
  40. package/packages/gantt/src/emits.ts +3 -1
  41. package/packages/gantt/src/gantt-chart.ts +20 -4
  42. package/packages/gantt/src/gantt-header.ts +30 -7
  43. package/packages/gantt/src/gantt-view.ts +243 -93
  44. package/packages/gantt/src/gantt.ts +69 -2
  45. package/packages/gantt/src/util.ts +7 -0
  46. package/packages/ui/index.ts +5 -0
  47. package/styles/components/gantt-module/gantt-chart.scss +2 -0
  48. package/styles/theme/base.scss +1 -1
@@ -55,7 +55,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
55
55
  const $xeGantt = (0, _vue.inject)('$xeGantt', {});
56
56
  const {
57
57
  computeTaskOpts,
58
- computeTaskViewOpts,
59
58
  computeStartField,
60
59
  computeEndField,
61
60
  computeScrollbarOpts,
@@ -102,14 +101,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
102
101
  tableData: [],
103
102
  tableColumn: [],
104
103
  headerGroups: [],
105
- viewCellWidth: 40,
106
- rowHeightStore: {
107
- large: 52,
108
- default: 48,
109
- medium: 44,
110
- small: 40,
111
- mini: 36
112
- }
104
+ viewCellWidth: 20
113
105
  });
114
106
  const internalData = createInternalData();
115
107
  const refMaps = {
@@ -134,106 +126,271 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
134
126
  };
135
127
  const handleParseColumn = () => {
136
128
  const ganttProps = $xeGantt.props;
129
+ const ganttReactData = $xeGantt.reactData;
137
130
  const {
138
131
  treeConfig
139
132
  } = ganttProps;
133
+ const {
134
+ taskScaleList
135
+ } = ganttReactData;
140
136
  const {
141
137
  minViewDate,
142
138
  maxViewDate
143
139
  } = reactData;
144
- const taskViewOpts = computeTaskViewOpts.value;
140
+ const minScale = _xeUtils.default.last(taskScaleList);
145
141
  const fullCols = [];
146
142
  const groupCols = [];
147
- switch (taskViewOpts.mode) {
148
- case 'year':
149
- break;
150
- case 'quarter':
151
- break;
152
- case 'month':
153
- break;
154
- case 'week':
155
- break;
156
- default:
157
- {
158
- if (minViewDate && maxViewDate) {
159
- const currTime = minViewDate.getTime();
160
- const diffDayNum = maxViewDate.getTime() - minViewDate.getTime();
161
- const countDayNum = Math.max(6, Math.floor(diffDayNum / 86400000) + 1);
162
- const groupList = [];
163
- const colList = [];
164
- const groupMaps = {};
165
- for (let i = 0; i < countDayNum; i++) {
166
- const itemDate = new Date(currTime + i * 86400000);
167
- const yyyyy = `${itemDate.getFullYear()}-${itemDate.getMonth() + 1}`;
168
- const mmDd = `${itemDate.getDate()}`;
169
- let groupCol = groupMaps[yyyyy];
170
- const column = {
171
- field: `${yyyyy}-${mmDd}`,
172
- title: mmDd
173
- };
174
- if (groupCol) {
175
- groupCol.children.push(column);
176
- fullCols.push(groupCol);
177
- } else {
178
- groupCol = {
179
- field: yyyyy,
180
- title: yyyyy,
181
- children: [column]
182
- };
183
- groupList.push(groupCol);
184
- fullCols.push(groupCol);
185
- groupMaps[yyyyy] = groupCol;
186
- }
187
- colList.push(column);
188
- }
189
- groupCols.push(groupList, colList);
190
- const $xeTable = internalData.xeTable;
191
- if ($xeTable) {
192
- const startField = computeStartField.value;
193
- const endField = computeEndField.value;
194
- const {
195
- computeTreeOpts
196
- } = $xeTable.getComputeMaps();
197
- const tableInternalData = $xeTable.internalData;
198
- const {
199
- afterFullData,
200
- afterTreeFullData
201
- } = tableInternalData;
202
- const treeOpts = computeTreeOpts.value;
203
- const {
204
- transform
205
- } = treeOpts;
206
- const childrenField = treeOpts.children || treeOpts.childrenField;
207
- const ctMaps = {};
208
- const handleParseRender = row => {
209
- const rowid = $xeTable.getRowid(row);
210
- const startValue = _xeUtils.default.get(row, startField);
211
- const endValue = _xeUtils.default.get(row, endField);
212
- if (startValue && endValue) {
213
- const startDate = parseStringDate(startValue);
214
- const endDate = parseStringDate(endValue);
215
- const oLeftSize = Math.floor((startDate.getTime() - minViewDate.getTime()) / 86400000);
216
- const oWidthSize = Math.floor((endDate.getTime() - startDate.getTime()) / 86400000) + 1;
217
- ctMaps[rowid] = {
218
- row,
219
- rowid,
220
- oLeftSize,
221
- oWidthSize
222
- };
223
- }
224
- };
225
- if (treeConfig) {
226
- _xeUtils.default.eachTree(afterTreeFullData, handleParseRender, {
227
- children: transform ? treeOpts.mapChildrenField : childrenField
228
- });
229
- } else {
230
- afterFullData.forEach(handleParseRender);
231
- }
232
- internalData.chartMaps = ctMaps;
233
- }
143
+ if (minScale && minViewDate && maxViewDate) {
144
+ const minSType = minScale.type;
145
+ const weekScale = taskScaleList.find(item => item.type === 'week');
146
+ let gapTime = 1000 * 60 * 60 * 24;
147
+ switch (minScale.type) {
148
+ case 'hour':
149
+ gapTime = 1000 * 60 * 60;
150
+ break;
151
+ case 'minute':
152
+ gapTime = 1000 * 60;
153
+ break;
154
+ case 'second':
155
+ gapTime = 1000;
156
+ break;
157
+ default:
158
+ {
159
+ break;
160
+ }
161
+ }
162
+ const currTime = minViewDate.getTime();
163
+ const diffDayNum = maxViewDate.getTime() - minViewDate.getTime();
164
+ const countSize = Math.max(5, Math.floor(diffDayNum / gapTime) + 1);
165
+ switch (minScale.type) {
166
+ case 'day':
167
+ case 'date':
168
+ if (diffDayNum > 1000 * 60 * 60 * 24 * 366 * 3) {
169
+ reactData.tableColumn = [];
170
+ reactData.headerGroups = [];
171
+ return;
172
+ }
173
+ break;
174
+ case 'hour':
175
+ if (diffDayNum > 1000 * 60 * 60 * 24 * 31 * 3) {
176
+ reactData.tableColumn = [];
177
+ reactData.headerGroups = [];
178
+ return;
234
179
  }
235
180
  break;
181
+ case 'minute':
182
+ if (diffDayNum > 1000 * 60 * 60 * 24 * 3) {
183
+ reactData.tableColumn = [];
184
+ reactData.headerGroups = [];
185
+ return;
186
+ }
187
+ break;
188
+ case 'second':
189
+ if (diffDayNum > 1000 * 60 * 60 * 3) {
190
+ reactData.tableColumn = [];
191
+ reactData.headerGroups = [];
192
+ return;
193
+ }
194
+ break;
195
+ }
196
+ const renderListMaps = {
197
+ year: [],
198
+ quarter: [],
199
+ month: [],
200
+ week: [],
201
+ day: [],
202
+ date: [],
203
+ hour: [],
204
+ minute: [],
205
+ second: []
206
+ };
207
+ const tempTypeMaps = {
208
+ year: {},
209
+ quarter: {},
210
+ month: {},
211
+ week: {},
212
+ day: {},
213
+ date: {},
214
+ hour: {},
215
+ minute: {},
216
+ second: {}
217
+ };
218
+ const handleData = (type, colMaps, minCol) => {
219
+ if (minSType === type) {
220
+ return;
221
+ }
222
+ const currCol = colMaps[type];
223
+ const currKey = `${currCol.field}`;
224
+ let currGpCol = tempTypeMaps[type][currKey];
225
+ if (!currGpCol) {
226
+ currGpCol = currCol;
227
+ tempTypeMaps[type][currKey] = currGpCol;
228
+ renderListMaps[type].push(currGpCol);
229
+ }
230
+ if (currGpCol) {
231
+ if (!currGpCol.children) {
232
+ currGpCol.children = [];
233
+ }
234
+ currGpCol.children.push(minCol);
235
+ }
236
+ };
237
+ for (let i = 0; i < countSize; i++) {
238
+ const itemDate = new Date(currTime + i * gapTime);
239
+ const [yyyy, MM, dd, HH, mm, ss] = _xeUtils.default.toDateString(itemDate, 'yyyy-M-d-H-m-s').split('-');
240
+ const e = itemDate.getDay();
241
+ const E = e + 1;
242
+ const q = Math.ceil((itemDate.getMonth() + 1) / 3);
243
+ const W = _xeUtils.default.getYearWeek(itemDate, weekScale ? weekScale.startDay : undefined);
244
+ const dateObj = {
245
+ yy: yyyy,
246
+ M: MM,
247
+ d: dd,
248
+ H: HH,
249
+ m: mm,
250
+ s: ss,
251
+ q,
252
+ W,
253
+ E,
254
+ e
255
+ };
256
+ const colMaps = {
257
+ year: {
258
+ field: yyyy,
259
+ title: yyyy,
260
+ dateObj
261
+ },
262
+ quarter: {
263
+ field: `${yyyy}_q${q}`,
264
+ title: `${q}`,
265
+ dateObj
266
+ },
267
+ month: {
268
+ field: `${yyyy}_${MM}`,
269
+ title: MM,
270
+ dateObj
271
+ },
272
+ week: {
273
+ field: `${yyyy}_W${W}`,
274
+ title: `${W}`,
275
+ dateObj
276
+ },
277
+ day: {
278
+ field: `${yyyy}_${MM}_${dd}_E${E}`,
279
+ title: `${E}`,
280
+ dateObj
281
+ },
282
+ date: {
283
+ field: `${yyyy}_${MM}_${dd}`,
284
+ title: dd,
285
+ dateObj
286
+ },
287
+ hour: {
288
+ field: `${yyyy}_${MM}_${dd}_${HH}`,
289
+ title: HH,
290
+ dateObj
291
+ },
292
+ minute: {
293
+ field: `${yyyy}_${MM}_${dd}_${HH}_${mm}`,
294
+ title: mm,
295
+ dateObj
296
+ },
297
+ second: {
298
+ field: `${yyyy}_${MM}_${dd}_${HH}_${mm}_${ss}`,
299
+ title: ss,
300
+ dateObj
301
+ }
302
+ };
303
+ const minCol = colMaps[minSType];
304
+ if (minScale.level < 19) {
305
+ handleData('year', colMaps, minCol);
236
306
  }
307
+ if (minScale.level < 17) {
308
+ handleData('quarter', colMaps, minCol);
309
+ }
310
+ if (minScale.level < 14) {
311
+ handleData('month', colMaps, minCol);
312
+ }
313
+ if (minScale.level < 13) {
314
+ handleData('week', colMaps, minCol);
315
+ }
316
+ if (minScale.level < 11) {
317
+ handleData('day', colMaps, minCol);
318
+ }
319
+ if (minScale.level < 12) {
320
+ handleData('date', colMaps, minCol);
321
+ }
322
+ if (minScale.level < 7) {
323
+ handleData('hour', colMaps, minCol);
324
+ }
325
+ if (minScale.level < 5) {
326
+ handleData('minute', colMaps, minCol);
327
+ }
328
+ fullCols.push(minCol);
329
+ }
330
+ taskScaleList.forEach(scaleItem => {
331
+ if (scaleItem.type === minSType) {
332
+ groupCols.push({
333
+ scaleItem,
334
+ columns: fullCols
335
+ });
336
+ return;
337
+ }
338
+ const list = renderListMaps[scaleItem.type] || [];
339
+ if (list) {
340
+ list.forEach(item => {
341
+ item.childCount = item.children ? item.children.length : 0;
342
+ item.children = undefined;
343
+ });
344
+ }
345
+ groupCols.push({
346
+ scaleItem,
347
+ columns: list
348
+ });
349
+ });
350
+ const $xeTable = internalData.xeTable;
351
+ if ($xeTable) {
352
+ const startField = computeStartField.value;
353
+ const endField = computeEndField.value;
354
+ const {
355
+ computeTreeOpts
356
+ } = $xeTable.getComputeMaps();
357
+ const tableInternalData = $xeTable.internalData;
358
+ const {
359
+ afterFullData,
360
+ afterTreeFullData
361
+ } = tableInternalData;
362
+ const treeOpts = computeTreeOpts.value;
363
+ const {
364
+ transform
365
+ } = treeOpts;
366
+ const childrenField = treeOpts.children || treeOpts.childrenField;
367
+ const ctMaps = {};
368
+ const handleParseRender = row => {
369
+ const rowid = $xeTable.getRowid(row);
370
+ const startValue = _xeUtils.default.get(row, startField);
371
+ const endValue = _xeUtils.default.get(row, endField);
372
+ if (startValue && endValue) {
373
+ const startDate = parseStringDate(startValue);
374
+ const endDate = parseStringDate(endValue);
375
+ const oLeftSize = Math.floor((startDate.getTime() - minViewDate.getTime()) / gapTime);
376
+ const oWidthSize = Math.floor((endDate.getTime() - startDate.getTime()) / gapTime) + 1;
377
+ ctMaps[rowid] = {
378
+ row,
379
+ rowid,
380
+ oLeftSize,
381
+ oWidthSize
382
+ };
383
+ }
384
+ };
385
+ if (treeConfig) {
386
+ _xeUtils.default.eachTree(afterTreeFullData, handleParseRender, {
387
+ children: transform ? treeOpts.mapChildrenField : childrenField
388
+ });
389
+ } else {
390
+ afterFullData.forEach(handleParseRender);
391
+ }
392
+ internalData.chartMaps = ctMaps;
393
+ }
237
394
  }
238
395
  reactData.tableColumn = fullCols;
239
396
  reactData.headerGroups = groupCols;
@@ -833,11 +990,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
833
990
  scrollXLoad,
834
991
  scrollYLoad
835
992
  } = reactData;
836
- const taskViewOpts = computeTaskViewOpts.value;
837
993
  const scrollbarXToTop = computeScrollbarXToTop.value;
838
994
  return (0, _vue.h)('div', {
839
995
  ref: refElem,
840
- class: ['vxe-gantt-view', `mode--${taskViewOpts.mode || 'day'}`, {
996
+ class: ['vxe-gantt-view', {
841
997
  'is--scroll-y': overflowY,
842
998
  'is--scroll-x': overflowX,
843
999
  'is--virtual-x': scrollXLoad,
@@ -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,startMaps:{},endMaps:{},chartMaps:{},elemStore:{},scrollXStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0},scrollYStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0}}}let maxYHeight=5e6;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttView",setup(p,f){var e=_xeUtils.default.uniqueId();let _=(0,_vue.inject)("$xeGantt",{}),{computeTaskOpts:m,computeTaskViewOpts:w,computeStartField:y,computeEndField:S,computeScrollbarOpts:b,computeScrollbarXToTop:T,computeScrollbarYToLeft:E}=_.getComputeMaps(),D=(0,_vue.ref)(),R=(0,_vue.ref)(),H=(0,_vue.ref)(),o=(0,_vue.ref)(),L=(0,_vue.ref)(),Y=(0,_vue.ref)(),s=(0,_vue.ref)(),V=(0,_vue.ref)(),C=(0,_vue.ref)(),U=(0,_vue.ref)(),M=(0,_vue.ref)(),a=(0,_vue.ref)(),c=(0,_vue.ref)(),W=(0,_vue.ref)(),q=(0,_vue.reactive)({scrollXLoad:!1,scrollYLoad:!1,overflowY:!0,overflowX:!0,scrollbarWidth:0,scrollbarHeight: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:40,rowHeightStore:{large:52,default:48,medium:44,small:40,mini:36}}),F=createInternalData(),x={refElem:D},z={},l={xID:e,props:p,context:f,reactData:q,internalData:F,getRefMaps:()=>x,getComputeMaps:()=>z},X=e=>{var l=m.value.dateFormat;return _xeUtils.default.toStringDate(e,l||null)},t=()=>{var e=_.props.treeConfig,l=F.xeTable;let a=null,i=null;if(l){let t=y.value,r=S.value;var o=l.getComputeMaps().computeTreeOpts,{afterFullData:l,afterTreeFullData:s}=l.internalData,o=o.value,u=o.transform,n=o.children||o.childrenField,c=e=>{var l=_xeUtils.default.get(e,t),e=_xeUtils.default.get(e,r);l&&e&&(l=X(l),(!a||a.getTime()>l.getTime())&&(a=l),l=X(e),!i||i.getTime()<l.getTime())&&(i=l)};e?_xeUtils.default.eachTree(s,c,{children:u?o.mapChildrenField:n}):l.forEach(c)}q.minViewDate=a,q.maxViewDate=i,F.startMaps={},F.endMaps={},(()=>{var e=_.props.treeConfig;let{minViewDate:n,maxViewDate:l}=q;var t=[],r=[];switch(w.value.mode){case"year":case"quarter":case"month":case"week":break;default:if(n&&l){var a=n.getTime(),c=l.getTime()-n.getTime(),i=Math.max(6,Math.floor(c/864e5)+1),o=[],s=[],v={};for(let l=0;l<i;l++){var d=new Date(a+864e5*l),h=d.getFullYear()+"-"+(d.getMonth()+1),d=""+d.getDate();let e=v[h];d={field:h+"-"+d,title:d};e?(e.children.push(d),t.push(e)):(e={field:h,title:h,children:[d]},o.push(e),t.push(e),v[h]=e),s.push(d)}r.push(o,s);let u=F.xeTable;if(u){let i=y.value,o=S.value;var c=u.getComputeMaps().computeTreeOpts,{afterFullData:g,afterTreeFullData:p}=u.internalData,c=c.value,f=c.transform,m=c.children||c.childrenField;let s={};var x=e=>{var l,t=u.getRowid(e),r=_xeUtils.default.get(e,i),a=_xeUtils.default.get(e,o);r&&a&&(r=X(r),a=X(a),l=Math.floor((r.getTime()-n.getTime())/864e5),a=Math.floor((a.getTime()-r.getTime())/864e5)+1,s[t]={row:e,rowid:t,oLeftSize:l,oWidthSize:a})};e?_xeUtils.default.eachTree(p,x,{children:f?c.mapChildrenField:m}):g.forEach(x),F.chartMaps=s}}}q.tableColumn=t,q.headerGroups=r})()},v=()=>{var{scrollXWidth:e,scrollYHeight:l}=q,t=F.elemStore,r=b.value,t=(0,_util.getRefElem)(t["main-body-wrapper"]),a=o.value,i=s.value;t&&(l=l>t.clientHeight,i&&(q.scrollbarWidth=r.width||i.offsetWidth-i.clientWidth||14),q.overflowY=l,i=e>t.clientWidth,a&&(q.scrollbarHeight=r.height||a.offsetHeight-a.clientHeight||14),q.overflowX=i)},k=()=>{let t=q.viewCellWidth,{elemStore:e,chartMaps:r}=F;var l=(0,_util.getRefElem)(e["main-chart-wrapper"]);return l&&_xeUtils.default.arrayEach(l.children,e=>{var l=e.children[0];l&&(e=(e=e.getAttribute("rowid"))?r[e]:null)&&(l.style.left=t*e.oLeftSize+"px",l.style.width=t*e.oWidthSize+"px")}),(0,_vue.nextTick)()},d=()=>{var{scrollbarWidth:o,scrollbarHeight:s,tableColumn:u,headerGroups:n}=q,c=F.elemStore,v=F.xeTable,d=D.value;if(d&&d.clientHeight){var h=b.value,g=T.value,p=E.value,f=L.value,m=Y.value,x=R.value;let e=o;o=s;let l=0,t=0,r=0,a=(v&&(s=v.internalData,l=s.tBodyHeight,t=s.tHeaderHeight,r=s.tFooterHeight),"visible");(p||h.y&&!1===h.y.visible)&&(e=0,a="hidden");v=(0,_util.getRefElem)(c["main-header-scroll"]),s=(v&&(v.style.height=t+"px",v.style.setProperty("--vxe-ui-gantt-view-cell-height",t/n.length+"px")),(0,_util.getRefElem)(c["main-body-scroll"])),p=(s&&(s.style.height=l+"px"),(0,_util.getRefElem)(c["main-footer-scroll"])),h=(p&&(p.style.height=r+"px"),x&&(x.style.height=o+"px",x.style.visibility="visible"),C.value),v=(h&&(h.style.left=g?e+"px":"",h.style.width=d.clientWidth-e+"px"),f&&(f.style.width=g?e+"px":"",f.style.display=g&&o?"block":""),m&&(m.style.width=g?"":e+"px",m.style.display=!g&&o?"block":""),H.value),n=(v&&(v.style.width=e+"px",v.style.height=l+t+r+"px",v.style.visibility=a),V.value),p=(n&&(n.style.height=t+"px",n.style.display=t?"block":""),U.value),x=(p&&(p.style.height=l+"px",p.style.top=t+"px"),M.value),h=(x&&(x.style.height=r+"px",x.style.top=t+l+"px",x.style.display=r?"block":""),W.value);h&&(q.viewCellWidth=h.clientWidth||40);let i=q.viewCellWidth*u.length;s&&0<(f=(d=s.clientWidth)-i)&&(q.viewCellWidth+=Math.floor(f/u.length),i=d);m=(0,_util.getRefElem)(c["main-header-table"]),g=(0,_util.getRefElem)(c["main-body-table"]);return m&&(m.style.width=i+"px"),g&&(g.style.width=i+"px"),q.scrollXWidth=i,k()}},r=()=>(v(),d(),k(),(0,_vue.nextTick)());let u=(e,l,t,r,a)=>{var i;i=F.lcsTimeout,q.lazScrollLoading=!0,i&&clearTimeout(i),F.lcsTimeout=setTimeout(()=>{F.lcsRunTime=Date.now(),F.lcsTimeout=void 0,F.intoRunScroll=!1,F.inVirtualScroll=!1,F.inWheelScroll=!1,F.inHeaderScroll=!1,F.inBodyScroll=!1,F.inFooterScroll=!1,q.lazScrollLoading=!1},200)},n=e=>{var l=F.xeTable;l&&(l=l.internalData.elemStore,l=(0,_util.getRefElem)(l["main-body-scroll"]))&&(l.scrollTop=e)};e={handleUpdateStyle:d,handleLazyRecalculate:r,handleUpdateCurrentRow(e){var l,t,r=F.xeTable,a=D.value;r&&a&&(e?(l=r.props.highlightCurrentRow,t=r.getComputeMaps().computeRowOpts,(t.value.isCurrent||l)&&_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 l=F.xeTable,t=D.value;l&&t&&(e?_xeUtils.default.arrayEach(t.querySelectorAll(`.vxe-gantt-view--body-row[rowid="${l.getRowid(e)}"]`),e=>(0,_dom.addClass)(e,"row--hover")):_xeUtils.default.arrayEach(t.querySelectorAll(".vxe-gantt-view--body-row.row--hover"),e=>(0,_dom.removeClass)(e,"row--hover")))},triggerHeaderScrollEvent(e){var{elemStore:l,inVirtualScroll:t,inBodyScroll:r,inFooterScroll:a}=F;t||r||a||(t=e.currentTarget,r=(0,_util.getRefElem)(l["main-body-scroll"]),a=o.value,r&&t&&(e=t.scrollLeft,F.inHeaderScroll=!0,(0,_dom.setScrollLeft)(a,e),(0,_dom.setScrollLeft)(r,e),u(0,0,0,t.scrollTop)))},triggerBodyScrollEvent(e){var l,{elemStore:t,inVirtualScroll:r,inHeaderScroll:a,inFooterScroll:i}=F;r||a||i||(r=e.currentTarget,a=(0,_util.getRefElem)(t["main-header-scroll"]),i=o.value,e=s.value,a&&r&&(t=r.scrollLeft,l=r.scrollTop,F.inBodyScroll=!0,(0,_dom.setScrollLeft)(i,t),(0,_dom.setScrollLeft)(a,t),(0,_dom.setScrollTop)(e,l),n(l),u(0,0,0,r.scrollTop)))},triggerFooterScrollEvent(e){var{inVirtualScroll:l,inHeaderScroll:t,inBodyScroll:r}=F;l||t||r||(l=e.currentTarget)&&(l.scrollLeft,u(0,0,0,l.scrollTop))},triggerVirtualScrollXEvent(e){var{elemStore:l,inHeaderScroll:t,inBodyScroll:r}=F;t||r||(t=e.currentTarget,r=(0,_util.getRefElem)(l["main-header-scroll"]),e=(0,_util.getRefElem)(l["main-body-scroll"]),t&&(l=t.scrollLeft,F.inVirtualScroll=!0,(0,_dom.setScrollLeft)(r,l),(0,_dom.setScrollLeft)(e,l),u(0,0,0,t.scrollTop)))},triggerVirtualScrollYEvent(e){var{elemStore:l,inHeaderScroll:t,inBodyScroll:r}=F;t||r||(t=e.currentTarget,r=(0,_util.getRefElem)(l["main-body-scroll"]),t&&(e=t.scrollTop,F.inVirtualScroll=!0,(0,_dom.setScrollTop)(r,e),n(e),u(0,0,0,0,t.scrollLeft)))},handleUpdateSXSpace(){let{scrollXLoad:l,scrollXWidth:t}=q,r=F.elemStore;["header","body","footer"].forEach(e=>{e=(0,_util.getRefElem)(r[`main-${e}-xSpace`]);e&&(e.style.width=l?t+"px":"")});var e=a.value;return e&&(e.style.width=t+"px"),v(),(0,_vue.nextTick)()},handleUpdateSYSpace:()=>{var e=F.elemStore,l=F.xeTable,t=(0,_util.getRefElem)(e["main-body-scroll"]),r=(0,_util.getRefElem)(e["main-body-table"]);let a=0,i=0,o=!1,s=(l&&(l=l.reactData,a=l.scrollYTop,i=l.scrollYHeight,o=l.isScrollYBig),i),u=a,n=0;t&&(n=t.clientHeight),o&&(u=t&&r&&t.scrollTop+n>=maxYHeight?maxYHeight-r.clientHeight:(maxYHeight-n)*(a/(i-n)),s=maxYHeight);l=(0,_util.getRefElem)(e["main-chart-wrapper"]),r&&(r.style.transform=`translate(${q.scrollXLeft||0}px, ${u}px)`),l&&(l.style.transform=`translate(${q.scrollXLeft||0}px, ${u}px)`),t=(0,_util.getRefElem)(e["main-body-ySpace"]),t&&(t.style.height=s?s+"px":""),r=c.value;return r&&(r.style.height=s?s+"px":""),q.scrollYTop=u,q.scrollYHeight=i,q.isScrollYBig=o,v(),(0,_vue.nextTick)().then(()=>{d()})},handleUpdateSYStatus(e){q.scrollYLoad=e}};let B=()=>{r()},h=(Object.assign(l,{refreshData(){return t(),r()},updateViewData(){var e=F.xeTable;return e&&(e=e.reactData.tableData,q.tableData=e),(0,_vue.nextTick)()},connectUpdate({$table:e}){return e&&(F.xeTable=e),(0,_vue.nextTick)()}},e),()=>(0,_vue.h)("div",{key:"vsx",ref:R,class:"vxe-gantt-view--scroll-x-virtual"},[(0,_vue.h)("div",{ref:L,class:"vxe-gantt-view--scroll-x-left-corner"}),(0,_vue.h)("div",{ref:C,class:"vxe-gantt-view--scroll-x-wrapper"},[(0,_vue.h)("div",{ref:o,class:"vxe-gantt-view--scroll-x-handle",onScroll:l.triggerVirtualScrollXEvent},[(0,_vue.h)("div",{ref:a,class:"vxe-gantt-view--scroll-x-space"})])]),(0,_vue.h)("div",{ref:Y,class:"vxe-gantt-view--scroll-x-right-corner"})])),i=()=>(0,_vue.h)("div",{ref:H,class:"vxe-gantt-view--scroll-y-virtual"},[(0,_vue.h)("div",{ref:V,class:"vxe-gantt-view--scroll-y-top-corner"}),(0,_vue.h)("div",{ref:U,class:"vxe-gantt-view--scroll-y-wrapper"},[(0,_vue.h)("div",{ref:s,class:"vxe-gantt-view--scroll-y-handle",onScroll:l.triggerVirtualScrollYEvent},[(0,_vue.h)("div",{ref:c,class:"vxe-gantt-view--scroll-y-space"})])]),(0,_vue.h)("div",{ref:M,class:"vxe-gantt-view--scroll-y-bottom-corner"})]),I=()=>(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)]),$=()=>{var e=E.value;return(0,_vue.h)("div",{class:"vxe-gantt-view--layout-wrapper"},e?[i(),I()]:[I(),i()])};let g=(0,_vue.ref)(0);return(0,_vue.watch)(()=>q.tableData,()=>{g.value++}),(0,_vue.watch)(()=>q.tableData.length,()=>{g.value++}),(0,_vue.watch)(g,()=>{t()}),(0,_vue.onMounted)(()=>{globalEvents.on(l,"resize",B)}),(0,_vue.onUnmounted)(()=>{globalEvents.off(l,"keydown"),_xeUtils.default.assign(F,createInternalData())}),l.renderVN=()=>{var{overflowX:e,overflowY:l,scrollXLoad:t,scrollYLoad:r}=q,a=w.value,i=T.value;return(0,_vue.h)("div",{ref:D,class:["vxe-gantt-view","mode--"+(a.mode||"day"),{"is--scroll-y":l,"is--scroll-x":e,"is--virtual-x":t,"is--virtual-y":r}]},[(0,_vue.h)("div",{class:"vxe-gantt-view--render-wrapper"},i?[h(),$()]:[$(),h()]),(0,_vue.h)("div",{class:"vxe-gantt-view--render-vars"},[(0,_vue.h)("div",{ref:W,class:"vxe-gantt-view--column-info"})])])},(0,_vue.provide)("$xeGanttView",l),l},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;function createInternalData(){return{xeTable:null,startMaps:{},endMaps:{},chartMaps:{},elemStore:{},scrollXStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0},scrollYStore:{preloadSize:0,offsetSize:0,visibleSize:0,visibleStartIndex:0,visibleEndIndex:0,startIndex:0,endIndex:0}}}let maxYHeight=5e6;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeGanttView",setup(_,W){var e=_xeUtils.default.uniqueId();let s=(0,_vue.inject)("$xeGantt",{}),{computeTaskOpts:$,computeStartField:U,computeEndField:M,computeScrollbarOpts:x,computeScrollbarXToTop:y,computeScrollbarYToLeft:w}=s.getComputeMaps(),i=(0,_vue.ref)(),S=(0,_vue.ref)(),b=(0,_vue.ref)(),o=(0,_vue.ref)(),T=(0,_vue.ref)(),E=(0,_vue.ref)(),n=(0,_vue.ref)(),D=(0,_vue.ref)(),H=(0,_vue.ref)(),R=(0,_vue.ref)(),C=(0,_vue.ref)(),a=(0,_vue.ref)(),d=(0,_vue.ref)(),L=(0,_vue.ref)(),k=(0,_vue.reactive)({scrollXLoad:!1,scrollYLoad:!1,overflowY:!0,overflowX:!0,scrollbarWidth:0,scrollbarHeight: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}),q=createInternalData(),X={refElem:i},F={},t={xID:e,props:_,context:W,reactData:k,internalData:q,getRefMaps:()=>X,getComputeMaps:()=>F},V=e=>{var t=$.value.dateFormat;return _xeUtils.default.toStringDate(e,t||null)},l=()=>{var t=s.props.treeConfig,a=q.xeTable;let i=null,o=null;if(a){let l=U.value,r=M.value;var c=a.getComputeMaps().computeTreeOpts,{afterFullData:a,afterTreeFullData:v}=a.internalData,c=c.value,h=c.transform,f=c.children||c.childrenField,p=e=>{var t=_xeUtils.default.get(e,l),e=_xeUtils.default.get(e,r);t&&e&&(t=V(t),(!i||i.getTime()>t.getTime())&&(i=t),t=V(e),!o||o.getTime()<t.getTime())&&(o=t)};t?_xeUtils.default.eachTree(v,p,{children:h?c.mapChildrenField:f}):a.forEach(p)}k.minViewDate=i,k.maxViewDate=o,q.startMaps={},q.endMaps={};{t=s.props.treeConfig,v=s.reactData.taskScaleList;let{minViewDate:d,maxViewDate:e}=k;var g=_xeUtils.default.last(v);let l=[],r=[];if(g&&d&&e){let i=g.type;var m=v.find(e=>"week"===e.type);let n=864e5;switch(g.type){case"hour":n=36e5;break;case"minute":n=6e4;break;case"second":n=1e3}var _=d.getTime(),x=e.getTime()-d.getTime(),y=Math.max(5,Math.floor(x/n)+1);switch(g.type){case"day":case"date":if(948672e5<x)return void(k.tableColumn=[],k.headerGroups=[]);break;case"hour":if(80352e5<x)return void(k.tableColumn=[],k.headerGroups=[]);break;case"minute":if(2592e5<x)return void(k.tableColumn=[],k.headerGroups=[]);break;case"second":if(108e5<x)return void(k.tableColumn=[],k.headerGroups=[])}let o={year:[],quarter:[],month:[],week:[],day:[],date:[],hour:[],minute:[],second:[]},s={year:{},quarter:{},month:{},week:{},day:{},date:{},hour:{},minute:{},second:{}};var w=(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<y;e++){var S=new Date(_+e*n),[b,T,E,D,H,R]=_xeUtils.default.toDateString(S,"yyyy-M-d-H-m-s").split("-"),C=S.getDay(),L=C+1,Y=Math.ceil((S.getMonth()+1)/3),S=_xeUtils.default.getYearWeek(S,m?m.startDay:void 0),C={yy:b,M:T,d:E,H:D,m:H,s:R,q:Y,W:S,E:L,e:C},Y={year:{field:b,title:b,dateObj:C},quarter:{field:b+"_q"+Y,title:""+Y,dateObj:C},month:{field:b+"_"+T,title:T,dateObj:C},week:{field:b+"_W"+S,title:""+S,dateObj:C},day:{field:b+`_${T}_${E}_E`+L,title:""+L,dateObj:C},date:{field:b+`_${T}_`+E,title:E,dateObj:C},hour:{field:b+`_${T}_${E}_`+D,title:D,dateObj:C},minute:{field:b+`_${T}_${E}_${D}_`+H,title:H,dateObj:C},second:{field:b+`_${T}_${E}_${D}_${H}_`+R,title:R,dateObj:C}},S=Y[i];g.level<19&&w("year",Y,S),g.level<17&&w("quarter",Y,S),g.level<14&&w("month",Y,S),g.level<13&&w("week",Y,S),g.level<11&&w("day",Y,S),g.level<12&&w("date",Y,S),g.level<7&&w("hour",Y,S),g.level<5&&w("minute",Y,S),l.push(S)}v.forEach(e=>{var t;e.type===i?r.push({scaleItem:e,columns:l}):((t=o[e.type]||[])&&t.forEach(e=>{e.childCount=e.children?e.children.length:0,e.children=void 0}),r.push({scaleItem:e,columns:t}))});let u=q.xeTable;if(u){let i=U.value,o=M.value;var v=u.getComputeMaps().computeTreeOpts,{afterFullData:h,afterTreeFullData:c}=u.internalData,v=v.value,f=v.transform,a=v.children||v.childrenField;let s={};p=e=>{var t,l=u.getRowid(e),r=_xeUtils.default.get(e,i),a=_xeUtils.default.get(e,o);r&&a&&(r=V(r),a=V(a),t=Math.floor((r.getTime()-d.getTime())/n),a=Math.floor((a.getTime()-r.getTime())/n)+1,s[l]={row:e,rowid:l,oLeftSize:t,oWidthSize:a})};t?_xeUtils.default.eachTree(c,p,{children:f?v.mapChildrenField:a}):h.forEach(p),q.chartMaps=s}}k.tableColumn=l,k.headerGroups=r}},c=()=>{var{scrollXWidth:e,scrollYHeight:t}=k,l=q.elemStore,r=x.value,l=(0,_util.getRefElem)(l["main-body-wrapper"]),a=o.value,i=n.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)},Y=()=>{let l=k.viewCellWidth,{elemStore:e,chartMaps:r}=q;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=l*e.oLeftSize+"px",t.style.width=l*e.oWidthSize+"px")}),(0,_vue.nextTick)()},v=()=>{var{scrollbarWidth:o,scrollbarHeight:s,tableColumn:n,headerGroups:u}=k,d=q.elemStore,c=q.xeTable,v=i.value;if(v&&v.clientHeight){var h=x.value,f=y.value,p=w.value,g=T.value,m=E.value,_=S.value;let e=o;o=s;let t=0,l=0,r=0,a=(c&&(s=c.internalData,t=s.tBodyHeight,l=s.tHeaderHeight,r=s.tFooterHeight),"visible");(p||h.y&&!1===h.y.visible)&&(e=0,a="hidden");c=(0,_util.getRefElem)(d["main-header-scroll"]),s=(c&&(c.style.height=l+"px",c.style.setProperty("--vxe-ui-gantt-view-cell-height",l/u.length+"px")),(0,_util.getRefElem)(d["main-body-scroll"])),p=(s&&(s.style.height=t+"px"),(0,_util.getRefElem)(d["main-footer-scroll"])),h=(p&&(p.style.height=r+"px"),_&&(_.style.height=o+"px",_.style.visibility="visible"),H.value),c=(h&&(h.style.left=f?e+"px":"",h.style.width=v.clientWidth-e+"px"),g&&(g.style.width=f?e+"px":"",g.style.display=f&&o?"block":""),m&&(m.style.width=f?"":e+"px",m.style.display=!f&&o?"block":""),b.value),u=(c&&(c.style.width=e+"px",c.style.height=t+l+r+"px",c.style.visibility=a),D.value),p=(u&&(u.style.height=l+"px",u.style.display=l?"block":""),R.value),_=(p&&(p.style.height=t+"px",p.style.top=l+"px"),C.value),h=(_&&(_.style.height=r+"px",_.style.top=l+t+"px",_.style.display=r?"block":""),L.value);h&&(k.viewCellWidth=h.clientWidth||40);let i=k.viewCellWidth*n.length;s&&0<(g=(v=s.clientWidth)-i)&&(k.viewCellWidth+=Math.floor(g/n.length),i=v);m=(0,_util.getRefElem)(d["main-header-table"]),f=(0,_util.getRefElem)(d["main-body-table"]);return m&&(m.style.width=i+"px"),f&&(f.style.width=i+"px"),k.scrollXWidth=i,Y()}},r=()=>(c(),v(),Y(),(0,_vue.nextTick)());let u=(e,t,l,r,a)=>{var i;i=q.lcsTimeout,k.lazScrollLoading=!0,i&&clearTimeout(i),q.lcsTimeout=setTimeout(()=>{q.lcsRunTime=Date.now(),q.lcsTimeout=void 0,q.intoRunScroll=!1,q.inVirtualScroll=!1,q.inWheelScroll=!1,q.inHeaderScroll=!1,q.inBodyScroll=!1,q.inFooterScroll=!1,k.lazScrollLoading=!1},200)},h=e=>{var t=q.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=q.xeTable,a=i.value;r&&a&&(e?(t=r.props.highlightCurrentRow,l=r.getComputeMaps().computeRowOpts,(l.value.isCurrent||t)&&_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=q.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}=q;l||r||a||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),a=o.value,r&&l&&(e=l.scrollLeft,q.inHeaderScroll=!0,(0,_dom.setScrollLeft)(a,e),(0,_dom.setScrollLeft)(r,e),u(0,0,0,l.scrollTop)))},triggerBodyScrollEvent(e){var t,{elemStore:l,inVirtualScroll:r,inHeaderScroll:a,inFooterScroll:i}=q;r||a||i||(r=e.currentTarget,a=(0,_util.getRefElem)(l["main-header-scroll"]),i=o.value,e=n.value,a&&r&&(l=r.scrollLeft,t=r.scrollTop,q.inBodyScroll=!0,(0,_dom.setScrollLeft)(i,l),(0,_dom.setScrollLeft)(a,l),(0,_dom.setScrollTop)(e,t),h(t),u(0,0,0,r.scrollTop)))},triggerFooterScrollEvent(e){var{inVirtualScroll:t,inHeaderScroll:l,inBodyScroll:r}=q;t||l||r||(t=e.currentTarget)&&(t.scrollLeft,u(0,0,0,t.scrollTop))},triggerVirtualScrollXEvent(e){var{elemStore:t,inHeaderScroll:l,inBodyScroll:r}=q;l||r||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-header-scroll"]),e=(0,_util.getRefElem)(t["main-body-scroll"]),l&&(t=l.scrollLeft,q.inVirtualScroll=!0,(0,_dom.setScrollLeft)(r,t),(0,_dom.setScrollLeft)(e,t),u(0,0,0,l.scrollTop)))},triggerVirtualScrollYEvent(e){var{elemStore:t,inHeaderScroll:l,inBodyScroll:r}=q;l||r||(l=e.currentTarget,r=(0,_util.getRefElem)(t["main-body-scroll"]),l&&(e=l.scrollTop,q.inVirtualScroll=!0,(0,_dom.setScrollTop)(r,e),h(e),u(0,0,0,0,l.scrollLeft)))},handleUpdateSXSpace(){let{scrollXLoad:t,scrollXWidth:l}=k,r=q.elemStore;["header","body","footer"].forEach(e=>{e=(0,_util.getRefElem)(r[`main-${e}-xSpace`]);e&&(e.style.width=t?l+"px":"")});var e=a.value;return e&&(e.style.width=l+"px"),c(),(0,_vue.nextTick)()},handleUpdateSYSpace:()=>{var e=q.elemStore,t=q.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,u=0;l&&(u=l.clientHeight),o&&(n=l&&r&&l.scrollTop+u>=maxYHeight?maxYHeight-r.clientHeight:(maxYHeight-u)*(a/(i-u)),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=d.value;return r&&(r.style.height=s?s+"px":""),k.scrollYTop=n,k.scrollYHeight=i,k.isScrollYBig=o,c(),(0,_vue.nextTick)().then(()=>{v()})},handleUpdateSYStatus(e){k.scrollYLoad=e}};let I=()=>{r()},f=(Object.assign(t,{refreshData(){return l(),r()},updateViewData(){var e=q.xeTable;return e&&(e=e.reactData.tableData,k.tableData=e),(0,_vue.nextTick)()},connectUpdate({$table:e}){return e&&(q.xeTable=e),(0,_vue.nextTick)()}},e),()=>(0,_vue.h)("div",{key:"vsx",ref:S,class:"vxe-gantt-view--scroll-x-virtual"},[(0,_vue.h)("div",{ref:T,class:"vxe-gantt-view--scroll-x-left-corner"}),(0,_vue.h)("div",{ref:H,class:"vxe-gantt-view--scroll-x-wrapper"},[(0,_vue.h)("div",{ref:o,class:"vxe-gantt-view--scroll-x-handle",onScroll:t.triggerVirtualScrollXEvent},[(0,_vue.h)("div",{ref:a,class:"vxe-gantt-view--scroll-x-space"})])]),(0,_vue.h)("div",{ref:E,class:"vxe-gantt-view--scroll-x-right-corner"})])),p=()=>(0,_vue.h)("div",{ref:b,class:"vxe-gantt-view--scroll-y-virtual"},[(0,_vue.h)("div",{ref:D,class:"vxe-gantt-view--scroll-y-top-corner"}),(0,_vue.h)("div",{ref:R,class:"vxe-gantt-view--scroll-y-wrapper"},[(0,_vue.h)("div",{ref:n,class:"vxe-gantt-view--scroll-y-handle",onScroll:t.triggerVirtualScrollYEvent},[(0,_vue.h)("div",{ref:d,class:"vxe-gantt-view--scroll-y-space"})])]),(0,_vue.h)("div",{ref:C,class:"vxe-gantt-view--scroll-y-bottom-corner"})]),g=()=>(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)]),O=()=>{var e=w.value;return(0,_vue.h)("div",{class:"vxe-gantt-view--layout-wrapper"},e?[p(),g()]:[g(),p()])};let m=(0,_vue.ref)(0);return(0,_vue.watch)(()=>k.tableData,()=>{m.value++}),(0,_vue.watch)(()=>k.tableData.length,()=>{m.value++}),(0,_vue.watch)(m,()=>{l()}),(0,_vue.onMounted)(()=>{globalEvents.on(t,"resize",I)}),(0,_vue.onUnmounted)(()=>{globalEvents.off(t,"keydown"),_xeUtils.default.assign(q,createInternalData())}),t.renderVN=()=>{var{overflowX:e,overflowY:t,scrollXLoad:l,scrollYLoad:r}=k,a=y.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?[f(),O()]:[O(),f()]),(0,_vue.h)("div",{class:"vxe-gantt-view--render-vars"},[(0,_vue.h)("div",{ref:L,class:"vxe-gantt-view--column-info"})])])},(0,_vue.provide)("$xeGanttView",t),t},render(){return this.renderVN()}});
@@ -38,6 +38,20 @@ function createInternalData() {
38
38
  resizeTableWidth: 0
39
39
  };
40
40
  }
41
+ const viewTypeLevelMaps = {
42
+ year: 19,
43
+ quarter: 17,
44
+ month: 15,
45
+ week: 13,
46
+ day: 11,
47
+ date: 9,
48
+ hour: 7,
49
+ minute: 5,
50
+ second: 3
51
+ };
52
+ function getViewTypeLevel(type) {
53
+ return viewTypeLevelMaps[type || 'date'] || viewTypeLevelMaps.date;
54
+ }
41
55
  var _default = exports.default = (0, _comp.defineVxeComponent)({
42
56
  name: 'VxeGantt',
43
57
  props: Object.assign(Object.assign({}, tableProps), {
@@ -49,6 +63,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
49
63
  zoomConfig: Object,
50
64
  layouts: Array,
51
65
  taskConfig: Object,
66
+ taskViewScaleConfs: Object,
52
67
  taskViewConfig: Object,
53
68
  taskBarConfig: Object,
54
69
  taskSplitConfig: Object,
@@ -88,7 +103,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
88
103
  currentPage: 1
89
104
  },
90
105
  showLeftView: true,
91
- showRightView: true
106
+ showRightView: true,
107
+ taskScaleList: []
92
108
  });
93
109
  const internalData = createInternalData();
94
110
  const refElem = (0, _vue.ref)();
@@ -154,6 +170,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
154
170
  const computeTaskOpts = (0, _vue.computed)(() => {
155
171
  return Object.assign({}, getConfig().gantt.taskConfig, props.taskConfig);
156
172
  });
173
+ const computeTaskViewScaleMapsOpts = (0, _vue.computed)(() => {
174
+ return _xeUtils.default.merge({}, getConfig().gantt.taskViewScaleConfs, props.taskViewScaleConfs);
175
+ });
157
176
  const computeTaskViewOpts = (0, _vue.computed)(() => {
158
177
  return Object.assign({}, getConfig().gantt.taskViewConfig, props.taskViewConfig);
159
178
  });
@@ -163,6 +182,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
163
182
  const computeTaskSplitOpts = (0, _vue.computed)(() => {
164
183
  return Object.assign({}, getConfig().gantt.taskSplitConfig, props.taskSplitConfig);
165
184
  });
185
+ const computeTaskScaleConfs = (0, _vue.computed)(() => {
186
+ const taskViewOpts = computeTaskViewOpts.value;
187
+ const {
188
+ scales
189
+ } = taskViewOpts;
190
+ return scales;
191
+ });
166
192
  const computeTitleField = (0, _vue.computed)(() => {
167
193
  const taskOpts = computeTaskOpts.value;
168
194
  return taskOpts.titleField || 'title';
@@ -218,7 +244,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
218
244
  stys.maxHeight = maxHeight === 'auto' || maxHeight === '100%' ? '100%' : (0, _dom.toCssUnit)(maxHeight);
219
245
  }
220
246
  }
221
- if (barStyle) {
247
+ if (barStyle && !_xeUtils.default.isFunction(barStyle)) {
222
248
  const {
223
249
  bgColor,
224
250
  completedBgColor
@@ -397,9 +423,11 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
397
423
  computeToolbarOpts,
398
424
  computeZoomOpts,
399
425
  computeTaskOpts,
426
+ computeTaskViewScaleMapsOpts,
400
427
  computeTaskViewOpts,
401
428
  computeTaskBarOpts,
402
429
  computeTaskSplitOpts,
430
+ computeTaskScaleConfs,
403
431
  computeTitleField,
404
432
  computeStartField,
405
433
  computeEndField,
@@ -417,6 +445,47 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
417
445
  getRefMaps: () => refMaps,
418
446
  getComputeMaps: () => computeMaps
419
447
  };
448
+ const handleTaskScaleConfig = () => {
449
+ const taskScaleConfs = computeTaskScaleConfs.value;
450
+ const taskViewScaleMapsOpts = computeTaskViewScaleMapsOpts.value;
451
+ const scaleConfs = [];
452
+ if (taskScaleConfs) {
453
+ const keyMaps = {};
454
+ taskScaleConfs.forEach(conf => {
455
+ const sConf = !conf || _xeUtils.default.isString(conf) ? {
456
+ type: conf
457
+ } : conf;
458
+ const {
459
+ type
460
+ } = sConf;
461
+ if (!type || !viewTypeLevelMaps[type]) {
462
+ (0, _log.errLog)('vxe.error.errProp', [`type=${type}`, _xeUtils.default.keys(viewTypeLevelMaps).join(',')]);
463
+ return;
464
+ }
465
+ if (keyMaps[type]) {
466
+ (0, _log.errLog)('vxe.error.repeatProp', ['type', type]);
467
+ return;
468
+ }
469
+ keyMaps[type] = true;
470
+ scaleConfs.push(Object.assign({}, type ? taskViewScaleMapsOpts[type] || {} : {}, sConf, {
471
+ level: getViewTypeLevel(type)
472
+ }));
473
+ });
474
+ }
475
+ if (!scaleConfs.length) {
476
+ scaleConfs.push({
477
+ type: 'month',
478
+ level: viewTypeLevelMaps.month
479
+ }, {
480
+ type: 'date',
481
+ level: viewTypeLevelMaps.date
482
+ });
483
+ }
484
+ reactData.taskScaleList = _xeUtils.default.orderBy(scaleConfs, {
485
+ field: 'level',
486
+ order: 'desc'
487
+ });
488
+ };
420
489
  const initToolbar = () => {
421
490
  const toolbarOpts = computeToolbarOpts.value;
422
491
  if (props.toolbarConfig && (0, _utils.isEnableConf)(toolbarOpts)) {
@@ -2115,6 +2184,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2115
2184
  (0, _vue.watch)(() => props.proxyConfig, () => {
2116
2185
  initProxy();
2117
2186
  });
2187
+ (0, _vue.watch)(computeTaskScaleConfs, () => {
2188
+ handleTaskScaleConfig();
2189
+ });
2118
2190
  hooks.forEach(options => {
2119
2191
  const {
2120
2192
  setupGantt
@@ -2126,6 +2198,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2126
2198
  }
2127
2199
  }
2128
2200
  });
2201
+ handleTaskScaleConfig();
2129
2202
  initPages();
2130
2203
  (0, _vue.onMounted)(() => {
2131
2204
  (0, _vue.nextTick)(() => {