如何自己实现一个丝滑的流程图绘制工具(六)bpmn删除、复制节点

news2024/11/19 0:47:54

前言

需要对流程图支持键盘操作删除,复制节点的操作

1、删除节点

获取点击节点事件,把点中的节点存入变量

  eventBus.on('element.click', e => {
        const element = elementRegistry.get(e.element.id)
        this.currentElement = element
   })

监听键盘操作进行节点删除

 <div
   id="canvas"
   ref="canvas"   
   tabindex="0"      
   @keydown="onKeydown"
   @contextmenu.prevent
 ></div>
 onKeydown(e) {
      if (!this.enableCopy) return
      const code = e.keyCode
      if (code === 8 || e.key === 'Delete') {
        e.stopPropagation()
        this.batchDelete()
      }
    },
   batchDelete() {
   const bpmnModeling = this.bpmnModeler.get('modeling')
   if (this.currentElement && !this.activeIdList.length) {
     bpmnModeling.removeElements([this.currentElement])   
    }
 },

3、复制节点

复制节点是在自定义contextPad触发

CustomContextPadProvider.js

export default function ContextPadProvider(
  contextPad,
  config,
  injector,
  translate,
  bpmnFactory,
  elementFactory,
  create,
  modeling,
  connect,
  eventBus
) {
  this.create = create
  this.elementFactory = elementFactory
  this.translate = translate
  this.bpmnFactory = bpmnFactory
  this.modeling = modeling
  this.connect = connect
  this.eventBus = eventBus
  config = config || {}
  if (config.autoPlace !== false) {
    this.autoPlace = injector.get('autoPlace', false)
  }
  contextPad.registerProvider(this)
}

ContextPadProvider.$inject = [
  'contextPad',
  'config',
  'injector',
  'translate',
  'bpmnFactory',
  'elementFactory',
  'create',
  'modeling',
  'connect',
  'eventBus'
]

ContextPadProvider.prototype.getContextPadEntries = function(element) {
  const { autoPlace, eventBus, create, elementFactory, connect, translate, modeling } = this
  // 复制
  function handleCopyElement(event, element) {
    eventBus.fire('copy', { element: element })
  }

  function startConnect(event, element, autoActivate) {
    connect.start(event, element, autoActivate)
  }

  function copyElement() {
    return {
      group: 'edit',
      className: 'z-icon-document-copy',
      title: '复制',
      action: {
        click: handleCopyElement
      }
    }
  }
  function connectElement() {
    return {
      group: 'connect',
      className: 'bpmn-icon-connection',
      title: '连接线',
      action: {
        click: startConnect,
        dragstart: startConnect
      }
    }
  }
  if (!['label', 'bpmn:SequenceFlow'].includes(element.type)) {
    return {
      copy: copyElement(),
      connect: connectElement()
    }
  }
}

然后引入

// 复制功能的引入
import copyPasteModule from 'diagram-js/lib/features/copy-paste'
const additionalModules = [copyPasteModule]

   eventBus.on('copy', e => {
        const copyPaste = this.bpmnModeler.get('copyPaste')
        const element = elementRegistry.get(e.element.id)
        const rootElement = canvas.getRootElement()
        // 在这里处理按钮点击事件
        copyPaste.copy(element)
        // 获取当前视图框的信息
        const viewbox = canvas.viewbox()
        // 左上角的坐标
        const x = viewbox.x + this.config.width
        const y = viewbox.y + this.config.height
        const newElement = copyPaste.paste({
          element: rootElement,
          point: {
            x,
            y
          }
        })[0]      
      })

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++多线程编程——线程同步(保姆级-1.4W字)

目录 C线程同步 引入 互斥锁 std::mutex std::lock_guard类模板 unique_lock 成员方法 应用举例 std::lock()函数模板 std::call_once(flag、function) 懒汉式单例模式实例 unique_lock互斥锁方式 ​编辑 call_once方式 条件变量 std::condition 条件变量使…

017-文件

017-文件 一、C文件的有关概念 1.什么是文件 文件是指存储在外存储器上的数据的集合。 操作系统是以文件为单位对数据进行管理的。输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即输入输出流。C语言把文件看作是一个…

低功耗串口wifi模块在智能工厂解决方案中的数据透传应用

智能工厂解决方案必然是依赖于产品自身去完成信息采集&#xff0c;数据上传。目前基于串口WiFi模块的智慧工厂解决方案应用极为广泛。 工业物联网与串口WiFi模块 工业物联网是在制造和工业环境中&#xff0c;将连网仪器、传感器和其他设备与机械和流程连接起来的实现。创新的…

K8S cluster with multi-masters on Azure VM

拓扑参考&#xff1a; 在 Azure VM 实例上部署 KubeSphere 基础模板 需要修改 IP 地址和 VM Image的可以在模板中修改。 {"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#","contentVersion": &q…

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…

【数仓建设系列之三】数仓建模方式及如何评估数仓完善性

【数仓建设系列之三】数仓建模方式及如何评估数仓完善性 上篇文章我们对数仓的分层架构及核心概念做了简单介绍&#xff0c;同时也指明DW层是数仓建模的核心层。本篇文章&#xff0c;将详细从常见的维度模型建设手段及如何评估数仓建设的完善性展开讨论。 一、数仓维度建模 ​…

Azure - AzCopy学习

