diff --git a/api/controller/menu.go b/api/controller/menu.go index 6eaae2c..a9166aa 100644 --- a/api/controller/menu.go +++ b/api/controller/menu.go @@ -146,3 +146,26 @@ func (r *Menu) PutMenu(c *gin.Context) { responses.Ok(c) return } + +// DeleteMenu 删除菜单-批量 +func (r *Menu) DeleteMenu(c *gin.Context) { + if err := c.ShouldBindJSON(&MenuRequest.DeleteMenu); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(MenuRequest.DeleteMenu); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + MenuService := service.MenuService{} + _, err := MenuService.DeleteMenu(c, MenuRequest.DeleteMenu) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} diff --git a/api/dao/adminMenu.go b/api/dao/adminMenu.go index 4bfa1cb..ea12747 100644 --- a/api/dao/adminMenu.go +++ b/api/dao/adminMenu.go @@ -61,3 +61,11 @@ func (r *AdminMenuDao) EditAdminMenuByIdWithStruct(tx *gorm.DB, menuId int64, mo } return nil } + +// DeleteAdminMenuByMenuId 删除菜单 +func (r *AdminMenuDao) DeleteAdminMenuByMenuId(tx *gorm.DB, menuId int64) error { + if err := tx.Delete(&model.AdminMenu{}, menuId).Error; err != nil { + return err + } + return nil +} diff --git a/api/dao/adminMenuApi.go b/api/dao/adminMenuApi.go index 4a1de1a..17a70b0 100644 --- a/api/dao/adminMenuApi.go +++ b/api/dao/adminMenuApi.go @@ -27,8 +27,8 @@ func (r *AdminMenuApiDao) AddAdminMenuApi(tx *gorm.DB, model *model.AdminMenuApi return model, nil } -// DeleteAdminRoleMenuByMenuId 删除菜单关联api-菜单id -func (r *AdminMenuApiDao) DeleteAdminRoleMenuByMenuId(tx *gorm.DB, menuId int64) error { +// DeleteAdminMenuApiByMenuId 删除菜单关联api-菜单id +func (r *AdminMenuApiDao) DeleteAdminMenuApiByMenuId(tx *gorm.DB, menuId int64) error { if err := tx.Where("menu_id = ?", menuId).Delete(&model.AdminMenuApi{}).Error; err != nil { return err } diff --git a/api/requests/menu.go b/api/requests/menu.go index a91d707..582692e 100644 --- a/api/requests/menu.go +++ b/api/requests/menu.go @@ -1,8 +1,9 @@ package requests type MenuRequest struct { - AddMenu // 新增菜单 - PutMenu // 修改菜单 + AddMenu // 新增菜单 + PutMenu // 修改菜单 + DeleteMenu // 删除菜单 } // AddMenu 新增菜单 @@ -34,3 +35,8 @@ type PutMenu struct { Component string `json:"component" form:"component" label:"组件名称"` // 组件名称-按钮不需要 ApiIds []int64 `json:"api_ids" form:"api_ids" label:"接口"` // 接口ids } + +// DeleteMenu 删除菜单 +type DeleteMenu struct { + MenuIds []int64 `json:"menu_ids" form:"menu_ids" validate:"required" label:"菜单id"` +} diff --git a/api/router/router.go b/api/router/router.go index 52ad8fd..9073582 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -105,5 +105,8 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 修改菜单 menuGroup.PUT("/:menu_id", api.Menu.PutMenu) + + // 删除菜单-批量 + menuGroup.DELETE("", api.Menu.DeleteMenu) } } diff --git a/api/service/menu.go b/api/service/menu.go index c91d7a6..c6e0de4 100644 --- a/api/service/menu.go +++ b/api/service/menu.go @@ -2,6 +2,7 @@ package service import ( "errors" + "github.com/gin-gonic/gin" "hospital-admin-api/api/dao" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" @@ -172,7 +173,7 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe } // 删除菜单关联api - err = AdminMenuApiDao.DeleteAdminRoleMenuByMenuId(tx, adminMenu.MenuId) + err = AdminMenuApiDao.DeleteAdminMenuApiByMenuId(tx, adminMenu.MenuId) if err != nil { tx.Rollback() return false, errors.New("修改失败") @@ -205,3 +206,66 @@ func (r *MenuService) PutMenu(requestMenuId int64, PutMenuRequest requests.PutMe return true, nil } + +// DeleteMenu 删除菜单 +func (r *MenuService) DeleteMenu(c *gin.Context, DeleteMenuRequest requests.DeleteMenu) (bool, error) { + // 获取当前登陆用户角色数据 + roleId := c.GetInt64("RoleId") + if roleId == 0 { + return false, errors.New("数据错误") + } + + AdminMenuDao := dao.AdminMenuDao{} + AdminMenuApiDao := dao.AdminMenuApiDao{} + + AdminRoleDao := dao.AdminRoleDao{} + adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId) + if err != nil || adminRole == nil { + return false, errors.New("非法操作") + } + + if adminRole.IsAdmin == 0 { + return false, errors.New("暂无权限,请联系管理员删除") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + for _, v := range DeleteMenuRequest.MenuIds { + // 获取菜单数据 + adminMenu, _ := AdminMenuDao.GetAdminMenuById(v) + if adminMenu == nil { + tx.Rollback() + return false, errors.New("删除失败") + } + + // 判断是否特殊菜单 + if adminMenu.MenuId == 1 || adminMenu.ParentId == 1 { + tx.Rollback() + return false, errors.New("系统菜单,请勿删除") + } + + // 删除菜单关联api + err = AdminMenuApiDao.DeleteAdminMenuApiByMenuId(tx, v) + if err != nil { + tx.Rollback() + return false, errors.New("删除失败") + } + + // 删除菜单 + err = AdminMenuDao.DeleteAdminMenuByMenuId(tx, v) + if err != nil { + tx.Rollback() + return false, errors.New("删除失败") + } + } + + tx.Commit() + + return true, nil +} diff --git a/api/service/role.go b/api/service/role.go index 6bce6f4..dace0d9 100644 --- a/api/service/role.go +++ b/api/service/role.go @@ -276,7 +276,7 @@ func (r *RoleService) PutRole(c *gin.Context, requestRoleId int64, PutRoleReques // DeleteRole 删除角色-批量 func (r *RoleService) DeleteRole(c *gin.Context, DeleteRoleRequest requests.DeleteRole) (bool, error) { - // 获取当前登陆用户数据 + // 获取当前登陆用户角色数据 roleId := c.GetInt64("RoleId") if roleId == 0 { return false, errors.New("数据错误")