v2_system
This commit is contained in:
@@ -3,6 +3,7 @@ package system
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -32,9 +33,11 @@ type MenuExpansion interface {
|
||||
MapOwnerMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error)
|
||||
SetOwnerMapMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error)
|
||||
RefreshMenus(ctx context.Context) error
|
||||
SetMenuViewData(ctx context.Context, roleID int32) ([]*dto.SetMenuDto, error)
|
||||
|
||||
Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error)
|
||||
XmSelect(ctx context.Context, id int32) ([]*view.XmSelectTree, error)
|
||||
SetMenu(ctx context.Context, roleID int32, menus []*db.SysMenu) error
|
||||
}
|
||||
|
||||
type menuBiz struct {
|
||||
@@ -274,6 +277,42 @@ func (b *menuBiz) XmSelect(ctx context.Context, id int32) ([]*view.XmSelectTree,
|
||||
return b.toXmSelectTree(id, all), nil
|
||||
}
|
||||
|
||||
func (b *menuBiz) SetMenu(ctx context.Context, roleID int32, menus []*db.SysMenu) error {
|
||||
return b.store.ExecTx(ctx, func(q *db.Queries) error {
|
||||
err := q.DeleteRoleMneuByRoleID(ctx, roleID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, m := range menus {
|
||||
err := q.CreateRoleMenu(ctx, &db.CreateRoleMenuParams{
|
||||
RoleID: roleID,
|
||||
MenuID: m.ID,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (b *menuBiz) SetMenuViewData(ctx context.Context, roleID int32) ([]*dto.SetMenuDto, error) {
|
||||
// 获取该用户已经有的权限
|
||||
hs, err := b.store.ListSysMenuIDByRoleID(ctx, roleID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
all, err := b.AllMenusCache(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return toSetMenuTree(all, hs, 0), nil
|
||||
}
|
||||
|
||||
func (b *menuBiz) ownerMenusByRoleID(ctx context.Context, roleID int32) ([]*db.SysMenu, error) {
|
||||
// 判断当前用户是否有vip角色
|
||||
role, err := b.store.GetSysRole(ctx, roleID)
|
||||
@@ -458,3 +497,49 @@ func uniqueSysMenus(sm []*db.SysMenu) []*db.SysMenu {
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func toSetMenuTree(data []*db.SysMenu, ids []int32, parentID int32) []*dto.SetMenuDto {
|
||||
var res []*dto.SetMenuDto
|
||||
for _, v := range data {
|
||||
if v.ParentID == parentID {
|
||||
isSelect := hasValueInArray(ids, v.ID)
|
||||
if v.IsList {
|
||||
item := dto.SetMenuDto{
|
||||
ID: v.ID,
|
||||
Name: v.DisplayName,
|
||||
Link: v.Type,
|
||||
IsList: v.IsList,
|
||||
IsSelect: isSelect,
|
||||
}
|
||||
item.Items = []*dto.SetMenuDto{
|
||||
{
|
||||
ID: v.ID,
|
||||
Name: "列表",
|
||||
Link: "btn",
|
||||
IsList: false,
|
||||
IsSelect: isSelect,
|
||||
Items: toSetMenuTree(data, ids, v.ID),
|
||||
},
|
||||
}
|
||||
item.Items = append(item.Items, toSetMenuTree(data, ids, v.ID)...)
|
||||
res = append(res, &item)
|
||||
} else {
|
||||
item := dto.SetMenuDto{
|
||||
ID: v.ID,
|
||||
Name: v.DisplayName,
|
||||
Link: v.Type,
|
||||
IsList: v.IsList,
|
||||
IsSelect: isSelect,
|
||||
Items: toSetMenuTree(data, ids, v.ID),
|
||||
}
|
||||
res = append(res, &item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func hasValueInArray(data []int32, id int32) bool {
|
||||
return slices.Contains(data, id)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user