流程图 workflow-bpmn-modeler

1,476 阅读3分钟

一、介绍

workflow-bpmn-modeler 基于 Vue 和 bpmn.io@7.0,实现了 flowable 的工作流设计器。

二、用法

1.主文件

<template>
  <div>
    <bpmn-modeler
      ref="refNode"
      :xml="xml"
      :users="users"
      :groups="groups"
      :categorys="categorys"
      :is-view="false"
      @save="save"
    />
  </div>
</template>
<script>
import bpmnModeler from "workflow-bpmn-modeler"; // 从 workflow-bpmn-modeler 中导入 bpmnModeler
export default {
  name: 'BpmnModeler',
  components: {
    bpmnModeler
  },
  data() {
    return {
      xml: '',
      users: [], 
      groups: [], 
      categorys: [] 
    }
  },
  created() {
    //  查询流程xml
    this.getModelDetail()
  },
  methods: {
    /** xml 文件 */
    getModelDetail() {
      // 发送请求,获取xml
      // this.xml = response.xml
    },
    /** 保存xml */
    save(data) {
      console.log(data)
      // { process: {...}, xml: '...', svg: '...' }
    }
  }
}
</script>

1)组建属性介绍:

1.xml:流程图文件xml数据。(可以提前给一个流程图的 XML 字符串,这样 bpmnModeler组件就会将这个XML字符串所对应的流程图给画出来,如果我们只是单纯的想自己绘制流程 图,那么这个可以不用管,给一个空字符串就行了)。

2.users:指定或者候选的用户列表,是一个数组。(当我们配置UserTask的时候,可以设置这个UserTask由谁来处理,users配置的就是这里用到的用户)。

3.groups:候选组。(这个类似于 users,也是在UserTask中,如果我们想要配置一个UserTask的候选组的话,那么就会用到 groups 中的内容)。

4.categorys:流程分类值。

5.is-view:视图模式。(这个表示当前bpmnModeler是要画流程图还是单纯的只是将流程图展示出来,false 表示我们是用 bpmnModeler 画流程图的,如果设置为 true,就表示 bpmnModeler 只是用来展示流程图)。

6.paletteFilters 左侧操作组件栏过滤, 例如: ['create.start-event', 'create.task']

7.paletteToolShow 左侧操作组件栏,行为组件是否显示,设置false组件的操作栏将被隐藏

8.rightActionConfig 头部右侧操作栏显示内容配置, 例如:showCode / downloadXML / downloadSVG / save

2)事件

1.save 保存按钮触发事件

2.showForm 显示挂在表单点击事件

3.creatForm 创建表单点击事件

具体属性参考:blog.csdn.net/weixin_4302…

2 ) 自定义Modeler

1.modeler 实例化
this.modeler = new Modeler({
      container: this.$refs.canvas, // 渲染容器
      additionalModules: [ //自定义且与默认扩展包一起使用的模块列表
        {
          translate: ['value', customTranslate] //汉化
        }
      ],
      moddleExtensions: { // 需要用的扩展包
        flowable: flowableModdle
      },
      // width:string | number;// 查看器宽度
      // height: string | number; // 查看器高度
      // modules:<didi.Module>[]; // 自定义且需要覆盖默认扩展包的模块列表
 })
 2.modeler实例化之后可直接调用的方法
        1.this.bpmnModeler.get(name, strict); // 返回name对应的模块实例
        2.// 内部调用了importXML方法,读取内部的默认xml字符串
          this.bpmnModeler.createDiagram();
        3.// 将图形dom挂载到目标节点
         this.bpmnModeler.attachTo(parentNode);
        4.// 清空
          this.bpmnModeler.clear()
        5.// 销毁
          this.bpmnModeler.destroy()
        6.// 脱离dom
          this.bpmnModeler.detach()
        7.// 获取流程定义
          this.bpmnModeler.getDefinitions()
        8.// 获取扩展功能模块列表
          this.bpmnModeler.getModules()
        9./**
         * 导入解析的定义并呈现BPMN 2.0图。完成后,查看器将结果报告回给提供的回调函数(错误,警告)
         * @param { ModdleElement<Definitions> } definitions 模块名
         * @param { ModdleElement<BPMNDiagram>|string } [bpmnDiagram] 要呈现的BPMN图或图的ID(如果未提供,将呈现第一个)
         */
        this.bpmnModeler.importDefinitions(definitions, bpmnDiagram)
        10./**
         * 导入xml(字符串形式),返回导入结果
         * 后续会取消传入回调函数的方式
         * 推荐使用async/await或者链式调用
         * @param { string } xml 流程图xml字符串
         * @param { Promise } callback 回调函数,出错时返回{ warnings,err }
         */
        this.bpmnModeler.importXML(xml, callback) !!!重要
        11.// 注销事件监听器
        this.bpmnModeler.off(eventName, callback)
        12.// 注册事件监听,同名将删除以前的监听器,privorty可不传,程序会自动替换回调函数
        this.bpmnModeler.on(eventName, priority, callback, target)
        13.// 保存为svg文件,与importXML方法一样,后续会取消传入callback的方式
        this.bpmnModeler.saveSVG(callback)
        14.// 保存为xml文件,与importXML方法一样,后续会取消传入callback的方式
        this.bpmnModeler.saveXML(callback)
  3.基础常用方法:
  前进: this.modeler.get('commandStack').redo()
  后退: this.modeler.get('commandStack').undo()
  方法缩小:
      this.zoom = this.modeler.get('canvas').zoom()
      this.zoom += (zoomIn ? 0.1 : -0.1)
      this.modeler.get('canvas').zoom(this.zoom)
 节点改变的方法:
   this.modeler.on('selection.changed', e => {})
  节点点击的方法:
    this.modeler.on('element.click', e => {})
  节点增加的方法:
    this.modeler.on('root.added', e => {}) 

三.workflow-bpmn-modeler代码流程图结构

index.vue 自定义的流程图的布局主入口,这里很重要!

PropertyPanel.vue 右侧属性栏的主组件方法

BpmData.js 存储流程设计相关参数

Flowable 属性的配置文件

nodePanel 右侧分别各个组件

Common 基础的一些方法

四.建议

如果是重头开发的话,建议用logic-flow:site.logic-flow.cn/docs/#/zh/g…