关键路径
此功能仅在 PRO 版本中可用
关键路径表示一组无法推迟的任务 ,否则将会延误整个项目的完成时间。
它还定义了完成项目所需的最短工期。
当任务的浮动时间(Slack)为零时,该任务被视为关键任务,也就是说,该任务的任何延迟都会直接影响项目的完成日期。关于关键路径的计算方式,详见关键路径逻辑部分。
浮动时间指的是一个任务可以延迟的时间,而不会影响后续任务或整个项目的截止日期。

要开始使用此扩展,请通过 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 在以下情况下将任务标记为关键任务:
- 该任务在整个图表中具有最晚的结束日期。

- 该任务与一个无延迟的关键任务相连。
延迟(Lag)取决于 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 参数,并且任务日期超出了该日期。
目前,内置的关键路径逻辑无法更改。 不过,你可以自定义关键路径行为。
检查任务是否为关键任务
要判断任务是否为关键任务,请使用 isCriticalTask 方法:
gantt.config.highlight_critical_path = true; /*!*/
gantt.init("gantt_here");
gantt.parse(tasks);
gantt.isCriticalTask(gantt.getTask("task3"));// ->'true' /*!*/