阅读 149

全网最详bpmn.js教材-基础篇

前言

Q: bpmn.js是什么? ????️

bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成.

Q: 我为什么要写该系列的教材? ????️

因为公司业务的需要因而要在项目中使用到bpmn.js,但是由于bpmn.js的开发者是国外友人, 因此国内对这方面的教材很少, 也没有详细的文档. 所以很多使用方式很多坑都得自己去找.在将其琢磨完之后, 决定写一系列关于它的教材来帮助更多bpmn.js的使用者或者是期于找到一种好的绘制流程图的开发者. 同时也是自己对其的一种巩固.

由于是系列的文章, 所以更新的可能会比较频繁, 您要是无意间刷到了且不是您所需要的还请谅解????.

不求赞????不求心❤️. 只希望能对你有一点小小的帮助.

bpmn.js基本的使用

这一章节主要是介绍了bpmn.js最基本的几种实用方式, 适合完全没有接触过bpmn.js的新手或者想要在vue项目中使用它的开发者.

通过这一章节的讲解你可以学习到:

  • bpmn.js最简单的一种使用

  • 使用npm安装bpmn.js

  • vue中使用bpmn.js

为了方便大家对后面的讲解有一个大概认识, 我们先来看一下使用bpmn.js画图都有哪些内容:

bpmn.js最简单的一种使用

我们可以直接使用CDNbpmn.js引入到代码中使用:

<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>BPMNJS</title>     <!--CDN加速-->     <script src="https://unpkg.com/bpmn-js@6.0.2/dist/bpmn-viewer.development.js"></script>    <!--引入一个简单的xml字符串-->     <script src="./xmlStr.js"></script>     <style>         #canvas {             height: 400px;         }     </style> </head> <body>     <div id="canvas"></div>     <script>         var bpmnJS = new BpmnJS({             container: '#canvas'         });         bpmnJS.importXML(xmlStr, function(err) {             if (!err) {                 console.log('success!');                 // 让图能自适应屏幕                 var canvas = bpmnJS.get('canvas')                 canvas.zoom('fit-viewport')             } else {                 console.log('something went wrong:', err);             }         });     </script> </body> </html> 复制代码

(上面的xmlStr.js以及案例代码在这里LinDaiDai-bpmn-basic-demo)

如上面的案例所示, 我们使用CDN加速直接引入bpmn.js, 然后本地指定一个容器(也就是idcanvas的那个div), 接着用bpmn.js提供的方法importXML就可以解析xml字符串生成对应的工作流图了.

打开页面可以看到

img1img1

使用npm安装bpmn.js

上面提供的使用方式是一种最基本的方式,仅仅是将图展示出来,不能自己绘画也不能操作. 所以在工作中使用更多的还是采用npm安装到项目中使用. 我们可以使用以下命令进行安装:

npm install --save bpmn-js 复制代码

在应用程序中使用:

import BpmnViewer from 'bpmn-js'; import testDiagram from './test-diagram.bpmn'; var viewer = new BpmnViewer({   container: '#canvas' }); viewer.importXML(testDiagram, function(err) {   if (!err) {     console.log('success!');     viewer.get('canvas').zoom('fit-viewport');   } else {     console.log('something went wrong:', err);   } }); 复制代码

上面的testDiagram指的是某个bpmn 文件了,而不是第一个案例中的xml字符串.

官方这边也提供了一个例子, 可以看一下: bpmn-js-example-bunding

vue中使用bpmn.js

vue 中的使用可以分为以下几个部分:

  • vue中使用bpmn.js-基础篇

  • vue中使用bpmn.js-左侧工具栏

  • vue中使用bpmn.js-右侧属性栏

为了方便讲解, 我先创建一个空的vue项目(只安装了路由):

vue create vue-bpmn-basic cd vue-bpmn-basic npm i vue-router --save-D 复制代码

注⚠️️

你可以不用本地创建, 此项目地址

LinDaiDai/bpmn-vue-basic

