关于 syncfusion-javascript-gantt-chart
syncfusion-javascript-gantt-chart 是帮助 JavaScript/TypeScript 项目实现 Syncfusion Essential JS 2 甘特图组件的技能,适合开发项目排期界面的开发者。内容涵盖数据绑定、任务调度、资源、依赖关系和导出等配置。
主要功能
- 01甘特图安装与初始化
- 02本地及远程数据绑定
- 03任务排期与日历配置
- 04依赖关系和关键路径
- 05资源视图与分配
- 06Excel 和 PDF 导出
适用场景
- 01在 JavaScript 项目中搭建项目排期图
- 02配置任务依赖和工作日历
- 03按资源查看并分配任务
- 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.mdbaseline.mdcalendar-settings.mdcolumn-operations.mdcolumns.mdcontext-menu.mdcritical-path.mddata-binding.mddata-markers.mdevent-markers.mdevents.mdexcel-export.mdfiltering.mdgantt-methods.mdgetting-started.mdglobal-local.mdholidays.mdimmutable.mdlabels.mdloading-animation.mdmanaging-tasks.mdmulti-taskbar.mdpdf-export.mdresource-view.mdresources.mdrows-drag-drop.mdrows.mdscrolling.mdselection.mdsorting.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;未列出的日期使用dayWorkingTimeworkWeek——指定工作日(默认值:周一至周五);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