vue项目中使用bpmn-流程图预览篇
内容概述
本系列 “vue项目中使用bpmn-xxxx” 分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中。主要包括vue项目中bpmn使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。如果转载或通过爬虫直接爬的,格式特别丑,请来原创看:我是作者原文
前情提要
上文已经实现了节点操作的前进、后退、导入。导出等操作,今日来实现“流程图预览”,以及视图的放大缩小,效果如下:
前提:项目安装过bpmn,安装可见上篇文章
实现要点
bpmn提供了两个神器:Modeler 和 Viewer,Modeler带有左侧节点栏和右侧属性栏,点击节点可进行相应操作,Viewer是“查看”,不能更改节点,两者相互独立,可按实际需求按需引入
绘制流程图:import BpmnModeler from 'bpmn-js/lib/Modeler';
预览流程图:import BpmnViewer from 'bpmn-js/lib/Viewer';
直接上代码:
View Code

<template> <div class="container"> <el-button type="primary" @click="previewTemp">预览</el-button> <el-button type="success" @click="handleZoom(1)">放大</el-button> <el-button type="warning" @click="handleZoom(-1)">缩小</el-button> <div class="chart-preview"> <div style="clear: both;"></div> <div class="view-canvas"> <div id="container" v-bind:style="{width: 100 * scale + '%',height: 100 * scale + '%'}" ></div> </div> </div> </div> </template> <script> import jquery from 'jquery'; import BpmnViewer from 'bpmn-js/lib/Viewer'; export default { data() { return { containerEl: null, bpmnModeler: null, scale: 1, // 此变量为预览的xml文件数据,由于行数过多,附在了附件中,使用时,将附件整个复值到currentCanvasXml即可 currentCanvasXml: '' }; }, methods: { handleZoom(flag) { if (flag < 0 && this.scale <= 1) { return; } this.scale += flag; this.$nextTick(() => { this.bpmnModeler.get('canvas').zoom('fit-viewport'); }); }, previewTemp() { this.containerEl = document.getElementById('container'); // 避免缓存,每次清一下 this.bpmnModeler && this.bpmnModeler.destroy(); this.scale = 1; this.bpmnModeler = new BpmnViewer({container: this.containerEl}); const viewer = this.bpmnModeler; this.bpmnModeler.importXML(this.currentCanvasXml, (err) => { if (err) { console.error(err); } else { // 只实现预览,核心代码以下两句足够 const canvas = viewer.get('canvas'); canvas.zoom('fit-viewport'); // 以下代码为:为节点注册鼠标悬浮事件 const eventBus = this.bpmnModeler.get('eventBus'); const overlays = this.bpmnModeler.get('overlays'); eventBus.on('element.hover', (e) => { const $overlayHtml = jquery(` <div class="tipBox"> 你好,我是悬浮框里的内容 </div>`); overlays.add(e.element.id, { position: {top: e.element.height, left: 0}, html: $overlayHtml }); }); eventBus.on('element.out', () => { overlays.clear(); }); // 注册悬浮事件结束 } }); } } }; </script> <style lang="scss"> .container { .tipBox { width: 200px; background: #fff; border-radius: 4px; border: 1px solid #ebeef5; padding: 12px; } } </style>
后续
currentCanvasXml 为预览的xml文件数据,由于行数过多,附在了附件中(点我!点我!),使用时,将整个赋值到currentCanvasXml,代码才可以运行,否则报错!!
想获取完整源码或有问题,欢迎大家关注我的公粽号,扫下面二维码或微信搜“前端便利贴”,即可获取~
可爱的你可能还需要
作者:Lemoncool
更多:没有办法维护原创版权,欢迎关注我的公粽号:前端便利贴,文章更早、更全,免费获取完整代码
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律