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