vue 甘特图 vxe-gantt 紧前紧后依赖关系连接线配置详解

在项目管理、生产排程、研发计划等场景中,甘特图是展示任务时间线与依赖关系的核心工具。任务依赖关系(即"紧前紧后关系")决定了任务执行的先后顺序,直接影响项目进度的计算与关键路径的识别。

vxe-gantt 作为 Vxe 生态中的专业甘特图组件,提供了四种标准的依赖关系类型,并通过 links 配置轻松绘制任务之间的连接线。本文将详细解读每种依赖类型的含义,并配合完整代码示例,帮助您快速搭建带依赖关系的甘特图。

类型说明

vxe-gantt 通过枚举 VxeGanttDependencyType 定义了四种依赖类型,与项目管理国际标准一致:

类型值 枚举常量 含义 图示说明
0 FinishToStart 完成后开始(FS):前置任务完成后,后续任务才能开始。这是最常见、最严格的依赖关系。 任务A结束 → 任务B开始
1 StartToFinish 开始到完成(SF):前置任务开始后,后续任务才能完成。该类型较少使用,常见于某些特殊工序。 任务A开始 → 任务B结束
2 StartToStart 开始后才开始(SS):前置任务开始后,后续任务才能开始。适用于任务可并行启动的场景。 任务A开始 → 任务B开始
3 FinishToFinish 完成到完成(FF):前置任务完成后,后续任务才能完成。常用于需要同步验收的场景。 任务A结束 → 任务B结束

在配置 links 时,from 表示前置任务(依赖源),to 表示后续任务(依赖目标)。箭头的方向由 from 指向 to。

核心配置解析

vxe-gantt 通过独立的 links 数组来定义所有依赖连线,每条连线包含三个属性:

javascript 复制代码
links: [
  { from: 10001, to: 10002, type: VxeGanttDependencyType.FinishToStart },
  // ...
]
  • from:前置任务的 id(对应 rowConfig.keyField 字段)
  • to:后置任务的 id
  • type:依赖类型(使用枚举值)

组件会自动根据任务的时间范围(start / end)和依赖类型计算连接线的起点与终点,并绘制带箭头的曲线或折线。若依赖关系在时间逻辑上不合理(如 FS 依赖中前置任务结束时间晚于后置任务开始时间),连接线仍会绘制,但会以红色或警告样式提示用户(具体视觉效果取决于主题)。

代码

html 复制代码
<template>
  <div>
    <vxe-gantt v-bind="ganttOptions"></vxe-gantt>
  </div>
</template>

<script setup>
import { reactive } from 'vue'
import { VxeGanttDependencyType } from 'vxe-gantt'

