mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-09-26 20:21:19 +08:00
146 lines
4.4 KiB
Go
146 lines
4.4 KiB
Go
package menu
|
|
|
|
import (
|
|
"x_admin/admin/system/role"
|
|
"x_admin/config"
|
|
"x_admin/core"
|
|
"x_admin/core/response"
|
|
"x_admin/model/system_model"
|
|
"x_admin/util"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// type ISystemAuthMenuService interface {
|
|
// SelectMenuByRoleId(c *gin.Context, roleId uint) (mapList []interface{}, e error)
|
|
// List() (res []interface{}, e error)
|
|
// Detail(id uint) (res SystemAuthMenuResp, e error)
|
|
// Add(addReq SystemAuthMenuAddReq) (e error)
|
|
// Edit(editReq SystemAuthMenuEditReq) (e error)
|
|
// Del(id uint) (e error)
|
|
// }
|
|
|
|
var Service = NewSystemAuthMenuService()
|
|
|
|
// NewSystemAuthMenuService 初始化
|
|
func NewSystemAuthMenuService() *systemAuthMenuService {
|
|
db := core.GetDB()
|
|
return &systemAuthMenuService{db: db}
|
|
}
|
|
|
|
// systemAuthMenuService 系统菜单服务实现类
|
|
type systemAuthMenuService struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// SelectMenuByRoleId 根据角色ID获取菜单
|
|
func (menuSrv systemAuthMenuService) SelectMenuByRoleId(c *gin.Context, roleId uint) (mapList []interface{}, e error) {
|
|
adminId := config.AdminConfig.GetAdminId(c)
|
|
var menuIds []uint
|
|
// 超管
|
|
if adminId == config.AdminConfig.SuperAdminId {
|
|
menuIds = []uint{0}
|
|
} else if menuIds, e = role.PermService.SelectMenuIdsByRoleId(roleId); e != nil {
|
|
return
|
|
}
|
|
if len(menuIds) == 0 {
|
|
menuIds = []uint{0}
|
|
}
|
|
chain := menuSrv.db.Where("menu_type in ? AND is_disable = ?", []string{"M", "C"}, 0)
|
|
if adminId != config.AdminConfig.SuperAdminId {
|
|
chain = chain.Where("id in ?", menuIds)
|
|
}
|
|
var menus []system_model.SystemAuthMenu
|
|
err := chain.Order("menu_sort desc, id").Find(&menus).Error
|
|
if e = response.CheckErr(err, "SelectMenuByRoleId Find err"); e != nil {
|
|
return
|
|
}
|
|
var menuResps []SystemAuthMenuResp
|
|
util.ConvertUtil.Copy(&menuResps, menus)
|
|
mapList = util.ArrayUtil.ListToTree(
|
|
util.ConvertUtil.StructsToMaps(menuResps), "id", "pid", "children")
|
|
return
|
|
}
|
|
|
|
// List 菜单列表
|
|
func (menuSrv systemAuthMenuService) List() (res interface{}, e error) {
|
|
var menus []system_model.SystemAuthMenu
|
|
err := menuSrv.db.Order("menu_sort desc, id").Find(&menus).Error
|
|
if e = response.CheckErr(err, "列表获取失败"); e != nil {
|
|
return
|
|
}
|
|
var menuResps []SystemAuthMenuResp
|
|
util.ConvertUtil.Copy(&menuResps, menus)
|
|
return menuResps, nil
|
|
// return util.ArrayUtil.ListToTree(
|
|
// util.ConvertUtil.StructsToMaps(menuResps), "id", "pid", "children"), nil
|
|
}
|
|
|
|
// Detail 菜单详情
|
|
func (menuSrv systemAuthMenuService) Detail(id uint) (res SystemAuthMenuResp, e error) {
|
|
var menu system_model.SystemAuthMenu
|
|
err := menuSrv.db.Where("id = ?", id).Limit(1).First(&menu).Error
|
|
if e = response.CheckErrDBNotRecord(err, "菜单已不存在!"); e != nil {
|
|
return
|
|
}
|
|
if e = response.CheckErr(err, "详情获取失败"); e != nil {
|
|
return
|
|
}
|
|
util.ConvertUtil.Copy(&res, menu)
|
|
return
|
|
}
|
|
|
|
func (menuSrv systemAuthMenuService) Add(addReq SystemAuthMenuAddReq) (e error) {
|
|
var menu system_model.SystemAuthMenu
|
|
util.ConvertUtil.Copy(&menu, addReq)
|
|
err := menuSrv.db.Create(&menu).Error
|
|
if e = response.CheckErr(err, "添加失败"); e != nil {
|
|
return
|
|
}
|
|
util.RedisUtil.Del(config.AdminConfig.BackstageRolesKey)
|
|
return
|
|
}
|
|
|
|
func (menuSrv systemAuthMenuService) Edit(editReq SystemAuthMenuEditReq) (e error) {
|
|
var menu system_model.SystemAuthMenu
|
|
err := menuSrv.db.Where("id = ?", editReq.ID).Limit(1).Find(&menu).Error
|
|
if e = response.CheckErrDBNotRecord(err, "菜单已不存在!"); e != nil {
|
|
return
|
|
}
|
|
if e = response.CheckErr(err, "Edit Find err"); e != nil {
|
|
return
|
|
}
|
|
util.ConvertUtil.Copy(&menu, editReq)
|
|
// info := structs.Map(menu)
|
|
err = menuSrv.db.Model(&menu).Select("*").Updates(menu).Error
|
|
if e = response.CheckErr(err, "编辑失败"); e != nil {
|
|
return
|
|
}
|
|
util.RedisUtil.Del(config.AdminConfig.BackstageRolesKey)
|
|
return
|
|
}
|
|
|
|
// Del 删除菜单
|
|
func (menuSrv systemAuthMenuService) Del(id uint) (e error) {
|
|
var menu system_model.SystemAuthMenu
|
|
err := menuSrv.db.Where("id = ?", id).Limit(1).First(&menu).Error
|
|
if e = response.CheckErrDBNotRecord(err, "菜单已不存在!"); e != nil {
|
|
return
|
|
}
|
|
if e = response.CheckErr(err, "Delete First err"); e != nil {
|
|
return
|
|
}
|
|
r := menuSrv.db.Where("pid = ?", id).Limit(1).Find(&system_model.SystemAuthMenu{})
|
|
err = r.Error
|
|
if e = response.CheckErr(err, "Delete Find by pid err"); e != nil {
|
|
return
|
|
}
|
|
if r.RowsAffected > 0 {
|
|
return response.AssertArgumentError.SetMessage("请先删除子菜单再操作!")
|
|
}
|
|
err = menuSrv.db.Delete(&menu).Error
|
|
e = response.CheckErr(err, "Delete Delete err")
|
|
return
|
|
}
|