mirror of
https://gitee.com/luojinyi/likeadmin_go.git
synced 2025-12-24 08:12:57 +08:00
feat: 完成"新增菜单"和"编辑菜单"接口
This commit is contained in:
@@ -34,6 +34,8 @@ func init() {
|
||||
Group.AddGET("/menu/route", menuRoute)
|
||||
Group.AddGET("/menu/list", menuList)
|
||||
Group.AddGET("/menu/detail", menuDetail)
|
||||
Group.AddPOST("/menu/add", menuAdd)
|
||||
Group.AddPOST("/menu/edit", menuEdit)
|
||||
Group.AddPOST("/menu/del", menuDel)
|
||||
}
|
||||
|
||||
@@ -176,6 +178,22 @@ func menuDetail(c *gin.Context) {
|
||||
response.OkWithData(c, system.SystemAuthMenuService.Detail(detailReq.ID))
|
||||
}
|
||||
|
||||
//menuAdd 新增菜单
|
||||
func menuAdd(c *gin.Context) {
|
||||
var addReq req.SystemAuthMenuAddReq
|
||||
utils.VerifyUtil.VerifyJSON(c, &addReq)
|
||||
system.SystemAuthMenuService.Add(addReq)
|
||||
response.Ok(c)
|
||||
}
|
||||
|
||||
//menuEdit 编辑菜单
|
||||
func menuEdit(c *gin.Context) {
|
||||
var editReq req.SystemAuthMenuEditReq
|
||||
utils.VerifyUtil.VerifyJSON(c, &editReq)
|
||||
system.SystemAuthMenuService.Edit(editReq)
|
||||
response.Ok(c)
|
||||
}
|
||||
|
||||
//menuDel 删除菜单
|
||||
func menuDel(c *gin.Context) {
|
||||
var delReq req.SystemAuthMenuDelReq
|
||||
|
||||
@@ -104,6 +104,41 @@ type SystemAuthMenuDetailReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
}
|
||||
|
||||
//SystemAuthMenuAddReq 新增菜单参数
|
||||
type SystemAuthMenuAddReq struct {
|
||||
Pid uint `form:"pid" binding:"required,gt=0"` // 上级菜单
|
||||
MenuType string `form:"menuType" binding:"oneof=M C A"` // 权限类型: [M=目录, C=菜单, A=按钮]
|
||||
MenuName string `form:"menuName" binding:"required,min=1,max=30"` // 菜单名称
|
||||
MenuIcon string `form:"menuIcon" binding:"max=100"` // 菜单图标
|
||||
MenuSort int `form:"menuSort" binding:"required,gte=0"` // 菜单排序
|
||||
Perms string `form:"perms" binding:"max=100"` // 权限标识
|
||||
Paths string `form:"paths" binding:"max=200"` // 路由地址
|
||||
Component string `form:"component" binding:"max=200"` // 前端组件
|
||||
Selected string `form:"selected" binding:"max=200"` // 选中路径
|
||||
Params string `form:"params" binding:"max=200"` // 路由参数
|
||||
IsCache uint8 `form:"isCache" binding:"oneof=0 1"` // 是否缓存: [0=否, 1=是]
|
||||
IsShow uint8 `form:"isShow" binding:"oneof=0 1"` // 是否显示: [0=否, 1=是]
|
||||
IsDisable uint8 `form:"isDisable" binding:"oneof=0 1"` // 是否禁用: [0=否, 1=是]
|
||||
}
|
||||
|
||||
//SystemAuthMenuEditReq 编辑菜单参数
|
||||
type SystemAuthMenuEditReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
Pid uint `form:"pid" binding:"required,gt=0"` // 上级菜单
|
||||
MenuType string `form:"menuType" binding:"oneof=M C A"` // 权限类型: [M=目录, C=菜单, A=按钮]
|
||||
MenuName string `form:"menuName" binding:"required,min=1,max=30"` // 菜单名称
|
||||
MenuIcon string `form:"menuIcon" binding:"max=100"` // 菜单图标
|
||||
MenuSort int `form:"menuSort" binding:"required,gte=0"` // 菜单排序
|
||||
Perms string `form:"perms" binding:"max=100"` // 权限标识
|
||||
Paths string `form:"paths" binding:"max=200"` // 路由地址
|
||||
Component string `form:"component" binding:"max=200"` // 前端组件
|
||||
Selected string `form:"selected" binding:"max=200"` // 选中路径
|
||||
Params string `form:"params" binding:"max=200"` // 路由参数
|
||||
IsCache uint8 `form:"isCache" binding:"oneof=0 1"` // 是否缓存: [0=否, 1=是]
|
||||
IsShow uint8 `form:"isShow" binding:"oneof=0 1"` // 是否显示: [0=否, 1=是]
|
||||
IsDisable uint8 `form:"isDisable" binding:"oneof=0 1"` // 是否禁用: [0=否, 1=是]
|
||||
}
|
||||
|
||||
//SystemAuthMenuDelReq 删除菜单参数
|
||||
type SystemAuthMenuDelReq struct {
|
||||
ID uint `form:"id" binding:"required,gt=0"` // 主键
|
||||
|
||||
@@ -35,8 +35,7 @@ func (adminSrv systemAuthAdminService) FindByUsername(username string) (admin sy
|
||||
func (adminSrv systemAuthAdminService) Self(adminId uint) (res resp.SystemAuthAdminSelfResp) {
|
||||
// 管理员信息
|
||||
var sysAdmin system.SystemAuthAdmin
|
||||
err := core.DB.Where("id = ? AND is_delete = ?", adminId, 0).Limit(1).First(&sysAdmin).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Where("id = ? AND is_delete = ?", adminId, 0).Limit(1).First(&sysAdmin).Error; err != nil {
|
||||
core.Logger.Errorf("Self First err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -47,7 +46,7 @@ func (adminSrv systemAuthAdminService) Self(adminId uint) (res resp.SystemAuthAd
|
||||
menuIds := SystemAuthPermService.SelectMenuIdsByRoleId(uint(roleId))
|
||||
if len(menuIds) > 0 {
|
||||
var menus []system.SystemAuthMenu
|
||||
err = core.DB.Where(
|
||||
err := core.DB.Where(
|
||||
"id in ? AND is_disable = ? AND menu_type in ?", menuIds, 0, []string{"C", "A"}).Order(
|
||||
"menu_sort, id").Find(&menus).Error
|
||||
if err != nil {
|
||||
@@ -101,15 +100,13 @@ func (adminSrv systemAuthAdminService) List(page request.PageReq, listReq req.Sy
|
||||
}
|
||||
// 总数
|
||||
var count int64
|
||||
err := adminModel.Count(&count).Error
|
||||
if err != nil {
|
||||
if err := adminModel.Count(&count).Error; err != nil {
|
||||
core.Logger.Errorf("List Count err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
// 数据
|
||||
var adminResp []resp.SystemAuthAdminResp
|
||||
err = adminModel.Limit(limit).Offset(offset).Order("id desc, sort desc").Find(&adminResp).Error
|
||||
if err != nil {
|
||||
if err := adminModel.Limit(limit).Offset(offset).Order("id desc, sort desc").Find(&adminResp).Error; err != nil {
|
||||
core.Logger.Errorf("List Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -185,8 +182,7 @@ func (adminSrv systemAuthAdminService) Add(addReq req.SystemAuthAdminAddReq) {
|
||||
addReq.Avatar = "/api/static/backend_avatar.png"
|
||||
}
|
||||
sysAdmin.Avatar = utils.UrlUtil.ToRelativeUrl(addReq.Avatar)
|
||||
err = core.DB.Create(&sysAdmin).Error
|
||||
if err != nil {
|
||||
if err = core.DB.Create(&sysAdmin).Error; err != nil {
|
||||
core.Logger.Errorf("Add Create err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -250,8 +246,7 @@ func (adminSrv systemAuthAdminService) Edit(c *gin.Context, editReq req.SystemAu
|
||||
} else {
|
||||
delete(adminMap, "Password")
|
||||
}
|
||||
err = core.DB.Model(&admin).Where("id = ?", editReq.ID).Updates(adminMap).Error
|
||||
if err != nil {
|
||||
if err = core.DB.Model(&admin).Where("id = ?", editReq.ID).Updates(adminMap).Error; err != nil {
|
||||
core.Logger.Errorf("Edit Updates err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -310,8 +305,7 @@ func (adminSrv systemAuthAdminService) Update(c *gin.Context, updateReq req.Syst
|
||||
} else {
|
||||
delete(adminMap, "Password")
|
||||
}
|
||||
err = core.DB.Model(&admin).Updates(adminMap).Error
|
||||
if err != nil {
|
||||
if err = core.DB.Model(&admin).Updates(adminMap).Error; err != nil {
|
||||
core.Logger.Errorf("Update Updates err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -350,8 +344,7 @@ func (adminSrv systemAuthAdminService) Del(c *gin.Context, id uint) {
|
||||
if id == config.AdminConfig.GetAdminId(c) {
|
||||
panic(response.AssertArgumentError.Make("不能删除自己!"))
|
||||
}
|
||||
err = core.DB.Model(&admin).Updates(system.SystemAuthAdmin{IsDelete: 1, DeleteTime: time.Now().Unix()}).Error
|
||||
if err != nil {
|
||||
if err = core.DB.Model(&admin).Updates(system.SystemAuthAdmin{IsDelete: 1, DeleteTime: time.Now().Unix()}).Error; err != nil {
|
||||
core.Logger.Errorf("Del Updates err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -360,8 +353,7 @@ func (adminSrv systemAuthAdminService) Del(c *gin.Context, id uint) {
|
||||
//Disable 管理员状态切换
|
||||
func (adminSrv systemAuthAdminService) Disable(c *gin.Context, id uint) {
|
||||
var admin system.SystemAuthAdmin
|
||||
err := core.DB.Where("id = ? AND is_delete = ?", id, 0).Limit(1).Find(&admin).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Where("id = ? AND is_delete = ?", id, 0).Limit(1).Find(&admin).Error; err != nil {
|
||||
core.Logger.Errorf("Disable Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -375,8 +367,7 @@ func (adminSrv systemAuthAdminService) Disable(c *gin.Context, id uint) {
|
||||
if admin.IsDisable == 0 {
|
||||
isDisable = 1
|
||||
}
|
||||
err = core.DB.Model(&admin).Updates(system.SystemAuthAdmin{IsDisable: isDisable, UpdateTime: time.Now().Unix()}).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Model(&admin).Updates(system.SystemAuthAdmin{IsDisable: isDisable, UpdateTime: time.Now().Unix()}).Error; err != nil {
|
||||
core.Logger.Errorf("Disable Updates err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@ package system
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/fatih/structs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"likeadmin/admin/schemas/req"
|
||||
"likeadmin/admin/schemas/resp"
|
||||
"likeadmin/config"
|
||||
"likeadmin/core"
|
||||
@@ -29,8 +31,7 @@ func (menuSrv systemAuthMenuService) SelectMenuByRoleId(c *gin.Context, roleId u
|
||||
chain = chain.Where("id in ?", menuIds)
|
||||
}
|
||||
var menus []system.SystemAuthMenu
|
||||
err := chain.Order("menu_sort desc, id").Find(&menus).Error
|
||||
if err != nil {
|
||||
if err := chain.Order("menu_sort desc, id").Find(&menus).Error; err != nil {
|
||||
core.Logger.Errorf("SelectMenuByRoleId Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -44,8 +45,7 @@ func (menuSrv systemAuthMenuService) SelectMenuByRoleId(c *gin.Context, roleId u
|
||||
//List 菜单列表
|
||||
func (menuSrv systemAuthMenuService) List() []interface{} {
|
||||
var menus []system.SystemAuthMenu
|
||||
err := core.DB.Order("menu_sort desc, id").Find(&menus).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Order("menu_sort desc, id").Find(&menus).Error; err != nil {
|
||||
core.Logger.Errorf("List Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -69,12 +69,31 @@ func (menuSrv systemAuthMenuService) Detail(id uint) (res resp.SystemAuthMenuRes
|
||||
return
|
||||
}
|
||||
|
||||
func (menuSrv systemAuthMenuService) Add(menus []system.SystemAuthMenu) {
|
||||
// TODO: Add
|
||||
func (menuSrv systemAuthMenuService) Add(addReq req.SystemAuthMenuAddReq) {
|
||||
var menu system.SystemAuthMenu
|
||||
response.Copy(&menu, addReq)
|
||||
if err := core.DB.Create(&menu).Error; err != nil {
|
||||
core.Logger.Errorf("Add Create err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
utils.RedisUtil.Del(config.AdminConfig.BackstageRolesKey)
|
||||
}
|
||||
|
||||
func (menuSrv systemAuthMenuService) Edit(menus []system.SystemAuthMenu) {
|
||||
// TODO: Edit
|
||||
func (menuSrv systemAuthMenuService) Edit(editReq req.SystemAuthMenuEditReq) {
|
||||
var menu system.SystemAuthMenu
|
||||
err := core.DB.Where("id = ?", editReq.ID).Limit(1).Find(&menu).Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
panic(response.AssertArgumentError.Make("菜单已不存在!"))
|
||||
} else if err != nil {
|
||||
core.Logger.Errorf("Edit Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
response.Copy(&menu, editReq)
|
||||
if err = core.DB.Model(&menu).Updates(structs.Map(menu)).Error; err != nil {
|
||||
core.Logger.Errorf("Edit Updates err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
utils.RedisUtil.Del(config.AdminConfig.BackstageRolesKey)
|
||||
}
|
||||
|
||||
//Del 删除菜单
|
||||
@@ -96,8 +115,7 @@ func (menuSrv systemAuthMenuService) Del(id uint) {
|
||||
if r.RowsAffected > 0 {
|
||||
panic(response.AssertArgumentError.Make("请先删除子菜单再操作!"))
|
||||
}
|
||||
err = core.DB.Delete(&menu).Error
|
||||
if err != nil {
|
||||
if err = core.DB.Delete(&menu).Error; err != nil {
|
||||
core.Logger.Errorf("Delete Delete err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
|
||||
@@ -96,8 +96,7 @@ func (permSrv systemAuthPermService) BatchDeleteByRoleId(roleId uint, db *gorm.D
|
||||
if db == nil {
|
||||
db = core.DB
|
||||
}
|
||||
err := db.Delete(&system.SystemAuthPerm{}, "role_id = ?", roleId).Error
|
||||
if err != nil {
|
||||
if err := db.Delete(&system.SystemAuthPerm{}, "role_id = ?", roleId).Error; err != nil {
|
||||
core.Logger.Errorf("BatchDeleteByRoleId Delete err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -106,8 +105,7 @@ func (permSrv systemAuthPermService) BatchDeleteByRoleId(roleId uint, db *gorm.D
|
||||
|
||||
//BatchDeleteByMenuId 批量删除角色菜单(根据菜单ID)
|
||||
func (permSrv systemAuthPermService) BatchDeleteByMenuId(menuId uint) {
|
||||
err := core.DB.Delete(&system.SystemAuthPerm{}, "menu_id = ?", menuId).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Delete(&system.SystemAuthPerm{}, "menu_id = ?", menuId).Error; err != nil {
|
||||
core.Logger.Errorf("BatchDeleteByMenuId Delete err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ type systemAuthRoleService struct{}
|
||||
//All 角色所有
|
||||
func (roleSrv systemAuthRoleService) All() (res []resp.SystemAuthRoleSimpleResp) {
|
||||
var roles []system.SystemAuthRole
|
||||
err := core.DB.Order("sort desc, id desc").Find(&roles).Error
|
||||
if err != nil {
|
||||
if err := core.DB.Order("sort desc, id desc").Find(&roles).Error; err != nil {
|
||||
core.Logger.Errorf("All Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -41,14 +40,12 @@ func (roleSrv systemAuthRoleService) List(page request.PageReq) response.PageRes
|
||||
offset := page.PageSize * (page.PageNo - 1)
|
||||
roleModel := core.DB.Model(&system.SystemAuthRole{})
|
||||
var count int64
|
||||
err := roleModel.Count(&count).Error
|
||||
if err != nil {
|
||||
if err := roleModel.Count(&count).Error; err != nil {
|
||||
core.Logger.Errorf("List Count err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
var roles []system.SystemAuthRole
|
||||
err = roleModel.Limit(limit).Offset(offset).Order("sort desc, id desc").Find(&roles).Error
|
||||
if err != nil {
|
||||
if err := roleModel.Limit(limit).Offset(offset).Order("sort desc, id desc").Find(&roles).Error; err != nil {
|
||||
core.Logger.Errorf("List Find err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
@@ -92,8 +89,7 @@ func (roleSrv systemAuthRoleService) getMemberCnt(roleId uint) (count int64) {
|
||||
//Add 新增角色
|
||||
func (roleSrv systemAuthRoleService) Add(addReq req.SystemAuthRoleAddReq) {
|
||||
var role system.SystemAuthRole
|
||||
r := core.DB.Where("name = ?", strings.Trim(addReq.Name, " ")).Limit(1).First(&role)
|
||||
if r.RowsAffected > 0 {
|
||||
if r := core.DB.Where("name = ?", strings.Trim(addReq.Name, " ")).Limit(1).First(&role); r.RowsAffected > 0 {
|
||||
panic(response.AssertArgumentError.Make("角色名称已存在!"))
|
||||
}
|
||||
response.Copy(&role, addReq)
|
||||
@@ -124,8 +120,7 @@ func (roleSrv systemAuthRoleService) Edit(editReq req.SystemAuthRoleEditReq) {
|
||||
panic(response.SystemError)
|
||||
}
|
||||
var role system.SystemAuthRole
|
||||
r := core.DB.Where("id != ? AND name = ?", editReq.ID, strings.Trim(editReq.Name, " ")).Limit(1).First(&role)
|
||||
if r.RowsAffected > 0 {
|
||||
if r := core.DB.Where("id != ? AND name = ?", editReq.ID, strings.Trim(editReq.Name, " ")).Limit(1).First(&role); r.RowsAffected > 0 {
|
||||
panic(response.AssertArgumentError.Make("角色名称已存在!"))
|
||||
}
|
||||
role.ID = editReq.ID
|
||||
@@ -160,8 +155,7 @@ func (roleSrv systemAuthRoleService) Del(id uint) {
|
||||
core.Logger.Errorf("Del First err: err=[%+v]", err)
|
||||
panic(response.SystemError)
|
||||
}
|
||||
r := core.DB.Where("role = ? AND is_delete = ?", id, 0).Limit(1).Find(&system.SystemAuthAdmin{})
|
||||
if r.RowsAffected > 0 {
|
||||
if r := core.DB.Where("role = ? AND is_delete = ?", id, 0).Limit(1).Find(&system.SystemAuthAdmin{}); r.RowsAffected > 0 {
|
||||
panic(response.AssertArgumentError.Make("角色已被管理员使用,请先移除!"))
|
||||
}
|
||||
// 事务
|
||||
|
||||
Reference in New Issue
Block a user