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,可以看到右下角多了一个红色的自定义工具,其行为是创建一个用户任务

相关推荐
开源驰骋低代码_工作流2 天前
交互层是产品还是框架:四大菜单与三大处理器的对比视角
bpmn-js
开源驰骋低代码_工作流9 天前
不做甘特图控件:流程引擎之上的工程运行时怎么设计
bpmn-js
开源驰骋低代码_工作流9 天前
三类任务、一个工作台:把项目执行收进流程平台的产品设计
bpmn-js
开源驰骋低代码_工作流10 天前
同一道请假审批,六款 Java 工作流引擎的实现路径与成本对比
bpmn-js
开源驰骋低代码_工作流10 天前
把请假审批交给六款 .NET 引擎:实现路径、场景适配与相对打分
bpmn-js
开源驰骋低代码_工作流15 天前
不走寻常路的 ORM:Map/Attr 元数据体系如何同时驱动持久化与表单渲染
bpmn-js
zm4351 年前
bpmn.js 自定义绘制流程图节点
前端·bpmn-js
Solon阿杰1 年前
solon-flow基于bpmnJs的流程设计器
javascript·bpmn-js
MiyueFE2 年前
07-源码篇6:Featrues 体验优化与功能扩展(一)
bpmn-js
MiyueFE2 年前
06-源码篇5:CommandStack 命令处理与记录的栈
bpmn-js