目標
- 選單管理
- 選單需求和表結構
- 選單管理
CRUD
操作介面
- 選單管理
CRUD
前端
- 為角色分配選單
- 需求分析
- 介面
- 搜尋所有選單和角色分配選單
id
列表
- 儲存角色分配的選單數據
- 前端
- 動態選單
選單管理
選單需求和表結構
選單中的數據會有層級關係例如:
那在資料庫中應該如何儲存這樣的層級關係呢?
可以使用id
和parentId
來表示,例如
如此一來就可以連結
新增相關檔案,完成準備工作
列出選單
一樣是controller -> service -> mapper
,不過service
的邏輯稍微複雜了一點
為了列出所有的選單,以及子選單,新增以下介面以供使用
service
的部分則是分為兩個主要操作
- 調用
mapper
尋找所有存在於數據庫中的選單
- 依照層級關係封裝所有的選單,使前端的
element-plus
可以直接使用數據
核心的部分是工具,利用遞迴一層一層封裝數據
新增與修改選單
- 這部分就是簡單的
controller -> service -> mapper
搞定,沒有額外的邏輯了
刪除選單
刪除選單時會有個問題,如果刪除高層選單,會需要考慮子選單是否一併刪除。這裡採取的方案是,如果刪除的選單包含子選單,那就不能刪除,所以步驟如下
- 判斷當前要刪除的選單是否包含子選單
- 包含:不能刪除;不包含:可以刪除
主要邏輯如下
SysMenuServiceImpl.java
前端整合
前端的code
直接貼上,重點是後端的程式
為角色分配選單
需求分析
需要兩個介面:
- 查詢所有選單和角色分配過選單
id
的列表用以在前端顯示
- 儲存角色和選單之間的關係
查詢所有選單和角色分配過選單id
的列表
也是簡單的controller -> service -> mapper
SysRoleMenuController.java
SysRoleMenuServiceImpl.java
SysRoleMenuMapper.xml
其實可以在搜尋的時候去掉is_deleted = 0
這個條件,因為後面實作重新分配角色選單的時候是直接把role<->menu
關係刪除,只是tutorial
中還是包含了這個條件所以我就保留了
儲存角色分配選單之數據
和上一篇分配角色時的邏輯大致相同
SysRoleMenuServiceImpl.java
SysRoleMenuMapper.xml
前端整合
這邊前端也是大同小異,直接照教程貼上理解即可
動態選單
後端的部分主要的邏輯在service
以及最查詢資料庫,需要關聯三張表
前端的部分把相關的code
改成動態選單就好了
bug問題
- 角色分配了某個選單以及其全部子選單,這時再添加一個新的子選單,該角色會自動被分配新的角色。
- 例如:
測試人員
被分配系統管理
選單下的所有子選單,這時再為系統管理
新增一個子選單(例如地區管理
)那測試人員
就會被分配這個新的選單
如何解決?