vue展示graphviz和dot流程图

vue展示graphviz和dot流程图

功能点包括:

1.在组件挂载后,加载指定的DOT文件。

2.使用d3-graphviz库将DOT内容渲染成图形显示在页面上。

3.错误处理,显示加载或渲染失败的信息。

效果图:

step1:下载依赖

bash 复制代码
npm install viz.js @hpcc-js/wasm d3 d3-graphviz

step2:package.json

C:\Users\wangrusheng\PycharmProjects\untitled18\package.json

bash 复制代码
{
  "name": "untitled18",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "@hpcc-js/wasm": "^2.22.4",
    "d3": "^7.9.0",
    "d3-graphviz": "^5.6.0",
    "lodash": "^4.17.21",
    "viz.js": "^2.1.2",
    "vue": "^3.5.13",
    "vue-router": "^4.5.0"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.2.3",
    "vite": "^6.2.4",
    "vite-plugin-vue-devtools": "^7.7.2"
  }
}

step3:dot代码文件

C:\Users\wangrusheng\PycharmProjects\untitled18\public\flow.dot

bash 复制代码
digraph {
    rankdir="LR";

    graph [fontname="helvetica", fontsize=12];
    node [fontname="helvetica", fontsize=10];
    edge [fontname="helvetica", fontsize=10];

    start [shape="plaintext", style="rounded", label="I want to extract\nmembers from a zip file."];
    
    fewlarge [shape="box", label="Do you have a few\nlarge files zip files\nwith tens\nof thousands\nof members?"];
    manysmall [shape="box", label="Do you have\nmany small files\nwith a few\ndozen members?"];
    extractsome [shape="box", label="Do you need\nto extract many\nmembers but\nnot all?"];

    end [shape="plaintext", style="rounded", label="Use vanilla unzip."];
    unzippa [shape="plaintext", style="rounded", label="Maybe unzippa is faster."];

    {
        rank=same; start; fewlarge; manysmall; end;
    }
    {
        rank=same; extractsome; unzippa;
    }

    start -> fewlarge;
    fewlarge -> manysmall[label="No"];
    fewlarge -> extractsome[label="Yes"];
    manysmall -> end[label="No"];
    manysmall -> extractsome[label="Yes"];
    extractsome -> end[label="No"];
    extractsome -> unzippa[label="Yes"];
}

step4:父组件

C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue

typescript 复制代码
<template>
  <div>
    <h1>流程图展示</h1>
    <FlowChart />
  </div>
</template>

<script>
import FlowChart from './FlowChart.vue';

export default {
  components: {
    FlowChart,
  },
};
</script>

step5:子组件

C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\FlowChart.vue

typescript 复制代码
<template>
  <div>
    <div ref="graphContainer"></div>
    <div v-if="error">{{ error }}</div>
  </div>
</template>

<script>
import Viz from 'viz.js'; // 默认导入
import { Module, render } from 'viz.js/full.render.js'; // 确认路径是否正确
import * as d3 from 'd3';
import { graphviz } from 'd3-graphviz';

export default {
  data() {
    return {
      error: null,
    };
  },
  async mounted() {
    try {
      const response = await fetch('/flow.dot');
      const dotContent = await response.text();

      // 使用正确的参数初始化Viz实例
      const viz = new Viz({ Module, render });
      const svg = await viz.renderSVGElement(dotContent);

      // 使用d3-graphviz渲染
      graphviz(this.$refs.graphContainer)
        .renderDot(dotContent)
        .onerror((err) => {
          this.error = `渲染错误: ${err}`;
        });

    } catch (err) {
      this.error = `加载失败: ${err.message}`;
    }
  },
};
</script>

end

相关推荐
—Qeyser几秒前
Element Plus 安装与配置指南 (Vue 3 + Vite + TS)
vue.js
雪芽蓝域zzs2 分钟前
第19章:ECharts 组合图(折线 + 柱状混合图,双 Y 轴)
vue.js·echars
yzy8511 分钟前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
用户2986985301423 分钟前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
雪芽蓝域zzs35 分钟前
第17章:ECharts 饼图自定义样式(扇区颜色、轮廓、标签配置 + 空状态兼容)
vue.js·echars
计算机魔术师36 分钟前
马斯克称 Grok 4.7 使 xAI 在智能体编码领域位列第三
前端
摸鱼仙人~41 分钟前
前端秋招异步手写题系统刷题路线:从 Promise 到 Pipeline、LazyMan 与并发控制
前端
雪芽蓝域zzs42 分钟前
第15章:ECharts 图表事件交互(若依 Vue3)
vue.js·echars
秋天的一阵风44 分钟前
⚡上线 24 小时,13% 的付费团队连夜换到 Jev:它到底什么来头?
前端·人工智能·ai编程
程序员若风1 小时前
CSRF攻击原理介绍和利用-腾讯云开发者社区
前端·网络·安全·web安全·网络安全·csrf攻击·腾讯云开发者社区