248 lines
6.4 KiB
Go
248 lines
6.4 KiB
Go
package api
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/request"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/service"
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type MpMenuApi struct{}
|
|
|
|
var mpMenuService = service.ServiceGroupApp.MpMenuService
|
|
|
|
// GetMenuList 获取菜单列表
|
|
// @Tags MpMenu
|
|
// @Summary 获取菜单列表
|
|
// @Description 获取公众号菜单配置列表
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=[]model.MpMenu} "获取成功"
|
|
// @Router /wechat/mp/menu [get]
|
|
func (m *MpMenuApi) GetMenuList(c *gin.Context) {
|
|
menus, err := mpMenuService.GetMenuList()
|
|
if err != nil {
|
|
global.GVA_LOG.Error("获取菜单列表失败!", zap.Error(err))
|
|
response.FailWithMessage("获取失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithDetailed(menus, "获取成功", c)
|
|
}
|
|
|
|
// GetMenuByID 获取菜单详情
|
|
// @Tags MpMenu
|
|
// @Summary 获取菜单详情
|
|
// @Description 根据ID获取菜单详细信息
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path int true "菜单ID"
|
|
// @Success 200 {object} response.Response{data=model.MpMenu} "获取成功"
|
|
// @Router /wechat/mp/menu/{id} [get]
|
|
func (m *MpMenuApi) GetMenuByID(c *gin.Context) {
|
|
idStr := c.Param("id")
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|
if err != nil {
|
|
response.FailWithMessage("无效的菜单ID", c)
|
|
return
|
|
}
|
|
|
|
menu, err := mpMenuService.GetMenuByID(uint(id))
|
|
if err != nil {
|
|
global.GVA_LOG.Error("获取菜单详情失败!", zap.Error(err))
|
|
response.FailWithMessage("获取失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithData(menu, c)
|
|
}
|
|
|
|
// CreateMenu 创建菜单
|
|
// @Tags MpMenu
|
|
// @Summary 创建菜单
|
|
// @Description 创建新的菜单项
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param data body request.CreateMenuRequest true "创建参数"
|
|
// @Success 200 {object} response.Response{data=model.MpMenu} "创建成功"
|
|
// @Router /wechat/mp/menu [post]
|
|
func (m *MpMenuApi) CreateMenu(c *gin.Context) {
|
|
var req request.CreateMenuRequest
|
|
err := c.ShouldBindJSON(&req)
|
|
if err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 验证必填字段
|
|
if req.Name == "" || req.Type == "" {
|
|
response.FailWithMessage("菜单名称和类型不能为空", c)
|
|
return
|
|
}
|
|
|
|
// 构建菜单对象
|
|
menu := &model.MpMenu{
|
|
Name: &req.Name,
|
|
Type: req.Type,
|
|
}
|
|
|
|
// 设置可选字段
|
|
if req.ParentID != "" {
|
|
menu.ParentID = &req.ParentID
|
|
}
|
|
if req.MenuKey != "" {
|
|
menu.MenuKey = &req.MenuKey
|
|
}
|
|
if req.URL != "" {
|
|
menu.URL = &req.URL
|
|
}
|
|
if req.MiniProgramAppID != "" {
|
|
menu.MiniProgramAppID = &req.MiniProgramAppID
|
|
}
|
|
if req.MiniProgramPagePath != "" {
|
|
menu.MiniProgramPagePath = &req.MiniProgramPagePath
|
|
}
|
|
if req.ReplyMessageType != "" {
|
|
menu.ReplyMessageType = &req.ReplyMessageType
|
|
}
|
|
if req.ReplyContent != "" {
|
|
menu.ReplyContent = &req.ReplyContent
|
|
}
|
|
|
|
err = mpMenuService.CreateMenu(menu)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("创建菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("创建失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithDetailed(menu, "创建成功", c)
|
|
}
|
|
|
|
// UpdateMenu 更新菜单
|
|
// @Tags MpMenu
|
|
// @Summary 更新菜单
|
|
// @Description 更新菜单项
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param data body request.UpdateMenuRequest true "更新参数"
|
|
// @Success 200 {object} response.Response "更新成功"
|
|
// @Router /wechat/mp/menu [put]
|
|
func (m *MpMenuApi) UpdateMenu(c *gin.Context) {
|
|
var req request.UpdateMenuRequest
|
|
err := c.ShouldBindJSON(&req)
|
|
if err != nil {
|
|
response.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
if req.ID == 0 {
|
|
response.FailWithMessage("ID不能为空", c)
|
|
return
|
|
}
|
|
|
|
// 获取现有记录
|
|
existingMenu, err := mpMenuService.GetMenuByID(req.ID)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("获取菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("获取失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
// 更新字段
|
|
if req.Name != "" {
|
|
existingMenu.Name = &req.Name
|
|
}
|
|
if req.Type != "" {
|
|
existingMenu.Type = req.Type
|
|
}
|
|
if req.MenuKey != "" {
|
|
existingMenu.MenuKey = &req.MenuKey
|
|
}
|
|
if req.URL != "" {
|
|
existingMenu.URL = &req.URL
|
|
}
|
|
if req.ReplyContent != "" {
|
|
existingMenu.ReplyContent = &req.ReplyContent
|
|
}
|
|
|
|
err = mpMenuService.UpdateMenu(existingMenu)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("更新菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("更新失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithMessage("更新成功", c)
|
|
}
|
|
|
|
// DeleteMenu 删除菜单
|
|
// @Tags MpMenu
|
|
// @Summary 删除菜单
|
|
// @Description 删除指定的菜单项
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path int true "菜单ID"
|
|
// @Success 200 {object} response.Response "删除成功"
|
|
// @Router /wechat/mp/menu/{id} [delete]
|
|
func (m *MpMenuApi) DeleteMenu(c *gin.Context) {
|
|
idStr := c.Param("id")
|
|
id, err := strconv.ParseUint(idStr, 10, 32)
|
|
if err != nil {
|
|
response.FailWithMessage("无效的菜单ID", c)
|
|
return
|
|
}
|
|
|
|
err = mpMenuService.DeleteMenu(uint(id))
|
|
if err != nil {
|
|
global.GVA_LOG.Error("删除菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("删除失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithMessage("删除成功", c)
|
|
}
|
|
|
|
// PublishMenu 发布菜单
|
|
// @Tags MpMenu
|
|
// @Summary 发布菜单
|
|
// @Description 将菜单配置发布到微信服务器
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response "发布成功"
|
|
// @Router /wechat/mp/menu/publish [post]
|
|
func (m *MpMenuApi) PublishMenu(c *gin.Context) {
|
|
err := mpMenuService.PublishMenu()
|
|
if err != nil {
|
|
global.GVA_LOG.Error("发布菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("发布失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithMessage("发布成功", c)
|
|
}
|
|
|
|
// DeleteWechatMenu 删除微信菜单
|
|
// @Tags MpMenu
|
|
// @Summary 删除微信菜单
|
|
// @Description 删除微信服务器上的菜单
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response "删除成功"
|
|
// @Router /wechat/mp/menu/wechat [delete]
|
|
func (m *MpMenuApi) DeleteWechatMenu(c *gin.Context) {
|
|
err := mpMenuService.DeleteWechatMenu()
|
|
if err != nil {
|
|
global.GVA_LOG.Error("删除微信菜单失败!", zap.Error(err))
|
|
response.FailWithMessage("删除失败: "+err.Error(), c)
|
|
return
|
|
}
|
|
|
|
response.OkWithMessage("删除成功", c)
|
|
}
|