主頁 > 企業開發 > 前端 go.js 流程圖基于vue開發專案案例

前端 go.js 流程圖基于vue開發專案案例

2020-09-11 11:31:08 企業開發

 一、流程圖效果

      最近一段時間在研究go.js,它是一款前端開發畫流程圖的一個插件,也是一個難點,要說為什么是難點,首先,它是依賴畫布canvas知識開發,其次,要依賴于內部API開發需求,開發專案需求的時候就要花費大量的時間去熟悉go.js的API,然后才能進行開發,話不多說,我就先把我最近做的專案案例效果圖展示一下:

 

 

看到效果圖大家可能會想這個挺簡單的,會想沒什么難點,其實真正開發的時候才會知道的、才會領悟到,

 

二、為什么選go.js流程圖插件去開發專案?

       在專案開發一期的時候我用的不是go.js,而用的是一款輕便的流程插件jsplumb.js,它也集成了各種功能性API,但是在開發二期的時候它的內部功能已經滿足不了需求了,所以我就開始在網上查找流程插件,看了很多插件,比如:G6,D3 等這些可視化流程插件都是不能滿足需求,要說為什么不能滿足需求,原因如下:

       一、首先,看到效果圖里的內置多點和其他模塊單點連線問題,其他插件是無法這個滿足需求的,可能我沒有深入去了解其他的流程插件吧,但是go.js里內置點連線可以讓開發者很快的理解代碼邏輯,不用耗費大量的時間去想點與點的連線,

       二、代碼上的資料結構問題,其他插件里的API資料欄位繁瑣量多,不夠清晰明了,而go.js里的資料結構就兩個重要欄位,一是所有模塊的欄位集合二是連線欄位集合,根據需求可以隨意加欄位,

三、專案開發

      (一)、首先直接使用go.js,畫布中是有水印的

其實這個問題不大,替換一行代碼就可以去除水印

引入go.js后,直接在編輯器中全域搜索7eba17a4ca3b1a8346,找到類似這樣結構的代碼

a.ir=b.W[Ra("7eba17a4ca3b1a8346")][Ra("78a118b7")](b.W,ok,4,4);

注:不同的版本代碼不是完全相同的,可能是a.jv(屬性名是會變的) =‘xxxxx’,將這行代碼替換成

a.ir=function(){return true;}; //a.屬性名    要保持一致

去除水印的效果

 

(二)、html

<--第一種-->
<template>
	<div id="wrap">
		<div id="chart-wrap">
			<div id="chart-palette"></div><-- 畫布一 -->
			<div id="chart-diagram"></div><-- 畫布二 -->
		</div>
	</div>
</template>
如圖:
 第二種
結合vue的拖拽組件vuedraggable 實作業務需求,
<template>
	 <div id="chart-wrap">
		 <vuedraggable @end.stop="end" @start.stop="move">
                         <div v-for="tab in tabLIst" :key="tab.id" >
                                 <i : /> {{ tab.text }}
                                 <el-tooltip effect="dark" :content="tab.tooltip" placement="top">
                                             <i  />
                                 </el-tooltip>
                         </div>
                 </vuedraggable>
		 <div id="chart-diagram"></div>
	  </div>
</template>    
如圖:

 

 

  

(三)、畫布的基本設定 ,

this.diagram = $(go.Diagram, "chart-diagram",
				{
					// 畫布初始位置
					initialContentAlignment: go.Spot.LeftSide, // 居中顯示
					"undoManager.isEnabled": true, // 支持 Ctrl-Z 和 Ctrl-Y 操作
					// 初始坐標
					// initialPosition: new go.Point(0, 0),
					//allowSelect:false,  ///禁止選中
					// "toolManager.hoverDelay": 100, //tooltip提示顯示延時
					// "toolManager.toolTipDuration": 10000, //tooltip持續顯示時間
					//  isReadOnly:true,//只讀

					//禁止水平拖影片布
					//禁止水平滾動條
					allowHorizontalScroll: false,
					// 禁止垂直拖影片布
					//禁止垂直滾動條
					allowVerticalScroll: false,
					allowZoom: true,//畫布是否可以縮放
					"grid.visible": false, //顯示網格
					// allowMove: true, //允許拖動
					// allowDragOut:true,
					allowDelete: true,//禁止洗掉節點
					allowCopy: true,//禁止復制
					// 禁止撤銷和重做
					// "undoManager.isEnabled": false,
					// 畫布比例
					// scale:1.5,
					// minScale:1.2,//畫布最小比例
					// maxScale:2.0,//畫布最大比例
					// 畫布初始化影片時間
					// "animationManager.duration": 600,
					// 禁止畫布初始化影片
					"animationManager.isEnabled": false,
					// autoScale:go.Diagram.Uniform,//自適應

					// autoScale:go.Diagram.UniformToFill,//自適應
					//    "draggingTool.dragsLink": false,//拖動線
					// autoScale:go.Diagram.None,//默認值不自適應
					// 畫布邊距padding
					// padding:80或者new go.Margin(2, 0)或new go.Margin(1, 0, 0, 1)
					// validCycle: go.Diagram.CycleDestinationTree,//只允許有一個父節點
					//節點模塊影片  S
					// "animationManager.initialAnimationStyle":go.Animation.EaseOutExpo,
					// "animationManager.initialAnimationStyle": go.Animation.EaseInOutQuad,
					"animationManager.initialAnimationStyle": go.AnimationManager.None,
					// "animationManager.initialAnimationStyle":go.AnimationManager.AnimateLocations,
					//節點模塊影片   D
					// validCycle: go.Diagram.CycleNotUndirected,

					// validCycle: go.Diagram.CycleNotDirected,
					// validCycle: go.Diagram.CycleSourceTree,
					//ismodelfied:true //禁止拖拽
					// 禁止滑鼠拖動區域選中
					// "dragSelectingTool.isEnabled" : false,
					//允許使用delete鍵洗掉模塊
					"commandHandler.deletesTree": true,
					// "hasHorizontalScrollbar":false,//去除水平滾動條
					// "hasVerticalScrollbar":false,//去除豎直滾動條
					// "canStart":false,
					// allowClipboard: true,
					// "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom, //有滑鼠滾輪事件放大和縮小,而不是向上和向下滾動
					// layout: $(go.TreeLayout,
					// 	{ angle: 90, layerSpacing: 80 }),
				}
			);

  

