大家好,这次使用的是AntV的蚂蚁数据可视化X6框架,类似于审批流的场景等,代码如下:
X6框架参考网址:https://x6.antv.vision/zh/examples/showcase/practices#bpmn
可以进入该网址,直接复制下方代码进行调试或观察。
效果图如下:
<canvas id="container"></canvas>
import { Graph, Cell } from '@antv/x6'const data = [{"id": "1","shape": "event","width": 40,"height": 40,"position": {"x": 50,"y": 180}},{"id": "2","shape": "activity","width": 100,"height": 60,"position": {"x": 20,"y": 280},"label": "请假申请"},{"id": "3","shape": "bpmn-edge","source": "1","target": "2"},{"id": "4","shape": "gateway","width": 55,"height": 55,"position": {"x": 170,"y": 282.5}},{"id": "5","shape": "bpmn-edge","source": "2","target": "4"},{"id": "6","shape": "activity","width": 100,"height": 60,"position": {"x": 300,"y": 240},"label": "领导审批"},{"id": "7","shape": "activity","width": 100,"height": 60,"position": {"x": 300,"y": 320},"label": "人事审批"},{"id": "8","shape": "bpmn-edge","source": "4","target": "6"},{"id": "9","shape": "bpmn-edge","source": "4","target": "7"},{"id": "10","shape": "gateway","width": 55,"height": 55,"position": {"x": 460,"y": 282.5}},{"id": "11","shape": "bpmn-edge","source": "6","target": "10"},{"id": "12","shape": "bpmn-edge","source": "7","target": "10"},{"id": "13","shape": "activity","width": 100,"height": 60,"position": {"x": 560,"y": 280},"label": "人事审批"},{"id": "14","shape": "bpmn-edge","source": "10","target": "13"},{"id": "15","shape": "event","width": 40,"height": 40,"position": {"x": 710,"y": 290},"attrs": {"body": {"strokeWidth": 4}}},{"id": "16","shape": "bpmn-edge","source": "13","target": "15"}
]
// 设置event类型节点的样式(起点和终点的样式)
Graph.registerNode('event',{inherit: 'circle',attrs: {body: {strokeWidth: 2,stroke: '#5F95FF',fill: '#FFF',},},},true,
)
// 设置activity类型节点的样式
Graph.registerNode('activity',{inherit: 'rect',markup: [{tagName: 'rect',selector: 'body',},{tagName: 'image',selector: 'img',},{tagName: 'text',selector: 'label',},],attrs: {body: {rx: 6,ry: 6,stroke: '#5F95FF',fill: '#EFF4FF',strokeWidth: 1,},img: {x: 6,y: 6,width: 16,height: 16,'xlink:href':'https://gw.alipayobjects.com/mdn/rms_43231b/afts/img/A*pwLpRr7QPGwAAAAAAAAAAAAAARQnAQ',},label: {fontSize: 12,fill: '#262626',},},},true,
)
// 设置gateway类型节点的样式
Graph.registerNode('gateway',{inherit: 'polygon',attrs: {body: {refPoints: '0,10 10,0 20,10 10,20',strokeWidth: 2,stroke: '#5F95FF',fill: '#EFF4FF',},label: {text: '+',fontSize: 40,fill: '#5F95FF',},},},true,
)
// 设置bpmn-edge类型线段的样式
Graph.registerEdge('bpmn-edge',{inherit: 'edge',attrs: {line: {stroke: '#A2B1C3',strokeWidth: 2,},},},true,
)
// 设置展示canvas图表的容器
const graph = new Graph({container: document.getElementById('container')!,connecting: {router: 'orth',},
})// 处理一下数据的格式,开始渲染图表
const cells = []
data.forEach((item: any) => {if (item.shape === 'bpmn-edge') {cells.push(graph.createEdge(item))} else {cells.push(graph.createNode(item))}
})
graph.resetCells(cells)
graph.zoomToFit({ padding: 10, maxScale: 1 })
最后,原创不易,如本文对您有所帮助,麻烦点个赞收藏谢谢!