新增菜单和角色关联接口

This commit is contained in:
2025-06-04 08:56:08 +08:00
parent fedcd288e8
commit 00b889cfcc
25 changed files with 729 additions and 0 deletions

View File

@ -6,8 +6,10 @@ package logic
import (
_ "server/internal/logic/admin"
_ "server/internal/logic/menu"
_ "server/internal/logic/merchantAdmin"
_ "server/internal/logic/role"
_ "server/internal/logic/roleMenu"
_ "server/internal/logic/storeAdmin"
_ "server/internal/logic/user"
)

189
internal/logic/menu/menu.go Normal file
View File

@ -0,0 +1,189 @@
package menu
import (
"context"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/model/entity"
"server/internal/service"
"server/utility/ecode"
)
type sMenu struct {
}
func New() service.IMenu {
return &sMenu{}
}
func init() {
service.RegisterMenu(New())
}
// Create 创建菜单
func (s *sMenu) Create(ctx context.Context, in *model.MenuCreateInput) (out *model.CreateOut, err error) {
// 检查菜单名称是否已存在
exist, err := dao.Menus.Ctx(ctx).Where(do.Menus{Name: in.Name}).Exist()
if err != nil {
return nil, ecode.Fail.Sub("插入菜单查重出现异常")
}
if exist {
return nil, ecode.Params.Sub("菜单名称已存在")
}
id, err := dao.Menus.Ctx(ctx).InsertAndGetId(do.Menus{
ParentId: in.ParentId,
Name: in.Name,
Path: in.Path,
Component: in.Component,
Type: in.Type,
Icon: in.Icon,
Sort: in.Sort,
Hidden: in.Hidden,
Status: in.Status,
})
if err != nil {
return nil, err
}
return &model.CreateOut{Id: id}, nil
}
// Delete 删除菜单
func (s *sMenu) Delete(ctx context.Context, in *model.MenuDeleteInput) (out *model.DeleteOut, err error) {
// 检查是否存在子菜单
count, err := dao.Menus.Ctx(ctx).Where(do.Menus{ParentId: in.Id}).Count()
if err != nil {
return nil, err
}
if count > 0 {
return nil, ecode.Params.Sub("存在子菜单,请先删除子菜单")
}
// 删除菜单
_, err = dao.Menus.Ctx(ctx).Where(do.Menus{Id: in.Id}).Delete()
if err != nil {
return nil, err
}
return &model.DeleteOut{}, nil
}
// BatchDelete 批量删除菜单
func (s *sMenu) BatchDelete(ctx context.Context, in *model.BatchDeleteIn) (out *model.BatchDeleteOut, err error) {
// 检查是否存在子菜单
var menus []*entity.Menus
err = dao.Menus.Ctx(ctx).WhereIn(dao.Menus.Columns().ParentId, in.Ids).Scan(&menus)
if err != nil {
return nil, err
}
// 获取有子菜单的ID
hasChildrenIds := make(map[int]bool)
for _, menu := range menus {
hasChildrenIds[int(menu.ParentId)] = true
}
// 找出可以删除的ID
var deletableIds []int
var undeletableIds []int
for _, id := range in.Ids {
if hasChildrenIds[id] {
undeletableIds = append(undeletableIds, id)
} else {
deletableIds = append(deletableIds, id)
}
}
// 如果有可删除的ID执行删除操作
if len(deletableIds) > 0 {
_, err = dao.Menus.Ctx(ctx).WhereIn(dao.Menus.Columns().Id, deletableIds).Delete()
if err != nil {
return nil, err
}
}
return &model.BatchDeleteOut{
Ids: undeletableIds,
}, nil
}
// Update 更新菜单
func (s *sMenu) Update(ctx context.Context, in *model.MenuUpdateInput) (out *model.UpdateOut, err error) {
// 检查菜单是否存在
exist, err := dao.Menus.Ctx(ctx).WherePri(in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询菜单失败")
}
if !exist {
return nil, ecode.Params.Sub("菜单不存在")
}
exist, err = dao.Menus.Ctx(ctx).Where(do.Menus{Name: in.Name}).WhereNot(dao.Menus.Columns().Id, in.Id).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询菜单失败")
}
if exist {
return nil, ecode.Params.Sub("菜单名称已存在")
}
// 更新菜单
_, err = dao.Menus.Ctx(ctx).Where(do.Menus{
Id: in.Id,
}).Update(do.Menus{
ParentId: in.ParentId,
Name: in.Name,
Path: in.Path,
Component: in.Component,
Type: in.Type,
Icon: in.Icon,
Sort: in.Sort,
Hidden: in.Hidden,
Status: in.Status,
})
if err != nil {
return nil, err
}
return &model.UpdateOut{}, nil
}
// List 获取菜单列表
func (s *sMenu) List(ctx context.Context, in *model.MenuListInput) (out *model.MenuListOutput, err error) {
m := dao.Menus.Ctx(ctx)
// 构建查询条件
if in.ParentId > 0 {
m = m.Where(do.Menus{
ParentId: in.ParentId,
})
}
if in.Name != "" {
m = m.WhereLike(dao.Menus.Columns().Name, "%"+in.Name+"%")
}
if in.Path != "" {
m = m.WhereLike(dao.Menus.Columns().Path, "%"+in.Path+"%")
}
if in.Type > 0 {
m = m.Where(do.Menus{
Type: in.Type,
})
}
if in.Status > 0 {
m = m.Where(do.Menus{
Status: in.Status,
})
}
// 分页查询
list := make([]model.Menu, 0)
var total int
err = m.Page(in.Page, in.Size).OrderAsc(dao.Menus.Columns().Sort).ScanAndCount(&list, &total, false)
if err != nil {
return nil, err
}
return &model.MenuListOutput{
List: list,
Total: total,
}, nil
}

View File

@ -0,0 +1,28 @@
package roleMenu
import (
"context"
"server/internal/model"
"server/internal/service"
)
type sRoleMenu struct {
}
func New() service.IRoleMenu {
return &sRoleMenu{}
}
func init() {
service.RegisterRoleMenu(New())
}
func init() {
}
func (s *sRoleMenu) List(ctx context.Context, in *model.RoleMenuListInput) (out *model.MenuListOutput, err error) {
return
}
func (s *sRoleMenu) Save(ctx context.Context, in *model.RoleMenuSaveInput) (out *model.UpdateOut, err error) {
return
}