feat: 完成"新增菜单"和"编辑菜单"接口

This commit is contained in:
geeknonerd
2023-01-05 20:32:14 +08:00
parent 5692a95038
commit 8b56d408f3
6 changed files with 99 additions and 45 deletions

View File

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

View File

@@ -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"` // 主键

View File

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

View File

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

View File

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

View File

@@ -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("角色已被管理员使用,请先移除!"))
}
// 事务