甘特图(Gantt Chart)是一种经典的项目管理可视化工具,由亨利·甘特(Henry Gantt)于1910年代发明。它以横向条形图的形式,直观展示项目的任务列表、时间跨度和进度状态。
在项目管理中,我们常面临以下挑战:
甘特图通过时间轴 + 条形的组合,将以上信息浓缩在一张图中,让项目经理和团队成员能够一目了然地掌握项目全貌。
| 场景 | 说明 |
|---|---|
| 软件开发 | 需求→设计→开发→测试→部署全生命周期管理 |
| 工程建筑 | 各施工阶段的计划与进度控制 |
| 活动策划 | 活动前各准备工作的时间节点管理 |
| 学习计划 | 课程/考试复习的时间安排 |
| 个人规划 | 日常任务、习惯养成的进度追踪 |
方式一:表格编辑
方式二:弹窗编辑
方式三:拖拽操作
点击顶部的视图按钮切换时间粒度:
| 快捷键 | 功能 |
|---|---|
Ctrl + Z |
撤销上一步操作 |
Ctrl + Y |
重做已撤销的操作 |
在工具栏下方可调整:
本工具基于 Frappe Gantt 开源甘特图库构建,使用 Vue 3 组合式 API 进行封装。
| 层级 | 技术 |
|---|---|
| 甘特图引擎 | Frappe Gantt v1.x(纯 JavaScript / SVG 渲染) |
| 图标 | @phosphor-icons/vue |
| 数据格式 | JSON(导入/导出) |
interface TaskData {
id: string // 唯一标识(数字递增)
name: string // 任务名称
start: string // 开始日期 (YYYY-MM-DD)
end: string // 结束日期 (YYYY-MM-DD)
progress: number // 进度 0-100
dependencies?: string // 依赖任务ID,逗号分隔
color?: string // 条形颜色 (CSS颜色值)
color_progress?: string // 进度条颜色
custom_class?: string // 自定义CSS类名
}
GanttChartPage.vue
├── 工具栏 (视图切换、添加、导入导出等)
├── 甘特图容器 (Frappe Gantt 实例)
├── 任务列表表格 (CRUD 操作)
├── 快捷操作提示 (键盘/鼠标)
└── 添加/编辑任务弹窗 (Modal)
ref 存储,变更时同步到 Gantt 实例undoStack / redoStack),每次变更前保存数组拷贝MutationObserver 监听 data-theme 属性变化const defaultOptions = {
view_mode: 'Day', // 默认视图
language: 'zh-CN', // 中文本地化
popup: customPopupHandler, // 自定义弹窗
move_dependencies: true, // 依赖联动
infinite_padding: true, // 无限滚动
// 事件回调
on_date_change: ...,
on_progress_change: ...,
on_view_change: ...,
}
undoStackundoStack pop,当前数据 push 到 redoStackganttInstance.refresh(tasks) 全量刷新甘特图ganttInstance.update_task(id, changes) 增量更新单个任务[data-theme*='dark'] 覆盖甘特图样式MutationObserver 实时监听主题切换基于 Frappe Gantt 的交互式甘特图工具,支持任务管理、依赖关系、进度追踪与多视图切换
| ID | 名称 | 开始日期 | 结束日期 | 进度 | 依赖 | 颜色 | 操作 |
|---|---|---|---|---|---|---|---|
| 1 | 100% | ||||||
| 2 | 80% | ||||||
| 3 | 30% | ||||||
| 4 | 45% | ||||||
| 5 | 0% | ||||||
| 6 | 0% |
YYYY-MM-DD 格式YYYY-MM-DD HH:mm1,2,3鼠标悬停查看各省份的访问数据统计
所有评论均为匿名发布