Files
web_ylsa/api_iris/service/api/menus.go
2025-07-11 16:54:11 +08:00

56 lines
1.6 KiB
Go

package api
import (
"fmt"
"github.com/kataras/iris/v12"
"main/utils"
"regexp"
)
func getMenu(ctx iris.Context) {
var resTmp []subMenu
var res []resMenu
user := utils.GetLoginUser(ctx)
if utils.DataIsNil(user) {
return
}
if len(utils.MenuList) == 0 {
utils.UpdateMenuList()
}
resTmp = append(resTmp, subMenu{MenuId: "000", Name: "首页", Icon: "bi-emoji-wink", Path: "/", RouteOnly: false})
for _, menu := range utils.MenuList {
patternWhiteList := fmt.Sprintf("^%s,|,%s,|,%s$|%s", user.Username, user.Username, user.Username, user.Username)
regWhiteList := regexp.MustCompile(patternWhiteList)
patternUserType := fmt.Sprintf("^%s,|,%s,|,%s$|%s", user.Type, user.Type, user.Type, user.Type)
regUserType := regexp.MustCompile(patternUserType)
if match := regWhiteList.MatchString(menu.WhiteList); match || regUserType.MatchString(menu.UserType) {
resTmp = append(resTmp, subMenu{
MenuId: menu.MenuId,
Name: menu.Name,
Icon: menu.Icon,
Path: menu.Path,
RouteOnly: menu.RouteOnly,
})
}
}
for _, menu := range resTmp {
if menu.RouteOnly {
res = append(res, resMenu{MenuId: menu.MenuId, Name: menu.Name, Icon: menu.Icon, Path: menu.Path, RouteOnly: menu.RouteOnly})
continue
}
if len(menu.MenuId) == 3 {
var tmp []subMenu
for _, sub := range resTmp {
if len(sub.MenuId) == 5 && sub.MenuId[0:3] == menu.MenuId && !sub.RouteOnly {
tmp = append(tmp, sub)
}
}
res = append(res, resMenu{MenuId: menu.MenuId, Name: menu.Name, Icon: menu.Icon, Path: menu.Path, Detail: tmp})
}
}
err := ctx.JSON(utils.FormatRes(iris.StatusOK, "", res))
if utils.ErrHandle(ctx, err) {
return
}
}