前面介紹了很多ABP系列的文章《ABP框架使用》,一步一步的把我們日常開發中涉及到的Web API服務構建、登錄日志和操作審計日志、字典管理模塊、省份城市的信息維護、權限管理模塊中的組織機構、用戶、角色、權限、菜單等內容,以及配置管理模塊,界面的高級查詢處理等內容,并根據我們在Winform領域多年的開發經驗,完成了系統功能在Winform界面下的實現,并利用工具實現快速的Winform界面生成工作;而在循序漸進VUE+Element 前端應用開發文章《循序漸進VUE+Element》中,則介紹了結合ABP+Vue+Element來構建BS的前端解決方案,通過Vue+Element實現的前端界面展示,界面美觀大方;而且業務內容以模塊化組裝的Web界面,非常利于大型復雜系統的開發,極大提供了效率。
1、ABP框架背景知識介紹
ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程序框架。目前基于.net core5.0基礎上進行開發,框架支持SQLServer、Mysql、Oracle等常用數據庫的配置切換。
1)框架特點
基于ABP框架基礎上,我們整理完善了整個權限體系,以及基于這個基礎上進行的業務系統快速開發,我們整理后的ABP快速開發框架的架構圖示,如下圖所示(以字典模塊為例說明)
以上是后端API的框架架構,引入了前后端分離的Vue + Element 作為前端技術路線,那么前后端的邊界則非常清晰,前端可以在通過網絡獲取對應的JSON就可以構建前端的應用了。
在前端處理中,主要就是利用Vuex模式中的Store對象里實現對Action和Mutation的請求處理,獲取數據后,實現對State狀態中的數據進行更新。如果僅僅是當前頁面的數據處理,甚至可以不需要存儲State信息,而直接通過前端封裝的API類獲取到返回的數據,直接更新到界面視圖上即可。
Vue + Element前端項目的視圖、Store模塊、API模塊、Web API之間關系如下所示。
前端根據ABP后端的接口進行前端JS端的類的封裝處理,引入了ES6類的概念實現業務基類接口的統一封裝,簡化代碼。
權限模塊我們涉及到的用戶管理、機構管理、角色管理、菜單管理、功能管理、審計日志、登錄日志等業務類,那么這些類繼承BaseApi,就會具有相關的接口了,如下所示繼承關系。
2、基于Vue + Element前端ABP框架功能介紹
1)登錄界面
系統登錄界面效果如下所示。
或者
其中里面的文本內容,我們都是以國際化處理內容。
2)主體框架界面
主體框架界面采用的是基于后臺配置的菜單動態生成,左側是菜單,右邊頂部是特定導航條和內容區。
首頁內容區包括了一些常規的統計展示信息和各種圖表綜合展示內容。
我們來看看圖表展示的效果圖,其中柱狀圖效果如下所示。
餅狀圖效果如下所示。
曲線圖效果如下所示。
其他類型,極坐標和散點圖形
或者曲線和柱狀圖組合的圖形
其中頂部導航條,提供查詢、全屏切換、修改布局大小、多語言選擇菜單、頭像及快捷菜單處理。
3)用戶管理界面
用戶列表包括分頁查詢及列表展示、以及可以利用按鈕進行新增、編輯、查看用戶記錄,或者對指定用戶進行重置密碼操作。
我們把常規的列表界面,新增、編輯、查看、導入等界面放在一起,除了列表頁面,其他內容以彈出層對話框的方式進行處理,如下界面示意所示。
用戶編輯界面如下所示。
當然可以查看這個用戶本身擁有的權限功能點和擁有的菜單,如下界面所示。
4)組織機構管理
組織機構主要就是一個層級的對象關系,一般包含但不限于公司、部門、工作組等的定義,其中組織機構包含用戶成員和角色成員的關系,如下界面所示。
組織機構可以修改機構名稱和對應的父類節點,如下界面所示。
組織機構包含的成員可以添加多個人員記錄,其中可以對組織成員列表進行添加、刪除的操作。。
單擊機構列表界面中組織成員部分的【添加成員】按鈕,彈出對話框選擇添加組織成員。
組織機構中角色列表界面如下所示,其中可以對角色列表進行添加、刪除的操作。
單擊機構列表界面中角色部分的【添加角色】按鈕,彈出對話框選擇添加角色。
5)角色管理
角色信息沒有層級關系,可以通過列表展示。
其中角色包含權限分配、角色成員和擁有菜單的維護,如下是角色編輯界面,包含角色基本信息、擁有權限、包含成員、擁有菜單的管理等。菜單對于角色來說,應該是一種界面資源,可以通過配置進行管理對應角色用戶的菜單。
編輯界面如下所示。
角色的權限包含系統可以用的權限,并可以勾選為角色設置所需的功能點,如下界面所示。
用戶成員則和機構的用戶管理一樣,可以指定多個用戶,這里不再贅述。
而菜單對于角色來說,應該是一種界面資源,可以通過配置進行管理對應角色用戶的菜單,如下界面所示。
通過配置好角色包含的菜單,用戶登錄系統后,系統根據當前用戶角色具有的菜單項目,動態構建顯示對應的列表菜單及篩選可用路由列表。
6)功能管理
嚴格來說,ABP框架并沒有統一管理好權限功能點的,它沒有任何表來存儲這個功能集合,而是通過派生AuthorizationProvider的子類來定義權限功能點
我在這個基礎上引入了一個權限功能的表用來存儲功能點的,然后提供管理界面來動態維護這些功能點。如下界面所示。
我們剛才在角色里面看到可以分配的權限內容,就是基于這個權限表的信息展示。
這樣我們可以動態添加或者批量添加所需要的功能點,并且和整個權限管理模塊串聯起來,形成一個完整的控制體系。
另外我們還可以通過左側樹列表的按鈕管理列表,可以添加、編輯、刪除或級聯刪除對應的節點及其下面所有子節點。
系統登錄后,客戶端自動獲取對應用戶的角色功能點,然后我們每次打開一個新的業務窗體,客戶端會進行界面的權限邏輯控制,如果沒有權限的,那么不可以訪問操作,如下是禁止了產品信息的導入、導出、新增、編輯等操作功能,如下界面所示產品界面被動態取消相關權限后,界面禁止了某些操作功能。
7)菜單管理
系統主界面的開發,基本上都是標準的界面,在系統左側放置系統菜單,右側中間區域則放置列表展示內容,但是在系統菜單比較多的時候,就需要把菜單分為幾級處理。系統菜單在左側放置一個自定義菜單組件列表,這樣通過樹形列表的收縮折疊,就可以放置非常多的菜單功能了。
在ABP + Vue + Element 快速開發框架里面,我們BS前端的菜單和其CS的菜單是各自分開的,我們在后臺的權限模塊系統中維護菜單內容并分配給對應角色用戶,在用戶登錄系統后,動態加載菜單展示,并通過菜單的配置信息,跳轉到對應的路由上去進行頁面展示處理。
菜單資源管理的列表界面界面如下所示
單擊左側樹列表項目,會在右側展示對應父節點下的菜單列表。
在右側的列表按鈕中,可以對已有的菜單進行編輯,菜單編輯界面如下所示。
我們可以通過選擇圖標按鈕進行菜單圖標的選擇,如下是選擇菜單圖片的界面。
8)系統登錄日志
登錄日志,這個就是用戶嘗試登錄的時候,留下的記錄信息,其中包括用戶的登錄用戶名,ID,IP地址、登錄時間,以及登錄是否成功的狀態等信息。
這個登錄日志,就是在系統登錄嘗試的時候,留下的記錄,可供管理員進行跟蹤了解某個賬戶的使用情況,也可以根據這些登錄信息進行一個統計報表的分析。
查看明細界面如下所示。
9)系統審計日志
審計日志,設置我們在訪問或者調用某個應用服務層接口的時候,橫切面流下的一系列操作記錄,其中記錄我們訪問的服務接口,參數,客戶端IP地址,訪問時間,以及異常等信息,這些操作都是在ABP系統自動記錄的,如果我們需要屏蔽某些服務類或者接口,則這些就不會記錄在里面,否則默認是記錄的。
審計日志的明細展示界面如下所示。
10)字典管理
字典管理界面,左側列出字典類型,并對字典類型下的字典數據進行分頁展示,右側則利用分頁展示對應字典類型的字典數據,字典管理界面如下所示。
字典大類在左側列表進行維護,可以進行新增、編輯、刪除等常規操作。
而對應字典大類的新增或者編輯窗體界面如下。
批量添加字典內容的界面如下所示。
11)產品列表展示
產品列表要展示一個產品相關的內容,包括展示產品的圖片,以及產品信息介紹等內容。
展示界面中的頂部,我們利用Element的界面組件定義一個走馬燈的展示效果,如下所示。
產品信息的另一個列表展示界面如下所示。
產品信息的編輯界面如下所示。
產品詳細說明里面,我們采用富文本編輯,這里采用了 Tinymce 第三方組件來實現編輯處理,展示效果如下所示。
產品信息查看界面,可以對圖片進行預覽展示操作。
12)圖標管理
在VUE+Element 前端應用中,圖標是必不可少點綴界面的元素,因此整合一些常用的圖標是非常必要的,還好Element界面組件里面提供了很多常見的圖標,不過數量不是很多,應該是300個左右吧,因此考慮擴展更多圖標,我引入了vue-awesome組件,它利用了Font Awesome的內置圖標,實現了更多圖標的整合。
Element圖標管理界面如下:
基于Vue-Awesome的圖標管理如下所示。
其中查詢提供了名稱進行圖標查詢,以及限制一次性展示多少個,另外提供一個自定義顏色選項,從而可以改變圖標的展示顏色。