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