105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
|
|
package controller
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"ai_xhs/common"
|
|||
|
|
"ai_xhs/models"
|
|||
|
|
"ai_xhs/service"
|
|||
|
|
"net/http"
|
|||
|
|
"strconv"
|
|||
|
|
|
|||
|
|
"github.com/gin-gonic/gin"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// CreateFeedbackRequest 创建反馈请求
|
|||
|
|
type CreateFeedbackRequest struct {
|
|||
|
|
FeedbackType string `json:"feedback_type" binding:"required"`
|
|||
|
|
Description string `json:"description" binding:"required,max=500"`
|
|||
|
|
ContactInfo string `json:"contact_info"`
|
|||
|
|
Nickname string `json:"nickname"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// FeedbackController 反馈控制器
|
|||
|
|
type FeedbackController struct {
|
|||
|
|
feedbackService *service.FeedbackService
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewFeedbackController 创建反馈控制器
|
|||
|
|
func NewFeedbackController(feedbackService *service.FeedbackService) *FeedbackController {
|
|||
|
|
return &FeedbackController{
|
|||
|
|
feedbackService: feedbackService,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// CreateFeedback 创建反馈
|
|||
|
|
func (fc *FeedbackController) CreateFeedback(c *gin.Context) {
|
|||
|
|
var req CreateFeedbackRequest
|
|||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|||
|
|
common.Error(c, common.CodeInvalidParams, "参数错误: "+err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 从上下文获取员工ID
|
|||
|
|
employeeID, exists := c.Get("employee_id")
|
|||
|
|
if !exists {
|
|||
|
|
common.Error(c, common.CodeUnauthorized, "未登录")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
feedback := &models.Feedback{
|
|||
|
|
FeedbackType: req.FeedbackType,
|
|||
|
|
Description: req.Description,
|
|||
|
|
ContactInfo: req.ContactInfo,
|
|||
|
|
Nickname: req.Nickname,
|
|||
|
|
CreatedUserID: employeeID.(int),
|
|||
|
|
Status: "待处理",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := fc.feedbackService.CreateFeedback(feedback); err != nil {
|
|||
|
|
common.Error(c, common.CodeInternalError, "提交反馈失败: "+err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
common.SuccessWithMessage(c, "反馈提交成功", feedback)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetFeedbackList 获取反馈列表
|
|||
|
|
func (fc *FeedbackController) GetFeedbackList(c *gin.Context) {
|
|||
|
|
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
|||
|
|
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10"))
|
|||
|
|
feedbackType := c.Query("feedback_type")
|
|||
|
|
status := c.Query("status")
|
|||
|
|
|
|||
|
|
// 从上下文获取员工ID(仅查看自己的反馈)
|
|||
|
|
employeeID, exists := c.Get("employee_id")
|
|||
|
|
if !exists {
|
|||
|
|
common.Error(c, common.CodeUnauthorized, "未登录")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
feedbacks, total, err := fc.feedbackService.GetFeedbackList(employeeID.(int), page, pageSize, feedbackType, status)
|
|||
|
|
if err != nil {
|
|||
|
|
common.Error(c, common.CodeInternalError, "获取反馈列表失败: "+err.Error())
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
c.JSON(http.StatusOK, common.SuccessResponseWithPage(feedbacks, total, page, pageSize, "获取成功"))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetFeedbackDetail 获取反馈详情
|
|||
|
|
func (fc *FeedbackController) GetFeedbackDetail(c *gin.Context) {
|
|||
|
|
idStr := c.Param("id")
|
|||
|
|
id, err := strconv.Atoi(idStr)
|
|||
|
|
if err != nil {
|
|||
|
|
common.Error(c, common.CodeInvalidParams, "无效的反馈ID")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
feedback, err := fc.feedbackService.GetFeedbackByID(id)
|
|||
|
|
if err != nil {
|
|||
|
|
common.Error(c, common.CodeNotFound, "反馈不存在")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
common.SuccessWithMessage(c, "获取成功", feedback)
|
|||
|
|
}
|