mcpField
S
syncfusion-javascript-gantt-chart

syncfusion-javascript-gantt-chart

github.com/syncfusion开发070 次安装1 周前更新
代码仓库

关于 syncfusion-javascript-gantt-chart

syncfusion-javascript-gantt-chart 是帮助 JavaScript/TypeScript 项目实现 Syncfusion Essential JS 2 甘特图组件的技能,适合开发项目排期界面的开发者。内容涵盖数据绑定、任务调度、资源、依赖关系和导出等配置。

主要功能

  1. 01甘特图安装与初始化
  2. 02本地及远程数据绑定
  3. 03任务排期与日历配置
  4. 04依赖关系和关键路径
  5. 05资源视图与分配
  6. 06Excel 和 PDF 导出

适用场景

  1. 01在 JavaScript 项目中搭建项目排期图
  2. 02配置任务依赖和工作日历
  3. 03按资源查看并分配任务
  4. 04导出甘特图数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/javascript-ui-controls-skills --skill syncfusion-javascript-gantt-chart

安装后在 Claude Code 中输入/syncfusion-javascript-gantt-chart确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
accessibility.md
baseline.md
calendar-settings.md
column-operations.md
columns.md
context-menu.md
critical-path.md
data-binding.md
data-markers.md
event-markers.md
events.md
excel-export.md
filtering.md
gantt-methods.md
getting-started.md
global-local.md
holidays.md
immutable.md
labels.md
loading-animation.md
managing-tasks.md
multi-taskbar.md
pdf-export.md
resource-view.md
resources.md
rows-drag-drop.md
rows.md
scrolling.md
selection.md
sorting.md

详细介绍

实现 Syncfusion Gantt Chart

一套全面的技能,用于在 JavaScript/TypeScript 项目中实现 Syncfusion Essential JS 2 Gantt Chart 组件。内容涵盖从初始设置到关键路径、资源管理、虚拟滚动和导出等高级功能。

何时使用此技能

当用户需要以下操作时,请使用此技能:

  • 从头开始设置 Syncfusion Gantt Chart(安装、依赖项、基本初始化)
  • 绑定数据(本地层级数据、扁平/自引用数据、远程 DataManager、按需加载)
  • 配置任务排程(自动/手动/自定义模式、周/月时长单位、里程碑、约束、daysPerWeek/daysPerMonth)
  • 配置日历(项目日历、任务日历、工作时间、节假日、例外、hoursPerDay)
  • 定义列(自定义列、模板、冻结列、WBS、序号列、复选框、响应式)
  • 管理资源(分配资源、资源视图、多任务条、工作/任务类型)
  • 配置时间线(顶部/底部层级、缩放、格式)
  • 启用编辑(单元格、对话框、拖动/调整任务条大小、绘制任务条以创建未排程任务、依赖项编辑、缩进/取消缩进)
  • 在 Gantt 网格中实现筛选、排序和搜索
  • 显示任务依赖项(FS、SS、FF、SF、偏移量,通过 allowedDependencyTypes 限制依赖项类型、连接线)
  • 配置选择(行、单元格、复选框选择,以及用于父子传播的 hierarchyCheckboxMode)
  • 显示关键路径、基线、事件标记、节假日、数据标记、标签
  • 导出到 Excel 或 PDF
  • 实现工具栏、上下文菜单、撤销/重做
  • 处理事件、状态持久化、本地化、RTL、时区
  • 优化性能(虚拟滚动、不可变模式、加载动画)

快速开始

import { Gantt, Edit, Filter, Sort, Toolbar } from '@syncfusion/ej2-gantt';

Gantt.Inject(Edit, Filter, Sort, Toolbar);

