261 lines
5.2 KiB
Markdown
261 lines
5.2 KiB
Markdown
# 赛事列表加载问题排查指南
|
||
|
||
## 问题现象
|
||
|
||
- 赛事下拉框显示"无数据"
|
||
- 所有按钮(发送邀请、批量生成邀请码等)无法点击
|
||
- 页面显示"暂无数据"
|
||
|
||
## 排查步骤
|
||
|
||
### 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
|
||
```
|
||
|
||
或者使用IDE(IDEA/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的限制,查询所有赛事
|
||
- 📝 创建排查指南文档
|