vue中使用bpmn.js-基础篇

我在项目的components文件夹下创建一个名为basic.vue的文件, 且配置好路由:

const routes = [     {      path: '/basic',      component: () => import('./../components/basic')     } ] 复制代码

项目结构如图所示:

img5img5

  1. 安装相关依赖

npm i bpmn-js --save-D 复制代码

  1. 编写HTML代码

// basic.vue <template>   <div>     <div ref="canvas"></div>   </div> </template> 复制代码

  1. 编写JS代码

// basic.vue   <script>     // 引入相关的依赖     import BpmnModeler from 'bpmn-js/lib/Modeler'     import {       xmlStr     } from '../mock/xmlStr' // 这里是直接引用了xml字符串     export default {       name: '',       components: {},       // 生命周期 - 创建完成(可以访问当前this实例)       created() { },       // 生命周期 - 载入后, Vue 实例挂载到实际的 DOM 操作完成,一般在该过程进行 Ajax 交互       mounted() {         this.init()       },       data() {         return {           // bpmn建模器           bpmnModeler: null,           container: null,           canvas: null         }       },       methods: {         init() {           // 获取到属性ref为“canvas”的dom节点           const canvas = this.$refs.canvas           // 建模           this.bpmnModeler = new BpmnModeler({             container: canvas           })           this.createNewDiagram()         },         createNewDiagram() {           // 将字符串转换成图显示出来           this.bpmnModeler.importXML(xmlStr, (err) => {             if (err) {               // console.error(err)             } else {               // 这里是成功之后的回调, 可以在这里做一系列事情               this.success()             }           })         },         success() {           // console.log('创建成功!')         }       }     }   </script> 复制代码

  1. 编写CSS

// basic.vue <style scoped> .containers{ position: absolute; background-color: #ffffff; width: 100%; height: 100%; } .canvas{ width: 100%; height: 100%; } .panel{ position: absolute; right: 0; top: 0; width: 300px; } </style> 复制代码

使用命令npm run start启动项目, 打开可以看到:

img2img2

vue中使用bpmn.js-左侧工具栏

左侧工具栏作用: 给图形添加新的节点

如图所示:

img3img3

要想使用左侧工具栏, 只需要在项目中引用相应的样式就可以了:

main.js中引用css:

// main.js import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false // 以下为bpmn工作流绘图工具的样式 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' new Vue({     router,     render: h => h(App), }).$mount('#app') 复制代码

provider.vue的其他代码片段都和basic.vue 相同.

此时打开页面就发现多了左侧的工具栏, 且可以添加节点.

vue中使用bpmn.js-右侧属性栏

属性栏的作用: 用户在点击图上的节点的时候, 能获取到该节点的属性信息

如图所示:

img4img4

想要使用右侧的属性栏就得安装上一个名为bpmn-js-properties-panel的插件了.

  1. 安装插件

npm i bpmn-js-properties-panel --save-D 复制代码

  1. main.js中引入相应样式:

// main.js import Vue from 'vue' ... import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css' // 右边工具栏样式 ... 复制代码

  1. 在页面中引入propertiesProviderModule和propertiesPanelModule :

// panel.vue <script> ... import propertiesPanelModule from 'bpmn-js-properties-panel' import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/camunda' import camundaModdleDescriptor from 'camunda-bpmn-moddle/resources/camunda' ... methods: {   init() {     // 获取到属性ref为“canvas”的dom节点     const canvas = this.$refs.canvas     // 建模     this.bpmnModeler = new BpmnModeler({       container: canvas,       //添加控制板       propertiesPanel: {         parent: '#js-properties-panel'       },       additionalModules: [         // 右边的属性栏         propertiesProviderModule,         propertiesPanelModule       ],       moddleExtensions: {         camunda: camundaModdleDescriptor       }     })     this.createNewDiagram()   } }


作者:LinDaiDai_霖呆呆
链接:https://juejin.cn/post/6844904017584193544


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