添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

前提:项目中需要绘制流程图的需求,涉及到Activiti和Bpmn.js的使用,接下来就来看看如何在Vue中使用Bpmn.js绘制在线流程图吧。

额, bpmn.js 是什么?是一个实验BPMN2.0渲染工具包和web建模器,可以使画流程图的功能在前端来完成。
如果你不了解它的话,可以来这 初体验一下 ,看看它是否满足你的需求吧。
vue 中集成 Bpmn.js 实现在线绘图,导出 xml svg 、在线保存等操作

bpmn.js界面内容介绍
在这里插入图片描述
接下来进入正题啦!
首先先创建一个 vue 项目,并安装好路由

vue create vue-bpmn
cd vue-bpmn
npm i vue-router -S

项目搭建完成后,配置好路由相关部分,我们在views文件夹下新建一个basic.vue的文件

vue中使用bpmn.js

bpmn.js 基础

其实这部分主要是将 xml 格式的 bpmn 内容解析为图片显示出来

  1. 安装相关依赖
npm i bpmn-js --save-D
  1. 添加 Bpmn 流程图模板 xml 文件(这个文件可以自己绘图构建)
    mock 文件夹下新建 xmlStr.js 文件
export var xmlStr = `
<?xml version="1.0" encoding="UTF-8"?>
  <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
        xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
        xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
        id="sample-diagram"
        targetNamespace="http://bpmn.io/schema/bpmn"
        xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="Process_1" isExecutable="false">
    <bpmn2:startEvent id="StartEvent_1" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="192" y="82" width="36" height="36" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>`
  1. 编写相关代码 basic.vue
<template>
  <div class="container">
    <div class="canvas" ref="canvas"></div>
  </div>
