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

前言

Q: bpmn.js是什么? 🤔️

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

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

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

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

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

所有教材的github地址: 《bpmn-chinese-document》

bpmn.js基本的使用

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

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

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

  • 使用npm安装bpmn.js

  • vue中使用bpmn.js

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

    <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> <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 )

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

    打开页面可以看到

    使用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')
    

    项目结构如图所示:

    // 生命周期 - 创建完成(可以访问当前this实例) created() { }, // 生命周期 - 载入后, Vue 实例挂载到实际的 DOM 操作完成,一般在该过程进行 Ajax 交互 mounted() { this.init() data() { return { // bpmn建模器 bpmnModeler: null, container: null, canvas: null methods: { init() { // 获取到属性ref为“canvas”的dom节点 const canvas1 = this.$refs.canvas1 // 建模 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>
  • 编写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启动项目, 打开可以看到:

    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')
  • 页面上引入propertiesProviderModule:
  • // provider.vue
    <script>
    import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/camunda'
    methods: {
        init () {
        // 获取到属性ref为“canvas”的dom节点
        const canvas = this.$refs.canvas
        // 建模
        this.bpmnModeler = new BpmnModeler({
          container: canvas,
          //添加控制板
          propertiesPanel: {
            parent: '#js-properties-panel'
          additionalModules: [
            // 左边工具栏以及节点
            propertiesProviderModule
        this.createNewDiagram()
    </script>
    

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

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

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

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

    如图所示:

    import Vue from 'vue' import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css' // 右边工具栏样式
  • 在页面中引入propertiesProviderModule:
  • // panel.vue
    <script>
    import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/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
        this.createNewDiagram()
    

    上述案例项目Git地址 : https://github.com/LinDaiDai/bpmn-vue-basic 喜欢的小伙伴请给个Star🌟呀, 谢谢😊

    系列全部目录请查看此处: 《全网最详bpmn.js教材》

    系列相关推荐: