自定义bpmn.js左侧工具栏palette样式

  • 一、回顾
    • 1.预览
    • 2.目录结构
  • 二、代码
    • 1.paletteProvider.js文件
    • 2.css文件
    • 3.index.js文件
  • 三、总结

一、回顾

1.预览

我们来实现如下左侧工具栏的自定义样式。

2.目录结构

plugins文件目录下新建palette文件夹。创建一个index.js入口文件和paletteProvider.js自定义palette文件(用来覆盖默认palette)。

二、代码

paletteProvider.js文件是一个导出类,里面是我们自定义的左侧工具栏的代码。

index.js是palette的入口文件,导出初始化的自定义paletteProvider.js

1.paletteProvider.js文件

import {assign
} from "min-dash";export default function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {this._palette = palette;this._create = create;this._elementFactory = elementFactory;this._spaceTool = spaceTool;this._lassoTool = lassoTool;this._handTool = handTool;this._globalConnect = globalConnect;this._translate = translate;palette.registerProvider(this);
}
PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"];PaletteProvider.prototype.getPaletteEntries = function () {var actions = {},create = this._create,elementFactory = this._elementFactory,spaceTool = this._spaceTool,lassoTool = this._lassoTool,handTool = this._handTool,globalConnect = this._globalConnect,translate = this._translate;function createAction(type, group, className, title, options) {function createListener(event) {var shape = elementFactory.createShape(assign({type: type}, options));if (options) {shape.businessObject.di.isExpanded = options.isExpanded;}create.start(event, shape);}var shortType = type.replace(/^bpmn:/, "");return {group,className,title: title || translate("Create {type}", {type: shortType}),action: {dragstart: createListener,click: createListener}};}assign(actions, {"hand-tool": {group: "tools",className: "bpmn-icon-hand-tool",title: translate("Activate the hand tool"),action: {click: function (event) {handTool.activateHand(event);}}},"lasso-tool": {group: "tools",className: "bpmn-icon-lasso-tool",title: translate("Activate the lasso tool"),action: {click: function (event) {lassoTool.activateSelection(event);}}},"space-tool": {group: "tools",className: "bpmn-icon-space-tool",title: translate("Activate the create/remove space tool"),action: {click: function (event) {spaceTool.activateSelection(event);}}},//连线样式"global-connect-tool": {group: "tools",// className: "bpmn-icon-connection-multi",className: "feelec feel-lianxian coldel",title: translate("Activate the global connect tool"),action: {click: function (event) {globalConnect.toggle(event);}}},"tool-separator": {group: "tools",separator: true},//开始事件 bpmn-icon-start-event-none"create.start-event": createAction("bpmn:StartEvent", "event", "icon-custom startNode", translate("Create StartEvent")),//用户  bpmn-icon-user-task"create.user-task": createAction("bpmn:UserTask", "activity", "icon-custom taskNode", translate("Create User Task")),// 网关 bpmn-icon-gateway-none"create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "icon-custom gatewayNode", translate("Create Gateway")),// 结束事件 bpmn-icon-end-event-none"create.end-event": createAction("bpmn:EndEvent", "event", "icon-custom endNode", translate("Create EndEvent")),});return actions;
};

上面代码做的事情:
重写 PaletteProvider 类,同时覆盖了其原型上的 getPaletteEntries 方法

上面代码较多,拆分为两个部分来看更清晰:
第一部分:
首先导出了 PaletteProvider
在类中使用palette.registerProvider(this)指定这是一个palette
使用 $inject 注入一些需要的变量到 PaletteProvider

第二部分:
在PaletteProvider函数原型上编写getPaletteEntries函数;函数返回的是一个对象,对象中就是左侧工具栏的每一项。

我的前四项用的原生项,后四项start-eventuser-taskexclusive-gatewayend-event是自定义项;createAction函数是用来创建自定义工具栏shape的方法。

返回的对象中的属性:
group:当前项属于哪个分组
className:样式类名,主要是通过这个类名来修改自定义项的样式
title: 鼠标移动到元素上面给出的提示信息
action:用户操作时会触发的事件

2.css文件

自定义样式文件process-panel.scss里定义了className里面的类来实现自定义样式。

/* process-panel.scss */
.icon-custom {border-radius: 50%;background-size: 65%;background-repeat: no-repeat;background-position: center;
}
.startNode {background-image: url('../../../../../../public/bpmn_imgs/startNode.png');
}
.endNode {background-image: url('../../../../../../public/bpmn_imgs/endNode.png');
}
.taskNode {background-image: url('../../../../../../public/bpmn_imgs/taskNode.png');
}
.gatewayNode {background-image: url('../../../../../../public/bpmn_imgs/gatewayNode.png');
}

3.index.js文件

