Skip to content

Graph API 简介

Graph 是网络图实例的统一入口。外部通常通过 NetworkGraph 创建实例,并通过实例属性、事件和方法操作任务、视图、插件状态。

ts
import { NetworkGraph, ViewMode, ScaleMode } from 'bimcc-network-graph'

const graph = new NetworkGraph({
  container,
  tasks,
  columns,
  viewMode: ViewMode.GanttViewer,
  scaleMode: ScaleMode.Month,
  appKey,
  secretKey,
})

实例属性

属性类型说明
optionsGraphOptions.Definition图实例最终配置,已合并默认值
containerHTMLElement图容器,来自 options.container
modelModel任务、连线、层级等数据模型
viewNetGraphView主视图实例,负责渲染和视图切换
hookHookManager模块创建钩子管理器
tooltipTooltip提示框插件实例
markerMarker标记线插件实例
historyHistoryManager撤销/重做插件实例
clipboardClipboardManager剪贴板插件实例
keyboardKeyboard快捷键插件实例
draggableDraggable拖拽插件实例
mousewheelMouseWheel鼠标滚轮插件实例
toolbarToolbar工具栏插件实例
chatChatAI 聊天组件实例
selectLineLinkType | null当前选中的连线
versionstring[]授权支持的视图版本

配置属性

创建 Graph 时传入的配置会和默认值合并,常用配置如下。

属性类型默认值说明
containerHTMLElement必填图表容器
appKeystring必填授权 appKey
secretKeystring必填授权 secretKey
tasksTask[][]任务树数据
columnsColumn[][]左侧任务表格列配置
viewModeViewMode-当前视图模式
scaleModeScaleMode-时间刻度模式
widthnumber容器宽度图宽度
heightnumber容器高度图高度
sideWidthnumber475左侧任务表格宽度
rowHeightnumber41行高
barHeightnumber30甘特条高度
autoResizebooleantrue容器变化时自动重渲染
editablebooleantrue是否允许编辑
predictbooleantrue是否开启预测能力
hideRightbooleanfalse是否隐藏右侧图形区域
activeId(number | string)[][]当前选中任务 id
scales{ unit: ScaleMode, width: number }[]内置刻度各时间刻度对应列宽
tooltipboolean | object{ enabled: true }提示框配置
markerobject{ enabled: true }标记线配置
historyobject{ enabled: true }撤销/重做配置
clipboardobject{ enabled: true }剪贴板配置
keyboardobject{ enabled: true, global: true }快捷键配置
mousewheelobject{ enabled: true }鼠标滚轮配置
draggableobject{ enabled: false }拖拽配置
toolbarobject{ enabled: true }工具栏配置

事件

Graph 继承事件能力,可使用:

ts
graph.on(name, handler, context?)
graph.trigger(name, ...args)

常用事件:

事件名参数说明
graph:ready{ instance }图表首次渲染或重置后触发
graph:click{ e }图区域点击
graph:dblclick{ e }图区域双击
graph:contextmenu{ e }图区域右键
graph:mousewheel{ e }图区域滚轮
task:clicktaskId任务点击
task:mouseovertaskId任务鼠标移入
task:mouseleave-任务鼠标移出
task:toggletask任务展开/收起
tree:view:scrollflatTaskData, scrollTop图形区滚动,同步左侧表格
cell:added{ prev }任务或连线新增
cell:changed{ prev, next }任务更新
cell:removed{ prev, next }任务或连线删除
batch:start{ name, data }批量操作开始
batch:stop{ name, data }批量操作结束
clipboard:changed{ tasks }剪贴板内容变化
marker:scaledate动态标记线移动到新日期

示例:

ts
graph.on('cell:added', ({ prev }) => {
  console.log('新增数据', prev)
})

graph.on('graph:ready', ({ instance }) => {
  console.log('图表渲染完成', instance)
})

方法

数据操作

方法参数返回说明
addTask(task, taskId = 0)Task, number | stringstring | number在指定任务后新增任务,并重渲染
updateTask(taskId, task)number | string, Taskvoid更新任务,并重渲染
deleteTask(taskId)number | stringvoid删除任务,并重渲染
addLink(link)LinkTypevoid新增连线,并重渲染
deleteLink(link)LinkTypevoid删除连线,并重渲染
upgradeTask()-void升级当前选中任务
degradeTask()-void降级当前选中任务
render()-void手动重渲染当前视图

视图操作

