vue2中实现Antv g6 流程图 以及自定义节点

这篇具有很好参考价值的文章主要介绍了vue2中实现Antv g6 流程图 以及自定义节点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本案例 antv g6版本: "@antv/g6": "^3.4.8",

效果:

vue2实现流程图,vue.js,前端,elementui,echarts,scss,Powered by 金山文档

1.引入antv g6和echarts差不多

  <div class="line">
     <div id="mountNode"></div>
  </div>
<script>
import G6 from '@antv/g6';
export default {
    data(){
        return{
        
            // 拓扑数据结构
            // 定义数据源
         data:{
            "nodes": [
              {
                "id": "1",
                "name": "service-1",
                "type": "service",
                "statistics": {
                  "trace_num": 435,
                  "duration_avg": 2.312,
                  "alert_num": 21,
                  "situation_num": 3
                }
              },
              {
                "id": "2",
                "name": "service-2",
                "type": "service",
                "statistics": {
                  "trace_num": 435,
                  "duration_avg": 2.312,
                  "alert_num": 21,
                  "situation_num": 3
                }
              },
              {
                "id": "3",
                "name": "service-3",
                "type": "service",
                "statistics": {
                  "trace_num": 435,
                  "duration_avg": 2.312,
                  "alert_num": 21,
                  "situation_num": 3
                }
              }
            ],
            "edges": [
              {
                "source": "1",
                "target": "2",
                "edge_type": "deploy"
              },
              {
                "source": "1",
                "target": "3",
                "edge_type": "deploy"
              }

            ]
          },
        }
    },
    created(){
    
     
    },
    mounted(){
      this.initG6();
    },
    methods:{
     
    //  业务数据拓扑图
         initG6(){
               const that = this;
            G6.registerNode(
                "service", //第一个参数自定义节点的名字
                // 第二个参数是这个节点的图形分组
                {
                draw: function (cfg,group){
                //根据数据动态改变颜色或者图片
                    let colortext2=cfg.statistics.duration_avg>1 ?"red" :"#226DFF";
                  let img2=cfg.statistics.duration_avg>1 ?require('../../../../../assets/shouye备份1.png') :require('../../../../../assets/shouye备份.png');
                  let colortext3=cfg.statistics.alert_num>20 ?"red" :"#226DFF";
                  let img3=cfg.statistics.alert_num>20 ?require('../../../../../assets/a-fuwuqilan2.png') :require('../../../../../assets/fuwuqilan.png');

                    // 增加一个图像 最外边的虚线框
                   let keyShape=group.addShape('rect',{
                    //    代表矩形的一些属性
                       attrs:{
                        //    相对定位
                           x:0,
                           y:0,
                           width:200,
                           height:150,
                           stroke:"#B0C6E0",   //描边色
                           fill:"#EBE9E9",  //填充颜色
                           radius:3,
                           lineWidth:1,
                           lineDash:[2,2]  //设置虚线的样式
                           
                       },
                       name:"card-node-keyShape" //起个唯一名字便于识别
                    });
                  
                 
                    group.addShape("rect",{
                      attrs:{
                           x:10,
                           y:60,
                           width:180,
                           height:80,
                          //  stroke:"pink",   //描边色
                           fill:"#F3FAFF",
                           radius:3,   
                      },
                      name:"card-node-titleShape"
                    });
                    group.addShape("rect",{
                      attrs:{
                        x:100,
                        y:65,
                        width:1,
                        height:70,
                        fill:"#eee"
                      },
                      name:"card-node-line"
                    });
                    group.addShape("rect",{
                      attrs:{
                        x:20,
                        y:100,
                        width:160,
                        height:1,
                        stroke:"#eee",
                        fill:"#eee"
                      },
                      name:"card-node-heng"
                    });
                        group.addShape('rect',{
                      attrs:{
                        x:10,
                        y:8,
                        width:3,
                        height:20,
                        fill:"#226DFF", 
                      },
                      name:"card-node-border"
                    });
                    group.addShape('text',{
                      attrs:{
                        text:cfg.type,
                        x:20,
                        y:10,
                        fontSize:18,
                        fill:"block",
                        textBaseline:"top"
                      },
                      name:"card-node-serve"
                    });
                    group.addShape('text',{
                      attrs:{
                        text:cfg.name,
                        x:20,
                        y:40,
                        fontSize:18,
                        fill:"block",
                        textBaseline:"top"
                      },
                      name:"card-node-title"
                    });
                    // 业务模块
                    group.addShape("image",{
                      attrs:{
                        x:20,
                        y:70,
                        width:20,
                        height:20,
                        img:require('../../../../../assets/yewu1.png'),
                      },
                      name:"card-node-yewuico"
                    });
                        group.addShape("text",{
                      attrs:{
                        text:cfg.statistics.trace_num,
                        x:50,
                        y:90,
                        fill:"#226DFF"
                      },
                       name:"card-node-text1",
                    });
                    // 平均响应时长
                      group.addShape("image",{
                      attrs:{
                        x:110,
                        y:70,
                        width:20,
                        height:20,
                        img:img2,
                      },
                      name:"card-node-haoshiico"
                    });
                     group.addShape("text",{
                      attrs:{
                        text:cfg.statistics.duration_avg*1000+"ms",
                        x:135,
                        y:90,
                        fill:colortext2
                      },
                       name:"card-node-text2",
                    });
                    // 告警模块
                    group.addShape("image",{
                      attrs:{
                        x:20,
                        y:110,
                        width:20,
                        height:20,
                        // img: require('../assets/fuwuqilan.png'),
                        img:img3,

                      },
                      name:"card-node-fuwuqiico"
                    });
                      group.addShape("text",{
                      attrs:{
                        text:cfg.statistics.alert_num,
                        x:50,
                        y:130,
                        fill:colortext3
                      },
                       name:"card-node-text2",
                    });
                    // 故障模块
                     group.addShape("image",{
                      attrs:{
                        x:110,
                        y:110,
                        width:20,
                        height:20,
                        img:require('../../../../../assets/situation.png'),
                      },
                      name:"card-node-fuwuqiico"
                    });
                      group.addShape("text",{
                      attrs:{
                        text:cfg.statistics.situation_num,
                        x:140,
                        y:130,
                        fill:"#226DFF"
                      },
                       name:"card-node-text2",
                    });
                    return keyShape; 
                 },
                 
                },'rect'); //第三个参数,是如果没有设置样式,会默认继承rect的样式
              // 创建 G6 图实例
              
        const graph = new G6.Graph({
            container: 'mountNode', // 指定图画布的容器 id,与第 9 行的容器对应
            // 画布宽高
            width:1640,
            height:800,
             fitView: true, //自适应屏幕
             fitCenter: true, //屏幕中间
             modes:{
               default:['drag-canvas', 'zoom-canvas', 'drag-node']  //允许拖拽画布、缩放画布、拖拽节点
             },
        //设置默认节点
            defaultNode:{
            //这里直接使用上面自定义的节点
              type:"service"
            },
        //设置默认边的样式
            defaultEdge:{
              type:"polyline",
           
                style: {
                //按照官网的这样写报错,可能版本原因吧
                //  endArrow: {
                //     path: G6.Arrow.triangle(10, 20, 25),
                //     d: 25,
                //     },
                //这是网上找的一个写法,具体参数是如何实现我也不知道,自己可以都是试下
                 endArrow: {
                   path: 'M 0,0 L 20,10 L 20,-10 Z',
                    d: 0,
                   fill: '#226DFF',
                    // stroke: '#0f0',
                    // opacity: 0.5,
                    // lineWidth: 3,
                },
                  stroke:"#226DFF" , 
                
                },
            }
          });
          // 读取数据
          graph.data(this.data);
            //给节点添加点击事件
             graph.on('node:click', function(ev){
                        const shape = ev.name;
                        // const item = ev.item;
                            console.log("111",shape);
                            console.log("11111");
                            that.$router.push({
                                path:"/linkAnalysis/business/callChain",
                            })
                        });
          // 渲染图
          graph.render();
        }
    }
}
</script>

