kra/internal/server/handler/system/sys_menu.go

235 lines
6.1 KiB
Go

package system
import (
"kra/internal/biz/system"
"kra/pkg/response"
"kra/pkg/utils"
"github.com/gin-gonic/gin"
)
type MenuApi struct{}
// AddBaseMenuRequest 添加菜单请求
type AddBaseMenuRequest struct {
ParentId uint `json:"parentId"`
Path string `json:"path" binding:"required"`
Name string `json:"name" binding:"required"`
Hidden bool `json:"hidden"`
Component string `json:"component"`
Sort int `json:"sort"`
Meta map[string]interface{} `json:"meta"`
Parameters []MenuParameter `json:"parameters"`
MenuBtn []MenuBtn `json:"menuBtn"`
}
// MenuParameter 菜单参数
type MenuParameter struct {
Type string `json:"type"`
Key string `json:"key"`
Value string `json:"value"`
}
// MenuBtn 菜单按钮
type MenuBtn struct {
Name string `json:"name"`
Desc string `json:"desc"`
}
// UpdateBaseMenuRequest 更新菜单请求
type UpdateBaseMenuRequest struct {
ID uint `json:"ID" binding:"required"`
ParentId uint `json:"parentId"`
Path string `json:"path" binding:"required"`
Name string `json:"name" binding:"required"`
Hidden bool `json:"hidden"`
Component string `json:"component"`
Sort int `json:"sort"`
Meta map[string]interface{} `json:"meta"`
Parameters []MenuParameter `json:"parameters"`
MenuBtn []MenuBtn `json:"menuBtn"`
}
// DeleteBaseMenuRequest 删除菜单请求
type DeleteBaseMenuRequest struct {
ID uint `json:"ID" binding:"required"`
}
// GetMenuByIdRequest 根据ID获取菜单请求
type GetMenuByIdRequest struct {
ID uint `json:"ID" binding:"required"`
}
// AddMenuAuthorityRequest 添加菜单权限请求
type AddMenuAuthorityRequest struct {
AuthorityId uint `json:"authorityId" binding:"required"`
Menus []uint `json:"menus"`
}
// GetMenuAuthorityRequest 获取菜单权限请求
type GetMenuAuthorityRequest struct {
AuthorityId uint `json:"authorityId" binding:"required"`
}
// AddBaseMenu 添加菜单
func (m *MenuApi) AddBaseMenu(c *gin.Context) {
var req AddBaseMenuRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
menu := &system.BaseMenu{
ParentId: req.ParentId,
Path: req.Path,
Name: req.Name,
Hidden: req.Hidden,
Component: req.Component,
Sort: req.Sort,
}
if err := menuUsecase.AddBaseMenu(c, menu); err != nil {
response.FailWithMessage("创建失败: "+err.Error(), c)
return
}
response.OkWithMessage("创建成功", c)
}
// DeleteBaseMenu 删除菜单
func (m *MenuApi) DeleteBaseMenu(c *gin.Context) {
var req DeleteBaseMenuRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := menuUsecase.DeleteBaseMenu(c, req.ID); err != nil {
response.FailWithMessage("删除失败: "+err.Error(), c)
return
}
response.OkWithMessage("删除成功", c)
}
// UpdateBaseMenu 更新菜单
func (m *MenuApi) UpdateBaseMenu(c *gin.Context) {
var req UpdateBaseMenuRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
menu := &system.BaseMenu{
ID: req.ID,
ParentId: req.ParentId,
Path: req.Path,
Name: req.Name,
Hidden: req.Hidden,
Component: req.Component,
Sort: req.Sort,
}
if err := menuUsecase.UpdateBaseMenu(c, menu); err != nil {
response.FailWithMessage("更新失败: "+err.Error(), c)
return
}
response.OkWithMessage("更新成功", c)
}
// GetMenu 获取用户菜单
func (m *MenuApi) GetMenu(c *gin.Context) {
authorityId := utils.GetUserAuthorityId(c)
menus, err := menuUsecase.GetMenuTree(c, authorityId)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(gin.H{"menus": menus}, "获取成功", c)
}
// GetMenuList 获取菜单列表
func (m *MenuApi) GetMenuList(c *gin.Context) {
authorityId := utils.GetUserAuthorityId(c)
menus, err := menuUsecase.GetInfoList(c, authorityId)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(gin.H{"list": menus}, "获取成功", c)
}
// GetBaseMenuTree 获取菜单树
func (m *MenuApi) GetBaseMenuTree(c *gin.Context) {
authorityId := utils.GetUserAuthorityId(c)
menus, err := menuUsecase.GetBaseMenuTree(c, authorityId)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(gin.H{"menus": menus}, "获取成功", c)
}
// GetBaseMenuById 根据ID获取菜单
func (m *MenuApi) GetBaseMenuById(c *gin.Context) {
var req GetMenuByIdRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
menu, err := menuUsecase.GetBaseMenuById(c, req.ID)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(gin.H{"menu": menu}, "获取成功", c)
}
// AddMenuAuthority 添加菜单权限
func (m *MenuApi) AddMenuAuthority(c *gin.Context) {
var req AddMenuAuthorityRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
// 获取当前用户的角色ID
adminAuthorityId := utils.GetUserAuthorityId(c)
// 构建菜单列表
var menus []*system.BaseMenu
for _, menuId := range req.Menus {
menus = append(menus, &system.BaseMenu{ID: menuId})
}
if err := menuUsecase.AddMenuAuthority(c, menus, adminAuthorityId, req.AuthorityId); err != nil {
response.FailWithMessage("添加失败: "+err.Error(), c)
return
}
response.OkWithMessage("添加成功", c)
}
// GetMenuAuthority 获取菜单权限
func (m *MenuApi) GetMenuAuthority(c *gin.Context) {
var req GetMenuAuthorityRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
menus, err := menuUsecase.GetMenuAuthority(c, req.AuthorityId)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(gin.H{"menus": menus}, "获取成功", c)
}