214 lines
4.4 KiB
Go
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()
|
|
}
|