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實例,清除所有的連接線和端點

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42192.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42192.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker 安裝 elasticsearch、kibana 7.4.2

切換root 用戶 su root 拉起鏡像 docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 #1、創建Elasticsearch配置文件夾 mkdir -p /mydata/elasticsearch/config ? #2、創建Elasticsearch數據文件夾 mkdir -p /mydata/elasticsearch/data #3、創建Elasticsearch插件…

Python學習筆記_基礎篇(八)_正則表達式

1. 正則表達式基礎 1.1. 簡單介紹 正則表達式并不是Python的一部分。正則表達式是用于處理字符串的強大工具&#xff0c;擁有自己獨特的語法以及一個獨立的處理引擎&#xff0c;效率上可能不如str自帶的方法&#xff0c;但功能十分強大。得益于這一點&#xff0c;在提供了正則…

Spring系列篇 -- Bean的生命周期

目錄 經典面試題目&#xff1a; 一&#xff0c;Bean的生命周期圖 二&#xff0c;關于Bean的生命周期流程介紹&#xff1a; 三&#xff0c;Bean的單例與多例模式 總結&#xff1a; 前言&#xff1a;今天小編給大家帶來的是關于Spring系列篇中的Bean的生命周期講解。在了解B…

DAY06_SpringBoot—簡介基礎配置yaml多環境開發配置整合第三方技術

目錄 一 SpringBoot簡介1. 入門案例問題導入1.1 入門案例開發步驟1.2 基于SpringBoot官網創建項目1.3 SpringBoot項目快速啟動 2. SpringBoot概述問題導入2.1 起步依賴2.2 輔助功能 二 基礎配置1. 配置文件格式問題導入1.1 修改服務器端口1.2 自動提示功能消失解決方案1.3 Spri…

國產化系統中遇到的視頻花屏、卡頓以及延遲問題的記錄與總結

目錄 1、國產化系統概述 1.1、國產化操作系統與國產化CPU 1.2、國產化服務器操作系統 1.3、當前國產化系統的主流配置 2、視頻解碼花屏與卡頓問題 2.1、視頻解碼花屏 2.2、視頻解碼卡頓 2.3、關于I幀和P幀的說明 3、國產顯卡處理速度慢導致圖像卡頓問題 3.1、視頻延…

SVG在線編輯器TOP5,這些工具你都得知道!

隨著響應式網站設計的普及,SVG這種矢量圖格式越來越受歡迎。SVG可以使圖像在任何設備上展示效果出色。那么有哪些值得推薦的SVG在線編輯器呢?本文整理了5款熱門實用的SVG在線編輯工具,它們功能強大,甚至可以替代Photoshop。這些SVG編輯器值得設計師們親自試用,相信能給大家帶來…

ardupilot開發 --- 位置控制篇

幾個疑問 如何根據GPS定位信息進行位置控制&#xff1f; 經緯度海拔高度如何轉成導航坐標系&#xff1f; 飛控中的航跡點waypoint是基于那個坐標系的點&#xff1f;導航坐標系&#xff1f; Home點&#xff1f;導航坐標系的原點&#xff1f;電機解鎖時的點&#xff1f;xyz&…

Node.js學習筆記-05

10、測試 測試包含單元測試、性能測試、安全測試和功能測試等幾個方面&#xff0c;本章將從Node實踐的角度來介紹單元測試和性能測試。 10.1 單元測試 10.1.1 單元測試的意義 開發者自測。對于開發者而言&#xff0c;不僅要編寫單元測試&#xff0c;還應當編寫可測試代碼。…

高效解決Anaconda Prompt報錯Did not find VSINSTALLDIR這類問題

文章目錄 回憶問題解決問題step1step2 回憶問題 類似于劃紅線部分然后還有很多行的報錯信息&#xff0c;最后一行肯定是紅色劃線部分 解決問題 step1 找到 D:\Anaconda\envs\pytorch\etc\conda\activate.d在這個文件夾內會有兩個文件&#xff0c;刪除 vs2017_compiler_v…

【數據結構】 鏈表簡介與單鏈表的實現

