2025-10-27 23:13:08 +08:00

215 lines
4.2 KiB
Go

package controllers
import (
"encoding/json"
"server/models"
beego "github.com/beego/beego/v2/server/web"
)
// MenuController 处理菜单相关请求
type MenuController struct {
beego.Controller
}
// GetAllMenus 获取所有菜单
func (c *MenuController) GetAllMenus() {
menus, err := models.GetAllMenus()
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "获取菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "获取菜单成功",
"data": menus,
}
}
c.ServeJSON()
}
// 获取顶级菜单
// GetTopLevelMenus 获取顶级菜单
func (c *MenuController) GetTopLevelMenus() {
menus, err := models.GetTopLevelMenus()
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "获取顶级菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "获取顶级菜单成功",
"data": menus,
}
}
c.ServeJSON()
}
// GetActiveMenus 获取启用的菜单(用于前端路由生成)
func (c *MenuController) GetActiveMenus() {
menus, err := models.GetActiveMenus()
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "获取菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "获取菜单成功",
"data": menus,
}
}
c.ServeJSON()
}
// GetMenusByParentId 根据ParentID获取菜单
func (c *MenuController) GetMenusByParentId() {
parentId, err := c.GetInt(":parentId")
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "参数错误",
}
c.ServeJSON()
return
}
menus, err := models.GetMenusByParentId(parentId)
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "获取子菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "获取子菜单成功",
"data": menus,
}
}
c.ServeJSON()
}
// CreateMenu 创建新菜单
func (c *MenuController) CreateMenu() {
var menu models.Menu
// 解析请求体
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &menu); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "请求参数错误",
"error": err.Error(),
}
c.ServeJSON()
return
}
// 添加菜单
if _, err := models.AddMenu(&menu); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "创建菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "创建菜单成功",
"data": menu,
}
}
c.ServeJSON()
}
// UpdateMenu 更新菜单
func (c *MenuController) UpdateMenu() {
id, err := c.GetInt(":id")
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "参数错误",
}
c.ServeJSON()
return
}
// 直接使用 Beego 的 BindJSON 方法
var menu models.Menu
if err := c.BindJSON(&menu); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "请求参数错误",
"error": err.Error(),
}
c.ServeJSON()
return
}
// 设置 ID
menu.Id = id
// 更新菜单
if err := models.UpdateMenu(&menu); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "更新菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "更新菜单成功",
"data": menu,
}
}
c.ServeJSON()
}
// DeleteMenu 删除菜单
func (c *MenuController) DeleteMenu() {
id, err := c.GetInt(":id")
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "参数错误",
}
c.ServeJSON()
return
}
// 删除菜单
if err := models.DeleteMenu(id); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "删除菜单失败",
"error": err.Error(),
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "删除菜单成功",
}
}
c.ServeJSON()
}