繪制flowable?流程圖的Vue?庫使用詳解
引言
之前松哥發(fā)了一篇文章和小伙伴們介紹了前端的 bpmn.js 這個庫,利用這個庫我們可以自己將繪制流程圖的功能嵌入到我們的項(xiàng)目中。
然而,這個庫默認(rèn)是給 Camunda 設(shè)計(jì)的,所以畫出來的流程圖導(dǎo)出來的 XML 文件無法直接使用,必須要做一些深度定制,才能將 XML 文件轉(zhuǎn)為 Flowable 流程引擎可用的 XML 文件。這個深度定制太太太麻煩了。
所以我就在想前端有沒有現(xiàn)成的庫,可以直接用來繪制 Flowable 流程圖的?找來找去,找到了兩個,這兩個的相似度還蠻高的,不過這兩個都有一個問題,那就是都是基于 Vue2 開發(fā)的,在 Vue3 中用不了,算了,作為一個工具,Vue2 就 Vue2 吧,忍了。畢竟我也不是專業(yè)的前端工程師,掌握的前端技能能滿足我后端的需求也就足夠了,要是專業(yè)的前端工程師,我肯定把 bpmn.js+Vue3 整的明明白白了。
好啦,接下來就不廢話了,跟小伙伴們介紹一下這兩個可以繪制 Flowable 流程圖的前端庫。
workflow-bpmn-modeler
workflow-bpmn-modeler 基于 Vue 和 bpmn.io@7.0,實(shí)現(xiàn)了 flowable 的工作流設(shè)計(jì)器。使用這個流程繪制工具,建議采用 flowable6.4.1 版本,flowable6.4.2 版本開始進(jìn)行商業(yè)化重構(gòu),為了方便刨碼學(xué)習(xí),推薦使用 flowable6.4.1 版本。
這個用法其實(shí)很簡單,首先我們創(chuàng)建一個 Vue2 的項(xiàng)目,注意 Vue 的版本不要選錯了,項(xiàng)目創(chuàng)建好之后,添加 workflow-bpmn-modeler 依賴,執(zhí)行如下任意命令添加:
npm i workflow-bpmn-modeler
或者:
yarn add workflow-bpmn-modeler
添加完成后,package.json 內(nèi)容如下:
{ "name": "bpmn_demo02", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build" }, "dependencies": { "core-js": "^3.8.3", "element-ui": "^2.15.9", "vue": "^2.6.14", "vue-router": "^3.5.1", "workflow-bpmn-modeler": "^0.2.8" }, "devDependencies": { "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-service": "~5.0.0", "vue-template-compiler": "^2.6.14" } }
注意看版本號。
接下來我們就可以在一個 .vue 文件中使用這個組件了,代碼如下:
<template> <div> <bpmn-modeler ref="refNode" :xml="xml" :users="users" :groups="groups" :categorys="categorys" :is-view="false" @save="save" /> </div> </template> <script> import bpmnModeler from "workflow-bpmn-modeler"; export default { components: { bpmnModeler, }, data() { return { xml: "", // 后端查詢到的xml users: [ { name: "javaboy", id: 1 }, { name: "itboyhub", id: 2 }, { name: "江南一點(diǎn)雨", id: 3 }, ], groups: [ { name: "經(jīng)理", id: 4 }, { name: "組長", id: 5 }, { name: "員工", id: 6 }, ], categorys: [ { name: "OA", id: "oa" }, { name: "財務(wù)", id: "finance" }, ], }; }, methods: { getModelDetail() { // 發(fā)送請求,獲取xml // this.xml = response.xml }, save(data) { console.log(data); // { process: {...}, xml: '...', svg: '...' } }, }, }; </script>
我們來分析一下這段代碼:
首先從 workflow-bpmn-modeler 中導(dǎo)入 bpmnModeler。
注冊 bpmnModeler 組件
在頁面中直接使用 bpmnModeler 組件,使用該組件時候,有五個屬性一個方法,我們挨個來說:
xml:這個屬性是 bpmnModeler 要展示的流程圖的 XML 字符串,我們可以提前給一個流程圖的 XML 字符串,這樣 bpmnModeler 組件就會將這個 XML 字符串所對應(yīng)的流程圖給畫出來,如果我們只是單純的想自己繪制流程圖,那么這個可以不用管,給一個空字符串就行了。
users:這是一個數(shù)組,當(dāng)我們配置 UserTask 的時候,可以設(shè)置這個 UserTask 由誰來處理,users 配置的就是這里用到的用戶。
groups:這個類似于 users,也是在 UserTask 中,如果我們想要配置一個 UserTask 的候選組的話,那么就會用到 groups 中的內(nèi)容。
categorys:這個屬性親測沒有任何功能,源代碼我也看了,源代碼中也沒有用這個屬性,這完全就是一個沒有用的屬性,可忽略之。
is-view:這個表示當(dāng)前 bpmnModeler 是要畫流程圖還是單純的只是將流程圖展示出來,false 表示我們是用 bpmnModeler 畫流程圖的,如果設(shè)置為 true,就表示 bpmnModeler 只是用來展示流程圖(提前準(zhǔn)備好流程圖的 XML 文件,可以用 bpmnModeler 將之展示出來)。
@save:這個是點(diǎn)擊網(wǎng)頁上的保存模型按鈕的時候,會觸發(fā)的一個回調(diào)函數(shù)。
好啦,這就可以了。
接下來,我們啟動 Vue 項(xiàng)目,就可以看到這個流程圖繪制頁面了:
現(xiàn)在就可以愉快的畫流程圖了~
接下來,松哥就用這個,手把手教大家畫一下之前文章中和大家用的請假流程圖,當(dāng)時的流程圖是這樣的:
我們來看下如何繪制:
- 首先我們先來定義一下流程的基本信息:
- 接下來繪制經(jīng)理批準(zhǔn)還是拒絕流程:
點(diǎn)擊這個扳手按鈕可以設(shè)置任務(wù)類型:
為這個任務(wù)設(shè)置一個監(jiān)聽器:
設(shè)置監(jiān)聽器的原因是因?yàn)榍岸擞脩粼谔峤徽埣偕暾埖臅r候,選擇審批人可以直接選擇審批人,也可以選擇審批人的身份(例如經(jīng)理),這兩種選擇都是被允許的。所以我們就添加一個任務(wù)監(jiān)聽器,當(dāng)流程執(zhí)行到這個 Task 的時候,我們就在任務(wù)監(jiān)聽器中,根據(jù)前端傳來的參數(shù)去設(shè)置這個任務(wù)是由候選人處理還是候選用戶組處理。
- 添加互斥網(wǎng)關(guān):
- 審批通過線
接下來,先是審批通過,審批通過的條件是 approved 字段為 true 就表示審批通過:
- 審批通過發(fā)送通知
審批通過后,給用戶發(fā)送一個通知,這是一個服務(wù)任務(wù),發(fā)送通知的類是我們自己寫的,所以也需要配置一下自定義類的位置:
- 結(jié)束
最后進(jìn)入到審批通過 UserTask 并且結(jié)束:
- 繪制拒絕線
按照如上流程,繼續(xù)繪制請假被拒絕的流程:
muheflow-bpmn-modeler
松哥要和大家介紹的第二個工具就是 muheflow-bpmn-modeler,這個基于 Vue 和 bpmn.io@8.0,實(shí)現(xiàn)了 flowable 的工作流設(shè)計(jì)器。使用這個流程繪制工具,建議采用 flowable6.4.1 版本,flowable6.4.2 版本開始進(jìn)行商業(yè)化重構(gòu),為了方便刨碼學(xué)習(xí),推薦使用 flowable6.4.1 版本。
沒找到這個的源代碼,但是我發(fā)現(xiàn)這個的用法和 workflow-bpmn-modeler 的用法毫無差別~所以我就不廢話了,照著上面的用這個就行了。
以上就是繪制flowable 流程圖的Vue 庫使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue 庫繪制flowable 流程圖 的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vant之關(guān)于van-list的使用以及一些坑的解決方案
這篇文章主要介紹了vant之關(guān)于van-list的使用以及一些坑的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06如何解決element-ui中select下拉框popper超出彈框問題
這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04vue指令v-html使用過濾器filters功能實(shí)例
在本篇文章里我們給大家整理的是關(guān)于vue指令v-html使用過濾器filters功能的實(shí)例內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-10-10vue源碼解析computed多次訪問會有死循環(huán)原理
這篇文章主要為大家介紹了vue源碼解析computed多次訪問會有死循環(huán)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04詳解Vue基于 Nuxt.js 實(shí)現(xiàn)服務(wù)端渲染(SSR)
直接使用 Vue 構(gòu)建前端單頁面應(yīng)用,頁面源碼時只有簡單的幾行 html,這并不利于網(wǎng)站的 SEO,這時候就需要服務(wù)端渲染,本篇文章主要介紹了詳解Vue基于 Nuxt.js 實(shí)現(xiàn)服務(wù)端渲染(SSR),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04