This commit is contained in:
@@ -0,0 +1,247 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user