任务依赖关系
VTable 甘特图支持任务之间的依赖关系,可以通过连线展示任务之间的前后关系。
依赖类型
支持四种依赖类型,定义在DependencyType枚举中:
- 完成到开始(FinishToStart):前一个任务结束后,下一个任务才能开始
- 开始到开始(StartToStart):两个任务同时开始
- 完成到完成(FinishToFinish):两个任务同时结束
- 开始到完成(StartToFinish):前一个任务开始后,下一个任务才能结束
如下配置一个依赖关系:
// 使用依赖类型 import { DependencyType } from '@visactor/vtable-gantt'; const dependencyLinks = [ { type: DependencyType.FinishToStart, linkedFromTaskKey: 1, linkedToTaskKey: 2 } ]; const ganttOptions = { dependency: { links: dependencyLinks } };
其中linkedFromTaskKey 和 linkedToTaskKey 的值需要对应任务数据中的唯一标识字段,唯一标识的字段名默认为id,如果需要修改可以通过taskKeyField配置项来修改。每个依赖关系可以通过linkLineStyle属性为这条依赖线单独设置样式,比如线条颜色、宽度等,这样可以更好地区分不同类型的依赖关系。
创建依赖
可以通过 API 或者交互添加依赖关系:
- API 方式:
// 添加依赖 gantt.addLink({ type: 'finish_to_start', linkedFromTaskKey: 3, linkedToTaskKey: 4 }); // 删除依赖 gantt.deleteLink({ type: 'finish_to_start', linkedFromTaskKey: 1, linkedToTaskKey: 2 });
- 交互方式:
开启dependency.linkCreatable配置项后,可以通过交互添加依赖关系。

删除依赖
开启dependency.linkDeletable配置项后,可以通过交互删除依赖关系。
做法举例一:
想要通过鼠标右键删除关联线,可以监听CONTEXTMENU_DEPENDENCY_LINK事件,来主动调用接口deleteLink来删除。
做法举例二:
配置快捷键keyboardOptions.deleteLinkOnDel或者keyboardOptions.deleteLinkOnBack来通过按下键盘'del'或者'back'键来删除关联线。
依赖样式配置
样式配置入口:
{
/** 依赖线基本样式 */
linkLineStyle?: ILineStyle;
/** 选中时的样式 */
linkSelectedLineStyle?: ITaskLinkSelectedStyle;
/** 创建关联线的操作点 */
linkCreatePointStyle?: IPointStyle;
/** 创建关联线的操作点响应状态效果 */
linkCreatingPointStyle?: IPointStyle;
/** 创建关联线的操作线样式 */
linkCreatingLineStyle?: ILineStyle;
}
代码举例:
const ganttOptions = { dependency: { // 依赖线基本样式 linkLineStyle: { lineColor: '#8c8c8c', lineWidth: 1, lineDash: [4, 2] }, // 选中时的样式 linkSelectedLineStyle: { lineColor: '#1890ff', lineWidth: 2, shadowBlur: 4, shadowColor: 'rgba(24, 144, 255, 0.5)' }, // 创建点样式 linkCreatePointStyle: { strokeColor: '#8c8c8c', strokeWidth: 1, fillColor: '#fff', radius: 5 }, // 创建中点样式 linkCreatingPointStyle: { strokeColor: '#1890ff', strokeWidth: 2, fillColor: '#fff', radius: 6 }, // 创建中线样式 linkCreatingLineStyle: { lineColor: '#1890ff', lineWidth: 2, lineDash: [4, 2] } } };
除了统一设置依赖线样式外,您还可以为每条依赖线单独配置样式。在 links 数组中,每个 link 对象都可以通过 linkLineStyle 属性来设置该条依赖线的样式。linkLineStyle 的接口类型同为 ILineStyle。
const dependencyLinks = [ { type: DependencyType.FinishToStart, linkedFromTaskKey: 1, linkedToTaskKey: 2, // 这条依赖线的样式 linkLineStyle: { lineColor: 'skyblue', lineWidth: 2, lineDash: [4, 2] } } ]; const ganttOptions = { dependency: { links: dependencyLinks } };
注意事项
如果是树形结构的甘特图,当依赖线的起点或者终点是被折叠起来的子任务时,依赖线会自动隐藏。
不同任务显示模式下,依懒关联线可能有异常,发现可以提 issue 或者排查我们的代码逻辑提 pr 给我们!