返回

轻松搭建流程图!Vue+AntV G6+Element-UI详细教程

前端

轻松搭建令人惊叹的流程图:Vue、AntV G6 和 Element-UI 教程

在当今快节奏的商业环境中,清晰有效地传达复杂工作流程至关重要。流程图在可视化流程、步骤和决策方面发挥着至关重要的作用,帮助利益相关者快速理解和协作。

使用 Vue、AntV G6 和 Element-UI 构建流程图

借助 Vue、AntV G6 和 Element-UI,您可以轻松创建交互式、可定制的流程图,使您的工作流程展示引人入胜且易于理解。

准备工作

  • Node.js >= 8.10.0
  • Vue CLI >= 3.0
  • AntV G6 >= 3.0
  • Element-UI >= 2.0

创建项目

使用 Vue CLI 创建一个新的 Vue 项目:

vue create my-flowchart

安装依赖

在项目目录中,安装 AntV G6 和 Element-UI:

npm install antv-g6 element-ui --save

创建组件

创建一个 Vue 组件 Flowchart.vue 来渲染流程图:

<template>
  <div>
    <el-row>
      <el-col :span="12">
        <g6-graph :data="data" :layout="layout" :fitView="fitView" :modes="modes" @node-click="handleNodeClick" @edge-click="handleEdgeClick"></g6-graph>
      </el-col>
      <el-col :span="12">
        <el-form :model="form">
          <!-- 表单字段 -->
        </el-form>
      </el-col>
    </el-row>
  </div>
</template>

<script>
// 导入组件和数据
import G6 from 'antv/g6';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

export default {
  // 组件配置
  components: {
    G6Graph: G6.Graph
  },
  data() {
    // 初始化流程图数据
    return {
      data: {
        nodes: [],
        edges: []
      },
      // 布局配置
      layout: {
        type: 'force'
      },
      fitView: true,
      modes: ['default', 'edit'],
      // 表单数据
      form: {
        nodeName: '',
        nodeType: 'rect',
        nodeStyle: '#fff',
        edgeName: '',
        edgeType: 'line',
        edgeStyle: '#000'
      }
    };
  },
  methods: {
    // 事件处理函数
    handleNodeClick(e) {
      console.log(e);
    },
    handleEdgeClick(e) {
      console.log(e);
    },
    // 添加节点
    handleAddNode() {
      // 从表单获取数据
      const { nodes, nodeName, nodeType, nodeStyle } = this.data;
      // 生成新的节点 ID
      const id = `node${nodes.length + 1}`;
      // 创建新的节点数据
      nodes.push({
        id,
        label: nodeName,
        x: 200,
        y: 200,
        type: nodeType,
        style: {
          fill: nodeStyle
        }
      });
      // 重置表单数据
      this.form.nodeName = '';
      this.form.nodeType = 'rect';
      this.form.nodeStyle = '#fff';
    },
    // 添加边线
    handleAddEdge() {
      // 从表单获取数据
      const { edges, edgeName, edgeType, edgeStyle } = this.data;
      // 生成新的边线 ID
      const id = `edge${edges.length + 1}`;
      // 创建新的边线数据
      edges.push({
        id,
        label: edgeName,
        source: 'node1',
        target: 'node2',
        type: edgeType,
        style: {
          stroke: edgeStyle
        }
      });
      // 重置表单数据
      this.form.edgeName = '';
      this.form.edgeType = 'line';
      this.form.edgeStyle = '#000';
    }
  },
  created() {
    // 注册自定义节点形状
    G6.registerNode('rect', {
      drawShape(cfg, group) {
        // 创建矩形形状
        const rect = group.addShape('rect', {
          attrs: {
            x: -cfg.size[0] / 2,
            y: -cfg.size[1] / 2,
            width: cfg.size[0],
            height: cfg.size[1],
            fill: cfg.style.fill,
            stroke: cfg.style.stroke
          }
        });
        return rect;
      }
    });
  }
};
</script>

运行项目

在终端中运行以下命令启动项目:

npm run serve

然后,访问 http://localhost:8080 查看流程图组件。

常见问题解答

  • 如何添加自定义节点形状?

您可以通过调用 G6.registerNode(type, drawFunc) 函数来注册自定义节点形状,其中 type 是节点类型,drawFunc 是一个函数,用于绘制节点形状。

  • 如何获取节点或边线的点击事件数据?

您可以使用 @node-click@edge-click 事件侦听器来获取点击事件数据。这些事件侦听器将在节点或边线被点击时触发,并传递事件数据作为参数。

  • 如何设置流程图的布局?

您可以通过设置 layout 属性来配置流程图的布局。layout 属性接受一个对象,其中包含布局算法的配置选项。

  • 如何禁用流程图编辑模式?

您可以通过将 modes 属性设置为 ['default'] 来禁用流程图编辑模式。这将防止用户添加、删除或移动节点和边线。

  • 如何向流程图添加数据?

您可以通过设置 data 属性来向流程图添加数据。data 属性接受一个对象,其中包含节点和边线数据。