diff --git a/api/v1/system/sys_auth_rule.go b/api/v1/system/sys_auth_rule.go index de1e6b5..5cdf29c 100644 --- a/api/v1/system/sys_auth_rule.go +++ b/api/v1/system/sys_auth_rule.go @@ -49,3 +49,14 @@ type RuleGetParamsRes struct { Roles []*entity.SysRole `json:"roles"` Menus []*model.SysAuthRuleInfoRes `json:"menus"` } + +type RuleInfoReq struct { + g.Meta `path:"/menu/get" tags:"菜单管理" method:"get" summary:"获取菜单信息"` + Authorization string `p:"Authorization" in:"header" dc:"Bearer {{token}}"` + Id uint `p:"required#菜单id必须"` +} + +type RuleInfoRes struct { + g.Meta `mime:"application/json"` + Rule *entity.SysAuthRule `json:"rule"` +} diff --git a/internal/app/system/controller/sys_auth_rule.go b/internal/app/system/controller/sys_auth_rule.go index c70c3f5..66dca19 100644 --- a/internal/app/system/controller/sys_auth_rule.go +++ b/internal/app/system/controller/sys_auth_rule.go @@ -34,3 +34,10 @@ func (c *menuController) GetAddParams(ctx context.Context, req *system.RuleGetPa res.Menus, err = service.Rule().GetIsMenuList(ctx) return } + +// Get 获取菜单信息 +func (c *menuController) Get(ctx context.Context, req *system.RuleInfoReq) (res *system.RuleInfoRes, err error) { + res = new(system.RuleInfoRes) + res.Rule, err = service.Rule().Get(ctx, req.Id) + return +} diff --git a/internal/app/system/service/sys_auth_rule.go b/internal/app/system/service/sys_auth_rule.go index c5790ea..54bae56 100644 --- a/internal/app/system/service/sys_auth_rule.go +++ b/internal/app/system/service/sys_auth_rule.go @@ -11,6 +11,7 @@ import ( "context" "fmt" "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "github.com/tiger1103/gfast/v3/api/v1/system" @@ -18,6 +19,7 @@ import ( commonService "github.com/tiger1103/gfast/v3/internal/app/common/service" "github.com/tiger1103/gfast/v3/internal/app/system/consts" "github.com/tiger1103/gfast/v3/internal/app/system/model" + "github.com/tiger1103/gfast/v3/internal/app/system/model/entity" "github.com/tiger1103/gfast/v3/internal/app/system/service/internal/dao" "github.com/tiger1103/gfast/v3/internal/app/system/service/internal/do" "github.com/tiger1103/gfast/v3/library/liberr" @@ -28,6 +30,7 @@ type IRule interface { GetMenuList(ctx context.Context) (list []*model.SysAuthRuleInfoRes, err error) GetIsButtonList(ctx context.Context) ([]*model.SysAuthRuleInfoRes, error) Add(ctx context.Context, req *system.RuleAddReq) (err error) + Get(ctx context.Context, id uint) (rule *entity.SysAuthRule, err error) } type ruleImpl struct { @@ -95,6 +98,10 @@ func (s *ruleImpl) GetIsButtonList(ctx context.Context) ([]*model.SysAuthRuleInf // Add 添加菜单 func (s *ruleImpl) Add(ctx context.Context, req *system.RuleAddReq) (err error) { + if s.menuNameExists(ctx, req.Name, 0) { + err = gerror.New("接口规则已经存在") + return + } err = g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error { err = g.Try(func() { //菜单数据 @@ -124,9 +131,27 @@ func (s *ruleImpl) Add(ctx context.Context, req *system.RuleAddReq) (err error) }) return err }) + if err == nil { + // 删除相关缓存 + commonService.Cache(ctx).RemoveByTag(ctx, consts.CacheSysAuthTag) + } return } +//检查菜单规则是否存在 +func (s *ruleImpl) menuNameExists(ctx context.Context, name string, id int) bool { + m := dao.SysAuthRule.Ctx(ctx).Where("name=?", name) + if id != 0 { + m = m.Where("id!=?", id) + } + c, err := m.Fields(dao.SysAuthRule.Columns().Id).Limit(1).One() + if err != nil { + g.Log().Error(ctx, err) + return false + } + return !c.IsEmpty() +} + // BindRoleRule 绑定角色权限 func (s *ruleImpl) BindRoleRule(ctx context.Context, ruleId interface{}, roleIds []uint) (err error) { err = g.Try(func() { @@ -139,3 +164,11 @@ func (s *ruleImpl) BindRoleRule(ctx context.Context, ruleId interface{}, roleIds }) return } + +func (s *ruleImpl) Get(ctx context.Context, id uint) (rule *entity.SysAuthRule, err error) { + err = g.Try(func() { + err = dao.SysAuthRule.Ctx(ctx).WherePri(id).Scan(&rule) + liberr.ErrIsNil(ctx, err, "获取菜单失败") + }) + return +} diff --git a/internal/app/system/service/sys_user.go b/internal/app/system/service/sys_user.go index 990225a..b95df19 100644 --- a/internal/app/system/service/sys_user.go +++ b/internal/app/system/service/sys_user.go @@ -253,9 +253,11 @@ func (s *userImpl) GetMenusTree(menus []*model.UserMenus, pid uint) []*model.Use func (s *userImpl) setMenuData(menu *model.UserMenu, entity *model.SysAuthRuleInfoRes) *model.UserMenu { menu = &model.UserMenu{ - Id: entity.Id, - Pid: entity.Pid, - Name: gstr.CaseCamelLower(gstr.Replace(entity.Name, "/", "_")), + Id: entity.Id, + Pid: entity.Pid, + Name: gstr.CaseCamelLower(gstr.Replace(entity.Name, "/", "_")), + Component: entity.Component, + Path: entity.Path, MenuMeta: &model.MenuMeta{ Icon: entity.Icon, Title: entity.Title, @@ -266,13 +268,6 @@ func (s *userImpl) setMenuData(menu *model.UserMenu, entity *model.SysAuthRuleIn IsIframe: entity.IsIframe == 1, }, } - if entity.MenuType != 0 { - menu.Component = entity.Component - menu.Path = entity.Path - } else { - menu.Component = "layout/routerView/parent" - menu.Path = "/" + entity.Path - } if menu.MenuMeta.IsIframe || entity.IsLink == 1 { menu.MenuMeta.IsLink = entity.LinkUrl }