介绍
本篇文章为大家展示了使用VUE和Antv G6实现在线拓扑图编辑,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1。首先在Antv官网上找到蚂蚁Antv G6插件,引入插件。强>
也可以npm方式引入。
<强> 2。写组件强>
出口默认{ 名称:“指数”, 组件:{}, 安装(){ this.initG6 (); }, 数据(){ 返回{ 行动:“& # 39; 名称:“& # 39; func:“& # 39; 账户:“& # 39; 工作流程:“& # 39; nodeType: 0, 颜色:“& # 39; 净:“& # 39; Util:“& # 39; workflowName:“& # 39; 激活:“& # 39;//当前激活的节点 isNode:假的,//当前是节点 isBlank:真的,//当前是空白区 检查:真的,//网格对齐 infoTitle:“画布& # 39;//属性标题 oldColor:“& # 39;//获取节点本身颜色 类型:“& # 39;//有值为编辑状态 actionList: [], nodeTypeList:( {id: 0,标签:“普通节点& # 39;}] } }, 方法:{ initG6 () { 让自我=; 自我。Util=G6.Util; 让网格; 如果(self.checked) { 网格={ forceAlign:真的,//是否支持网格对齐//单元格:25日网格大小 }; 其他}{ 网格=零; }//生成度量 ,。。//工具方法 ,。。 var sourcesData=https://www.yisu.com/zixun/{};//后台返回的数据 var trainScale=函数(昏暗的、规模){ var max=无穷大; var min=无穷大; sourcesData.source.nodes.map(函数(节点){ max=30; min=25; }); 规模。域([最小,最大]); }; var颜色=[' # 007 ae7 ', ' # 40 bcd2 ', ' # 81 d6c3 ', ' # C1E4BC ', ' # FFDD9B ', ' # FEAC4C ', ' # FF7C01 ', ' # C4201D ']; ,。。//生成图 http://self.net=new http://G6.Net ({ id:‘知识’,//容器id 高度:canvasHeight,//画布高 模式:“编辑” }); G6.Global。nodeLabelStyle={ 填:“# fff ', textAlign:“离开”, textBaseline:“底”, 字形大小:24 }; self.net.tooltip(真正的); self.net.node () .size(函数(模型){ 返回sizeScale (model.weight) * 2; }) ; self.net.source (sourcesData.source.nodes sourcesData.source.edges); self.net.removeBehaviour ([‘dragCanvas’,‘dragHideEdges’, ' dragHideTexts ']); self.net.addBehaviour ([' dragBlank ']); self.net.read (sourcesData); self.net.render (); self.net.zoomAt (graphCenterX, graphCenterY, 0.7);//生成布的局 var layoutNodes=sourcesData.source.nodes; var layoutEdges=Util.clone (sourcesData.source.edges); var赊销=function () { self.net.updateNodesPosition (); }; …/* * 点击空白处/self.net.on(“点击”,(ev)=> { 如果(! self.Util.isNull (ev.item)) { 自我。isBlank=false 其他}{ 自我。isBlank=true; self.infoTitle='画布” } });/点击节点/self.net.on (itemclick,函数(ev) { 自我。isNode=self.Util.isNode (ev.item);//是否为节点 自我。激活=ev.item; 如果(self.isNode) {/激活节点后节点名称输入聚焦/自我。KaTeX解析错误:预计‘}’,有‘EOF输入:年底…柳枝稷(()=> {self.refs.inputFocus。美元el.querySelector(“输入”).focus (); }); self.infoTitle='节点”; self.name=ev.item.get .label(“模型”); 自我。func=ev.item.get .func(“模型”); 自我。账户=ev.item.get(“模型”)。账户| | []; 自我。工作流=ev.item.get .workflow(“模型”); 其他}{ self.infoTitle=摺? 自我。action=ev.item.get .action(“模型”); } 自我。颜色=self.oldColor; });/* * 鼠标移入移出事件改变颜色/self.net.on (itemmouseenter, ev=> { 常数项=ev.item; 自我。oldColor=item.get .color(“模型”);//获取节点颜色 self.net.update(项目,{ 颜色:# 108 ee9, }); self.net.refresh (); }); self.net.on (itemmouseleave, ev=> { 常数项=ev.item; self.net.update(项目,{ 颜色:self.oldColor }); self.net.refresh (); });/* 提示信息 */self.net.tooltip ({ 标题:“信息',//@type{}字符串标题 分裂:':',//@type{字符串}分割符号 dx: 0,//@type{号码}水平偏移 dy: 0//@type{号码}竖直偏移 }); .size .tooltip self.net.edge () () (“val”,函数(val) { 返回3; });/* * 渲染 *//self.net.source (self.nodes self.edges);///加载资源数据//self.net.render (); }, addCircle () { },//添加起始节点 addRect () { },//添加常规节点 addRhombus () { },//添加条件节点 addLine () { },//添加直线 addSmooth () { },//添加曲线 addArrowSmooth () { },//添加箭头曲线 addArrowLine () { },//添加箭头直线 addPolyLine () { },//添加折线 changeMode(模式){ },//拖拽与编辑模式的切换 德尔(){ this.net.del () },//删除 save () {/*验证流图名称*/如果这一点。workflowName !==? { 让数据=this.net.save (); 如果(data.source.nodes。长度===0){ 这一点。KaTeX解析错误:将“EOF”, 61年“}”位置:…;返回false} & # 818;/*验证节点名称*/fo…消息({类型:“错误”的信息:“节点名称不能为空"}); 返回假 } } 数据。源['名称')=this.workflowName;/让json=json。stringify(数据、零2);/这一点。KaTeX解析错误:将“EOF”,有“}”立场43:…e, this.type);}& # 818;{这个。消息({类型:“错误”的信息:“拓扑名称不能为空'}) }/控制台。日志(saveData、json);/},//保存 update () { },//更新节点 去年clearView () { 这一点。type="; 这一点。workflowName="; this.net.changeData () },//清空视图 源(节点、边名称、类型){ 这一点。类型=类型; 这一点。workflowName=名称; this.net.changeData(节点、边) },//更新数据 }, 看:{/* * 监听输入框/行动:函数(){ this.update () }, 名称:函数(){ this.update () }, 函数:函数(){ this.update () }, 账户:函数(){ this.update () }, 工作流程:函数(){ this.update () }, nodeType:函数(){ this.update () }, 颜色:函数(){ this.update () },/* 网格切换 */检查:函数(){ 让_saveData=this.net.save (); this.net.destroy ();//销毁画布 this.initG6 (); this.net.read (_saveData); this.net.render () } } }使用VUE和Antv G6实现在线拓扑图编辑