甘特图日期粒度
甘特图的日期粒度决定了时间轴的显示方式和任务条的布局。VTable提供了多种日期粒度选项,包括:
- 'day' 按天显示
- 'week' 按周显示
- 'month' 按月显示
- 'quarter' 按季度显示
- 'year' 按年显示
- 'hour' 按小时显示
- 'minute' 按分钟显示
- 'second' 按秒显示
配置
可以通过timeLineHeader.scales配置项来设置日期粒度。可以设置多层,每层可以设置不同的日期粒度。
const ganttOptions = {
timeLineHeader: {
scales: [
{ type: 'day', label: '日' },
{ type: 'week', label: '周' },
{ type: 'month', label: '月' },
],
},
};
内部时间粒度处理
时间粒度顺序
配置多层时间粒度后,vtable-gantt会默认将时间粒度从大到小依次显示。 如下示例中配置了多层scales:
scales: [
{
unit: 'week',
step: 1,
startOfWeek: 'sunday',
format(date) {
return `Week ${date.dateIndex}`;
},
style: {
textStick:true,
fontSize: 20,
fontWeight: 'bold',
color: 'red',
}
},
{
unit: 'day',
step: 1,
format(date) {
return `Day ${date.dateIndex}`;
},
style: {
textStick:true,
fontSize: 20,
fontWeight: 'bold',
color: 'blue'
}
},
{
unit: 'month',
step: 1,
format(date) {
return `Month ${date.dateIndex}`;
},
style: {
textStick:true,
fontSize: 20,
fontWeight: 'bold',
color: 'green'
}
},
{
unit: 'quarter',
step: 1,
startOfWeek: 'sunday',
format(date) {
return `Quarter ${date.dateIndex}`;
},
style: {
textStick:true,
fontSize: 20,
fontWeight: 'bold',
color: 'red',
}
},
{
unit: 'hour',
step: 1,
style: {
fontSize: 16,
color: 'green'
}
},
]
最终展示效果一定是粒度最小的在底部,粒度最大的在顶部。这个规则符合人类阅读习惯。

时间粒度完整性
日期表头中最底层一级是最小的时间粒度,且一定是完整的。
这个完整的意思通过下面两个图来解释:

上面中我们将最小时间粒度设置为day,可以看到日期表头中最底层一级的最左边的日期是和option中minDate一致的,为‘2024-07-17’。
下面我们将最小时间粒度设置为week,可以看到日期表头中最底层一级的最左边的日期应该为2024-07-15,因为2024-07-15是2024-07-17所在周的开始日期。

这个日期不是按照minDate来的,而是按照startOfWeek来的。目前VTable-Gantt的规则是:
- 如果最小时间粒度为
day,则日期表头中最底层一级的最左边的日期是和option中minDate一致的。 - 如果最小时间粒度为
week,则日期表头中最底层一级的最左边的日期是和option中minDate所在周的开始日期一致的。 - 如果最小时间粒度为
month,则日期表头中最底层一级的最左边的日期是和option中minDate所在月的开始日期一致的。 - 如果最小时间粒度为
quarter,则日期表头中最底层一级的最左边的日期是和option中minDate所在季度的开始日期一致的。 - 如果最小时间粒度为
year,则日期表头中最底层一级的最左边的日期是和option中minDate所在年的开始日期一致的。 - 如果最小时间粒度为
hour,则日期表头中最底层一级的最左边的日期是和option中minDate所在小时的开始日期一致的。 - 如果最小时间粒度为
minute,则日期表头中最底层一级的最左边的日期是和option中minDate所在分钟的开始日期一致的。 - 如果最小时间粒度为
second,则日期表头中最底层一级的最左边的日期是和option中minDate所在秒的开始日期一致的。
相关接口
updateScales:更新时间粒度配置updateDateRange:更新日期范围
敬请期待
zoomIn和zoomOut功能,可以放大和缩小时间粒度。