- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
162 lines
4.4 KiB
Markdown
162 lines
4.4 KiB
Markdown
# 陪练记录列表为空 - 问题排查报告
|
||
|
||
## 问题描述
|
||
用户访问 `https://aiedu.ireborn.com.cn/trainee/practice-records` 页面时,陪练记录列表显示为空。
|
||
|
||
## 排查过程
|
||
|
||
### 1. 数据库验证 ✓
|
||
检查数据库中的陪练记录:
|
||
```bash
|
||
# 总记录数
|
||
SELECT COUNT(*) FROM practice_sessions WHERE is_deleted=0;
|
||
# 结果:146条记录
|
||
|
||
# 按用户分组统计
|
||
SELECT user_id, COUNT(*) as count
|
||
FROM practice_sessions
|
||
WHERE is_deleted=0 AND status='completed'
|
||
GROUP BY user_id;
|
||
# 结果:多个用户都有记录,其中:
|
||
# - user_id=2 (admin): 18条
|
||
# - user_id=5: 25条
|
||
# - user_id=6: 20条
|
||
# - user_id=7: 22条
|
||
```
|
||
|
||
**结论:数据库中有充足的测试数据**
|
||
|
||
### 2. 后端API验证 ✓
|
||
直接测试后端API接口:
|
||
|
||
```bash
|
||
# 1. 登录
|
||
curl -X POST http://localhost:8000/api/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"username":"admin","password":"admin123"}'
|
||
# 返回:200 OK,获取token成功
|
||
|
||
# 2. 获取陪练记录列表
|
||
curl -X GET "http://localhost:8000/api/v1/practice/sessions/list?page=1&size=20" \
|
||
-H "Authorization: Bearer {token}"
|
||
# 返回:200 OK,成功返回18条记录
|
||
```
|
||
|
||
**结论:后端API工作正常**
|
||
|
||
### 3. 前端代码审查 ✓
|
||
检查前端代码:
|
||
- ✓ `/src/api/practice.ts` - API调用正确
|
||
- ✓ `/src/utils/http.ts` - Token管理和请求拦截器配置正确
|
||
- ✓ `/src/views/trainee/practice-records.vue` - 数据加载和显示逻辑正常
|
||
|
||
**结论:前端代码没有问题**
|
||
|
||
## 问题根源分析
|
||
|
||
综合排查结果,可能的原因:
|
||
|
||
### 最可能的原因
|
||
1. **用户未登录** - 用户在浏览器中没有登录,localStorage中没有token
|
||
2. **Token过期** - 用户的access_token已过期,需要重新登录
|
||
3. **用户账号没有数据** - 用户登录的账号不是测试账号,该账号确实没有陪练记录
|
||
|
||
### 其他可能原因
|
||
4. 浏览器缓存问题
|
||
5. 网络请求被拦截(防火墙/代理)
|
||
6. 前端环境变量配置问题
|
||
|
||
## 解决方案
|
||
|
||
### 方案1:使用测试页面诊断(推荐)✨
|
||
访问测试页面进行诊断:
|
||
```
|
||
https://aiedu.ireborn.com.cn/test-practice-records.html
|
||
```
|
||
|
||
该页面可以:
|
||
1. 测试登录功能
|
||
2. 查看localStorage中的token
|
||
3. 直接调用API获取陪练记录
|
||
4. 显示详细的调试信息
|
||
|
||
### 方案2:手动登录测试
|
||
1. 打开 `https://aiedu.ireborn.com.cn/login`
|
||
2. 使用测试账号登录:
|
||
- 用户名:`admin`
|
||
- 密码:`admin123`
|
||
3. 登录成功后访问陪练记录页面
|
||
|
||
### 方案3:浏览器控制台检查
|
||
按F12打开浏览器开发者工具,在Console中执行:
|
||
```javascript
|
||
// 检查token
|
||
console.log('Token:', localStorage.getItem('access_token'));
|
||
|
||
// 检查用户信息
|
||
console.log('User:', localStorage.getItem('user_info'));
|
||
|
||
// 手动调用API
|
||
fetch('/api/v1/practice/sessions/list?page=1&size=20', {
|
||
headers: {
|
||
'Authorization': `Bearer ${localStorage.getItem('access_token')}`
|
||
}
|
||
}).then(r => r.json()).then(console.log);
|
||
```
|
||
|
||
## 测试账号信息
|
||
|
||
| 用户名 | 密码 | 角色 | 陪练记录数 |
|
||
|--------|------|------|------------|
|
||
| admin | admin123 | 管理员 | 18条 |
|
||
| superadmin | admin123 | 超级管理员 | 20条 |
|
||
| consultant_001 | admin123 | 咨询师 | 25条 |
|
||
|
||
## 下一步操作
|
||
|
||
请按照以下步骤操作:
|
||
|
||
1. **立即操作**:访问测试页面 https://aiedu.ireborn.com.cn/test-practice-records.html
|
||
- 点击"登录"按钮
|
||
- 点击"获取陪练记录列表"按钮
|
||
- 查看返回结果
|
||
|
||
2. **如果测试页面正常**:
|
||
- 说明API和数据都正常
|
||
- 可能是主页面的登录状态问题
|
||
- 建议清除浏览器缓存后重新登录
|
||
|
||
3. **如果测试页面也显示空**:
|
||
- 点击"显示调试信息"
|
||
- 截图发送给我进一步分析
|
||
|
||
## 技术细节
|
||
|
||
### API端点
|
||
- **登录**: `POST /api/v1/auth/login`
|
||
- **陪练记录列表**: `GET /api/v1/practice/sessions/list`
|
||
- **陪练统计**: `GET /api/v1/practice/stats`
|
||
|
||
### 数据库表
|
||
- `practice_sessions` - 陪练会话记录
|
||
- `practice_reports` - 陪练分析报告
|
||
- `practice_dialogues` - 陪练对话记录
|
||
|
||
### 查询条件
|
||
后端API只返回当前登录用户的记录:
|
||
```sql
|
||
WHERE user_id = :current_user_id
|
||
AND is_deleted = FALSE
|
||
AND status = 'completed'
|
||
```
|
||
|
||
## 总结
|
||
|
||
✅ 数据库有数据
|
||
✅ 后端API正常
|
||
✅ 前端代码正常
|
||
⚠️ 需要用户确认:是否已登录?使用的是哪个账号?
|
||
|
||
**建议:先使用测试页面确认问题,如果测试页面能正常显示数据,说明是主应用的登录状态问题。**
|
||
|