任务条样式
VTable甘特图提供了丰富的任务条样式配置选项,可以自定义任务条的外观。
基础样式
可以通过taskBar.barStyle配置来设置普通任务的样式,通过taskBar.projectStyle配置项目任务的样式,通过taskBar.milestoneStyle配置里程碑的样式:
const ganttOptions = {
taskBar: {
barStyle: {
barColor: '#1890ff', // 任务条的颜色
completedBarColor: '#52c41a', // 已完成部分的颜色
borderColor: '#096dd9', // 边框颜色
borderLineWidth: 1, // 边框宽度
cornerRadius: 3 // 圆角半径
},
projectStyle: {
barColor: '#722ed1', // 项目任务条的颜色
completedBarColor: '#eb2f96', // 已完成部分的颜色
borderColor: '#531dab', // 边框颜色
borderLineWidth: 1, // 边框宽度
cornerRadius: 0 // 圆角半径
},
milestoneStyle: {
fillColor: '#fa8c16', // 里程碑填充颜色
borderColor: '#d46b08', // 里程碑 边框颜色
borderLineWidth: 1, // 边框宽度
width: 12, // 里程碑大小
cornerRadius: 0, // 圆角半径
textOrient: 'right' // 文本位置
}
}
};
也可以通过函数根据任务属性动态设置样式:
const ganttOptions = {
taskBar: {
barStyle: (args) => {
const { taskRecord, progress } = args;
// 根据进度设置不同颜色
if (progress > 0.8) {
return {
barColor: '#52c41a',
completedBarColor: '#389e0d'
};
} else if (progress > 0.3) {
return {
barColor: '#1890ff',
completedBarColor: '#096dd9'
};
} else {
return {
barColor: '#fa8c16',
completedBarColor: '#d46b08'
};
}
}
}
};
选中状态
可以通过taskBar.selectedBarStyle配置任务条选中时的样式:
const ganttOptions = {
taskBar: {
selectable: true, // 允许选择任务条
selectedBarStyle: {
shadowBlur: 6, // 阴影模糊半径
shadowColor: 'rgba(0,0,0,0.3)', // 阴影颜色
shadowOffsetX: 2, // 阴影X偏移
shadowOffsetY: 2, // 阴影Y偏移
borderColor: '#ff4d4f', // 选中时的边框颜色
borderLineWidth: 2 // 选中时的边框宽度
}
}
};
悬停状态
可以通过taskBar.hoverBarStyle配置任务条悬停时的样式:
const ganttOptions = {
taskBar: {
hoverBarStyle: {
cornerRadius: 4, // 悬停时的圆角半径
barOverlayColor: 'rgba(24, 144, 255, 0.1)' // 悬停时的覆盖色
}
}
};
自定义布局
对于更复杂的自定义需求,可以通过taskBar.customLayout完全控制任务条的渲染:
const ganttOptions = {
taskBar: {
customLayout: (args) => {
const { width, height, taskRecord, progress, ganttInstance } = args;
// 创建自定义任务条
const rootContainer = new Group();
// 添加自定义图形
const background = createRect({
x: 0,
y: 0,
width,
height,
fill: taskRecord.color || '#1890ff',
radius: 4
});
rootContainer.appendChild(background);
// 添加进度条
if (progress > 0) {
const progressBar = createRect({
x: 0,
y: 0,
width: width * progress,
height,
fill: '#52c41a',
radius: [4, 0, 0, 4]
});
rootContainer.appendChild(progressBar);
}
// 添加自定义文本
const text = createText({
x: width / 2,
y: height / 2,
text: taskRecord.text,
fontSize: 12,
fill: '#fff',
textAlign: 'center',
textBaseline: 'middle'
});
rootContainer.appendChild(text);
return {
rootContainer,
renderDefaultBar: false,
renderDefaultText: false,
renderDefaultResizeIcon: false
};
}
}
};
网格线样式
可以调整到教程甘特图网格线