React使用AntV G6实现流程图
安装
npm install @antv/g6 --save
引用
import G6 from '@antv/g6'
自定义节点
/**
* 方式一
*/
G6.registerNode('rect-jsx', (cfg) =>`
<group>
<rect>
<rect style={{
width: 160,
height: 20,
fill: ${cfg.color},
cursor: 'move',
stroke: ${cfg.color}
}} draggable="true">
<text style={{
marginTop: 2,
marginLeft: 75,
textAlign: 'center',
fontWeight: 'bold',
fill: '#333' }}>自定义文字</text>
</rect>
<rect style={{
width: 160,
height: 55,
stroke: ${cfg.color},
fill: ${cfg.color},
}} draggable="true">
<text style={{ marginTop: 5, marginLeft: 3, fill: '#333', marginLeft: 4 }}> {{label}}</text>
<text style={{ marginTop: 10, marginLeft: 3, fill: '#333', marginLeft: 4 }}>{{statusDesc}}</text>
</rect>
</group>
`)
/**
* 方式二
*/
G6.registerNode(
'card-node',
{
drawShape: function drawShape(cfg, group) {
const color = cfg.error ? '#F4664A' : '#30BF78';
const r = 2;
const shape = group.addShape('rect', {
attrs: {
x: 0,
y: 0,
width: 200,
height: 60,
stroke: color,
radius: r,
},
name: 'main-box',
draggable: true,
});
group.addShape('rect', {
attrs: {
x: 0,
y: 0,
width: 200,
height: 20,
fill: color,
radius: [r, r, 0, 0],
},
name: 'title-box',
draggable: true,
});
// left icon
group.addShape('image', {
attrs: {
x: 4,
y: 2,
height: 16,
width: 16,
cursor: 'pointer',
img: ICON_MAP[cfg.nodeType || 'app'],
},
name: 'node-icon',
});
// title text
group.addShape('text', {
attrs: {
textBaseline: 'top',
y: 2,
x: 24,
lineHeight: 20,
text: cfg.title,
fill: '#fff',
},
name: 'title',
});
if (cfg.nodeLevel > 0) {
group.addShape('marker', {
attrs: {
x: 184,
y: 30,
r: 6,
cursor: 'pointer',
symbol: cfg.collapse ? G6.Marker.expand : G6.Marker.collapse,
stroke: '#666',
lineWidth: 1,
},
name: 'collapse-icon',
});
}
// The content list
cfg.panels.forEach((item, index) => {
// name text
group.addShape('text', {
attrs: {
textBaseline: 'top',
y: 25,
x: 24 + index * 60,
lineHeight: 20,
text: item.title,
fill: 'rgba(0,0,0, 0.4)',
},
name: `index-title-${index}`,
});
// value text
group.addShape('text', {
attrs: {
textBaseline: 'top',
y: 42,
x: 24 + index * 60,
lineHeight: 20,
text: item.value,
fill: '#595959',
},
name: `index-title-${index}`,
});
});
return shape;
},
},
'single-node',
);
绑定事件
graph.on('aftercreateedge', e => {
})
graph.on('click', (evt) => {
});
graph.on('node:dblclick', evt => {
})
连线控制
{
type: 'create-edge',
trigger: 'click',
key: 'shift',
shouldBegin: e => {
this.setState({begin: e.item._cfg.id})
return true
},
shouldEnd: e => {
let flag = true
this.state.edges.forEach(item => {
if (this.state.begin === item.source) {
if (e.item._cfg.id === item.target) {
flag = false
}
}
})
return flag
}
根据坐标返回位置信息
const { item } = evt
const model = item.getModel()
const { x, y } = model
const point = graph.getCanvasByPoint(x, y)
注意事项
在数据源多次变化时先需要销毁画布
this.graph.destroy()
详细的边文字、节点提示等等,官方文档介绍的很多,这里介绍React的简单实现,供大家少走弯路。官方链接:https://g6.antv.vision/zh
React使用AntV G6实现流程图的更多相关文章
- AntV G6绘制流程图学习例子
下面代码可以直接贴到html文件中运行看效果. 代码说明 js中data是一个json变量,里面有两个关键对象"nodes.edges",分别来描述节点.节点间箭线. 更多&quo ...
- antV G6流程图在Vue中的使用
最近我司项目中需要加入流程图制作功能,于是乎百度各种找可视化绘制拓扑图的轮子,大部分都是国外的,看文档太吃力,不过好在最终让我发现了AntV G6流程图图表库,最新版为2.0,不过编辑器在2.0版本还 ...
- React + umi +antd+antv/g6 实现力图
官方示例效果:http://antv.alipay.com/zh-cn/g6/2.x/demo/net/2017-link-data.html 改编效果: 实现步骤: 环境:nodejs.yarn/n ...
- vue结合antV/g6 实现网络拓扑图
最近很多业务场景都会需要用到拓扑图,翻找了很多资料,最后选择了antV/g6,主要原因有以下几点: 1.阿里出品,所以框架的成熟性有保障 2.业务场景契合(1.规则拓扑图:2.动画流向:每个节点会有流 ...
- antv g6
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 在 React 项目中引入 GG-Editor 编辑可视化流程
蚂蚁金服数据可视化团队曾经开源了一款G6-Editor,但后来停止了对外支持,学习成本太高 好在后来他们团队的大牛高力结合 React + G6 开源了一个 GG-Editor(其实就是G6-Edit ...
- G6 学习资料
G6 学习资料 网址 G6 1.x API 文档 http://antvis.github.io/g6/doc/index.html 官方demo列表 https://github.com/antvi ...
- React 生命周期简介
React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树 ...
- ggEditor流程图增加网格背景
参考官方文档: https://www.yuque.com/antv/g6/plugin.tool.grid react-ggEditor如何使用 import { Flow } from 'gg-e ...
随机推荐
- 《Python 测试开发技术栈—巴哥职场进化记》—每日站会的意义
上文<Python测试开发技术栈-巴哥职场进化记>-一道作业题我们讲到华哥给巴哥出了一道作业题,让巴哥用Python实现记录日志的功能,巴哥历经"千辛万苦",终于做出了 ...
- 区块链入门到实战(24)之以太坊(Ethereum) – 网络节点
用途: 全节点:用于区块和交易的校验 轻节点:电子钱包 以太坊(Ethereum)网络是一个公共的区块链网络,网络中包含2种网络节点: 全节点 轻节点 全节点 包含了从初始区块开始的全部区块,这些区块 ...
- Mysql 5.6创建新用户并授权指定数据库相应权限
一.环境 Centos 6.9 Mysql 5.6.40 二.步骤 1.使用root用户登陆mysql mysql -uroot -p 输入密码: 2.创建新用户 CREATE USER 'user' ...
- .net core 3.0 web api 重点设置,主要为了解决axios post不到参数问题
这两天研究.net core 3.0升级,前端vue+axios 后端web api.测试过程中发现post的时候,由于提交的是json对象,后端web api获取不到数据. 今天贴了下解决过程.主要 ...
- Mac 系统安装robot framework
1.安装Python3 版本 2.安装robotframework:pip3 install robotframework 3.安装Pypubsub:pip3 install Pypubsub 4.安 ...
- vue项目配置vuex
在vue项目中各组件之间传值非常的好用,但是当组件数量多的时候,就会感觉到多个组件之间传值就会变的非常痛苦.因此就需要使用vuex来管理数据值,这样在任何页面不需要传值过来的情况下就可以拿到我们想要的 ...
- 关于跨域策略文件crossdomain.xml文件
下载flexpaper源码修改后做成swf阅读器,要加入待阅读的swf文件,可以在flex里调用js的方法来获取swf文件的路径的方法,在js只专注获取路径就行,等着flex来调用:但这里会遇到一个问 ...
- 容器服务 TKE 上服务暴露的几种方式
预备知识 1. K8S 上 Service 类型 ClusterIP 通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType. NodePort ...
- java 多线程-1
一.程序.进程.线程简介 程序(program)是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象 进程(process)是程序的一次执行过程,或是正在运行的一个程序.是一 ...
- 关于LLVM源码在Linux下编译的过程
1. 最好在gitee上查找llvm的源码或者直接git clone https://gitee.com/uniquesquirrel/llvm-project.git,是和github上的llvm项 ...