业务甘特图
甘特图介绍
前置说明
业务甘特图会在 DHTMLX Gantt 的基础上进行二次开发,因此在使用业务甘特图之前,需要先查看业务甘特图的开发手册。
DHTMLX Gantt 开发手册:https://docs.dhtmlx.com/gantt/desktop__guides.html
同时业务甘特图会透传出所有的 DHTMLX Gantt 的 API。
集成思路

实现思路
📌 思路说明
🔔 业务甘特图实现的思路还是延续 PM 项目集成 WBS 的思路,业务甘特图、甘特图查看器、甘特图编辑器(WBS 编辑器)。
业务甘特图的侧重点:
- 共用属性和方法集成
- 事件拦截处理(业务调度,推算等方面)
- 内置业务逻辑集成
- 其他处理(行内编辑支持、业务组件渲染、多语言、主题等)
- 资源负荷和项目日历组件内部集成
特别说明:
资源负荷组件和项目日历组件属于前置依赖组件,其他它们和 WBS 编辑器的辅助组件是同等地位的。 但是由于其特殊的业务场景作用域,导致其等级提升到和业务甘特图组件、甘特图查看器、编辑器组件同一级别。资源负荷、项目日历组件不单单给 WBS 使用,其还单独支持资源负荷、全局日历模块。
基本使用
loading
数据格式
数据格式说明
业务甘特图的数据格式和 DHTMLX Gantt 的数据格式是一致的,但是在使用业务甘特图的时候,需要参考下图所示的数据格式 数据格式主要包括两大部分,列相关数据和甘特图相关数据。
- 甘特图数据:
javascript
{
data: [
{...} // [!code hl] // 参考下图DATA部分
],
links: [
{...} // [!code hl] // 参考下图Links部分
],
}- 列数据:
javascript
[
{...} // [!code hl] // 参考下图Columns部分
]下图中蓝色背景的为 DHTMLX GANTT 需要的字段,具体可以看看 DHTMLX 官网说明。

