bpmn-js中定制工具面板

默认工具面板

bpmn-js14.2.0版本为例,实例化Modeler

ts 复制代码
import Modeler from 'bpmn-js/lib/Modeler'
new Modeler({ container: document.querySelector('#contaienr') })

默认渲染效果如下:

如果你的业务需要对工具面板以进行定制,可以通过重写 PaletteProvider类实现,它支持增加、删除工具以及修改工具样式

删除默认工具

PaletteProvider类的实例方法getPaletteEntries()返回一个以工具名称和工具配置组成的对象,如果要删除某个工具,只需要删除工具在对象中对应的属性即可,下面以删除创建组工具为例:

ts 复制代码
import PaletteProvider from 'bpmn-js/lib/features/palette/PaletteProvider'

class CustomPaletteProvider extends PaletteProvider {
    getPaletteEntries() {
        const actions = super.getPaletteEntries()
        delete actions['create.group']
        return actions
    }
}

初始化Modeler时应用上面定义的CustomPaletteProvider

ts 复制代码
new Modeler({
    container: containerRef.value,
    additionalModules: [
      { paletteProvider: ['type', CustomPaletteProvider] },
    ],
  })

可以看到工具面板右下角的创建组工具已经被删掉了

添加自定义工具

添加自定义工具也是通过修改PaletteProvider类的实例方法getPaletteEntries()的返回值来实现(即向ctions对象添加自定义的工具名称及行为配置):

ts 复制代码
import PaletteProvider, type { Create, ElementFactory, GlobalConnect, HandTool, LassoTool, Palette, SpaceTool, Translate } from 'bpmn-js/lib/features/palette/PaletteProvider'
class CustomPaletteProvider extends PaletteProvider {
    create!: Create
    elementFactory!: ElementFactory
    
    constructor(palette: Palette, create: Create, elementFactory: ElementFactory, spaceTool: SpaceTool, lassoTool: LassoTool, handTool: HandTool, globalConnect: GlobalConnect, translate: Translate) {
        super(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate)
        this.create = create
        this.elementFactory = elementFactory
    }
    
    createUserTask(event: Event) {
        const shape = this.elementFactory.createShape({ type: 'bpmn:UserTask' })
        this.create.start(event, shape, null)
    }

    getPaletteEntries() {
        const actions = super.getPaletteEntries()
        delete actions['create.group']
        return {
            ...actions,
            'myAction': {
                className: 'my-action-icon', // 自定义class
                title: '自定义工具', // 工具名称,hover时显示
                action: {
                    dragstart: (event: Event) => this.createUserTask(event), // 拖动时执行
                    click: (event: Event) => this.createUserTask(event), // 点击时执行
                },
            },
        }
    }
}

用上面定义的CustomPaletteProvider初始化Modeler,可以看到右下角多了一个红色的自定义工具,其行为是创建一个用户任务

相关推荐
MiyueFE15 天前
02-源码篇1:Injector 依赖注入模式的实现
工作流引擎·bpmn-js
得物技术4 个月前
探索BPMN—工作流技术的理论与实践|得物技术
javascript·bpmn-js
胖蔡8 个月前
聊一聊bpmn-js中的Viewer和Modeler
前端·workflow·bpmn-js
sye8 个月前
基于React的工作流 bpmn.js基本使用(3)-流程模拟的使用(运行过程中暂停、继续,多分路运行)
前端·bpmn-js
胖蔡9 个月前
bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具
前端·workflow·bpmn-js
胖蔡9 个月前
bpmn-js 事件总线处理
开发语言·前端·javascript·bpmn-js
得帆云低代码1 年前
一文读懂什么是新一代BPM
低代码·bpmn-js
sye1 年前
基于React的工作流 bpmn.js基本使用(2)-自定义右侧属性栏之更新业务属性到bpmn内
前端·bpmn-js