yxh %!s(int64=4) %!d(string=hai) anos
pai
achega
07c2d3ad0d

+ 11 - 0
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"`
+}

+ 7 - 0
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
+}

+ 33 - 0
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
+}

+ 5 - 10
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
 	}