78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"github.com/ucarion/urlpath"
|
|
"next-terminal/server/dto"
|
|
"next-terminal/server/model"
|
|
)
|
|
|
|
var MenuService = &menuService{}
|
|
|
|
type menuService struct {
|
|
menuPermissions map[string][]*urlpath.Path
|
|
treeMenus []*dto.TreeMenu
|
|
}
|
|
|
|
func (s *menuService) Init() error {
|
|
|
|
if s.menuPermissions == nil {
|
|
s.menuPermissions = make(map[string][]*urlpath.Path)
|
|
}
|
|
// 重载权限路径
|
|
for _, menu := range DefaultMenu {
|
|
var permissions []*urlpath.Path
|
|
for _, permission := range menu.Permissions {
|
|
path := urlpath.New(permission.Path)
|
|
permissions = append(permissions, &path)
|
|
}
|
|
s.menuPermissions[menu.ID] = permissions
|
|
}
|
|
|
|
// 重载菜单树缓存
|
|
for _, menu := range DefaultMenu {
|
|
if menu.ParentId == "root" {
|
|
p := &dto.TreeMenu{
|
|
Title: menu.Name,
|
|
Key: menu.ID,
|
|
Children: getChildren(DefaultMenu, menu.ID),
|
|
}
|
|
s.treeMenus = append(s.treeMenus, p)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func getChildren(menus []*model.Menu, parentId string) []dto.TreeMenu {
|
|
var children []dto.TreeMenu
|
|
for _, menu := range menus {
|
|
if menu.ParentId == parentId {
|
|
p := dto.TreeMenu{
|
|
Title: menu.Name,
|
|
Key: menu.ID,
|
|
Children: getChildren(DefaultMenu, menu.ID),
|
|
}
|
|
children = append(children, p)
|
|
}
|
|
}
|
|
return children
|
|
}
|
|
|
|
func (s *menuService) GetPermissionByMenu(menu string) []*urlpath.Path {
|
|
item, ok := s.menuPermissions[menu]
|
|
if ok {
|
|
return item
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *menuService) GetTreeMenus() []*dto.TreeMenu {
|
|
return s.treeMenus
|
|
}
|
|
|
|
func (s *menuService) GetMenus() (items []string) {
|
|
for _, menu := range DefaultMenu {
|
|
items = append(items, menu.ID)
|
|
}
|
|
return items
|
|
}
|