import customPaletteProvider from "./paletteProvider";
export default {__init__: ["paletteProvider"],paletteProvider: ["type", customPaletteProvider]
};

导出自定义palette

三、总结

到这palette部分就完成了,接下来就是部分renderer、contextPad部分和在页面中的使用了。renderer、contextPad这两部分的思路和palette一样,重写原生的类来达到自定义的效果。

Vue+bpmn.js自定义流程图之palette(二)相关推荐

  1. Bpmn.js自定义文件说明

    Bpmn.js自定义文件说明 由于工作需要(其实不是很需要),在公司项目的基础上开源了一个基于 bpmn-js + Vue 2.x + ElementUI 的一个流程编辑器 Bpmn Process ...

  2. vue bpmn.js简单使用

    bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 官方demo https://github.com/bpmn-io/bpmn-js-examples b ...

  3. VUE+bpmn.js+iview 页面绘制流程图

    前言:业务需求需要在页面绘制流程图,之前后台的同事都是在eclipse画的流程图,为了方便点希望能在页面上画. 我用的是iview的ui框架,用原生的话记得把按钮等标签改改. 如果用的是element ...

  4. 自定义bpmn.js左侧工具栏palette样式

    自定义bpmn.jspalette样式 前期准备 我在之前的 vue-bpmn 项目的 git 仓库下新创建了一个分支 custom,用来存放自定义样式的相关内容,项目快速预览地址 bpmn.js 的 ...

  5. flowable实战(十五)关于流程设计器 bpmn.js与vue的整合

    一.前言: 由于flowable本身带的Moder风格实在与前端页面风格不一样,同时由于Modeler采用Angular.js写的,改造起来相对有一定的难度,所以打算换成bpmn.js当成流程设计器. ...

  6. (13)Vue.js 自定义指令

    一.Vue.js之定义指令介绍 前面我们学习了一些Vue.js给我们提供的指令,那么我们知道指令就是帮助我们去简化DOM操作的,相当于对基础 DOM操作的一种封装.那么我们仅仅使用这些Vue.js提供 ...

  7. js:Vue.js自定义指令实现scroll下滑滚动翻页

    Vue.js自定义指令实现scroll下滑滚动翻页 核心代码 import Vue from 'vue'// v-scroll Vue.directive('scroll', {bind(el, bi ...

  8. vue整合bpmn.js并汉化

    文章目录 展示最终效果 壹.准备工作 贰.目录结构和所有文件 1.main.js 文件引入样式文件 2.BpmnModeler.vue 3.defaultXmlStr.js 4.customTrans ...

  9. bpmn.js+vue实现工作流设计器(左侧功能+右侧详情)

    前言: 整理在vue项目中使用bpmn.js的过程和源码. 实现最终效果: 目录: 1.bpmn.js的介绍,官网入口 2.bpmn.js中实现最简单的效果: 引入插件1: 开始开发: (1)页面上: ...

最新文章

  1. 对象存储与块存储、文件存储等对比
  2. 【TypeScript】箭头函数
  3. Shared pool内存块组成结构及4031错误原因分析
  4. 个人博客网站 Welcome All
  5. leetcode刷题:无重复字符的最长子串
  6. 全面剖析Ajax的XMLHttpRequest对象(学习Ajax必须知道的东西)
  7. bootstrap table 服务端分页
  8. 学python电脑硬件_Python实现的读取电脑硬件信息功能示例
  9. iOS 13 暗黑模式的适配
  10. 最近要使用User Interface Process Application Block for .NET(微软net开发架构)
  11. 教你如何下载微软补丁
  12. 松下FPX通用通信编程实例
  13. Linux内核kconfig调用关系,探索Linux内核:Kconfig的秘密
  14. Git正解 脱水版 【10. 内部机制】
  15. Windows垃圾清理BAT脚本
  16. dfuse 加入 BGA 区块链游戏联盟
  17. php检索本地文件,神器:不仅秒搜本地文件,还能1秒在线检索文献!
  18. 域名抢注时要注意什么?域名抢注要知道什么?
  19. c语言中,从键盘输入一个长方体的长宽高,用函数实现求长方体的体积,由主函数调用该函数,要求长方体的长、宽、高从主函数输入,长方体的体积作为函数返回值。
  20. php crypt md5,PHP crypt()-返回的md5哈希

热门文章

  1. MBA-day26 数的概念与性质
  2. e代驾——打造代驾服务标准化平台
  3. 安卓bmi项目_Android|BMI体质计算器实现(附测试源码)
  4. 案例3-1 基于控制台的购书系统
  5. strncasecmp与strcasecmp用法
  6. pyqt5 和 pySinde2 动态加载 QT Designer
  7. 一文让你吃透!图解 pandas 透视表、交叉表!
  8. python字符串索引
  9. 渗透测试信息收集概要
  10. Virustotal——md5转sha256