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.
- package/es/gantt/src/emits.js +3 -1
- package/es/gantt/src/gantt-chart.js +18 -4
- package/es/gantt/src/gantt-header.js +29 -6
- package/es/gantt/src/gantt-view.js +232 -89
- package/es/gantt/src/gantt.js +60 -3
- package/es/gantt/src/util.js +6 -0
- package/es/gantt/style.css +2 -0
- package/es/gantt/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/ui/index.js +6 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-gantt/style.css +2 -0
- package/es/vxe-gantt/style.min.css +1 -1
- package/lib/gantt/src/emits.js +1 -1
- package/lib/gantt/src/emits.min.js +1 -1
- package/lib/gantt/src/gantt-chart.js +24 -4
- package/lib/gantt/src/gantt-chart.min.js +1 -1
- package/lib/gantt/src/gantt-header.js +44 -6
- package/lib/gantt/src/gantt-header.min.js +1 -1
- package/lib/gantt/src/gantt-view.js +255 -99
- package/lib/gantt/src/gantt-view.min.js +1 -1
- package/lib/gantt/src/gantt.js +75 -2
- package/lib/gantt/src/gantt.min.js +1 -1
- package/lib/gantt/src/util.js +7 -0
- package/lib/gantt/src/util.min.js +1 -1
- package/lib/gantt/style/style.css +2 -0
- package/lib/gantt/style/style.min.css +1 -1
- package/lib/index.umd.js +461 -121
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/ui/index.js +6 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-gantt/style/style.css +2 -0
- package/lib/vxe-gantt/style/style.min.css +1 -1
- package/package.json +3 -3
- package/packages/gantt/src/emits.ts +3 -1
- package/packages/gantt/src/gantt-chart.ts +20 -4
- package/packages/gantt/src/gantt-header.ts +30 -7
- package/packages/gantt/src/gantt-view.ts +243 -93
- package/packages/gantt/src/gantt.ts +69 -2
- package/packages/gantt/src/util.ts +7 -0
- package/packages/ui/index.ts +5 -0
- package/styles/components/gantt-module/gantt-chart.scss +2 -0
- 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:
|
|
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
|
|
140
|
+
const minScale = _xeUtils.default.last(taskScaleList);
|
|
145
141
|
const fullCols = [];
|
|
146
142
|
const groupCols = [];
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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',
|
|
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()}});
|
package/lib/gantt/src/gantt.js
CHANGED
|
@@ -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)(() => {
|