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 }