新增删除菜单

This commit is contained in:
wucongxing 2023-06-27 17:00:31 +08:00
parent 195942a4f5
commit c8fd746540
7 changed files with 110 additions and 6 deletions

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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"`
}

View File

@ -105,5 +105,8 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 修改菜单
menuGroup.PUT("/:menu_id", api.Menu.PutMenu)
// 删除菜单-批量
menuGroup.DELETE("", api.Menu.DeleteMenu)
}
}

View File

@ -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
}

View File

@ -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("数据错误")