# 赛事列表加载问题排查指南

## 问题现象

- 赛事下拉框显示"无数据"
- 所有按钮（发送邀请、批量生成邀请码等）无法点击
- 页面显示"暂无数据"

## 排查步骤

### 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的限制，查询所有赛事
- 📝 创建排查指南文档
