我們一般的應用系統,選單是很多功能介面的入口,選單為了更好體現功能點的設定,一般都是動態從資料庫生成的,而且還需要根據使用者角色的不同,過濾掉部分沒有許可權的選單;在Vue&Element的純前端框架中,還引入了路由的概念,路由是對應具體的頁面檢視和佈局的相關資訊集合,是使用者可訪問的頁面連線集合。本篇隨筆介紹Vue+Element 前端應用開發之選單和路由的關係。

1、選單和路由的關係

前面介紹到,選單是展現在介面上的功能入口,路由是我們前端可以訪問的連線,兩者結合才能正常訪問某個頁面。有些系統把路由定義作為選單的來源,那樣也可以呈現選單,不過這樣他們的關係就耦合起來,而且不好實現動態的處理。

我們的選單作為一個數據庫記錄,可以通過系統進行維護,從而動態生成的,它的鍵值對應路由即可。

我們做法是以本地配置好的路由列表為基準,而選單我們採用在後端配置方式,前端通過介面動態獲取選單列表,通過選單的名稱和路由名稱的對應關係,我們以選單集合為對照,然後過濾本地所有靜態路由的列表,然後獲得使用者可以訪問的路由列表,設定動態路由給前端,從而實現了介面根據使用者角色/許可權的不同,而變化使用者的選單介面和可訪問路由集合。

選單的編輯介面如下所示,可以在圖示列表中選擇合適的圖示

選單路由處理的大概的操作過程如下所示

通過資料庫配置的選單資料,最終返回到前端的時候,是一個JSON集合。 對於ABP框架的後端,我們可以檢視到選單部分的API介面

選單的JSON是根據角色進行動態獲取的,不同的角色對應不同的選單集合,並且選單是一個多層次的樹列表,可以定義無窮多級的展示,JSON格式化檢視如下所示。

選單包含路由的鍵,我們在前端JS變數中儲存所有的路由資訊,我們根據選單的鍵來過濾系統路由,作為前端可用的路由資訊,路由JS定義如下所示。

為了有效管理系統路由的集合定義,我們把它們按分類分為細粒度的模組檔案進行管理,如下所示。

大概分類用文字表示如下所示。

其中的index.js就是集合所有模組的路由檔案,如下所示。

使用者在經過登入介面處理後,首先獲得對應使用者角色的可用選單。

根據角色的選單列表,就會通過對應的Action獲取動態路由資訊(注意,這裡是先獲取動態選單,然後過濾本地路由,即為動態路由資訊),獲得動態路由後,就設定前端所能訪問的路由集合即可,如下程式碼所示。

有了這些新的路由允許,前端系統的選單才能夠正常運轉起來,否則即使介面展示了選單,也不能訪問特定的檢視頁面而跳到了404頁面,因為路由沒有。

在前端介面處理中,我們通過Element介面元件的方式展示動態選單資訊,並結合選單和路由的關係,實現選單跳轉到對應檢視的處理過程。