文章目錄 ArrayList的缺陷鏈表鏈表的概念及結構鏈表的分類單向或者雙向帶頭或者不帶頭循環或者非循環 單鏈表的實現創建單鏈表遍歷鏈表得到單鏈表的長度查找是否包含關鍵字頭插法尾插法任意位置插入刪除第一次出現關鍵字為key的節點刪除所有值為key的節點回收鏈表 總結 ArrayLi…

uniapp封裝接口

uniapp封裝接口 在本篇技術博文中&#xff0c;我們將深入探討 Uniapp 框架中如何封裝接口&#xff0c;以簡化開發流程并提高效率。接口封裝是一種重要的開發策略&#xff0c;它不僅可以減少代碼量&#xff0c;還能提高代碼的復用性和維護性。 通過閱讀本文&#xff0c;你將深…

Observer和Dep以及wacher概念

Observer&#xff08;觀察者&#xff09;&#xff1a; Observer用于將一個普通的JavaScript對象轉換為響應式對象。它遞歸地遍歷對象的所有屬性并使用Object.defineProperty將它們轉換為getter和setter。這樣&#xff0c;在屬性被獲取或修改時&#xff0c;就能夠觸發相應的操作…

8/18二叉樹的總結

二叉樹的遍歷方式&#xff1a; 遞歸前中后序144&#xff0c;145&#xff0c;94 二叉樹&#xff1a;前中后序遞歸法 (opens new window) 迭代法通過隊列模擬102 求二叉樹的屬性 101是否對稱&#xff0c;左數的外側和右數的外側比較&#xff0c;左樹的內側和右樹的內側比較 …

案例-基于MVC和三層架構實現商品表的增刪改查

文章目錄 0. 項目介紹1. 環境準備2. 查看所有2.1 編寫BrandMapper接口2.2 編寫服務類&#xff0c;創建BrandService&#xff0c;用于調用該方法2.5 編寫Servlet2.4 編寫brand.jsp頁面2.5 測試 3.添加3.1 編寫BrandMapper接口 添加方法3.2 編寫服務3.3 改寫Brand.jsp頁面&#x…

CMake教程6:調用lib、dll

之前我們學到了如何編寫一個可執行程序和Library&#xff0c;在繼續學習之前&#xff0c;需要解釋下target&#xff0c;在cmake中我們可以給executable和library設置一個target名字&#xff0c;這樣可以方便我們在后續對target進行更加詳細的屬性設置。 本節我們將學習如何在項…

利用logstash/filebeat/插件,將graylog日志傳輸到kafka中

1.graylog配置輸出 在System-outputs&#xff0c;選擇GELF Output&#xff0c;填寫如下內容&#xff0c;其它選項默認 在要輸出的Stream中&#xff0c;選擇Manage Outputs 選擇GELF Output&#xff0c;右邊選擇剛才創建好的test。 2.安裝logstash&#xff0c;作為中間臨時…

LeetCode 786. 第 K 個最小的素數分數

&#x1f517; 原題鏈接&#xff1a;786. 第 K 個最小的素數分數 本題可以暴力求解&#xff1a; class Solution { public:vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {int n arr.size();vector<pair<int, int>> frac;for …

Vue使用jspdf和html2canvas組件庫結合導出PDF文件

效果圖&#xff1a; 1、安裝依賴&#xff1a; npm install html2canvas --save npm install jspdf --save 或 yarn add html2canvas --save yarn add jspdf --save 2、封裝全局調用方法&#xff1a;this.$exportPDF(#id,文件名) 新建js文件&#xff1a;/utils/html2Pdf.js&am…

在linux中,使用sh文件腳本啟動jar項目

使用方法 sh 執行腳本.sh [start|stop|restart|status]sh文件內容 APP_NAMEXXXX.jar#使用說明&#xff0c;用來提示輸入參數 usage() { echo "Usage: sh 執行腳本.sh [start|stop|restart|status]" exit 1 }#檢查程序是否在運行 is_exist(){ pidps -ef|grep $APP_N…

數據結構:選擇排序

簡單選擇排序 選擇排序是一種簡單直觀的排序算法。首先在未排序序列中找到最大&#xff08;最小&#xff09;的元素&#xff0c;存放到排序學列的其實位置&#xff0c;然后在剩余的未排序的元素中尋找最小&#xff08;最大&#xff09;元素&#xff0c;存放在已排序序列的后面…