79 lines
1.9 KiB
Go

package service
import (
"hospital-admin-api/api/dao"
"hospital-admin-api/api/model"
"hospital-admin-api/api/responses/roleResponse"
)
type Role struct{}
// GetRoleMenuList 获取角色菜单
func (r *Role) GetRoleMenuList(roleId int64) ([]*roleResponse.RoleMenuList, error) {
AdminRoleMenuDao := dao.AdminRoleMenu{}
adminRoleMenu, _ := AdminRoleMenuDao.GetAdminRoleMenuListByRoleId(roleId)
if adminRoleMenu == nil {
return []*roleResponse.RoleMenuList{}, nil
}
// 获取全部菜单
AdminMenuDao := dao.AdminMenu{}
adminMenu, _ := AdminMenuDao.GetAdminMenuListSortOrderNum()
if adminMenu == nil {
return []*roleResponse.RoleMenuList{}, nil
}
var menuIDs []int64
var menuTree []*roleResponse.RoleMenuList
if len(adminRoleMenu) > 0 {
for _, roleMenu := range adminRoleMenu {
menuIDs = append(menuIDs, roleMenu.MenuID)
}
// 构建菜单树
menuTree = buildMenuTree(menuIDs, adminMenu)
}
return menuTree, nil
}
// 构建菜单树
func buildMenuTree(menuIds []int64, menuData []*model.AdminMenu) []*roleResponse.RoleMenuList {
menuMap := make(map[int64]*roleResponse.RoleMenuList)
rootNodes := make([]*roleResponse.RoleMenuList, 0)
// 构建菜单映射
for _, menu := range menuData {
for _, v := range menuIds {
if v == menu.MenuId {
node := &roleResponse.RoleMenuList{
MenuId: menu.MenuId,
MenuName: menu.MenuName,
ParentId: menu.ParentId,
MenuStatus: menu.MenuStatus,
MenuType: menu.MenuType,
Permission: menu.Permission,
OrderNum: menu.OrderNum,
Icon: menu.Icon,
Path: menu.Path,
Children: nil,
}
menuMap[menu.MenuId] = node
}
}
}
// 构建菜单树
for _, menu := range menuData {
if menu.ParentId == 0 {
rootNodes = append(rootNodes, menuMap[menu.MenuId])
} else if parent, ok := menuMap[menu.ParentId]; ok {
parent.Children = append(parent.Children, menuMap[menu.MenuId])
}
}
return rootNodes
}