vue中使用Antv g6构建简单流程图

vue中使用Antv g6构建简单流程图

前端小白第一次使用,项目需要一个流程图,看了一些博客,简单的写了一个,但是还是没实现项目的需求,希望有会的人帮忙指点一下。项目需要实现的是:可以自定义添加节点以及删除节点,这两个我还没有实现。

1.首先安装

npm install --save @antv/g6

2.在需要g6的文件中导入

import G6 from "@antv/g6";

3.在组件中创建一个容器

<template>
  <div id="Flow"></div>
</template>

4.设置节点和边

<script>
import G6 from "@antv/g6";
export default {
  data() {
    return {
      graph:'',
      data:[],
      measure: [
        {
          name: "救助力量协调",
          id:'coordinate',
        },
        {
          name: "应急物资选择",
          id:'choose',
        },
        {
          name: "搜救区域计算",
          id:'calculate',
        },
        {
          name: "信息发布",
          id:'issue'
        },
      ],
      
    };
  },
  
  mounted() {
    this.data = {
        //节点
      nodes: [
        {
          id: "dangerous",
          label: "险情接报",
          x: 80,
          y: 70,
        },
        {
          id: "message",
          label: "信息核实",
          x: 80,
          y: 170,
        },
        {
          id: "dispose",
          label: "应急处置",
          x: 80,
          y: 270,
        },
        {
          id: "conclusion",
          label: "处置总结",
          x: 80,
          y: 370,
        },
        {
          id: "assess",
          label: "应急评估",
          x: 80,
          y: 470,
        },
        {
          id: "coordinate",
          label: "救助力量协调",
          x: 200,
          y: 120,
        },
        {
          id: "choose",
          label: "应急物资选择",
          x: 200,
          y: 190,
        },
        {
          id: "calculate",
          label: "搜救区域计算",
          x: 200,
          y: 260,
        },
        {
          id: "issue",
          label: "信息发布",
          x: 200,
          y: 330,
        },
      ],
        //边
      edges: [
        {
          source: "dangerous",  //起点id
          target: "message",   //目标点id
        },
        {
          source: "message",
          target: "dispose",
        },
        {
          source: "dispose",
          target: "conclusion",
        },
        {
          source: "conclusion",
          target: "assess",
        },
        {
          source: "dispose",
          target: "coordinate",
          style: {
            endArrow: {
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            },
            startArrow:{
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            }
          },
        },
        {
          source: "dispose",
          target: "choose",
          style: {
            endArrow: {
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            },
            startArrow:{
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            }
          },
        },
        {
          source: "dispose",
          target: "calculate",
          style: {
            endArrow: {
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            },
            startArrow:{
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            }
          },
        },
        {
          source: "dispose",
          target: "issue",
          style: {
            endArrow: {
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            },
            startArrow:{
              path: G6.Arrow.triangle(5, 5, 45), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 45,
            }
          },
        },
      ],
    };
    this.graph = new G6.Graph({
      container: "Flow", // 指定挂载点
      // 画布宽高
      width: 274,
      height: 550,
      linkCenter: true,
      //节点配置样式
     
      defaultNode: {
        type: "rect",
        size:[80,30],
        style: {
          fill: "#409EFF",
        },
        labelCfg: {
          positions: "center",
          // 节点上的标签文本样式配置
          style: {
            fill: "#fff", // 节点标签文字颜色
          },
        },
      },
      //边的样式配置
      defaultEdge: {
        type: "line",
        // 边样式配置
        style: {
          stroke: "#409EFF", // 边描边颜色
          endArrow: {
            path: G6.Arrow.triangle(5, 5, 25), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
            d: 25,
            fill: '#409EFF',
            opacity: 0.5,
            lineWidth: 1,
          },
          startArrow:{
            path: G6.Arrow.triangle(5, 5, 25), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
            d: 25,
            fill: '#409EFF',
            opacity: 0.5,
            lineWidth: 1,
          }
        },
        labelCfg: {
          position:'center'
        },
      },
    });
    //读取数据
    this.graph.data(this.data);
    // 渲染图
    this.graph.render();
    // console.log(this.data)
  },
  methods:{
  //添加节点
    addSave() {
      this.measure.push({ name: this.addinput ,id:'abc'});
      // console.log(div)
      this.data.nodes.push({
        id: this.id,
        label: this.addinput,
        x: 200,
        y: 400,
      });
    
      // 读取数据
      this.graph.data(this.data);
      // 渲染图
      this.graph.render();
    },
    
  }
};
</script>


5.效果图在这里插入图片描述

需要实现的是在右侧点击添加时添加一个节点,点红色按钮删除节点,1是我新增的节点,但是边添加不上,节点的每一个都是给了固定的位置,如果只要流程图是可以给固定的位置,但是新增的话给一个固定的位置是不合理的,目前只做到了这里。希望有会的人帮忙指点一下。拜托!!!

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值