diff --git a/api/controller/menu.go b/api/controller/menu.go index 55b8c12..4c2f495 100644 --- a/api/controller/menu.go +++ b/api/controller/menu.go @@ -5,6 +5,7 @@ import ( "hospital-admin-api/api/dao" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" + "hospital-admin-api/api/responses/menuResponse" "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" @@ -60,13 +61,13 @@ func (r *Menu) AddMenu(c *gin.Context) { } // 非模块无父级 - if MenuRequest.AddMenu.ParentId == 0 && MenuRequest.AddMenu.MenuType != 1 { + if MenuRequest.AddMenu.ParentId == "0" && MenuRequest.AddMenu.MenuType != 1 { responses.FailWithMessage("请选择父节点", c) return } // 模块存在父级 - if MenuRequest.AddMenu.ParentId != 0 && MenuRequest.AddMenu.MenuType == 1 { + if MenuRequest.AddMenu.ParentId != "0" && MenuRequest.AddMenu.MenuType == 1 { responses.FailWithMessage("顶级菜单,无法添加上级菜单", c) return } @@ -125,13 +126,13 @@ func (r *Menu) PutMenu(c *gin.Context) { } // 非模块无父级 - if MenuRequest.PutMenu.ParentId == 0 && MenuRequest.PutMenu.MenuType != 1 { + if MenuRequest.PutMenu.ParentId == "0" && MenuRequest.PutMenu.MenuType != 1 { responses.FailWithMessage("请选择父节点", c) return } // 模块存在父级 - if MenuRequest.PutMenu.ParentId != 0 && MenuRequest.PutMenu.MenuType == 1 { + if MenuRequest.PutMenu.ParentId != "0" && MenuRequest.PutMenu.MenuType == 1 { responses.FailWithMessage("顶级菜单,无法添加上级菜单", c) return } @@ -195,5 +196,34 @@ func (r *Menu) GetMenu(c *gin.Context) { return } - responses.OkWithData(adminMenu, c) + // 转换int64为string + MenuId := strconv.FormatInt(adminMenu.MenuId, 10) + if err != nil { + responses.Fail(c) + return + } + + ParentId := strconv.FormatInt(adminMenu.ParentId, 10) + if err != nil { + responses.Fail(c) + return + } + + GetMenuResponse := &menuResponse.GetMenu{ + MenuId: MenuId, + MenuName: adminMenu.MenuName, + MenuTitle: adminMenu.MenuTitle, + ParentId: ParentId, + MenuStatus: adminMenu.MenuStatus, + MenuType: adminMenu.MenuType, + Permission: adminMenu.Permission, + OrderNum: adminMenu.OrderNum, + Icon: adminMenu.Icon, + Path: adminMenu.Path, + Component: adminMenu.Component, + CreatedAt: adminMenu.CreatedAt, + UpdatedAt: adminMenu.UpdatedAt, + } + + responses.OkWithData(GetMenuResponse, c) } diff --git a/api/controller/role.go b/api/controller/role.go index 62c22bc..fa26ba5 100644 --- a/api/controller/role.go +++ b/api/controller/role.go @@ -186,12 +186,35 @@ func (r *Role) GetRole(c *gin.Context) { } RoleService := service.RoleService{} - GetRoleResponse, err := RoleService.GetRole(roleId) + adminRole, menuIds, err := RoleService.GetRole(roleId) if err != nil { responses.FailWithMessage(err.Error(), c) return } + // 处理返回值 + // 转换int64为string + var menuIdsString []string + for _, menuId := range menuIds { + menuId := strconv.FormatInt(menuId, 10) + menuIdsString = append(menuIdsString, menuId) + } + + // 转换int64为string + RoleId := strconv.FormatInt(adminRole.RoleId, 10) + if err != nil { + responses.Fail(c) + return + } + + GetRoleResponse := &roleResponse.GetRole{ + MenuIds: menuIdsString, + RoleId: RoleId, + RoleName: adminRole.RoleName, + RoleStatus: adminRole.RoleStatus, + IsAdmin: adminRole.IsAdmin, + } + responses.OkWithData(GetRoleResponse, c) } diff --git a/api/requests/menu.go b/api/requests/menu.go index 582692e..39ff148 100644 --- a/api/requests/menu.go +++ b/api/requests/menu.go @@ -8,35 +8,35 @@ type MenuRequest struct { // AddMenu 新增菜单 type AddMenu struct { - MenuName string `json:"menu_name" form:"menu_name" validate:"required" label:"菜单名称"` - MenuTitle string `json:"menu_title" form:"menu_title" validate:"required" label:"菜单名称"` - ParentId int64 `json:"parent_id" form:"parent_id" validate:"required,numeric" label:"父菜单ID"` // (0表示一级) - MenuStatus int `json:"menu_status" form:"menu_status" validate:"oneof=0 1" label:"菜单状态"` // (0:隐藏 1:正常)此优先级最高 - MenuType int `json:"menu_type" form:"menu_type" validate:"required,oneof=1 2 3" label:"菜单类型"` // 菜单类型(1:模块 2:菜单 3:按钮) - Permission string `json:"permission" form:"permission" label:"标识"` // 标识 - OrderNum int `json:"order_num" form:"order_num" validate:"numeric" label:"显示顺序"` // 显示顺序 - Icon string `json:"icon" form:"icon" label:"图标地址"` // 图标地址 - Path string `json:"path" form:"path" label:"页面地址"` // 页面地址(#表示当前页)-按钮不需要 - Component string `json:"component" form:"component" label:"组件名称"` // 组件名称-按钮不需要 - ApiIds []int64 `json:"api_ids" form:"api_ids" label:"接口"` // 接口ids + MenuName string `json:"menu_name" form:"menu_name" validate:"required" label:"菜单名称"` + MenuTitle string `json:"menu_title" form:"menu_title" validate:"required" label:"菜单名称"` + ParentId string `json:"parent_id" form:"parent_id" validate:"required,numeric" label:"父菜单ID"` // (0表示一级) + MenuStatus int `json:"menu_status" form:"menu_status" validate:"oneof=0 1" label:"菜单状态"` // (0:隐藏 1:正常)此优先级最高 + MenuType int `json:"menu_type" form:"menu_type" validate:"required,oneof=1 2 3" label:"菜单类型"` // 菜单类型(1:模块 2:菜单 3:按钮) + Permission string `json:"permission" form:"permission" label:"标识"` // 标识 + OrderNum int `json:"order_num" form:"order_num" validate:"numeric" label:"显示顺序"` // 显示顺序 + Icon string `json:"icon" form:"icon" label:"图标地址"` // 图标地址 + Path string `json:"path" form:"path" label:"页面地址"` // 页面地址(#表示当前页)-按钮不需要 + Component string `json:"component" form:"component" label:"组件名称"` // 组件名称-按钮不需要 + ApiIds []string `json:"api_ids" form:"api_ids" label:"接口"` // 接口ids } // PutMenu 修改菜单 type PutMenu struct { - MenuName string `json:"menu_name" form:"menu_name" validate:"required" label:"菜单名称"` - MenuTitle string `json:"menu_title" form:"menu_title" validate:"required" label:"菜单名称"` - ParentId int64 `json:"parent_id" form:"parent_id" validate:"required,numeric" label:"父菜单ID"` // (0表示一级) - MenuStatus int `json:"menu_status" form:"menu_status" validate:"oneof=0 1" label:"菜单状态"` // (0:隐藏 1:正常)此优先级最高 - MenuType int `json:"menu_type" form:"menu_type" validate:"required,oneof=1 2 3" label:"菜单类型"` // 菜单类型(1:模块 2:菜单 3:按钮) - Permission string `json:"permission" form:"permission" label:"标识"` // 标识 - OrderNum int `json:"order_num" form:"order_num" validate:"numeric" label:"显示顺序"` // 显示顺序 - Icon string `json:"icon" form:"icon" label:"图标地址"` // 图标地址 - Path string `json:"path" form:"path" label:"页面地址"` // 页面地址(#表示当前页)-按钮不需要 - Component string `json:"component" form:"component" label:"组件名称"` // 组件名称-按钮不需要 - ApiIds []int64 `json:"api_ids" form:"api_ids" label:"接口"` // 接口ids + MenuName string `json:"menu_name" form:"menu_name" validate:"required" label:"菜单名称"` + MenuTitle string `json:"menu_title" form:"menu_title" validate:"required" label:"菜单名称"` + ParentId string `json:"parent_id" form:"parent_id" validate:"required,numeric" label:"父菜单ID"` // (0表示一级) + MenuStatus int `json:"menu_status" form:"menu_status" validate:"oneof=0 1" label:"菜单状态"` // (0:隐藏 1:正常)此优先级最高 + MenuType int `json:"menu_type" form:"menu_type" validate:"required,oneof=1 2 3" label:"菜单类型"` // 菜单类型(1:模块 2:菜单 3:按钮) + Permission string `json:"permission" form:"permission" label:"标识"` // 标识 + OrderNum int `json:"order_num" form:"order_num" validate:"numeric" label:"显示顺序"` // 显示顺序 + Icon string `json:"icon" form:"icon" label:"图标地址"` // 图标地址 + Path string `json:"path" form:"path" label:"页面地址"` // 页面地址(#表示当前页)-按钮不需要 + Component string `json:"component" form:"component" label:"组件名称"` // 组件名称-按钮不需要 + ApiIds []string `json:"api_ids" form:"api_ids" label:"接口"` // 接口ids } // DeleteMenu 删除菜单 type DeleteMenu struct { - MenuIds []int64 `json:"menu_ids" form:"menu_ids" validate:"required" label:"菜单id"` + MenuIds []string `json:"menu_ids" form:"menu_ids" validate:"required" label:"菜单id"` } diff --git a/api/responses/menuResponse/menu.go b/api/responses/menuResponse/menu.go index fddac0f..7dc49b3 100644 --- a/api/responses/menuResponse/menu.go +++ b/api/responses/menuResponse/menu.go @@ -1,11 +1,13 @@ package menuResponse +import "hospital-admin-api/api/model" + // GetMenuList 获取菜单列表 type GetMenuList struct { - MenuId int64 `json:"menu_id"` + MenuId string `json:"menu_id"` MenuName string `json:"menu_name"` // 菜单名称 MenuTitle string `json:"menu_title"` // 菜单名称 - ParentId int64 `json:"parent_id"` // 父菜单ID(0表示一级) + ParentId string `json:"parent_id"` // 父菜单ID(0表示一级) MenuStatus int `json:"menu_status"` // 菜单状态(0:隐藏 1:正常)此优先级最高 MenuType int `json:"menu_type"` // 菜单类型(1:模块 2:菜单 3:按钮) Permission string `json:"permission"` // 标识 @@ -15,3 +17,20 @@ type GetMenuList struct { Component string `json:"component"` // 组件名称 Children []*GetMenuList `json:"children"` // 下级页面 } + +// GetMenu 菜单详情 +type GetMenu struct { + MenuId string `json:"menu_id"` + MenuName string `json:"menu_name"` // 菜单名称 + MenuTitle string `json:"menu_title"` // 菜单名称 + ParentId string `json:"parent_id"` // 父菜单ID(0表示一级) + MenuStatus int `json:"menu_status"` // 菜单状态(0:隐藏 1:正常)此优先级最高 + MenuType int `json:"menu_type"` // 菜单类型(1:模块 2:菜单 3:按钮) + Permission string `json:"permission"` // 标识 + OrderNum int `json:"order_num"` // 显示顺序 + Icon string `json:"icon"` // 图标地址 + Path string `json:"path"` // 页面地址(#表示当前页) + Component string `json:"component"` // 组件名称 + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} diff --git a/api/service/menu.go b/api/service/menu.go index c6e0de4..67e6d29 100644 --- a/api/service/menu.go +++ b/api/service/menu.go @@ -8,6 +8,7 @@ import ( "hospital-admin-api/api/requests" "hospital-admin-api/api/responses/menuResponse" "hospital-admin-api/global" + "strconv" ) type MenuService struct{} @@ -26,10 +27,10 @@ func (r *MenuService) GetMenuList() ([]*menuResponse.GetMenuList, error) { for _, menu := range adminMenu { node := &menuResponse.GetMenuList{ - MenuId: menu.MenuId, + MenuId: strconv.FormatInt(menu.MenuId, 10), MenuName: menu.MenuName, MenuTitle: menu.MenuTitle, - ParentId: menu.ParentId, + ParentId: strconv.FormatInt(menu.ParentId, 10), MenuStatus: menu.MenuStatus, MenuType: menu.MenuType, Permission: menu.Permission, @@ -45,6 +46,9 @@ func (r *MenuService) GetMenuList() ([]*menuResponse.GetMenuList, error) { // 构建菜单树 for _, menu := range adminMenu { if menu.ParentId == 0 { + if menuMap[menu.MenuId] == nil { + continue + } menuTree = append(menuTree, menuMap[menu.MenuId]) } else if parent, ok := menuMap[menu.ParentId]; ok { parent.Children = append(parent.Children, menuMap[menu.MenuId]) @@ -60,9 +64,14 @@ func (r *MenuService) AddMenu(AddMenuRequest requests.AddMenu) (bool, error) { AdminMenuApiDao := dao.AdminMenuApiDao{} AdminApiDao := dao.AdminApiDao{} + ParentId, err := strconv.ParseInt(AddMenuRequest.ParentId, 10, 64) + if err != nil { + return false, errors.New("新增失败") + } + // 判断父级id - if AddMenuRequest.ParentId != 0 { - adminMenu, _ := AdminMenuDao.GetAdminMenuById(AddMenuRequest.ParentId) + if ParentId != 0 { + adminMenu, _ := AdminMenuDao.GetAdminMenuById(ParentId) if adminMenu == nil { return false, errors.New("上级菜单错误") } @@ -80,7 +89,7 @@ func (r *MenuService) AddMenu(AddMenuRequest requests.AddMenu) (bool, error) { AdminMenuModel := &model.AdminMenu{ MenuName: AddMenuRequest.MenuName, MenuTitle: AddMenuRequest.MenuTitle, - ParentId: AddMenuRequest.ParentId, + ParentId: ParentId, MenuStatus: AddMenuRequest.MenuStatus, MenuType: AddMenuRequest.MenuType, Permission: AddMenuRequest.Permission, @@ -99,6 +108,13 @@ func (r *MenuService) AddMenu(AddMenuRequest requests.AddMenu) (bool, error) { // 新增菜单api if len(AddMenuRequest.ApiIds) > 0 { for _, v := range AddMenuRequest.ApiIds { + // 将字符串转换为int64类型 + v, err := strconv.ParseInt(v, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + // 检测api adminApi, _ := AdminApiDao.GetAdminApiById(v) if adminApi == nil { @@ -130,9 +146,14 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe AdminMenuApiDao := dao.AdminMenuApiDao{} AdminApiDao := dao.AdminApiDao{} + ParentId, err := strconv.ParseInt(PutMenuRequest.ParentId, 10, 64) + if err != nil { + return false, errors.New("新增失败") + } + // 判断父级id - if PutMenuRequest.ParentId != 0 { - adminMenu, _ := AdminMenuDao.GetAdminMenuById(PutMenuRequest.ParentId) + if ParentId != 0 { + adminMenu, _ := AdminMenuDao.GetAdminMenuById(ParentId) if adminMenu == nil { return false, errors.New("上级菜单错误") } @@ -156,7 +177,7 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe AdminMenuModel := &model.AdminMenu{ MenuName: PutMenuRequest.MenuName, MenuTitle: PutMenuRequest.MenuTitle, - ParentId: PutMenuRequest.ParentId, + ParentId: ParentId, MenuStatus: PutMenuRequest.MenuStatus, MenuType: PutMenuRequest.MenuType, Permission: PutMenuRequest.Permission, @@ -166,7 +187,7 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe Component: PutMenuRequest.Component, } - err := AdminMenuDao.EditAdminMenuByIdWithStruct(tx, adminMenu.MenuId, AdminMenuModel) + err = AdminMenuDao.EditAdminMenuByIdWithStruct(tx, adminMenu.MenuId, AdminMenuModel) if err != nil { tx.Rollback() return false, errors.New("修改失败") @@ -182,6 +203,13 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe // 新增菜单api if len(PutMenuRequest.ApiIds) > 0 { for _, v := range PutMenuRequest.ApiIds { + // 将字符串转换为int64类型 + v, err := strconv.ParseInt(v, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + // 检测api adminApi, _ := AdminApiDao.GetAdminApiById(v) if adminApi == nil { @@ -237,6 +265,13 @@ func (r *MenuService) DeleteMenu(c *gin.Context, DeleteMenuRequest requests.Dele }() for _, v := range DeleteMenuRequest.MenuIds { + // 将字符串转换为int64类型 + v, err := strconv.ParseInt(v, 10, 64) + if err != nil { + tx.Rollback() + return false, errors.New("删除失败") + } + // 获取菜单数据 adminMenu, _ := AdminMenuDao.GetAdminMenuById(v) if adminMenu == nil { diff --git a/api/service/role.go b/api/service/role.go index 66a3df0..f923de4 100644 --- a/api/service/role.go +++ b/api/service/role.go @@ -116,44 +116,22 @@ func (r *RoleService) PutRoleStatus(roleId int64, roleStatus int) (bool, error) } // GetRole 角色详情 -func (r *RoleService) GetRole(roleId int64) (*roleResponse.GetRole, error) { +func (r *RoleService) GetRole(roleId int64) (adminRole *model.AdminRole, menuIds []int64, err error) { // 获取请求角色数据 AdminRoleDao := dao.AdminRoleDao{} - adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId) + adminRole, err = AdminRoleDao.GetAdminRoleFirstById(roleId) if err != nil || adminRole == nil { - return nil, errors.New("非法操作") + return nil, nil, errors.New("非法操作") } // 获取角色权限菜单id AdminRoleMenuDao := dao.AdminRoleMenuDao{} - menuIds, err := AdminRoleMenuDao.GetAdminRoleMenuIdByRoleId(roleId) + menuIds, err = AdminRoleMenuDao.GetAdminRoleMenuIdByRoleId(roleId) if err != nil { - return nil, errors.New("角色权限菜单获取失败") + return nil, nil, errors.New("角色权限菜单获取失败") } - // 处理返回数据 - // 转换int64为string - var menuIdsString []string - for _, menuId := range menuIds { - menuId := strconv.FormatInt(menuId, 10) - menuIdsString = append(menuIdsString, menuId) - } - - // 转换int64为string - RoleId := strconv.FormatInt(adminRole.RoleId, 10) - if err != nil { - return nil, errors.New("数据错误") - } - - GetRoleResponse := &roleResponse.GetRole{ - MenuIds: menuIdsString, - RoleId: RoleId, - RoleName: adminRole.RoleName, - RoleStatus: adminRole.RoleStatus, - IsAdmin: adminRole.IsAdmin, - } - - return GetRoleResponse, nil + return adminRole, menuIds, nil } // AddRole 新增角色