方法参数返回说明
changeGridColumn(columns)Column[]this修改左侧表格列
changeViewMode(viewMode)ViewModethis切换视图模式
changeScaleMode(scaleMode)ScaleModethis切换时间刻度
addForwardLine(date, text = '今天')string, stringthis添加前锋线
removeForwardLine()-void移除前锋线
toggleCriticalPath()-void显示/隐藏关键路径
showGridScrollBar(show)booleanvoid显示/隐藏左侧表格滚动条样式
showHideTaskGrid(show)booleanvoid显示/隐藏左侧任务表格
showHideTaskData(show)booleanvoid显示/隐藏右侧图形区域
changeTreeLevel(data)anyvoid替换任务树数据并重渲染
changeOptions(field, data)string, anyvoid动态修改 options[field]
checkedTargetTask(dataId)[number | string]void设置表格选中任务

Tooltip

方法返回说明
isTooltipEnabled()boolean是否启用提示框
enableTooltip()this启用提示框
disableTooltip()this禁用提示框
toggleTooltip(enabled?)this切换提示框状态

Marker

方法参数返回说明
isMarkerEnabled()-boolean是否启用标记线
enableMarker()-this启用标记线
disableMarker()-this禁用标记线
toggleMarker(enabled?)boolean?this切换标记线状态
getMarker(markerId)stringMarkerIns获取标记线实例
addMarker(options)Marker.OptionsBarstring添加标记线,返回 markerId
updateMarker(markerId, options)string, Marker.OptionsBarvoid更新标记线
hideShowMarkers(markerId)stringvoid显示/隐藏标记线
removeMarker(markerId)stringvoid删除标记线

Marker.OptionsBar

属性类型说明
dateDate标记线日期
textstring标记线文本
colorstring标记线颜色
endDate动态标记线结束日期
intervalnumber动态标记线移动间隔

History

方法参数返回说明
isHistoryEnabled()-boolean是否启用历史记录
enableHistory()-this启用历史记录
disableHistory()-this禁用历史记录
toggleHistory(enabled?)boolean?this切换历史记录状态
undo(options = {})KeyValuethis撤销
undoAndCancel(options = {})KeyValuethis撤销且不进入 redo 栈
redo(options = {})KeyValuethis重做
canUndo()-boolean是否可以撤销
canRedo()-boolean是否可以重做
cleanHistory(options = {})KeyValuevoid清空历史记录

Clipboard

方法参数返回说明
isClipboardEnabled()-boolean是否启用剪贴板
enableClipboard()-this启用剪贴板
disableClipboard()-this禁用剪贴板
toggleClipboard(enabled?)boolean?this切换剪贴板状态
isClipboardEmpty()-boolean剪贴板是否为空
getTasksInClipboard()-Task[]获取剪贴板任务
cleanClipboard()-this清空剪贴板
copy(tasks, options = {})Task[], Clipboard.CopyOptionsthis复制任务
cut(tasks, options = {})Task[], Clipboard.CopyOptionsthis剪切任务
paste(taskId, graph = this, options = {})number | string, Graph, Clipboard.PasteOptionsTask[]粘贴任务

Keyboard

方法参数返回说明
isKeyboardEnabled()-boolean是否启用快捷键
enableKeyboard()-this启用快捷键
disableKeyboard()-this禁用快捷键
toggleKeyboard(enabled?)boolean?this切换快捷键状态
bindKey(keys, callback, action?)string | string[], Keyboard.Handler, Keyboard.Action?this绑定快捷键
unbindKey(keys, action?)string | string[], Keyboard.Action?this解绑快捷键

内置快捷键:

快捷键说明
Delete删除选中任务或连线
Tab任务降级
Shift+Tab任务升级
Ctrl+c复制选中任务
Ctrl+x剪切选中任务
Ctrl+v粘贴任务
Ctrl+z撤销
Ctrl+Shift+z重做

Draggable

方法参数返回说明
isDragEnabled()-boolean是否启用拖拽
enableDrag()-this启用拖拽
disableDrag()-this禁用拖拽
toggleDrag(enabled?)boolean?this切换拖拽状态

简单示例

ts
const id = graph.addTask({
  parent_id: 0,
  name: '新增任务',
  start: new Date(),
  end: new Date(),
  duration: 1,
  progress: 0,
  type: 'task',
  children: [],
})

graph.updateTask(id, {
  name: '更新后的任务',
})

graph.changeViewMode(ViewMode.PdmViewer)
graph.changeScaleMode(ScaleMode.Week)

const markerId = graph.addMarker({
  date: new Date(),
  text: '今日',
  color: '#00B3B2',
})

graph.removeMarker(markerId)

Released under the MIT License.