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

vue使用jsplumb 流程图

  1. 安装jsPlumb库:在Vue项目中使用npm或yarn安装jsPlumb库。

npm install jsplumb

  1. 创建一个Vue组件:创建一个Vue组件来容纳jsPlumb的功能和呈现。
<template><div style="margin: 20px"><div style="margin: 20px"><el-button type="primary" size="mini" @click="clearCanvas()">清除连线</el-button><el-button type="primary" size="mini" @click="startCanvas()">绘制</el-button></div><div class="liucFlex" id="flowContainer"><div class="left"><div@click="clickTitle(item)"class="boxLiu"v-for="(item, index) in aItem":key="index"><div class="word" :class="{ isClick: activeName == item.id }"><div><i class="el-icon-view iconRight"></i>{{ item.name }}</div><div class="date">{{ item.date }}</div></div><div class="status" :class="item.status" :id="item.id"></div></div></div><div class="right"><divclass="boxLiu"@click="clickTitle(item)"v-for="(item, index) in bItem":key="index"><div class="status" :class="item.status" :id="item.id"></div><div class="word" :class="{ isClick: activeName == item.id }"><div>{{ item.name }}<i class="el-icon-view iconRight"></i></div><div class="date">{{ item.date }}</div></div></div></div></div></div>
</template><script>
import { jsPlumb } from "jsplumb";export default {name: "table4",props: {},components: {},data() {return {// status: 表示连接线状态;error:红色,success:绿色,info:灰色aItem: [{name: "a节点1",date: "2023-01-01 20:46",id: "1",status: "error",},{name: "a节点2",date: "2023-01-01 20:46",id: "2",status: "success",},{name: "a节点3",date: "2023-01-01 20:46",id: "3",status: "success",},{name: "a节点4",date: "2023-01-01 20:46",id: "4",status: "success",},{name: "a节点5",id: "5",status: "info",},{name: "a节点6",id: "6",},{name: "a节点7",date: "2023-01-01 20:46",id: "7",status: "success",},],bItem: [{name: "b节点1",date: "2023-01-01 20:46",id: "11",status: "error",},{name: "b节点2",date: "2023-01-01 20:46",id: "12",status: "error",},{name: "b节点3",id: "13",},{name: "b节点4",date: "2023-01-01 20:46",id: "14",status: "success",},{name: "b节点5",date: "2023-01-01 20:46",id: "15",status: "success",},{name: "b节点6",id: "16",},{name: "b节点7",id: "17",},],plumbIns: null, // 折线初始化的对象activeName: null, // 当前选中高亮的id// 步骤图的默认配置defaultConfig: {// 对应上述基本概念anchor: ["TopCenter",[0.5, 1, 0, 0]],connector: ["Flowchart", { cornerRadius: 0, width: 1, curviness: 50 }],endpoint: "Blank",// 添加样式paintStyle: { stroke: "#E0E3EA", strokeWidth: 1, curviness: 100 }, // connector// 添加 overlay,如箭头overlays: [["Arrow", { width: 5, length: 5, location: 1 }]], // overlay},};},computed: {},watch: {},created() {},mounted() {this.setPlumbIns();},activated() {// this.setPlumbIns();},// 路由切换的时候一定要重置setPlumbIns,防止保留上次绘制的线deactivated() {this.clearCanvas();},beforeDestroy() {this.clearCanvas();},methods: {// 点击清除连线clearCanvas() {if (this.plumbIns) this.plumbIns?.reset();},// 绘制连线startCanvas() {this.setPlumbIns();},// 点击切换事件clickTitle(item) {this.activeName = item.id;},// 初始化连线setPlumbIns() {if (!this.plumbIns)// 一定要指定连接线的绘制容器,该容器为设置的盒子dom的id值,要给这个css盒子设置一个position:relative属性,不然连线的位置不对,会偏移的很严重,如果不设置将以body容器进行绘制this.plumbIns = jsPlumb.getInstance({Container: "flowContainer",});let relations = [];// 将新数组转换成所需格式for (let i = 0; i < this.aItem.length - 1; i++) {relations.push([this.aItem[i].id, this.aItem[i + 1].id]);}// 获取right的数组for (let i = 0; i < this.bItem.length - 1; i++) {relations.push([this.bItem[i].id, this.bItem[i + 1].id]);}let aTob = [];// left和right节点相接的地方aTob.push(["4", "11"]);aTob.push(["15", "7"]);this.plumbIns.ready(() => {// 默认连线for (let item of relations) {this.plumbIns.connect({source: item[0],target: item[1],},this.defaultConfig);}// a和b相交的连线let aTobConfig = JSON.parse(JSON.stringify(this.defaultConfig));// 设置a与b节点连接线的方式aTobConfig.anchor = ["Left", "Right"];for (let item of aTob) {this.plumbIns.connect({source: item[0],target: item[1],},aTobConfig);}});},},
};
</script><style lang="scss" scoped>
.liucFlex {display: flex;width: 500px;color: #101010;font-size: 14px;position: relative;.word {width: 110px;height: 50px;cursor: pointer;}.isClick {color: #409eff !important;}.right,.left {flex: 1;margin: 0 10px;}.right {.iconRight {margin-left: 5px;}.status {margin-right: 10px;}}.left {.iconRight {margin-right: 5px;}.status {margin-left: 10px;}.boxLiu {text-align: right;}}.boxLiu {display: flex;margin-bottom: 20px;}.status {width: 10px;height: 10px;border-radius: 50%;background-color: #e0e3ea;vertical-align: top;margin-top: 3px;}.date {font-size: 12px;margin-top: 10px;color: #d0d3d9;}.error {background-color: #f56c6c !important;}.success {background-color: #7ac756 !important;}.info {background-color: #e0e3ea !important;}
}
</style>

效果图:

 

 

  1.  初始化jsPlumb一定要在mounted函数里面,要执行在dom渲染完成的时候
  2. 一定要设置绑定的容器,不然连线的容器外加入任何其他布局元素,线会偏移,需要给绑定的容器设置position:relative(原因不详,因为我不设置这个属性线偏移的很严重)
  3. 路由切换或者多容器需要连线设置,需要重置jsPlumb(this.plumbIns?.reset()),不然线会一直在
jsPlumb中一些常用的参数和API的说明
参数/方法描述
Container设置连接线的绘制容器,将连接线限制在指定的容器内绘制
Draggable将元素设置为可拖动,可以被拖动到其他位置
Endpoint定义连接线端点的样式和行为
Connector定义连接线的样式和类型
Anchors定义连接线起始点和目标点的锚点位置
PaintStyle定义连接线的绘制样式,如颜色、线宽等
hoverPaintStyle鼠标悬停在连接线上时的绘制样式
Endpoints定义连接线的起始点和目标点的端点样式
MaxConnections指定一个元素可以拥有的最大连接数
Scope用于分组连接线和元素的范围,可以控制连接线的可见性和交互性
ConnectionOverlays定义连接线上的覆盖物,如箭头、标签等
addEndpoint动态添加一个连接线的端点
connect连接两个元素,创建一条连接线
repaintEverything重新绘制所有连接线和端点,适用于当容器大小改变时需要重新布局时
bind绑定事件处理程序到连接线或元素上
unbind取消绑定事件处理程序
removeAllEndpoints移除所有元素的端点
deleteEndpoint删除指定元素的一个端点
destroy销毁jsPlumb实例,清除所有的连接线和端点

相关文章:

vue使用jsplumb 流程图

安装jsPlumb库&#xff1a;在Vue项目中使用npm或yarn安装jsPlumb库。 npm install jsplumb 创建一个Vue组件&#xff1a;创建一个Vue组件来容纳jsPlumb的功能和呈现。 <template><div style"margin: 20px"><div style"margin: 20px">&l…...

【BASH】回顾与知识点梳理(二十八)

【BASH】回顾与知识点梳理 二十八 二十八. 例行性工作排程(crontab)28.1 什么是例行性工作排程Linux 工作排程的种类&#xff1a; at, cronCentOS Linux 系统上常见的例行性工作 28.2 仅执行一次的工作排程atd 的启动at 的运作方式实际运作单一工作排程at 工作的管理batch&…...

LangChain源码逐行解密之系统(二)

LangChain源码逐行解密之系统 20.2 serapi.py源码逐行剖析 我们可以看一下Google查询的例子,在LangChain中有多种实现的方式。 如图20-5所示,在utilities的serpapi.py代码文件中实现了SerpAPIWrapper。 图20- 5 utilities的serpapi.py的SerpAPIWrapper 在langchain目录的se…...

QT的设计器介绍

设计器介绍 Qt制作 UI 界面&#xff0c;一般可以通过UI制作工具QtDesigner和纯代码编写两种方式来实现。纯代码实现暂时在这里不阐述了在后续布局章节详细说明&#xff0c;QtDesigner已经继承到开发环境中&#xff0c;在工程中直接双击ui文件就可以直接在QtDesigner设计器中打…...

[LitCTF 2023]Ping

因为直接ping会有弹窗。这里在火狐f12,然后f1选禁用javascript,然后ping 然后输入127.0.0.1;cat /flag 得到flag&#xff0c; 查看其他大佬的wp &#xff0c;这里还可以抓包。但是不知道为什么我这里的burp 用不了...

Spring Cloud面试突击班1

Spring Cloud面试突击班1 1.Spring Cloud 中有哪些组件&#xff0c;整个项目架构中我们的重点又有哪些&#xff1f; Spring Cloud 是一套基于Spring Boot的微服务解决方案。 Spring Cloud生态在国内主流的分为两套&#xff0c;一套是以奈飞开源的Spring Cloud Netfilx 20%&a…...

线上售楼vr全景看房成为企业数字化营销工具

在房地产业中&#xff0c;VR全景拍摄为买家提供了虚拟看房的全新体验。买家可以通过相关设备&#xff0c;远程参观各个楼盘的样板间和实景&#xff0c;感受房屋的空间布局和环境氛围&#xff0c;极大地提高了购房决策的准确性。对于房地产开发商和中介机构来说&#xff0c;VR全…...

“深入探索JVM内部机制:解密Java虚拟机原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解密Java虚拟机原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;揭示其工作原理和关键组成部分&#xff0c;包括类加载、内存管理、垃圾回收、即时编译和运行时数据区域等。…...

最长 上升子序列

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...

Nginx的介绍

本资料转载于传智教育-解锁你的IT职业薪未来&#xff0c;仅用于学习和讨论&#xff0c;如有侵权请联系 视频地址&#xff1a;04-Nginx的优点_哔哩哔哩_bilibili 资源文档&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1RlFl92FdxRUqc858JSxPSQ 提取码&#xff1a;12…...

[杂项]奥特曼系列影视列表大全

1966年&#xff1a;《奥特曼》「初代奥特曼」 1967年&#xff1a;《奥特赛文》 1971年&#xff1a;《归来的奥特曼》「杰克奥特曼」 1972年&#xff1a;《艾斯奥特曼》 1973年&#xff1a;《泰罗奥特曼》 1974年&#xff1a;《雷欧奥特曼》 1979年动画版&#xff1a;《乔尼亚斯…...

java代码日记--java 基础语法

java代码日记 在线运行 本地运行环境配置 Java 实例 实战 java8 Java 基础语法 一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。 下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&…...

Spring中的IOC与DI-细胞内物质与传递

对IOC的认识 Spring Inversion of Control简称Spring IOC&#xff0c;是一种设计原则&#xff0c;通过它可以实现对象之间的解耦。通过Spring DI(Dependency Injection)依赖注入实现对象生命周期管理&#xff0c;为开发者提供对象创建、使用方式。 Spring中的Bean 在Spring框…...

【探索Linux】—— 强大的命令行工具 P.5(yum工具、git 命令行提交代码)

阅读导航 前言一、软件包管理器 yum1.yum的概念yum的基本指令使用例子 二、git 命令行提交代码总结温馨提示 前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也学习了一些Linux的基本操作&#xff0c;也了…...

jdbc 使用rewriteBatchedStatements=true后,报错

jdbc 使用rewriteBatchedStatementstrue后&#xff0c;报错了 rewriteBatchedStatementstrue解释 rewriteBatchedStatementstrue是一个配置选项&#xff0c;它影响MySQL JDBC驱动程序的行为。JDBC是Java数据库连接的标准。当你使用Java程序连接MySQL数据库时&#xff0c;你需要…...

第G1周:生成对抗网络(GAN)入门

&#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 一、理论基础 生成对抗网络&#xff08;Generative Adversarial Networks, GAN&#xff09;是近年来深度学习领域…...

Stable Diffusion基础:ControlNet之图片高仿效果

今天继续给大家分享AI绘画中 ControlNet 的强大功能&#xff0c;本次的主角是 Reference&#xff0c;它可以将参照图片的风格迁移到新生成的图片中&#xff0c;这句话理解起来很困难&#xff0c;我们将通过几个实例来加深体会&#xff0c;比如照片转二次元风格、名画改造、AI减…...

TCGA数据下载推荐:R语言easyTCGA包

#使用easyTCGA获取数据 #清空 rm(listls()) gc() # 安装bioconductor上面的R包 options(BioC_mirror"https://mirrors.tuna.tsinghua.edu.cn/bioconductor") if(!require("BiocManager")) install.packages("BiocManager") if(!require("TC…...

JLSX 模版指令导出Excel

1. 官方相关链接 官网&#xff1a;https://jxls.sourceforge.net/reference/if_command.html JxlsAPI&#xff1a; https://jxls.sourceforge.net/javadoc/jxls/index.html Jxls POI&#xff1a; https://jxls.sourceforge.net/javadoc/jxls/index.html Jxls JExcel&#xff1…...

【制作npm包3】了解 tsconfig.json 相关配置

制作npm包目录 本文是系列文章&#xff0c; 作者一个橙子pro&#xff0c;本系列文章大纲如下。转载或者商业修改必须注明文章出处 一、申请npm账号、个人包和组织包区别 二、了解 package.json 相关配置 三、 了解 tsconfig.json 相关配置 四、 api-extractor 学习 五、npm包…...

从经典工程恶作剧看理论派与实践派的思维碰撞与团队协作

1. 项目概述&#xff1a;一场经典的工程恶作剧及其启示在任何一个技术团队里&#xff0c;总有一些故事会口口相传&#xff0c;成为团队文化的一部分。我今天想分享的这个故事&#xff0c;发生在上世纪80年代初&#xff0c;一个微电路设计小组里。它无关乎高深的技术突破&#x…...

iOS模拟器效率革命:Alfred工作流实现键盘流式开发

1. 项目概述与核心价值如果你是一名iOS开发者&#xff0c;或者正在学习Swift或React Native&#xff0c;那么你一定对Xcode自带的iOS模拟器又爱又恨。爱的是它让我们在没有实体设备的情况下也能快速测试应用&#xff1b;恨的是每次想启动模拟器、安装应用、截图或录屏&#xff…...

macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南

macOS桌面歌词神器LyricsX&#xff1a;免费开源歌词同步工具完整指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS设计的开源桌面歌词显示工具…...

Docker Compose 镜像检测脚本(支持自动扫描 + 手动输入 YAML)

在日常运维中&#xff0c;经常会遇到这样一个问题&#xff1a; docker-compose 文件里定义了很多镜像&#xff0c;但本地是否已经存在不清楚 如果一个个 docker pull 或 docker images 去对比&#xff0c;会非常低效。 因此我们可以写一个脚本&#xff0c;自动解析 docker-com…...

告别手动传包!用Pypiserver在内网搭建Python私有源,团队协作效率翻倍

告别手动传包&#xff01;用Pypiserver在内网搭建Python私有源&#xff0c;团队协作效率翻倍 在团队开发中&#xff0c;Python依赖管理常常成为效率瓶颈。想象这样的场景&#xff1a;新同事加入项目&#xff0c;需要配置开发环境&#xff0c;却因为内网限制无法直接访问PyPI&a…...

移动SoC设计演进:从骁龙600/400系列看芯片战略与体验竞争

1. 从一场发布会看移动芯片的十年演进2015年2月&#xff0c;巴塞罗那世界移动通信大会前夕&#xff0c;高通的一则新闻稿在业内激起了不小的涟漪。他们宣布了全新的骁龙600和400系列移动平台&#xff0c;其中最引人注目的&#xff0c;是首次将当时ARM最新的64位Cortex-A72核心引…...

Windows Cleaner终极指南:3步解决C盘爆红和电脑卡顿难题

Windows Cleaner终极指南&#xff1a;3步解决C盘爆红和电脑卡顿难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设计的…...

5月12日直播 | CANN Bench:为昇腾算子评测立起一把统一的尺子

CANN Bench&#xff1a;为昇腾算子评测立起一把统一的尺子 当 Coding Agent 一次写出几十个算子已成为常态&#xff0c;"什么算优质算子"变成了一个单一维度无法评估准确的问题&#xff1a;能不能过编译只是入场券&#xff0c;精度是否经得起验证、换个 shape 换个 d…...

利用Google可编程搜索引擎API实现免费高效的Python搜索自动化

1. 项目概述&#xff1a;一个被低估的搜索利器 如果你经常需要从Google上批量、自动化地获取搜索结果&#xff0c;并且对搜索结果的质量、速度和稳定性有要求&#xff0c;那你一定遇到过官方API的种种限制&#xff0c;或者对第三方付费服务望而却步。今天要聊的这个项目 chhan…...

告别托盘“隐身术”:Total Commander 9.5 最小化任务栏设置详解(附F12配置技巧)

告别托盘“隐身术”&#xff1a;Total Commander 9.5 最小化任务栏设置详解&#xff08;附F12配置技巧&#xff09; 第一次打开Total Commander&#xff08;以下简称TC&#xff09;时&#xff0c;许多用户会被它的"消失术"困扰——点击窗口右上角的减号按钮后&#x…...