v2_system

This commit is contained in:
2025-03-31 15:06:32 +08:00
parent 6fb06c456c
commit 490630d4c9
17 changed files with 972 additions and 206 deletions

View File

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