在 VueGantt 中使用 DHTMLX Gantt 属性
本页记录对 @dhtmlx/trial-vue-gantt 与 @dhx/vue-gantt 的公开 Vue 包装层的文档。
可在 Overview 或 Quick Start 之后,用作参考。
可用属性
| Prop | Type | 描述 |
|---|---|---|
| tasks | Task[] | 在图表/网格中呈现的任务集合。 |
| links | Link[] | 依赖项集合。 |
| resources | any[] | null | 用于资源布局和资源相关 API 方法的资源数据集。 |
| resourceAssignments | any[] | null | 资源分配数据集。 |
| baselines | any[] | null | 基线数据集。 |
| markers | Marker[] | null | 纵向时间线标记。 |
| calendars | (WrapperCalendar | CalendarConfig)[] | null | 工作日历定义(包装器格式或原生 Gantt 配置)。 |
| data | VueGanttDataConfig | null | 数据传输回调:load、save、batchSave。 |
| config | Partial<GanttConfigOptions> | 合并至 gantt.config。 |
| plugins | GanttPlugins | Gantt 扩展 以激活(例如 auto_scheduling)。 |
| templates | Partial<GanttTemplates> | 合并至 gantt.templates。 |
| locale | string | Record<string, any> | 本地化名称或本地化对象。 |
| theme | string | 皮肤名称。 |
| filter | ((task: Task) => boolean) | null | 任务筛选谓词。 |
| resourceFilter | ((resource: any) => boolean) | null | 资源筛选谓词。 |
| modals | GanttModals | null | 覆盖内置的删除确认对话框。 |
| groupTasks | any | 传递给 gantt.groupBy 的分组配置。 |
| inlineEditors | Record<string, Component> | 将内联编辑器类型名称映射到 Vue 组件。 |
| customLightbox | Component | null | 自定义 Vue 任务编辑组件。 |
| events | VueGanttEvents | 事件名到处理程序的映射。 |
| htmlTemplatePolicy | HtmlTemplatePolicy | 控制模板函数返回的字符串值如何呈现。 "basic-sanitize"(默认)对返回的 HTML 进行白名单式清理:保留安全格式、类、受限的行内样式、data-* 属性和 img,移除脚本、事件处理程序和危险 URL。"escape" 将字符串渲染为文本;"unsafe-html" 将原始字符串渲染(v10 之前的行为);一个自定义消毒器对象(mode: "sanitize",并提供 sanitize(html) 函数)可让你接入诸如 DOMPurify 之类的库。若要对每个模板进行单独控制,请使用导出的 allowRawHTML() 助手对单独的模板函数进行包裹。另请参阅 Migration notes。 |
数据集合与同步
当 Vue 状态为您的数据源时,请使用这些属性:
tasks、links- 可选的高级数据集:
resources、resourceAssignments、baselines
<VueGantt
:tasks="tasks"
:links="links"
:resources="resources"
:resourceAssignments="resourceAssignments"
:baselines="baselines"
/>
同步行为要点:
- 任务/链接更新通常基于差异 diff
- 对于大规模变更,包装器可以切换为重置/重新解析
- 高级数据集通过其数据存储重新解析
关于模型选择和回调策略,请参见 数据绑定与状态管理基础。
配置、模板、插件、主题、语言环境
使用这些属性进行日常的图表设置,而无需使用命令式 API 调用。
<script setup lang="ts">
// ...
const config = {
scales: [
{ unit: "year", step: 1, format: "%Y" },
{ unit: "month", step: 1, format: "%F" }
],
columns: [
{ name: "text", tree: true, width: "*" },
{ name: "start_date", align: "center" },
{ name: "duration", align: "center" },
{ name: "add", width: 44 }
]
};
const templates = {
task_text: (_start, _end, task) => `#${task.id}: ${task.text}`
};
</script>
<template>
<VueGantt
:config="config"
:templates="templates"
:plugins="{ auto_scheduling: true }"
theme="terrace"
locale="en"
/>
</template>
事件、生命周期 与 实例访问
events
使用一个 events 映射,而不是为每个 Gantt 事件单独定义包装器属性:
const events = {
onTaskCreated: task => {
console.log(task);
return true;
},
onBeforeLightbox: id => {
console.log(id);
return true;
}
};
该映射的类型为 VueGanttEvents。包装器公开以下已知事件及其完整类型签名;任何其他 Gantt 事件名称也被接受(自定义事件类型为字符串键)。
| 事件 | 签名 | 备注 |
|---|---|---|
onBeforeLightbox | (taskId: string | number) => boolean | void | 返回 false 以抑制内置光箱(例如跳转到外部编辑器)。 |
onTaskCreated | (task: Task) => boolean | void | 返回 false 以取消任务创建。 |
onAfterTaskAdd | (id: string | number, task: Task) => void | 任务添加后触发。 |
onAfterTaskUpdate | (id: string | number, task: Task) => void | 任务更新后触发。 |
onAfterTaskDelete | (id: string | number, task: Task) => void | 任务删除后触发。 |
onAfterLinkAdd | (id: string | number, link: Link) => void | 依赖链接添加后触发。 |
onAfterLinkUpdate | (id: string | number, link: Link) => void | 依赖链接更新后触发。 |
onAfterLinkDelete | (id: string | number, link: Link) => void | 依赖链接删除后触发。 |
如需查看完整的 Gantt 事件列表(包括上面未列出的事件),请参阅 Gantt 事件总览。使用 defineGanttEvents(...) 以在这些已知事件上实现自动完成的映射。
@ready
ready(instance) 在初始化完成并完成首次同步后触发一次:
<VueGantt :events="events" @ready="onReady" />
通过组件引用访问 instance
import { ref } from "vue";
import type { VueGanttRef } from "@dhtmlx/trial-vue-gantt";
const ganttRef = ref<VueGanttRef | null>(null);
function showToday() {
ganttRef.value?.instance?.showDate(new Date());
}
这用于通过属性不可行的高级操作。