综合示例
业务甘特图是我们基于 DHTMLX Gantt 进行的二次开发,主要是为了满足项目管理业务的需求,项目如果有其他个性化业务场景,推荐安装@crami/gantt 进行开发。
注意
由于时间和进度问题,部分文档描述和部分参数格式描述未详细列出,请自行参考项目工程 Dome
API
HBBaseGantt 属性
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| durationUnitdat | 工期单位,支持'minute', 'day' | String | 'minute' |
| hoursPerDay | 每日工时 | Number | |
| calendars | 日历信息 | Array | [] |
| getProjectCalendar | 调用日历查询的方法 | Function | {} |
| columns | 列数据 | Array | [] |
| queryDataFlag | 重新查询重置筛选条件标志 | Boolean | false |
| data | 甘特图数据 | Object | {} |
| readonly | 是否开启只读 | Boolean | false |
| renderFlag | 是否开始第三方渲染 | Boolean | true |
| enableLoadingFlag | 是否开始 loading | Boolean | true |
| columnAddFlag | 是否显示列添加 | Boolean | true |
| selectedFalg | 是否显示选择(暂不支持) | Boolean | false |
| enableChartGridSwitch | 是否开启 grid 和 chart 切换 | Boolean | true |
| workTime | 是否开启工作时间 | Boolean | true |
| showWorkTimeClass | 显示显示非工作日样式 | Boolean | true |
| todayLine | 是否显示今天 | Boolean | true |
| progressCalculate | 是否进行进度计算 | Boolean | false |
| statusCalculate | 是否进行状态计算 | Boolean | false |
| complateCalculate | 进度 100%是否参与调度 | Boolean | true |
| dragProgress | 是否开启拖拽进度 | Boolean | false |
| autoShowProgress | 是否开启自适应显示进度 | Boolean | true |
| autoShowProgressWithZoom | 自适应显示进度层级 | Number | 2 |
| autoSchedule | 是否开始自动调度 | Boolean | true |
| orderBranch | 是否支持拖拽升降级,默认不支持 | Boolean | false |
| gridDateFormat | 是否开启时间格式化 | Boolean | true |
| reorderGridColumn | 是否开始列拖拽 | Boolean | true |
| defaultZoom | 默认视图显示的层级 | String | 'week' |
| skipOffTime | 是否跳过非工作时间 | Boolean | false |
| showBaseLine | 是否开启基线对别 | Boolean | true |
| undoSteps | 撤回的步数 | Number | 60 |
| roundDndDate | 是否开启拖拽到分钟 | Boolean | false |
| correctWorkTime | 开始是否靠近到最近的工作时间 | Boolean | true |
| autoTypes | 是否开启任务自适应类型 | Boolean | true |
| isSingleProject | 是开启单项目限制 | Boolean | true |
| columnsReactiveFlag | 列数据是否支持响应性 | Boolean | false |
| outdentInSituFlag | 是否开始任务原地升级 | Boolean | true |
| scrollOnClick | 选中任务时是否自动滚动到可视区域 | Boolean | true |
| rangeDynamically | 是否开启时间范围自动调节 | Boolean | true |
| baseLineRightText | 是否开启图表区域右侧文字显示 | Boolean | true |
| ignoreMilestone | 是否过滤掉里程碑的渲染 | Boolean | true |
| enableProjectStartEndDate | 是否设置项目开始、结束时间 | Boolean | true |
| enableFilter | 是否开启筛选 | Boolean | false |
| enableDecompose | 是否开启分解模式 | Boolean | false |
| showTooltip | 是否开始 tooltip 显示 | Boolean | true |
| setViewPort | 是否开始 tooltip 显示层级限制 | Boolean | true |
| showLinkTooltip | 是否开始关联关系的 tooltip 显示 | Boolean | true |
| tempSaveCalendar | 是否开启日历操作临时保存(暂不支持) | Boolean | false |
| isSingleProject | 是否是单项目限制 | Boolean | true |
| forwardProjectStartDate | Boolean | false | |
| copyDataKeepLevel | 复制数据是否保存层级 | Boolean | true |
| resizeRow | 是否支持行放缩 | Boolean | false |
| barHeight | 任务横条高度 | Boolean | 20 |
| differenceWbsData | 是否开启差异化数据挑选 wbs 值 | Boolean | true |
| globalCalendar | 日历使用 api 返回是否设置于全局日历 | Boolean | false |
| columnsLocale | 列数据多语言(将会废弃) | Boolean | false |
| cutToPastePosition | 往目标节点上兄弟节点还是子节点进行粘贴 | Boolean | true |
| toolbar | 是否开始右下方工具栏 | Boolean | false |
| limitZoomInLevel | 放大层级限制 | Boolean | 0 |
| chartBoxSelection | 开启快速框选 | Boolean | true |
| showEmptyState | 开启暂无数据操作(暂时先不放开) | Boolean | false |
| dynamicTextPosition | 是否开启文字显示位置动态调整 | Boolean | false |
| scheduleProjectConstraint | 是否开启调度父任务限制类型 | Boolean | false |
| showStartEndDateLine | 是否显示开始结束时间线 | Boolean | false |
| fineTuning | 是否开启微调计划限制 | Boolean | false |
| bizType | 新增数据或者关联关系的 id 生成的业务规则 | Boolean | '1' |
| highlightDragPosition | 是否显示 chart 拖拽高亮 | Boolean | true |
| showDragVertical | 纵向高亮辅助 | Boolean | true |
| showDragHorizontal | 横向高亮辅助 | Boolean | false |
| calendarUrl | 内部日历的查询和保存接口(将会废弃) | Boolean | {} |
| scaleHeight | 优先级要小于视图的切换(天、月、周等) | Boolean | 50 |
| rowHeight | 设置行高 | Number | 35 |
| enablePasteLoadingTotal | 粘贴数据是开始 loading 显示的条数 | Number | 30 |
| queryKeepLevel | 编辑器保存之后的查询是否按原先层级显示 | Boolean | false |
| gridElasticColumns | 可以解决 char bar 拖动,列宽度自动变化的问题 | Boolean | true |
| autoOpenLevel | 是否根据数据量自动调整展开层级 | Boolean | false |
| enableMilestoneBgColor | 是否开启里程碑任务背景色显示 | Boolean | true |
| enableColumnResizeTooltip | 是否开启列宽度调整提示框 | Boolean | true |
| defaultHideChart | 是否默认隐藏 chart 图 | Boolean | false |
| showPrevDate | 是否往前拖动时显示前边日期 | Boolean | false |
| showProjectEndMarker | 是否显示项目结束时间 marker | Boolean | true |
| separateProjectStart | 项目开始时间是否和根任务开始时间分离 | Boolean | true |
| outsideTimeScaleDay | 任务时间外范围区域多显示天数 | number | 7 |
HBBaseGantt 方法
| 方法名称 | 说明 | 类型 | 版本 |
|---|---|---|---|
| getBaseGanttId | 获取 gantt 图 id | () => any | |
| getBaseGanttInstance | 获取 gantt 实例 | () => any | |
| refreshBaseGanttData | 刷新 gantt 数据 | () => void | |
| getBaseGanttConfig | 获取 gantt 图配置 config | () => any | |
| setBaseGanttConfig | 设置 gantt 图配置 config | (config) => void | |
| getBaseGanttColumns | 获取 gantt 图列信息 | () => any | |
| batchSetBaseGanttColumns | 设置 antt 图列信息(根据传入的数据) | (columns) => void | |
| appendBaseGanttColumns | 追加 gantt 图列信息 | (columnItem, positionIndex) => void | |
| deleteBaseGanttColumns | 删除 gantt 图指定列 | (columnName) => void | |
| deleteAllBaseGanttColumns | 删除 gantt 图所有列 | () => void | |
| updateBaseGanttColumns | 更新 gantt 图指定列 | (columnItem) => void | |
| getBaseGanttSelectedIds | 获取 gantt 图选中的数据 id | () => any | |
| getBaseGanttSelectedRows | 获取 gantt 图选中的数据对象 | () => any | |
| setBaseGanttColumnsDisplay | 设置列显示隐藏 | (columnsArray) => void | |
| hideBaseGanttChart | 隐藏 chart | () => void | |
| hideBaseGanttGrid | 隐藏 grid | () => void | |
| showBaseGanttChartGrid | 显示 chart 和 grid | () => void | |
| taskIndentAndOutdent | 任务升降级 | (type) => void | |
| getDifferenceData | 生成差异化数据 | () => any | |
| checkDifferenceData | 检查差异化数据 | () => boolean | |
| toggleCriticalPath | 显示关键路径 | (flag) => void | |
| switchBaseGanttBaseLine | 切换基线显示 | () => void | |
| setBaseGanttBaseLine | 设置基线对比相关功能 | (flag, overText, overUnit) => void | |
| collapseBaseGanttLevel | 收起到指定层级 | (level) => void | |
| expandBaseGanttLevel | 展开到指定层级 | (level) => void | |
| setBaseGanttContextMenu | 设置右键菜单 | (contextMenu, callback?) => void | |
| setBaseGanttProjectStart | 设置项目开始时间 | (startDate, flag) => void | |
| setBaseGanttProjectEnd | 设置项目结束时间 | (endDate) => void | |
| setBaseGanttZoom | 设置显示层级 | (zoom) => void | |
| addRelationTaskLink | 添加任务之间的关联关系 | (selectedArray) => void | |
| deleteRelationTaskLink | 删除任务之间的关联关系 | (selectedArray) => void | |
| queryBaseGanttData | 重新请求查询数据 | (queryData?, queryCanledar?, queryLoadingTitle?) => Promise | |
| switchBaseGanttTodayLine | 显示今日时间线 | (flag?) => void | |
| queryProjectCalendar | 请求项目日历信息 | () => Promise | |
| openProjectCalendar | 打开项目日历 | () => void | |
| enableBaseGanttLoading | 手动开启 loadin 显示 | (tipTitle) => void | |
| closeBaseGanttLoading | 手动关闭 loading 显示 | () => void | |
| filterBaseGanttTask | 本地过滤任务 | (filter: ConditionsType[]) => void | |
| customTaskTooltipContent | 自定义任务 tooltil 显示的内容 | (tooltipArray, format?) => void | |
| freezeBaseGanttColumns | 设置冻结列 | (index: number) => void | |
| copyOrCutBaseGanttData | 复制或者剪切 gantt 数据 | (action) => void | |
| pasteBaseGanttData | 粘贴 gantt 图数据 | () => void | |
| openBaseGanttAbout | 关于 gantt 图的信息 | () => void | |
| exportBaseGanttPNG | 导出 png | () => void | |
| exportBaseGanttPDF | 导出 pdf | () => void | |
| exportBaseGanttExcel | 导出 excel | () => void | |
| exportBaseGanttMSProject | 导出 ms project | () => void | |
| setBaseGanttData | 手动设置 gantt 数据 | (data) => void | |
| updateBaseGanttData | 更新保存之后的数据 | (data) => void | |
| deleteSelectedTask | 删除用户选中的数据 | (data) => void |
说法说明
业务甘特图现阶段总共提供了 81 个方法,👀️ 开发者需要关心的是上方提供的 👀️,全部方法如下:
javascript
[
getBaseGanttId,
getBaseGanttInstance,
renderBaseGantt,
refreshBaseGanttData,
getBaseGanttConfig,
setBaseGanttConfig,
setLocalization,
getBaseGanttColumns,
setBaseGanttUndoAndRedo,
updateBaseGanttColumns,
batchSetBaseGanttColumns,
resetBaseGanttColumns,
appendBaseGanttColumns,
deleteBaseGanttColumns,
deleteAllBaseGanttColumns,
handleSelectAllRows,
getBaseGanttSelectedIds,
getBaseGanttSelectedRows,
setBaseGanttColumnsDisplay,
hideBaseGanttChart,
hideBaseGanttGrid,
showBaseGanttChartGrid,
switchBaseGanttTodayLine,
toggleCriticalPath,
expandBaseGanttLevel,
collapseBaseGanttLevel,
setBaseGanttContextMenu,
improveInlineEditor,
freezeBaseGanttColumns,
removeCustomFreezeStyleRules,
formatGridDateColumns,
setBaseGanttEmptyState,
setNoWorkTimeClass,
setBaseGanttSubTaskCSS,
setBaseGanttMilestoneCSS,
highlightDragPosition,
dynamicTaskTextPosition,
initBaseGanttZoomConfig,
setBaseGanttZoom,
baseGanttZoomIn,
baseGanttZoomOut,
chartBoxSelectionCallback,
repairMousemoveGantt,
exportBaseGanttPNG,
exportBaseGanttPDF,
exportBaseGanttExcel,
exportBaseGanttMSProject,
enableBaseGanttLoading,
closeBaseGanttLoading,
openBaseGanttAbout,
setBaseGanttBaseLine,
switchBaseGanttBaseLine,
openProjectCalendar,
filterBaseGanttTask,
updateProjectCalendar,
dateRangeDynamically,
adjustSubTaskConstraint,
setBaseGanttProjectStart,
setBaseGanttProjectEnd,
setProjectStartAndEndDate,
customTaskTooltipContent,
customLinkTooltipContent,
autoAdjustProjectStartEndDate,
deleteSelectedTask,
addRelationTaskLink,
deleteFSRelationTaskLink,
deleteRelationTaskLink,
baseGanttProgressConfig,
calculateSummaryProgress,
refreshSummaryProgress,
taskIndentAndOutdent,
baseGanttTaskIndent,
baseGanttTaskOutdent,
baseGanttTaskOutdentInSitu,
copyOrCutBaseGanttData,
pasteBaseGanttData,
monitorRedoUndoEvent,
enableFilterDecompose,
getDifferenceData,
checkDifferenceData,
resetDifferenceData,
];HBBaseGantt 事件
| 方法名称 | 说明 | 回调类型 | 版本 |
|---|---|---|---|
| autoSaveBaseGanttData | 数据保存之后之后的自动回调 | () => void | |
| switchMenuMask | 是否开启操作栏的遮罩(防止点击) | (spinning) => void |