</template>
<script>
// 引入相关依赖
import BpmnModeler from 'bpmn-js/lib/Modeler'
import { xmlStr } from '../mock/xmlStr' // 直接引用 xml格式
export default {
  name: 'basic',
  data () {
    return {
      bpmnModeler: null, // bpmn 建模器
      container: null,
      canvas: null
  mounted () {
    this.init()
  methods: {
    init () {
      // 获取canvas的dom节点
      const canvas = this.$refs.canvas
      // 建模
      this.bpmnModeler = new BpmnModeler({
        container: canvas
      this.createNewDiagram()
    createNewDiagram () {
      // 将字符串转换成图显示出来
      try {
        const result = this.bpmnModeler.importXML(xmlStr)
        const { warnings } = result
        console.log(warnings)
      } catch (err) {
        console.log(err.message, err.warnings)
</script>
<style scoped>
.container {
  width: 100%;
  height: 100%;
.canvas {
  width: 100%;
  height: 100%;
</style>

运行代码后效果图

bpmn.js添加左侧工具栏

左侧工具栏主要是为用户在线自定义流程图使用

如果我们需要使用左侧的工具栏,只需要在 main.js 中引入相应的 css 样式就可以了
main.js 中添加bpmn左侧工具栏 css 样式

import Vue from 'vue'
import App from './App.vue'
import router from './routes/index'
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')

其他代码都不变,此时页面上就多了左侧工具栏了,我们可以自己添加节点

补充:如果你添加了左侧工具栏的样式,但是你不想绘制流程图,只查看流程图的话,也可以将 basic.vue 下面的内容修改一下就可以啦

// 绘制流程图
// import BpmnModeler from "bpmn-js/lib/Modeler"
// 预览流程图
import BpmnViewer from "bpmn-js/lib/Viewer"
init() {
      const canvas = this.$refs.canvas
      // this.bpmnModeler = new BpmnModeler({  // 可编辑
      this.bpmnModeler = new BpmnViewer({ // 仅预览
        container: canvas
      this.createNewDiagram()

bpmn.js添加右侧属性栏

属性栏顾名思义就是流程图中节点的属性信息

如果想在界面中添加右侧属性栏的话就需要安装相关插件了

npm i bpmn-js-properties-panel --save-D
npm i camunda-bpmn-moddle --save-D
  1. main.js 中添加相关 css 样式
import Vue from 'vue'
import App from './App.vue'
// 使用bpmn.js- 右侧属性栏
import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css' // 右边工具栏样式
  1. views 下新建 panel.vue 文件,并配置好路由

打 … 的地方和 basic.vue 文件的内容一样哦

// panel.vue
<template>
  <div class="container">
    <div class="canvas" ref="canvas"></div>
    <!-- 右边属性栏部分 -->
    <div id="js-properties-panel" class="panel"></div>
  </div>
</template>
<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'
export default {
  name: 'basic',
  data () {
    return {
  mounted () {
    this.init()
  methods: {
    init () {
      // 获取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()
    createNewDiagram () {
</script>
<style scoped>
.panel {
  position: absolute;
  top: 0;
  right: 0;
  width: 300px;
</style>

运行后效果

以上,就是 在 vue 中使用 bpmn.js 中绘制流程图的全部内容啦!

关于右下角 BPMN.IO 这个 logo,官方要求是不给删或者隐藏的,否则就侵权,如果实在是不需要 logo的话可以简单地把 logo 的 css样式隐藏一下

js 部分

mounted() {
    // 删除 bpmn logo  bpmn.io官方要求不给删或者隐藏,否则侵权   内部使用
    const bjsIoLogo = document.querySelector('.bjs-powered-by')
    while (bjsIoLogo.firstChild) {
      bjsIoLogo.removeChild(bjsIoLogo.firstChild)

css 部分

.bjs-powered-by {
  display:none !important;

一个可参考的链接地址:https://gitee.com/MiyueSC/bpmn-process-designer?_from=gitee_search

bpmn.js-doc 这里总结了 bpmn-js 用法以及一些 API 由于本人也是新手,有些地方总结得不到位或者用词不当,这个笔记会在日后不断完善,望各位老爷多多指点 :kissing_face_with_closed_eyes: 本篇笔记旨在技术交流,觉得还可以的希望可以给的 star:handshake: 不同功能的代码在不同分支 开发分支,的代码分支,完整度高 自定义工具栏分支 欢迎留言交流: vue + bpmn 预览: 自定义 Palette => 指定 Palette 容器 自定义 Renderer 自定义 contextPad 自定义连线和箭头的颜色 自定义规则 自定义 properties-panel 右上角小地图 总结常用 API :triangular_flag: 为 Viewer 添加一些功能 bpmn-camunda DEMO 可能对你有帮助的资料 diagram-js 是一个工具箱,用于在 web 上显示 BPMN 无处不在,适合所有人 在浏览器创建、嵌入和扩展 BPMN 图。单独使用它或将其集成到您的应用程序。 1.使用基于Web 的建模组件 轻松创建您自己的 BPMN 2.0 图表。 2.使用该工具包将 BPMN 2.0 图表嵌入到您的应用程序。 使用对您和您的业务很重要的数据来 丰富他们。 3. 集成浏览器内流程引擎、令牌模拟、自定义元素、样式或建模规则。这取决于您,因为 bpmn-js 是一个开放的工具包。 自定义流程设计器bpmn-js初体验安装vue使用vue-cli创建项目安装bpmn-js简单的查看工作流图形的例子间遇到的问题新需求:可以拖拽自定义工作流 此文只为记录一下自己学习bpmn-js和使用bpmn-js实现工作流设计器的过程。 bpmn-js初体验 安装vue 新版的vue-cli有图形化工具,新版本的Vue CLI 的包名称由 vue-cli 改成了 @vue/cli。如果你已经...     因为之前项目需求需要用到Activiti以及Bpmn.js,我就去学了一波操作了一波,再学习使用的过程经常去百度发现对于Activiti7以及Bpmn.js的文章还是相对比较少的,或者说描述的不够详细以及版本相对比较旧的问题,所以现在记录一下我整合Bpmn.js的一些步骤以及操作。     有关后端方面的Spring Boot整合Activiti7的一些操作我下次再整理发布一边专门的博客来记录,这次先来看一下Vue怎么样集成Bpmn.js实现在线绘图,导出Xml,svg,在线保存等操作。     如果您有什么好的建议以及问题可以发送邮件到“”     Github 完整代码     首先不用说肯定先得有一个Vue的一个项目,先建一个Vue的项目,安装一下依赖。 // 创建一个Vue项目 vue create bpmn-demo // 安装一下项目 /打开package.json,下面的版本必须按照这个来,否则报错。//创建customTranslate.js 内容如下。//创建translations.js 内容如下。//浏览器打开地址,下面就是集成好的界面了。//在App.vue直接替换,内容如下。//在main.js直接替换,内容如下。//vue必须选择2的版本,否则报错。//安装bpmn 后面记得改版本。//删除node_modules。//先提前安装好cnpm。// 创建一个Vue项目。// 安装一下项目依赖,//然后重新安装依赖。 本文集成现成的Vue设计器组件 Element UI版本 workflow-bpmn-modeler Ant Design Vue 版本 workflow-bpmn-modeler-antdv npm i workflow-bpmn-modeler-antdv 修改package.json: "bpmn-js-properties-panel":"https://github.com/RubyLinT/bpmn-js-properties-panel.git", "activiti-bpmn-mod...