使用 AzCopy 将本地数据迁移到云存储空间 azcopy login 创建存储账号 ./azcopy login --tenant-id 40242385-c249-4746-95dc-4a0b64d49dc5这里的—tenant-id 在下面的地方查看&#xff1a;目录 ID&#xff1b;需要拥有Storage Blob Data Owner 的权限账号下可能会有很多目录&am…

SMC_TRAFOF_5Axes (FB)_标准龙门5轴

正计算&#xff1a; 电机位置》空间位姿 的正计算。 用于图形5轴控件的展示。 刀具长度 [u] 【脉冲当量】 电机转1圈是5毫米 电机转1圈要50000脉冲 如果刀具长5毫米&#xff0c;那么刀具长度u50000脉冲当量 输入输出&#xff1a; X轴 Y轴 Z轴 A轴【绕z轴旋转】东南西北方…

SFTP和SCP:哪种才是企业文件传输的可靠选择

文件传输在企业发展和业务拓展中越来越重要。为了保证数据的安全和传输的效率&#xff0c;企业需要选择合适、安全且高效的文件传输方式。在这种情况下&#xff0c;SFTP和SCP成为了企业文件传输的热门选择。 本文将详细介绍SFTP和SCP的特点&#xff0c;以及它们如何成为企业文…

ubuntu学习(四)----文件写入操作编程

1、write函数的详解 ssize_t write(int fd,const void*buf,size_t count); 参数说明&#xff1a; fd:是文件描述符&#xff08;write所对应的是写&#xff0c;即就是1&#xff09; buf:通常是一个字符串&#xff0c;需要写入的字符串 count&#xff1a;是每次写入的字节数…

【学习FreeRTOS】第19章——FreeRTOS低功耗模式Tickless

1.低功耗模式简介 很多应用场合对于功耗的要求很严格&#xff0c;比如可穿戴低功耗产品、物联网低功耗产品等一般MCU都有相应的低功耗模式&#xff0c;裸机开发时可以使用MCU的低功耗模式。FreeRTOS也提供了一个叫Tickless的低功耗模式&#xff0c;方便带FreeRTOS操作系统的应…

每日汇评:由于鲍威尔鹰派的讲话,黄金可能重新回到 1900 美元区域

1、金价暂停了四天的上涨趋势&#xff0c;但有望创下六周以来最好的一周&#xff1b; 2、在鲍威尔在杰克逊霍尔研讨会上发表讲话之前&#xff0c;美元恢复平静&#xff1b; 3、在 RSI 看跌的情况下&#xff0c;金价与 21 日移动平均线阻力位 1919 美元作斗争&#xff1b; 金…

免费PPT素材网站,我推荐这6个

找PPT素材、模板&#xff0c;就上这6个网站&#xff0c;免费下载&#xff0c;建议收藏~ 菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&…

适配小程序隐私保护指引设置

由于小程序发布了一个公告&#xff0c;那么接下来就是怎么改简单的问题了。毕竟不太想大的改动历史上的代码。尽量简单的适配隐私策略就可以了。 整体思路也是参考现在App普遍的启动就让用户同意隐私策略&#xff0c;不同意不让用&#xff0c;同意了之后才能够继续使用。 公告…

英伟达挖走小鹏汽车高管吴新宙!何小鹏亲自送行 | 百能云芯

8月25日消息&#xff0c;英伟达公司挖来小鹏汽车自动驾驶副总裁吴新宙&#xff0c;任命他为自动驾驶产品主管&#xff0c;该职位将于8月25日正式生效。 据悉&#xff0c;小鹏汽车董事长何小鹏在个人微博上晒出了一张与吴新宙以及英伟达CEO黄仁勋的合影&#xff0c;并透露即将展…

访学、博后参考|加拿大十大名校简介

上期我们介绍了加拿大各省所在大学的分布情况&#xff0c;本期知识人网小编整理出加拿大十大名校简介&#xff0c;供申请者参考。 1、多伦多大学&#xff08;University of Toronto&#xff09;&#xff08;University of Toronto&#xff09;&#xff08;University of Toront…

最新绕过目标域名CDN进行信息收集技术

绕过目标域名CDN进行信息收集 1&#xff0e;CDN简介及工作流程 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的目的是通过在现有的网络架构中增加一层新的Cache&#xff08;缓存&#xff09;层&#xff0c;将网站的内容发布到最接近用户的网…

一次harbor升级导致镜像项目访问无权限问题

一、问题背景 将环境中现运行的harbor版本升级到2.6.2版本&#xff0c;相关同事升级完&#xff0c;发现有部分镜像项目点进去报无权限问题&#xff0c;镜像项目无法使用&#xff0c;但是也有部分项目是可以正常提供使用的。 二、问题处理过程 1、根据报错反馈没权限&#xff…

Thinkphp内核微信拼团购物商城小程序源码

Thinkphp内核开发的微信拼团购物商城小程序源码&#xff0c;支持微信支付&#xff0c;站长亲测完美。 下载地址&#xff1a;https://bbs.csdn.net/topics/616764816

电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!

电脑文件删除了可以找回吗&#xff1f;可以。在原理上讲电脑删除的文件是有希望恢复的&#xff0c;因为操作系统在删除文件的时候并会不会立刻将文件彻底删除。当文件被删除的时候&#xff0c;其文件记录被删除&#xff0c;并且被文件占用的磁盘空间被标记为空闲。 这样对于用户…