首页 > 其他分享 >基于jsplumb构建的流程设计器

基于jsplumb构建的流程设计器

时间:2023-02-19 18:44:24浏览次数:44  
标签:jsPlumb 流程 变迁 js jsplumb connection 构建 id

项目背景

最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下

项目地址:https://gitee.com/code2roc/fast-flow-desgion

需求概述

流程设计器中最基础的两个元素为活动(节点)和变迁(连接),我们需要以下基础功能来配合相关接口进行工作流相关设计数据的保存/修改

  • 活动的添加/删除/移动
  • 变迁的添加/删除
  • 活动/变迁数据的全部读取
  • 根据json渲染活动与变迁

相关引入依赖如下表所示

名称 功能
jsplumb.js 设计器主要依赖,用于绘制相关图形与动态操作实现
jquery.js jsplumb依赖的库
jquery-ui.js jsplumb依赖的库,进行拖拽绑定
contextMenu.js 实现右击菜单
mustache.js 模板引擎渲染活动,避免字符串拼接

实现思路

活动添加

通过mustache的render方法渲染添加到html后,需要调用draggable方法让活动能够进行自由拖动,其中grid参数作用是固定每次拖拽移动最小距离,便于不同节点经过移动后对齐

<script type="text/x-mustache" id="jnode-template">
   <div class="jnode-panel" id="{{id}}" jnode="{{jnode}}" style="top:{{top}}px;left:{{left}}px">
       <div class="jnode-box {{jnodeClass}}">{{{jnodeHtml}}}</div>
   </div>
</script>

jsPlumb.draggable(id, {
   containment: 'parent',
   grid: [8, 8]
})

活动删除

通过jsPlumb.remove方法删除,会删除相关活动与连接的变迁,参数是活动id,通过右键菜单的点击事件获取属性

 callback: function(itemKey, opt, rootMenu, originalEvent) {
      var id = $($(opt.$trigger[0]).parent()).attr("id");
      jsPlumb.remove(id)
}

活动移动

在活动拖动的过程中位置进行变化,我们需要进行事件监听获取实时位置保存到数据库,通过jsPlumb.draggable方法的stop方法注册实现

    jsPlumb.draggable(id, {
        containment: 'parent',
        grid: [8, 8],
        stop: function(event, ui) {
           var nodeID = $(ui.helper.context).attr("id");
           moveActivity(nodeID, ui.position.left, ui.position.top);
        }
    });

变迁添加

jsplumb节点可以添加相关锚点,连接不同锚点会自动绘制连线,在实际操作时连线要求锚点对准操作精度较高不便捷,所以我们通过设置节点整体对象为连接对象,可实现鼠标放置在活动div范围内进行拖拽连线,需要注意makeSource和makeTarget需要同时执行,节点才能作为起点与终点

function registAutoConnect(id) {
    jsPlumb.makeSource(id, {
        endpoint: "Dot",
        anchor: "Continuous"
    })

    jsPlumb.makeTarget(id, {
        endpoint: "Dot",
        anchor: "Continuous"
    })
}

以上方法是手动在流程设计器中进行操作连接,如果我们通过接口获取已有数据,需要通过connect方法进行代码渲染变迁

需要注意jsplumb中connection的id为自动生成,我们需要通过setAttribute方法对canvas进行id赋值操作,才能绑定我要自己的id数据

function addConnect(id, sourceID, targetID) {
    var connection = jsPlumb.connect(
    {
        source: sourceID,
        target: targetID
    });
    connection.id = id
    jsPlumb.setAttribute(connection.canvas, "id", connection.id)
}

通过监听connection事件我们可以知道连接添加完成,进行相关接口调用,但我们需要区分是我们通过设计器操作还是代码渲染,只要判断originalEvent是否存在,存在则是通过鼠标操作的

    jsPlumb.bind("connection", function(connInfo, originalEvent) {
        if (originalEvent) {
           
        }
    });

变迁删除

通过jsPlumb.detach方法进行变迁的删除,默认只删除变迁不删除连接的活动

function deleteConnect(id) {
    var connects = jsPlumb.getAllConnections();
    for (var i = 0; i < connects.length; i++) {
        var connect = connects[i];
        if (connect.id == id) {
            jsPlumb.detach(connect)
        }
    }
}

其它

代码还包含很多其他细节,如下所示,就不详细赘述了,大家可以仔细阅读,项目中包含了详细的注释

  • 连接添加控制,例如开始节点不能为连接终点,结束节点不能为起点
  • 导入默认配置控制连线样式
  • 各种操作模式指针变换及交互模式
  • 流程图整体移动
  • 活动/变迁的选中效果及点击空白处取消

标签:jsPlumb,流程,变迁,js,jsplumb,connection,构建,id
From: https://www.cnblogs.com/yanpeng19940119/p/17135307.html

相关文章

  • Rainbond ubuntu20.04单主机(allinone)部署及简单应用构建
    1、Rainbond是什么?Rainbond是一个云原生应用管理平台,使用简单,不需要懂容器、Kubernetes和底层复杂技术,支持管理多个Kubernetes集群,和管理企业应用全生命周期。2、为什么......
  • AndroidApex技术分析调研1-apexd-bootstrap执行流程分析
    分析代码基线android10-releaseAPEX:AndroidPonyEXpress安卓运行环境AndroidRuntime(ART)将会在安卓12中,添加到ProjectMainline当中,这意味着可以通过GooglePlay商店......
  • AndroidApex技术分析调研2-apexd执行流程分析
    分析代码基线android10-releasesystem\apex\apexd\apexd.rc```rcserviceapexd/system/bin/apexdclasscorecriticaluserrootgroupsystem......
  • https的工作流程详解
    在了解https之前,我们先看下http的协议有哪些不足,加密、证书,签名这些概念,以便于我们更全面的掌握https的原理以及工作流程。   HTTP协议的不足 不验证身份,导致身份......
  • 04. 流程控制
    一、流程控制  流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。顺序结构:程序自上到下执行,中间没有任......
  • 96、商城业务---消息队列---RabbitMQ工作流程&概念
    流程如下:生产者先跟消息代理建立一条长连接,在长连接里开辟很多通道(channel),然后通过通道发送消息Message,其中消息必须指定路由键route-key。消息代理里面有很多交换......
  • 研发流程的总结
    研发流程的总结1、概念设计————产品思路的评审。2、方案设计————电子设计方案评审,结构设计方案评审,热设计评审,光学方案评审。3、样品设计————手板打样,并组......
  • 理解 C# 项目 csproj 文件格式的本质和编译流程
    原文:理解C#项目csproj文件格式的本质和编译流程-walterlv-博客园(cnblogs.com)写了这么多个C#项目,是否对项目文件csproj有一些了解呢?VisualStudio是怎么......
  • Dapr Workflow构建块的.NET Demo
    Dapr1.10版本中带来了最有亮点的特性就是工作流构建块的的发布,虽然是Alpha阶段,可以让我们尽早在应用系统中规划工作流,在使用Dapr的系统中更好的编写负责的分布式应用系......
  • spring 理念与项目构建
    spring理念:使现有的技术更容易使用,其本身是一个大杂烩,整合了现有的技术框架。ssh:struct2springhibernatessm:springmvcspringmybatis优点:spring是一个......