意见反馈功能允许用户提交反馈信息,包括反馈类型、详细描述和图片。管理员可以在后台管理系统中查看和回复反馈。
创建数据库表:
# 执行数据库脚本
mysql -u root -p books_db < book/src/main/resources/db/feedback_schema.sql
表结构说明:
id: 反馈ID(主键)user_id: 用户ID(外键,关联users表)type: 反馈类型(bug-产品bug,suggestion-功能建议,other-其他)description: 详细描述(TEXT类型)images: 图片URL列表(多个用逗号分隔)status: 处理状态(0-待处理,1-处理中,2-已处理,3-已关闭)reply: 管理员回复replied_at: 回复时间replied_by: 回复人ID(管理员ID)created_at: 创建时间updated_at: 更新时间Feedback.java - 反馈实体类FeedbackDTO.java - 反馈数据传输对象FeedbackMapper.java - Mapper接口FeedbackMapper.xml - MyBatis映射文件FeedbackService.java - 反馈服务类FeedbackController.java - 反馈控制器接口地址:POST /api/feedback/submit
请求参数:
{
"userId": 1,
"type": "bug",
"description": "反馈内容描述",
"images": ["图片URL1", "图片URL2"]
}
响应示例:
{
"code": 200,
"message": "提交成功",
"data": {
"id": 1,
"userId": 1,
"type": "bug",
"description": "反馈内容描述",
"images": "图片URL1,图片URL2",
"status": 0,
"createdAt": "2025-01-11 10:00:00"
}
}
接口地址:GET /api/feedback/list?userId=1&page=1&size=10
响应示例:
{
"code": 200,
"data": {
"list": [...],
"total": 10,
"page": 1,
"size": 10
}
}
接口地址:GET /api/feedback/{id}
响应示例:
{
"code": 200,
"data": {
"id": 1,
"userId": 1,
"type": "bug",
"description": "反馈内容描述",
"images": "图片URL1,图片URL2",
"status": 0,
"reply": null,
"createdAt": "2025-01-11 10:00:00"
}
}
在 books/utils/api.js 中添加了以下函数:
submitFeedback(feedbackData) - 提交反馈getFeedbackList(userId, page, size) - 获取反馈列表getFeedbackById(id) - 获取反馈详情books/pages/feedback/feedback.vue - 意见反馈页面
功能特性:
图片上传:
用户登录:
数据验证:
可以创建后台管理页面用于:
示例代码结构:
@PostMapping("/upload")
public Result<String> uploadImage(@RequestParam("file") MultipartFile file) {
// 上传图片逻辑
// 返回图片URL
}
启动后端服务
cd book
mvn spring-boot:run
创建数据库表
mysql -u root -p books_db < book/src/main/resources/db/feedback_schema.sql
测试提交反馈
测试查询反馈
A: 当前版本图片使用临时路径,生产环境需要先上传图片到服务器。可以:
A: 可以调用 GET /api/feedback/list 接口,传入用户ID即可。
A: 可以通过 FeedbackService.updateFeedbackReply() 方法更新反馈状态和回复。