Files
martial-web/doc/赛事列表加载问题排查指南.md
2025-12-17 09:31:14 +08:00

261 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 赛事列表加载问题排查指南
## 问题现象
- 赛事下拉框显示"无数据"
- 所有按钮(发送邀请、批量生成邀请码等)无法点击
- 页面显示"暂无数据"
## 排查步骤
### 1. 检查浏览器控制台
打开浏览器开发者工具F12查看Console标签页
**查看日志输出:**
```
赛事列表API返回: {...}
解析后的赛事列表: [...]
```
**可能的错误信息:**
- `加载赛事列表失败: Network Error` - 网络连接问题
- `加载赛事列表失败: 404` - API路径错误
- `加载赛事列表失败: 500` - 后端服务错误
### 2. 检查Network请求
在开发者工具的Network标签页中
1. 刷新页面
2. 找到 `/api/martial/competition/list` 请求
3. 查看请求状态:
- **200**: 请求成功,检查返回数据
- **404**: API路径不存在
- **500**: 后端服务错误
- **Failed**: 网络连接失败
4. 查看Response数据结构
```json
{
"code": 200,
"data": {
"records": [...], // 赛事列表
"total": 10
}
}
```
### 3. 检查后端服务
#### 3.1 确认后端服务是否启动
**Windows:**
```bash
netstat -ano | findstr 8888
```
**Linux/Mac:**
```bash
netstat -tuln | grep 8888
```
如果没有输出,说明后端服务未启动。
#### 3.2 启动后端服务
进入后端项目目录:
```bash
cd martial-master
mvn spring-boot:run
```
或者使用IDEIDEA/Eclipse启动。
### 4. 检查数据库数据
#### 4.1 连接数据库
使用数据库客户端Navicat、DBeaver等连接
- Host: 127.0.0.1
- Port: 3306
- Database: martial_db
- Username: root
- Password: 123456
#### 4.2 执行检查SQL
运行项目根目录下的 `check_data.sql` 文件:
```sql
-- 检查赛事数据
SELECT * FROM martial_competition LIMIT 10;
-- 检查赛事总数
SELECT COUNT(*) FROM martial_competition;
```
**如果赛事表为空:**
需要先创建赛事数据。
### 5. 创建测试数据
#### 5.1 创建赛事
进入"赛事管理"页面,点击"新增赛事",填写:
- 赛事名称:测试赛事
- 赛事编码TEST001
- 主办单位:测试单位
- 地区:北京
- 详细地点:测试地点
- 报名时间:选择日期范围
- 比赛时间:选择日期范围
保存后,赛事列表应该就能显示了。
#### 5.2 创建裁判
进入"评委管理"页面,点击"新增评委",填写:
- 姓名:张三
- 性别:男
- 手机号13800138000
- 身份证号110101199001011234
- 裁判类型:普通裁判
- 等级/职称:一级
### 6. 检查API配置
#### 6.1 检查前端API配置
查看 `martial-web/src/axios/index.js` 或类似文件:
```javascript
const baseURL = process.env.VUE_APP_API_BASE_URL || '/api'
```
确认API基础路径配置正确。
#### 6.2 检查代理配置
查看 `martial-web/vite.config.js``vue.config.js`
```javascript
proxy: {
'/api': {
target: 'http://localhost:8888',
changeOrigin: true
}
}
```
确认代理配置指向正确的后端地址。
### 7. 常见问题解决
#### 问题1: CORS跨域错误
**错误信息:**
```
Access to XMLHttpRequest at 'http://localhost:8888/api/...' from origin 'http://localhost:5173' has been blocked by CORS policy
```
**解决方案:**
1. 检查后端CORS配置
2. 使用代理配置
3. 确保前后端端口配置正确
#### 问题2: 404 Not Found
**可能原因:**
1. API路径错误
2. 后端Controller路径配置错误
3. 后端服务未启动
**解决方案:**
1. 检查API路径`/api/martial/competition/list`
2. 检查后端Controller注解`@RequestMapping("/martial/competition")`
3. 启动后端服务
#### 问题3: 数据结构不匹配
**现象:**
API返回数据但前端解析失败。
**解决方案:**
查看控制台日志,确认数据结构:
```javascript
console.log('赛事列表API返回:', res)
console.log('解析后的赛事列表:', records)
```
如果数据结构不对,修改前端解析逻辑。
### 8. 快速测试
#### 8.1 使用Postman测试API
**请求:**
```
GET http://localhost:8888/api/martial/competition/list?current=1&size=10
```
**期望返回:**
```json
{
"code": 200,
"success": true,
"data": {
"records": [
{
"id": 1,
"competitionName": "测试赛事",
"status": 1,
...
}
],
"total": 1
}
}
```
#### 8.2 使用curl测试
```bash
curl -X GET "http://localhost:8888/api/martial/competition/list?current=1&size=10"
```
### 9. 临时解决方案
如果急需使用,可以临时修改代码,手动添加测试数据:
```javascript
// 在 loadCompetitionList 函数中添加
competitionList.value = [
{
id: 1,
competitionName: '测试赛事',
status: 1
}
]
queryParams.competitionId = 1
```
**注意:** 这只是临时方案,不要提交到代码库。
### 10. 联系支持
如果以上步骤都无法解决问题,请提供以下信息:
1. 浏览器控制台完整错误日志
2. Network请求的详细信息Request/Response
3. 后端服务日志
4. 数据库查询结果
## 修改记录
### 2025-12-13
- ✨ 添加详细的日志输出
- ✨ 优化数据解析逻辑,支持多种返回格式
- ✨ 移除status=1的限制查询所有赛事
- 📝 创建排查指南文档