2025-10-29 23:07:53 +08:00

214 lines
4.4 KiB
Go

package controllers
import (
"encoding/json"
"server/models"
"github.com/beego/beego/v2/client/orm"
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()
}
// 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()
}
// UpdateMenuStatus 更新菜单状态
func (c *MenuController) UpdateMenuStatus() {
id, err := c.GetInt(":id")
if err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "参数错误",
}
c.ServeJSON()
return
}
// 解析请求体获取 status 字段
var req struct {
Status int8 `json:"status"`
}
// 尝试从请求体获取数据
requestBody := c.Ctx.Input.RequestBody
if len(requestBody) > 0 {
// 有请求体,从 JSON 解析
if err := json.Unmarshal(requestBody, &req); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "请求参数错误",
}
c.ServeJSON()
return
}
} else {
// 如果请求体为空,尝试从表单参数或查询参数获取
statusValue, err := c.GetInt("status", -1)
if err != nil || statusValue == -1 {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "请求参数错误:缺少 status 参数",
}
c.ServeJSON()
return
}
req.Status = int8(statusValue)
}
// 先查询该菜单,确保存在
o := orm.NewOrm()
menu := models.Menu{Id: id}
if err = o.Read(&menu); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "菜单不存在",
}
c.ServeJSON()
return
}
// 更新状态
menu.Status = req.Status
if _, err := o.Update(&menu, "Status"); err != nil {
c.Data["json"] = map[string]interface{}{
"success": false,
"message": "更新菜单状态失败",
}
} else {
c.Data["json"] = map[string]interface{}{
"success": true,
"message": "菜单状态更新成功",
}
}
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()
}