const ganttOptions = reactive({
  border: true,
  height: 600,
  rowConfig: {
    keyField: 'id' // 行主键
  },
  taskBarConfig: {
    showProgress: true, // 是否显示进度条
    showContent: true, // 是否在任务条显示内容
    moveable: true, // 是否允许拖拽任务移动日期
    resizable: true, // 是否允许拖拽任务调整日期
    barStyle: {
      round: true, // 圆角
      bgColor: '#fca60b', // 任务条的背景颜色
      completedBgColor: '#65c16f' // 已完成部分任务条的背景颜色
    }
  },
  taskViewConfig: {
    tableStyle: {
      width: 480 // 表格宽度
    }
  },
  links: [
    { from: 10001, to: 10002, type: VxeGanttDependencyType.FinishToFinish },
    { from: 10004, to: 10005, type: VxeGanttDependencyType.StartToStart },
    { from: 10005, to: 10006, type: VxeGanttDependencyType.FinishToStart },
    { from: 10013, to: 10012, type: VxeGanttDependencyType.StartToFinish }
  ],
  columns: [
    { type: 'seq', width: 70 },
    { field: 'title', title: '任务名称' },
    { field: 'start', title: '开始时间', width: 100 },
    { field: 'end', title: '结束时间', width: 100 },
    { field: 'progress', title: '进度(%)', width: 80 }
  ],
  data: [
    { id: 10001, title: '任务1', start: '2024-03-01', end: '2024-03-04', progress: 3 },
    { id: 10002, title: '任务2', start: '2024-03-03', end: '2024-03-08', progress: 10 },
    { id: 10003, title: '任务3', start: '2024-03-03', end: '2024-03-11', progress: 90 },
    { id: 10004, title: '任务4', start: '2024-03-05', end: '2024-03-11', progress: 15 },
    { id: 10005, title: '任务5', start: '2024-03-08', end: '2024-03-15', progress: 100 },
    { id: 10006, title: '任务6', start: '2024-03-10', end: '2024-03-21', progress: 5 },
    { id: 10007, title: '任务7', start: '2024-03-15', end: '2024-03-24', progress: 70 },
    { id: 10008, title: '任务8', start: '2024-03-05', end: '2024-03-15', progress: 50 },
    { id: 10009, title: '任务9', start: '2024-03-19', end: '2024-03-20', progress: 5 },
    { id: 10010, title: '任务10', start: '2024-03-12', end: '2024-03-20', progress: 10 },
    { id: 10011, title: '任务11', start: '2024-03-01', end: '2024-03-08', progress: 90 },
    { id: 10012, title: '任务12', start: '2024-03-03', end: '2024-03-06', progress: 60 },
    { id: 10013, title: '任务13', start: '2024-03-02', end: '2024-03-05', progress: 50 },
    { id: 10014, title: '任务14', start: '2024-03-04', end: '2024-03-15', progress: 0 },
    { id: 10015, title: '任务15', start: '2024-03-01', end: '2024-03-05', progress: 30 }
  ]
})
</script>

注意事项与最佳实践

  • 数据一致性
    • links 中的 from / to 值必须在 data 中存在,否则该连线会被忽略或报错。
    • 任务的 start / end 日期格式需与组件默认解析格式一致(示例中为 'YYYY-MM-DD',也可通过 format 配置自定义)。
  • 性能考量
    • 当任务数超过 100 且依赖关系密集时,连接线数量激增(最多可达 N*(N-1)/2 条),可能影响渲染性能。建议仅配置必要的依赖关系,并开启虚拟滚动(scrollY)优化长列表。

vxe-gantt 通过简洁的 links 配置完美支持了项目管理中四种标准的任务依赖类型(FS、SF、SS、FF),并自动绘制连接线,极大降低了甘特图开发的复杂度。配合丰富的交互配置(拖拽、调整、进度展示),可快速构建专业级的项目计划工具。

若您需要更复杂的依赖规则(如滞后/提前量、日历例外),可结合组件的事件监听与自定义计算实现。

https://gantt.vxeui.com

相关推荐
杉氧6 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
一_个前端6 小时前
[JS] 一站式搞定 PDF、图片、Dom弹窗、表格的浏览器打印功能
前端
JavaGuide6 小时前
阿里 Qoder 又开源了一个专门给 Claude Code、Codex 做“体检”的项目
前端·后端
三小河6 小时前
RAG、LLM Wiki、本体(Ontology)到底是个啥?
前端·人工智能·后端
Bs_MoneyMagnet6 小时前
基于springboot+vue的爱心众筹系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·管理系统
大模型码小白7 小时前
数据可视化:AI 生成 HTML5 动态交互式数据图表
前端·数据库·人工智能·深度学习·机器学习·信息可视化·html5
八荒启·交互动画7 小时前
Web特效01—什么是渲染
前端·javascript·网页特效·八荒启-交互动画
小肥君7 小时前
前端测试websocket
前端·websocket·状态模式
南京兴帝文化传媒有限公司7 小时前
基于地图平台的本地商户信息优化:药店夜间服务标注与客户转化实操
前端·javascript·数据库·人工智能·geo 优化·geo优化避坑·ai搜索获客
八荒启·交互动画7 小时前
Web特效04——GPUvs CPU,为什么图形计算要交给GPU,什么是“并行计算”
前端