当前位置: 首页 > 后端技术 > Java

没有方便的流程绘图工具?好吧,自己做,吃得好!

时间:2023-04-01 13:22:10 Java

流程画图工具感觉挺普通的,流程图基本都标准化了。标准化的东西其实是最容易做的,但是IDEA一直没有顺手的流程绘图工具。其实这也是一个Opportunity,哈哈,自己动手做一个IDEA插件吧~不过这个机会还是留给了看这篇文章的各位。宋哥今天给大家介绍另一个工具bpmn.js。利用这个,结合大家熟悉的Vue,我们可以开发自己的流程绘制工具,一起来看看吧。先来看看效果图:好了,废话不多说,开始吧!1.bpmn.jsbpmn.js是一个工具包。使用此工具包,我们可以轻松地在浏览器中创建、嵌入或扩展BPMN流程图。重要的是这个过程非常简单,我们只需要少量的代码就可以实现这个目标。不知道有多少看过文章的朋友在日常工作中接触过流程图。如果经常接触的话,我猜很多朋友可能都看过基于bpmn.js搭建的流程图绘制工具。因为flowable-ui过于重量级,如果我们只是想在项目中嵌入一个流程绘制工具,那么显然bpmn.js是最好的选择。网上关于bpmn.js的文章其实很多,但是在与Vue集成的时候,基本都是用Vue2,而且这个工具在Vue2和Vue3中的使用还是有很多区别的。今天松哥就以Vue3为例,和小伙伴们分享一下这个工具在Vue3中的使用。2.+Vue32.1项目创建首先,我们执行如下命令创建一个Vue3项目:npmcreatevite@latestbpmn_demo--templatevuecdbpmn_demonpminstallnpmrundev创建完成后,我们首先安装bpmn需要的依赖。js,一共有三个依赖:bpmn-js是核心的流程绘制工具。bpmn-js-properties-panel这个是bpmn-js的属性面板。流程图中的每个节点都有属性。如果需要配置这些数据,就需要使用这个依赖。小伙伴们看下图右侧部分是这个依赖实现的功能:camunda-bpmn-moddle如果你的流程引擎使用了Camunda,你可以通过camunda-bpmn-配置流程支持的任务属性模型模块。好了,废话不多说,先把这三个依赖一一安装好:npminstallbpmn-jsnpminstallbpmn-js-properties-panelnpminstallcamunda-bpmn-moddle另外,宋哥亲测,还需要安装@bpmn-io/properties-panel和inherits用于解决内部兼容问题。安装命令如下:npmi@bpmn-io/properties-panelnpmi继承另外项目中使用了一个ElementUI按钮,所以需要安装ElementUI-Plus,如下:npminstallelement-plus--save安装完成后,给你看我安装的版本,是最新版本:{"name":"bpmn_demo","private":true,"version":"0.0.0","type":"module","scripts":{"dev":"vite","build":"vitebuild","preview":"vitepreview"},"dependencies":{"@bpmn-io/properties-panel":"^0.19.0","bpmn-js":"^9.4.0","bpmn-js-properties-panel":"^1.5.0","camunda-bpmn-moddle":"^6.1.2","元素加":"^2.2.14","继承":"^2.0.4","vue":"^3.2.37"},"devDependencies":{"@vitejs/plugin-vue":"^3.0.3","vite":"^3.0.7"}}经宋哥亲测,如果使用Webpack代替Vite构建项目,则不需要安装inherits,根据自己的实际情况安装即可。项目创建后,如果你提示缺少这个组件安装即可,没有提示可以忽略2.2开发页面用Vite新建的项目默认是没有安装路由的,路由也很麻烦,这里就省事了。我会直接新建一个组件来写我们的页面,以后只要在App.vue中引入我的新组件即可。首先,我新建了一个名为BpmnView的组件,然后在这个组件中配置了bpmn.js,内容如下:

下载
朋友look可以看到,这个页面整体分为两部分。上半部分是我们绘制的主要区域,包括绘图区和属性设置区;下部是下载流程图XML文件的按钮。在上面的主要绘图区,我们放了两个东西,一个是画布,一个是属性。canvas是流程图绘制时的核心区域,properties是流程中各个节点的属性配置。参考下图,你就知道canvas和properties分别代表什么:下面我们来初始化左边的canvas。2.2.1Canvas首先,我们看一下如何初始化左边的Canvas。<脚本设置>import{onMounted}from'vue';从'bpmn-js/lib/Modeler'导入BpmnModeler;让bpmnModeler;onMounted(()=>{//建模bpmnModeler=newBpmnModeler({container:'#canvas'})bpmnModeler.createDiagram();})这个初始化工作是在onMounted回调中完成的。创建一个BpmnModeler并设置画布。调用createDiagram方法开始绘制。配置完成后记得导入main.js中的样式文件,如下:import'bpmn-js/dist/assets/diagram-js.css'import'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'import'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'import'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css'现在好了,可以开始画左边的流程图了。2.2.2properties下面看右边的properties的配置。先在main.js中添加右侧属性的样式文件:import'bpmn-js-properties-panel/dist/assets/properties-panel.css'然后在BpmnView.vue中继续配置:创建BpmnModeler时,通过propertiesPanel指定parent的位置,然后挂载其他5个附加模块,这五个模块代表不同的属性,我就不一一说了,朋友们可以自己尝试删除一个属性,看看少了哪些属性,就知道这个模块的功能了2.2.3下载按钮最后回来看一下下载按钮的点击事件。functiondownloadXML(){bpmnModeler.saveXML({format:true},(err,xml)=>{if(!err){console.log(xml);//获取文件名constname=getFileName(xml);//将输入转换为URI,constencodedData=encodeURIComponent(xml);constdownloadLink=document.createElement('a');if(xml){//把数据给链接downloadLink.href="data:application/bpmn20-xml;charset=UTF-8,"+encodedData;//设置文件名downloadLink.download=name;//触发点击事件开始下载downloadLink.click();}}})}functiongetFileName(xml){letsplit=xml.split('processid="');returnsplit[1].split('"')[0]+".bpmn20.xml";}调用bpmnModeler.saveXML方法,在回调中xml参数是生成的流程图XML文件,然后创建一个虚拟a标签来模拟点击事件完成下载。getFileName方法从下载的XML文件中截取bpmn:process标签的id值作为文件名,这也符合我们日常的命名习惯。好的,你完成了!以后我们可以使用自己的流程图绘制工具来绘制流程图。但是有一个小小的遗憾,那就是这是针对Camunda流程引擎的。如果他画的流程图不能直接在Flowable中使用,想要在Flowable中使用,就需要额外定制一点。我们以后会用到这个。3.总结bpmn.js最大的优点就是可以很方便的根据自己项目的需要嵌入到已有的项目中。嗯,公众号江南一点鱼后台回复bpmn_demo可以下载完整案例文。