(三)、事件監聽  整體畫布及節點的監聽        

                // 監聽連線
                this.diagram.addDiagramListener("LinkDrawn", (e) => { 
                    console.log(e.subject.part); 
                });
                // 監聽洗掉
                 this.diagram.addDiagramListener("SelectionDeleted", (e) => {
                     e.subject.each(function (n) {
                         console.log(n.data.key);
                     });
                  })
                // 修改節點
                this.diagram.addDiagramListener("TextEdited", (evt) => {
                    console.log(e.subject.part);
                });
                // 監聽點擊
                this.diagram.addDiagramListener("ObjectSingleClicked", (e) => {
            
//這是清除高亮的 // e.diagram.commit((d) => { // d.clearHighlighteds(); // }, "no highlighteds"); }); // // 移動事件 this.diagram.addDiagramListener("SelectionMoved", (e) => { console.log(e.diagram.lastInput.documentPoint); });

(四)、連線點封裝函式 

 // 節點連接線
            makePort (name, align, spot, output, input) {
                var horizontal = align.equals(go.Spot.Top) || align.equals(go.Spot.Bottom)
                return $(go.Shape, {
                    fill: 'transparent', // 默認透明不現實
                    strokeWidth: 0, // 無邊框
                    fromMaxLinks: 1, //
                    width: horizontal ? NaN : 10, // 垂直"port"則8像素寬
                    height: !horizontal ? NaN : 5, // 水平"port"則8像素
                    alignment: align, // 同其模塊對齊
                    stretch: horizontal
                        ? go.GraphObject.Horizontal
                        : go.GraphObject.Vertical, // 自動同其模塊一同伸縮
                    portId: name, // 宣告ID
                    fromSpot: spot, // 宣告連線頭連出此"port"的位置
                    fromLinkable: output, // 布爾型,是否允許連線從此"port"連出
                    toLinkable: input, // 布爾型,是否允許連線從此"port"連出
                    toSpot: spot, // 宣告連線尾連入此"port"的位置
                    cursor: 'pointer', // 滑鼠由指標改為手指,表示此處可點擊生成連線
                    mouseEnter: function (e, port) {
                        // 滑鼠移到"port"位置后,高亮
                        if (!e.diagram.isReadOnly) port.fill = 'rgba(255,0,255,0.3)'
                    },
                    mouseLeave: function (e, port) {
                        // 滑鼠移出"port"位置后,透明
                        port.fill = 'transparent'
                    }
                })
            }

(五)、節點連線的高亮函式,

isHighlightedFun(link) {
                return $$(go.Shape,
                      "RoundedRectangle", {
                          fill: "rgba(217,236,255,.2)",
                          stroke: "rgba(39,154,242,.1)",
                          strokeWidth: 1,
                      },
                      new go.Binding("stroke", "isHighlighted", (h) => {
                          if (link == "link") {
                              return h ? "rgba(39,154,242,1)" : "rgba(39,154,242,.8)";
                          } else {
                              return h ? "rgba(39,154,242,1)" : "rgba(39,154,242,.6)";
                          }
                      }).ofObject(),
                      new go.Binding("strokeWidth", "isHighlighted", (h) => {
                          return h ? 2.5 : 1.3;
                      }).ofObject(),
                )
    }

  如圖:

 

 

 

 

 先寫到這,下周繼續寫,如有不足 可以私信單聊共享技術經驗,,,,,,,,,,,,,, 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/5459.html

標籤:JavaScript

上一篇:前端手寫代碼整理(個人整理_彥超)

下一篇:JS30 - 01 JavaScript Drum Kit

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more