let gantt: Gantt = new Gantt({
    dataSource: [
        {
            TaskID: 1, TaskName: 'Project Initiation',
            StartDate: new Date('04/02/2024'), EndDate: new Date('04/21/2024'),
            subtasks: [
                { TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2024'), Duration: 4, Progress: 50 },
                { TaskID: 3, TaskName: 'Soil test approval', StartDate: new Date('04/02/2024'), Duration: 4, Predecessor: '2FS', Progress: 50 }
            ]
        }
    ],
    height: '450px',
    taskFields: { id: 'TaskID', name: 'TaskName', startDate: 'StartDate', endDate: 'EndDate', duration: 'Duration', progress: 'Progress', dependency: 'Predecessor', child: 'subtasks' },
    toolbar: ['Add', 'Edit', 'Delete', 'Update', 'Cancel', 'ExpandAll', 'CollapseAll', 'Search'],
    editSettings: { allowAdding: true, allowEditing: true, allowDeleting: true, allowTaskbarEditing: true },
    allowSorting: true,
    allowFiltering: true
});
gantt.appendTo('#Gantt');

导航指南

设置与安装

📄 阅读: references/getting-started.md

  • npm 安装、webpack 设置
  • 基本 Gantt 初始化(app.ts + index.html)
  • taskFields 映射、模块注入
  • 使用 actionFailure 处理错误
数据绑定

📄 阅读: references/data-binding.md

  • 本地层级数据和自引用(扁平)数据
  • 远程数据(DataManager、WebApiAdaptor、UrlAdaptor)
  • 按需加载子项
  • Ajax 绑定、拆分任务(片段)
任务排程

📄 阅读: references/task-scheduling.md

  • taskMode:'Auto'(默认)/'Manual'/'Custom'——控制日期验证行为
  • Auto:父任务条根据子任务的最早/最晚日期生成;依赖项会自动调整后续任务
  • Manual:用户控制所有日期;不重新计算;validateManualTasksOnLinking: true 仅启用基于前置任务的验证
  • Custom:通过数据源中的 taskFields.manual 布尔字段为每个任务单独设置排程方式
  • 未排程任务:allowUnscheduledTasks: true——允许只有开始日期、只有结束日期、只有时长或完全没有日期的任务;如果为 false,则默认从 projectStartDate 开始,时长为 1
  • 时长单位:durationUnit(项目范围:'Day'/'Hour'/'Minute'/'Week'/'Month');可通过 taskFields.durationUnit 字段或内联字符串('4hours'、'30min'、'2weeks'、'1month')为每个任务单独设置
  • 周和月时长单位:daysPerWeek(默认值:5)、daysPerMonth(默认值:20)——用于将周/月转换为天的换算系数
  • 里程碑:Duration: 0 会显示为菱形
  • projectStartDate / projectEndDate——限定图表范围;若省略则自动计算
  • dayWorkingTime——定义工作时间范围(默认值:8–12 和 13–17);用于自动排程计算
  • weekWorkingTime——按星期几定义工作时间;会覆盖所列日期的 dayWorkingTime;未列出的日期使用 dayWorkingTime
  • workWeek——指定工作日(默认值:周一至周五);includeWeekend: true 会将周六/周日设为工作日
  • highlightWeekends: true——在图表中以阴影显示非工作日
任务约束

📄 阅读: references/task-constraints.md

  • 约束类型:ASAP(0)、ALAP(1)、MSO(2)、MFO(3)、SNET(4)、SNLT(5)、FNET(6)、FNLT(7)
  • taskFields 中 constraintType 和 constraintDate 字段的映射
  • 优势:强制执行任务顺序、锚定里程碑、防止资源冲突
  • 通过 actionBegin(requestType: 'validateTaskViolation')处理约束违规
  • validateMode 标志:respectMustStartOn、respectMustFinishOn、respectStartNoLaterThan、respectFinishNoLaterThan
  • 约束与 taskMode(Auto / Manual / Custom)的交互
  • 通过对话框编辑器或以编程方式(updateRecordByID)编辑约束
任务依赖关系

📄 阅读: references/task-dependency.md

  • FS、SS、FF、SF 类型,支持滞后/超前偏移(单位为天/小时/分钟)
  • allowParentDependency、多前置任务(以逗号分隔)
  • 连接线自定义(connectorLineWidth、connectorLineBackground)
  • addPredecessor / removePredecessor / updatePredecessor 方法
  • 通过 actionBegin 设置验证模式(respectLink、removeLink、preserveLinkWithEditing)
  • 所有模式均禁用时显示验证对话框
  • autoUpdatePredecessorOffset — 在初始加载时根据日历规则同步偏移
  • updateOffsetOnTaskbarEdit: false — 拖动任务栏时保留偏移
  • 通过 .e-gantt-dependency-view-container 动态显示/隐藏依赖线
  • enablePredecessorValidation: false — 绘制连线但不强制执行排程
  • allowedDependencyTypes — 限制允许的依赖类型(FS/SS/FF/SF)
日历设置

📄 阅读: references/calendar-settings.md

  • calendarSettings(projectCalendar、taskCalendar)
  • 项目日历:workingTime、holidays、exceptions
  • 任务日历:通过 taskFields.calendarId 分配自定义日历
  • 日历行为对任务排程、工期、依赖关系的影响
  • hoursPerDay — 每个显示日的工作小时数(默认值:8)
  • workWeek、includeWeekend 用于配置工作日
  • 日历与依赖关系、资源、任务编辑、任务栏编辑的交互
  • 限制、最佳实践和日历示例
关键路径

📄 阅读: references/critical-path.md

  • enableCriticalPath 属性
  • 时差计算(零时差/负时差)
  • 可视化突出显示和 CPM 原则
基线

📄 阅读: references/baseline.md

  • renderBaseline、baselineColor
  • baselineStartDate、baselineEndDate、baselineDuration
  • 基线里程碑、CSS 自定义
  • 通过 queryTaskbarInfo 事件自定义(例如渐变样式)
  • 使用 baselineTemplate 自定义 HTML 结构,包括渲染多个基线
  • 对父行(hasChildRecords)从模板返回空字符串
资源

📄 阅读: references/resources.md

  • resourceFields 映射、resources 集合
  • 为任务分配资源、资源单位
  • 资源超额分配、资源模板
  • 使用自定义列模板和 queryTaskbarInfo 设置每个资源的徽标及任务栏颜色
资源视图

📄 阅读: references/resource-view.md

  • viewType: 'ResourceView'
  • showOverAllocation
  • 资源分组和显示
  • 未分配的任务会自动归入底部的分组
  • 在资源之间拖放任务栏(allowTaskbarDragAndDrop + RowDD 模块)
资源多任务栏

📄 阅读: references/multi-taskbar.md

  • 为折叠的资源行启用 enableMultiTaskbar
  • 重叠任务的可视化
  • 在折叠状态下编辑任务
工时与任务类型

📄 阅读: references/work.md

  • taskFields.work 映射、workUnit(Hour/Day/Minute)
  • FixedWork、FixedDuration、FixedUnit 任务类型
列

📄 阅读: references/columns.md

  • columns 数组定义、treeColumnIndex
  • 序号列:enableSerialNumber,field: 'SerialNumber' — 自动生成连续行号,并在排序、筛选、分页、拖放时重新计算
  • 复选框列、响应式列
  • 列跨越、列模板
  • WBS 列(enableWBS、enableAutoWbsUpdate)
列操作

📄 阅读: references/column-operations.md

  • 列宽调整(allowResizing、Resize 模块)
  • 列重新排序(allowReordering、Reorder 模块)
  • 列菜单(showColumnMenu)
  • 冻结/固定列(frozenColumns)
时间线

📄 阅读: references/timeline.md

  • topTier / bottomTier 单位和格式
  • timelineSettings 配置
  • 自定义时间线格式、时间线工具提示
  • 使用 enableInfiniteTimelineScroll 无限滚动时间线
缩放

📄 阅读: references/timeline.md

  • ZoomIn、ZoomOut、ZoomToFit 工具栏项
  • zoomingLevels 配置
  • 通过编程方式控制缩放
排序

📄 阅读: references/sorting.md

  • allowSorting: true + 注入 Sort 模块
  • 单击表头进行排序;Ctrl+单击进行多列排序;Shift+单击从多列排序中移除列
  • 通过 sortSettings.columns 数组(field + direction)设置初始排序
  • 通过编程方式排序:gantt.sortModule.sortColumn(field, direction, isMultiSort);清除所有排序:gantt.clearSorting()
  • 排序事件:actionBegin / actionComplete,其中 args.requestType === 'sorting'
  • 禁用特定列的排序:columns.allowSorting: false
  • 可通过 sortSettings 或编程方式对自定义列(字符串/数值)排序
  • 触控操作:轻触表头进行排序;在触控设备上会弹出多列排序菜单
筛选

📄 阅读: references/filtering.md

  • allowFiltering、Filter 模块
  • 菜单筛选和类似 Excel 的筛选
  • 列级筛选、搜索
选择

📄 阅读: references/selection.md

  • allowSelection: false 禁用所有选择操作;需要 Selection 模块
  • selectionSettings.mode:'Row'(默认)/ 'Cell' / 'Both'
  • selectionSettings.type:'Single'(默认)/ 'Multiple'(Ctrl+单击进行多选)
  • selectionSettings.enableToggle: true — 再次单击已选中的项目可取消选择
  • 复选框选择:添加 type: 'checkbox' 列;支持层次结构数据
  • hierarchyCheckboxMode:'Self' / 'Hierarchy'(默认)/ 'FilteredHierarchy' — 控制复选框选择在父子层次结构中的传播方式
  • enableHover: true — 悬停时高亮行、任务栏、表头单元格和时间线单元格
  • 行选择:使用 selectedRowIndex 设置初始加载时的选中行;使用 selectRow(index) / selectRows([indexes]) 动态选择
  • 阻止行选择:使用 rowSelecting 事件并设置 args.cancel = true;使用 rowDeselecting 阻止取消选择
  • 单元格选择:mode: 'Cell';使用 selectCell({ rowIndex, cellIndex }) 动态选择;getSelectedRowCellIndexes() 返回 { cellIndexes, rowIndex }[]
  • 阻止单元格选择:使用 cellSelecting 事件并设置 args.cancel = true;之后触发 cellSelected
  • 在 dataBound 中通过 gantt.treeGrid.grid.dataSource + gantt.selectRows(indexes) 按条件选择行
  • getSelectedRowIndexes() → number[];getSelectedRecords() → object[]
  • gantt.clearSelection() — 清除所有选中的行和单元格
  • 触控操作:轻触以选择一行;轻触弹出菜单进入多行选择模式,然后轻触其他行
  • enableVirtualization 不支持单元格选择
行

📄 阅读: references/rows.md

  • 通过 rowDataBound 事件、CSS(.e-altrow、.e-selectionbackground)和 treeGrid 方法自定义行样式
  • 在 rowDataBound 中使用 hasChildRecords 为父行和子行设置不同样式
  • autoFocusTasks — 点击行时将图表滚动到任务栏
  • rowHeight — 统一行高;通过 rowDataBound 中的 args.rowHeight 设置单行高度
  • 通过 dataBound + mouseover + Tooltip,为行悬停添加自定义操作
  • 通过 gantt.addRecord(data, position, index) 以编程方式添加行 — Top/Bottom/Above/Below/Child
  • 通过 treeGrid.getRowByIndex() + CSS display 切换动态显示/隐藏行
  • 通过 queryCellInfo 中的 args.rowSpan 合并行(与 colSpan 结合可实现二维合并)
行拖放、缩进和取消缩进

📄 阅读: references/rows-drag-drop.md

  • RowDD 模块、allowRowDragAndDrop — 在甘特图中拖动行
  • 放置位置:上方(上边框)、下方(下边框)、子级(两个边框)
  • 在 load 事件中,通过 treeGrid.rowDropSettings.targetID 将行拖动到外部组件
  • 通过 selectionSettings.type: 'Multiple' 实现多行拖动
  • allowTaskbarDragAndDrop — 拖动任务栏以重新排序行
  • 通过 gantt.reorderRows(fromIndexes, toIndex, position) 以编程方式重新排序
  • 拖动生命周期事件:rowDragStartHelper、rowDragStart、rowDrag、rowDrop
  • 使用 dropPosition === 'middleSegment' + reorderRows,阻止放置到子级位置
  • 缩进/取消缩进工具栏项以及 gantt.indent() / gantt.outdent() 方法
  • 以编程方式缩进/取消缩进:先调用 selectRow(i),再调用 indent()/outdent()
  • 通过 actionComplete 检测缩进/取消缩进(args.requestType === 'indented'/'outdented')
管理任务(编辑)

📄 阅读: references/managing-tasks.md

  • editSettings(allowAdding、allowEditing、allowDeleting、allowTaskbarEditing)
  • 单元格 / 对话框 / 任务栏编辑模式
  • 添加、删除、缩进/取消缩进以及拖放行
  • 服务端 CRUD、拆分/合并任务、验证
绘制任务栏(通过绘制创建任务)

📄 阅读: references/taskbar-draw.md

  • 在 editSettings 中设置 allowTaskbarDraw: true — 启用在时间线中绘制任务栏,以创建或安排未排程的任务
  • 工作流:识别未排程的任务 → 在时间线上单击并拖动 → 甘特图自动计算 StartDate、EndDate、Duration
  • 遵循工作时间、节假日、周末、任务日历、约束和依赖关系
  • 适用于完全未排程、部分已排程(仅开始日期、仅持续时间)以及已排程的任务场景
  • 父任务(无法直接绘制)、子任务(可以绘制;父任务会自动调整)、里程碑任务(duration = 0)
  • 与其他功能的交互:任务栏编辑、对话框/单元格编辑、依赖关系、排程模式、资源分配
  • 前提条件:注入 Edit 模块、启用 allowTaskbarEditing 和 allowUnscheduledTasks、配置主键
  • 在自动/手动/自定义排程模式下的行为以及依赖关系验证
  • 事件:taskbarEditing(阻止绘制)、actionComplete(绘制后的操作)
  • 边缘情况(在项目开始日期前绘制、绘制重叠、最短持续时间)和最佳实践
撤销 / 重做

📄 阅读: references/undo-redo.md

  • 注入 UndoRedo 模块,设置 enableUndoRedo 属性
  • undoRedoActions — 配置要跟踪的操作(Edit、Delete、Add、Sorting、Filtering、ZoomIn/Out、ColumnReorder、ColumnResize、Indent、Outdent、RowDragAndDrop、TaskbarDragAndDrop、ColumnState、PreviousTimeSpan、NextTimeSpan)
  • undoRedoStepsCount — 限制历史记录深度(默认值:10;0 = 禁用)
  • 用于通过 UI 导航历史记录的工具栏 Undo/Redo 项
  • 以编程方式控制:undo() 和 redo() 方法
  • 获取历史记录:getUndoActions() / getRedoActions()
  • 重置历史记录:clearUndoCollection() / clearRedoCollection()
工具栏

📄 阅读: references/toolbar.md

  • 内置工具栏项参考(Add、Edit、Delete、Update、Cancel、Search、ExpandAll、CollapseAll、Indent、Outdent、PrevTimeSpan、NextTimeSpan、ZoomIn、ZoomOut、ZoomToFit、Undo、Redo)
  • 通过 toolbarClick 和 args.cancel = true 覆盖内置工具栏行为
  • 仅显示图标 — 使用 CSS(.e-tbar-btn-text)隐藏文本标签
  • 使用 CSS 类选择器自定义工具栏按钮外观
  • 使用 created 事件 + DOM 操作将工具栏移至底部
  • 使用 ItemModel 自定义工具栏项(text、id、prefixIcon、align)
  • 在同一工具栏数组中混合内置项和自定义项
  • 通过 gantt.toolbarModule.enableItems() 动态启用/禁用工具栏项
  • 使用 type: 'Input' 和 template 将输入组件(AutoComplete、DropDownList)添加到工具栏
上下文菜单

📄 阅读: references/context-menu.md

  • enableContextMenu、ContextMenu 模块
  • 默认和自定义上下文菜单项
事件标记

📄 阅读: references/event-markers.md

  • DayMarkers 模块、eventMarkers 数组
  • day、label、cssClass 属性
节假日

📄 阅读: references/holidays.md

  • DayMarkers 模块、holidays 数组
  • from、to、label、cssClass 属性
数据标记(指示器)

📄 阅读: references/data-markers.md

  • taskFields.indicators 映射
  • 每个指示器的 date、iconClass、name、tooltip
任务标签

📄 阅读: references/labels.md

  • labelSettings:leftLabel、rightLabel、taskLabel
  • 基于字段和基于模板的标签
任务栏自定义

📄 阅读: references/taskbar.md

  • taskbarHeight、rowHeight
  • taskbarTemplate、parentTaskbarTemplate、milestoneTemplate
  • 用于动态样式设置的 queryTaskbarInfo 事件
滚动

📄 阅读: references/scrolling.md

  • scrollToDate 方法、滚动设置
  • 水平和垂直滚动控制
虚拟滚动

📄 阅读: references/virtual-scroll.md

  • 注入 VirtualScroll 模块,使用 enableVirtualization 启用行虚拟化
  • enableTimelineVirtualization — 按需渲染水平时间线(初始渲染 3 倍视口宽度)
  • 使用虚拟滚动获取筛选后的记录数:actionComplete + gantt.treeGrid.filterModule.filteredResult
  • 在 created 事件中通过 gantt.flatData.length 获取数据集总数
  • 限制:高度必须以像素为单位;资源视图中不支持多任务栏;不会保留单元格选择状态
分隔器

📄 阅读: references/splitter.md

  • splitterSettings(position、columnIndex、view)
  • setSplitterPosition 方法、视图模式
状态持久化

📄 阅读: references/state-persistence.md

  • enablePersistence — 在 localStorage 中保存筛选、排序和列状态
  • localStorage 键格式:"gantt" + 元素 ID(例如 "ganttGantt")
  • 通过 window.localStorage.getItem / setItem 获取/设置持久化状态
  • 在 dataBound 中覆盖 addOnPersist,以阻止特定键持久化
  • 默认不持久化:列模板、格式化器、headerText、headerTemplate、值访问器
  • 使用 getPersistData() + Object.assign + gantt.treeGrid.setProperties() 恢复标头模板和标头文本
不可变模式

📄 阅读: references/immutable.md

  • 使用 enableImmutableMode 提升性能
  • 何时使用不可变模式
时区

📄 阅读: references/timezone.md

  • timezone 属性(UTC、IANA 时区)
  • 确保不同地区的时间显示一致
全球化与本地化

📄 阅读: references/global-local.md

  • 本地化:L10n.load({ 'de-DE': { gantt: { ... } } }) + 在甘特图实例上设置 locale: 'de-DE'
  • 按类别整理的完整区域设置键表:任务字段/列、对话框/选项卡、工具栏/操作、上下文菜单/依赖项、标签/时间线、前置任务验证消息(taskBeforePredecessor_FS 等)
  • 相较旧版参考新增的键:resourceID、writeNotes、task、tasks、saveButton、okText、from/to、taskLink、lag、start/finish、enterValue、above/below/child、milestone、toTask/toMilestone、eventMarkers、leftTaskLabel、rightTaskLabel、timelineCell、confirmPredecessorDelete、changeScheduleMode、subTasksStartDate/subTasksEndDate、scheduleStartDate/scheduleEndDate、unit、work、taskType、group
  • 国际化:使用 loadCldr(cagregorian, numbers) + setCulture() 实现符合区域设置的日期/数字格式;CLDR 数据来自 @syncfusion/ej2-cldr-data
  • RTL:enableRtl: true + 匹配的区域设置(例如 'ar-AE')——反转文本方向和整个布局
  • 默认区域设置为 'en-US'
Excel 导出

📄 阅读: references/excel-export.md

  • ExcelExport 模块、allowExcelExport、工具栏项:ExcelExport、CsvExport
  • excelExport() / csvExport() 方法,导出为 blob(第 4 个参数 isBlob)
  • 自定义数据源覆盖(ExcelExportProperties 中的 dataSource)
  • fileName、includeHiddenColumn、exportType
  • 导出时显示/隐藏列(使用 toolbarClick + excelExportComplete 进行恢复)
  • 单元格格式设置(excelQueryCellInfo + args.style.backColor)
  • 主题(标题/记录字体名称和颜色)、带超链接和样式的页眉/页脚行
  • 导出多个甘特图:AppendToSheet(同一工作表,blankRows)和 NewSheet 模式
PDF 导出

📄 阅读: references/pdf-export.md

  • PdfExport 模块、allowPdfExport、工具栏项
  • fileName、pageOrientation、pageSize、exportType、includeHiddenColumn、showPredecessorLines
  • 导出当前视图数据,导出时导出/隐藏列
  • 适应页面宽度(isFitToWidth、chartWidth、gridWidth),导出为 blob
  • 页眉/页脚:Text、Image、Line、PageNumber 内容类型;enableFooter
  • 将多个甘特图导出到单个 PDF,在 PDF 导出中显示指示器
  • 条件单元格格式设置(pdfQueryCellInfo + PdfColor)
  • 时间线单元格格式设置(pdfQueryTimelineCellInfo)
  • 任务栏格式设置 + 拆分任务栏片段颜色(taskSegmentStyles)
  • ganttStyle:完整外观覆盖(columnHeader、cell、taskbar、timeline、label、eventMarker、holiday)
  • 使用列模板(图像/超链接)、任务栏模板、标签模板、页眉模板导出
  • 使用 pdfColumnHeaderQueryCellInfo 导出页眉模板
加载动画

📄 阅读: references/loading-animation.md

  • loadingIndicator.indicatorType:'Shimmer' | 'Spinner'
  • 虚拟滚动下的 Shimmer
无障碍

📄 阅读: references/accessibility.md

  • 符合 WCAG 2.1 AA 级标准
  • 键盘导航(网格、工具栏、上下文菜单快捷键)
  • ARIA 角色和属性(treegrid、row、gridcell、columnheader、dialog)
  • 高对比度主题(highcontrast.css)
  • 屏幕阅读器支持(NVDA、JAWS、VoiceOver)——可自定义 taskbarAriaLabel
  • 焦点管理和 autoFocusTasks
编程方法

📄 阅读: references/gantt-methods.md

  • 列: autoFitColumns(field?)、getGanttColumns()、getGridColumns()、refreshColumns()、reorderColumns(from, to)、removeSortColumn(field)
  • 行/记录查找: getRecordByID(id)、getTaskByUniqueID(uid)、getRowByID(id)、getRowByIndex(index)、getTaskInfo(taskId)、getCurrentViewData()、getExpandedRecords(records)
  • 行重排: reorderRows(fromIndexes, toIndex, position) — 通过 position:'above' | 'below' | 'middleSegment' 以编程方式移动行;需要 allowRowDragAndDrop + RowDD
  • 展开/折叠: expandByIndex(index | index[])、expandByID(id)、collapseByIndex(index)、collapseByID(id)
  • 编辑/CRUD: cancelEdit()、deleteRecord(taskDetail)、updateRecordByIndex(index, data)、updateRecordByID({TaskID, ...})、updateTaskId(currentId, newId)、changeTaskMode(data)、convertToMilestone(id)、openAddDialog(data?, position?)、openEditDialog(id)
  • 依赖关系: removePredecessor(id) — 移除任务的所有依赖关系
  • 拆分/合并: splitTask(taskId, splitDate | splitDate[])、mergeTask(taskId, segmentIndexes) — 需要 allowTaskbarEditing;父任务/里程碑不能拆分
  • 选择: selectCells(rowCellIndexes) — 按 { rowIndex, cellIndexes[] } 对选择单元格;需要 mode: 'Cell'
  • 滚动: scrollToTask(taskId)、setScrollTop(px)、updateChartScrollOffset(left, top)
  • 数据: updateDataSource(dataSource, { projectStartDate, projectEndDate })、updateProjectDates(projectStartDate, projectEndDate) — 刷新时间线范围,而不替换数据
  • 关键路径: getCriticalTasks() → IGanttData[];需要 enableCriticalPath + CriticalPath 模块
  • 撤销/重做: getUndoActions()、getRedoActions()、clearUndoCollection()、clearRedoCollection() — 需要 enableUndoRedo + UndoRedo 模块
  • 工具栏: enableItems(itemIds, enable) — 在运行时启用/禁用工具栏项;项 ID 遵循 {ganttElementId}_{itemText} 格式(例如,Gantt_add);需要 Toolbar 模块
  • 格式化辅助方法: getDurationString(value, unit)、getWorkString(value, unit)、getTaskbarHeight()
  • 所有方法都直接使用 Gantt 实例:gantt.methodName(args)(TypeScript/JavaScript)
事件

📄 阅读: references/events.md

  • actionBegin — 在任何操作(添加/编辑/删除/排序/筛选/依赖项/缩放)前触发;支持 args.cancel;参数类型因操作而异(ITaskAddedEventArgs、ITimeSpanEventArgs、FilterEventArgs、SortEventArgs、IDependencyEventArgs、ZoomEventArgs)
  • actionComplete — 操作完成后触发;根据 args.requestType(filtering、sorting、save、delete、AfterZoomIn/Out/ToProject)进行判断
  • actionFailure — 操作失败时触发;通过 args.error[0] 获取错误详情
  • cellEdit — 网格单元格进入编辑模式时触发;设置 args.cancel = true 可阻止编辑;参数:cancel、cell、columnName、columnObject、row、rowData、value、validationRules
  • beforeTooltipRender — 工具提示(任务栏/连接线/时间线)渲染前触发;可覆盖 args.content 或设置 args.cancel = true
  • beforeExcelExport / beforePdfExport — 导出前触发;设置 args.cancel = true 可中止导出;isCsv 标志用于区分 Excel 和 CSV
  • 单元格选择事件(需要 selectionSettings.mode: 'Cell' 或 'Both'):cellSelecting(可通过 cancel 阻止)、cellSelected、cellDeselecting、cellDeselected — CellSelectEventArgs(cellIndex、cells、currentCell、data、previousRowCell)和 CellDeselectEventArgs(cellIndexes、cells、data)
  • 行选择事件:rowSelecting、rowSelected、rowDeselecting、rowDeselected — cancel、data、rowIndex、isCtrlPressed、isShiftPressed
  • 列拖动事件(需要 allowReordering: true 和 Reorder 模块):columnDragStart、columnDrag、columnDrop — ColumnDragEventArgs(column、target、draggableType)
  • 列菜单事件(需要 showColumnMenu: true 和 ColumnMenu 模块):columnMenuOpen(ColumnMenuOpenEventArgs:cancel、column、element、items、left、top、parentItem)、columnMenuClick(ColumnMenuClickEventArgs:name、column、element、item)
  • contextMenuClick — 需要 ContextMenu 模块和 contextMenuItems;参数:name、element、event、item(id/text)、type、rowData
  • 导出完成事件:excelExportComplete / pdfExportComplete — 通过 args.promise.then((e) => e.blobData) 获取 blob
  • requestType 参考表:beforeSave、beforeDelete、taskbarEditing、filtering、sorting、各类 zoom、save、delete、validateDependency、updateDependency

评论

支持 Markdown