关键路径
此功能仅在 PRO 版中可用
关键路径是一系列不能被推迟的任务。否则,整个项目将被推迟。
关键路径也决定了项目可以花费的最短时间。
如果一个任务没有缓冲时间(slack),并且任何延迟都会直接影响项目完成日期,则该任务被视为关键任务。关于关键路径计算逻辑的详细解释,请参阅 Critical path logic 部分。
缓冲时间是一个任务在不影响其他任务或项目完成日期的情况下可以延迟的时间。

要开始使用此扩展,请通过 gantt.plugins 方法启用它。
要在甘特图中显示关键路径,请将 highlight_critical_path 属性设置为 'true':
(使甘特图显示关键路径)
<!DOCTYPE html>
<html>
<head>
<script src="codebase/dhtmlxgantt.js"></script>
<link href="codebase/dhtmlxgantt.css" rel="stylesheet">
</head>
<body>
gantt.plugins({ /*!*/
critical_path: true /*!*/
}); /*!*/
gantt.config.highlight_critical_path = true;
//your code will be here
</body>
</html>
请注意,当该属性启用时,dhtmlxGantt 将自动检查任务状态并更新关键路径。 关键任务和链接将分别具有额外的 'critical_task' 和 'critical_link' CSS 类。
每当某个任务被修改,dhtmlxGantt 将完全重新绘制数据以重新计算关键路径。 有时这会带来性能问题。针对这种情况,组件提供了公共方法,允许您检查 某个特定任务或链接,并实现一个对性能更友好的显示关键路径的策略。
关键路径逻辑
Gantt 在以下情况下将任务视为关键任务:
- 该任务在整个图表中具有最新的结束日期。

- 该任务连接到一个关键任务,且它们之间的滞后为 0。
滞后取决于 gantt.config.duration_unit 参数的值。当 duration_unit 被设置为 'day' 且任务之间的时长为数小时时,Gantt 按以下规则对时长进行四舍五入:
- 如果时长大于或等于 12 小时,则向下取整
- 如果时长少于 12 小时,则向上取整
如果链接对象包含 lag 参数,则它允许改变任务之间的时长。例如,当 lag 设置为 1 时,任务在任务之间时长为 1 时变为关键路径。
下面是不同 link.lag 值的一些示例:
- link.lag 为 0
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": 0, "type": "0" },
]
}

- link.lag 为 1
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": 1, "type": "0" },
]
}

- link.lag 为 -1
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": -1, "type": "0" },
]
}

- 指定了 gantt.config.project_end 参数且任务日期大于 gantt.config.project_end 日期。
不幸的是,无法更改定义关键路径的内置逻辑。 但你可以 customize the critical path behaviour。
检查某个任务是否为关键任务
要检查某个任务是否为关键任务,请使用 isCriticalTask 方法:
gantt.config.highlight_critical_path = true; /*!*/
gantt.init("gantt_here");
gantt.parse(tasks);
gantt.isCriticalTask(gantt.getTask("task3"));// ->'true' /*!*/
检查某个链接是否为关键链接
要检查某个链接是否为关键链接(连接了两个关键任务),请使用 isCriticalLink 方法:
gantt.isCriticalLink(gantt.getLink("link1"));