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

相关推荐
IT_陈寒8 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu9 小时前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript
这是程序猿9 小时前
Spring Boot自动配置详解
java·大数据·前端
文心快码BaiduComate9 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
还有多久拿退休金9 小时前
一张栈的图,治好你面试答不出 script 阻塞的病
前端·javascript
光辉GuangHui9 小时前
Agent Skill 也需要测试:如何搭建 Skill 评估框架
前端·后端·llm
To_OC9 小时前
我终于搞懂 Claude Code 核心逻辑!90%的人都用错了模式
前端·ai编程
蓝宝石的傻话9 小时前
Headless浏览器的隐形陷阱:为什么你的AI自动化工具抓不到页面早期错误?
前端
irving同学462389 小时前
Node 后端实战:JWT 认证与生产级错误处理
前端·后端
莽夫搞战术10 小时前
【Google Stitch】AI原生画布重新定义设计,让想法变成可交互界面
前端·人工智能·ui