一定记得给盒子设置宽高

  .line{
          width: 95%;
          height: 800px;
          margin-left: 20px;
          margin-top: 20px;
          background-color: #eee;
          #mountNode{
            width: 100%;
            height:100%;
            }
      }

初学者一个,以上如有问题或者错误,多谢指出文章来源地址https://www.toymoban.com/news/detail-538894.html

到了这里,关于vue2中实现Antv g6 流程图 以及自定义节点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 流程图实现,基于vue2实现的流程图

    flex布局 + 伪元素实现竖直的连接线+组件递归 2.1基础的(未截全,大致长这样)  2.2带有收缩功能的,可以展开和收缩并显示数量     4.项目源码地址 GitHub - yft-code/flow: 流程图 纯css实现流程图

    2024年02月16日
    浏览(31)
  • 基于G6的弓字形流程图

    现在有个需求是 类似于步骤条、流程图 ,但是节点比较多。 搜了很多类似组件,还是有各种问题。 一开始用的是 element-ui 自带的步骤条组件(下图所示),但是节点过多,宽度不够的时候,换行就是直接从新一行开始接上,但是这样节点一多就不美观,不够直观。 后面尝

    2024年02月16日
    浏览(37)
  • 「AntV」X6图编辑器的应用——流程图实现

    在线预览 源码 阮一峰:SVG图像入门 SVGtutorial 因为antv/x6是基于SVG的图编辑器,所以SVG的知识有必要了解下的 简介 可缩放矢量图形【基于图形】 全称:Scalable Vector Graphics 定义基于矢量的图形 基于XML语法 放大缩小不会失真 属于万维网标准 可以插入DOM,通过JavaScript和CSS来操作

    2024年02月09日
    浏览(36)
  • 【vue2+antvx6】节点大小不一致,点击按钮流程图自动布局

    需求: 1、点击优化布局的按钮,自动布局(从左到右),按钮变成撤销布局按钮 2、点击撤销布局的按钮,返回之前的布局 3、在点击优化布局的按钮后,如果移动了节点,则自动将撤销布局的按钮变成优化布局的按钮 第一步:安装插件 第二步:写方法  全部代码

    2024年04月28日
    浏览(24)
  • G6框架Dagre流程图第三个自左向右的 Dagre 上对齐改造,对齐结点和边添加样式,并添加修改节点和展示结点详细信息交互

    ​​ 标题修改具体项 设置结点的样式 设置边的样式 添加修改结点名称功能 添加展示结点详细信息功能 参考链接 基本图形:https://g6.antv.vision/zh/examples/net/dagreFlow#lrDagreUL 展示结点详细信息功能:https://g6.antv.vision/zh/examples/tool/tooltip#tooltipClick 修改结点名称功能:https://g6.ant

    2024年02月10日
    浏览(39)
  • 如何使用drawio画流程图以及导入导出

    你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 为了便于大家更直观的理解,我们在

    2024年02月07日
    浏览(36)
  • vue使用jsplumb 流程图

    安装jsPlumb库:在Vue项目中使用npm或yarn安装jsPlumb库。 npm install jsplumb 创建一个Vue组件:创建一个Vue组件来容纳jsPlumb的功能和呈现。 效果图:  初始化jsPlumb一定要在mounted函数里面,要执行在dom渲染完成的时候 一定要设置绑定的容器,不然连线的容器外加入任何其他布局元素

    2024年02月12日
    浏览(28)
  • Vue实现流程图,借鉴vue-tree-color 实现流程框架技术

    实现组织架构图(vue-org-tree) 如果向使用原来的依赖可以使用这个人的,因为我也是根据这个博客大佬仿照Vue-org-tree实现的方案 对此有几点不惑,问了大佬,大佬也没有回复我 className 貌似不起作用,看了文章底部,她也意识到这个问题,但是没有给出详细的解决方案 node.js中

    2024年02月06日
    浏览(31)
  • vue + gojs 实现拖拽流程图(实战项目)

    最近一段时间在研究go.js,它是一款前端开发画流程图的一个插件,也是一个难点,要说为什么是难点,首先,它是依赖画布canvas知识开发。其次,要依赖于内部API开发需求,开发项目实战需求的时候就要花费大量的时间去熟悉go.js的API,然后才能进行开发。话不多说,我就先

    2023年04月24日
    浏览(37)
  • python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路

    给你两个按非递减顺序排列的整数列表nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。 注意 :最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为

    2023年04月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包