当前位置: 首页 > news >正文

如何自己实现一个丝滑的流程图绘制工具(四)bpmn-js开启只读状态

背景

流程图需要支持只读状态和编辑状态

翻看官方案例源码,扒拉到了禁用的js代码

DisableModeling.js

const TOGGLE_MODE_EVENT = 'toggleMode'
const HIGH_PRIORITY = 10001export default function DisableModeling(eventBus,contextPad,dragging,directEditing,editorActions,modeling,palette,paletteProvider
) {let modelingDisabled = falselet isDisableLabel = falseeventBus.on(TOGGLE_MODE_EVENT, HIGH_PRIORITY, event => {modelingDisabled = event.activeif (modelingDisabled) {directEditing.cancel()contextPad.close()dragging.cancel()}palette._update()})eventBus.on('isDisableLabel', HIGH_PRIORITY, event => {isDisableLabel = event.activepalette._update()})function intercept(obj, fnName, cb) {const fn = obj[fnName]obj[fnName] = function() {return cb.call(this, fn, arguments)}}function ignoreIfModelingDisabled(obj, fnName) {intercept(obj, fnName, function(fn, args) {if (modelingDisabled) {return}if (fnName === 'activate' && isDisableLabel) {return}return fn.apply(this, args)})}function throwIfModelingDisabled(obj, fnName) {intercept(obj, fnName, function(fn, args) {if (modelingDisabled) {throw new Error(`${fnName} model is read-only`)}return fn.apply(this, args)})}ignoreIfModelingDisabled(contextPad, 'open')ignoreIfModelingDisabled(dragging, 'init')ignoreIfModelingDisabled(directEditing, 'activate')throwIfModelingDisabled(modeling, 'updateAttachment')throwIfModelingDisabled(modeling, 'moveElements')throwIfModelingDisabled(modeling, 'moveConnection')throwIfModelingDisabled(modeling, 'createConnection')throwIfModelingDisabled(modeling, 'appendShape')throwIfModelingDisabled(modeling, 'removeElements')throwIfModelingDisabled(modeling, 'distributeElements')throwIfModelingDisabled(modeling, 'removeShape')throwIfModelingDisabled(modeling, 'removeConnection')throwIfModelingDisabled(modeling, 'replaceShape')throwIfModelingDisabled(modeling, 'pasteElements')throwIfModelingDisabled(modeling, 'alignElements')throwIfModelingDisabled(modeling, 'createSpace')throwIfModelingDisabled(modeling, 'updateWaypoints')throwIfModelingDisabled(modeling, 'reconnectStart')throwIfModelingDisabled(modeling, 'reconnectEnd')intercept(editorActions, 'trigger', function(fn, args) {const action = args[0]if (modelingDisabled &&isAnyAction(['undo','redo','copy','paste','removeSelection','spaceTool','lassoTool','globalConnectTool','distributeElements','alignElements','directEditing'],action)) {return}return fn.apply(this, args)})
}DisableModeling.$inject = ['eventBus','contextPad','dragging','directEditing','editorActions','modeling','palette','paletteProvider'
]// helpers //function isAnyAction(actions, action) {return actions.indexOf(action) > -1
}

引入就行,在vue页面调用禁用方法

/*** 禁用画板* @param {*} status*/handleDisable(status) {// 获取 bpmn-js 的容器元素const eventBus = this.bpmnModeler.get('eventBus')eventBus.fire('toggleMode', {active: status})if (this.isDisableLabelEdit) {eventBus.fire('isDisableLabel', {active: true})}if (status || !this.isShowPalette) {const paletteElement = document.querySelector('.djs-palette')paletteElement.classList.remove('open')}},
http://www.lryc.cn/news/139625.html

相关文章:

  • 字节跳动 Git 的正确使用姿势与最佳实践
  • 龙迅LT7911UX TYPE-C/DP转MIPI/LVDS,内有HDCP
  • Spearman Footrule距离
  • docker 安装 Wordpress 用lnmp搭建出现的故障
  • 【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)
  • 【Spring框架】Spring事务的介绍与使用方法
  • 七夕特别篇 | 浪漫的Bug
  • 数据结构双向链表
  • 解决政务审计大数据传输难题!镭速传输为政务行业提供解决方案
  • redis 7高级篇1 redis的单线程与多线程
  • GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程
  • vue ui 创建项目没有反应
  • go语言中channel类型
  • 基于STM32F1的电子罗盘HMC5883L角度测量
  • Oracle解锁表、包、用户、杀会话、停job
  • 软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用
  • Redis Pub/Sub 指南
  • Nest(2):Nest 应用目录结构和脚手架命令介绍
  • 【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片
  • 矢量调制分析基础
  • ensp-Ipv6配置配置
  • java八股文面试[java基础]—— hashCode 与 equals 区别 == 与 equals的区别
  • Dubbo之PojoUtils源码分析
  • 【C++】—— C++11新特性之 “右值引用和移动语义”
  • 谈一谈redis脑裂
  • 基于原生Servlet使用模板引擎Thymeleaf访问界面
  • 【C语言】15-函数-1
  • 08-信息收集-架构、搭建、WAF等
  • Qt --- 显示相关设置 窗口属性等
  • 使用小程序实现左侧菜单,右侧列表双向联动效果