fix: 修复教师课程 API 参数问题
- 移除 getTeacherCourses 中的 page 和 pageSize 参数 - 后端 API 验证导致这些参数被拒绝 - 添加功能测试计划和问题诊断文档 测试结果: - 后端 API 不接受 page/pageSize 参数 - 需要统一错误处理逻辑 (error.response?.data?.message → error.message) - Dashboard 组件有渲染错误需要修复 相关文档: - docs/test-logs/teacher/2026-03-12-functional-test-plan.md - docs/test-logs/teacher/2026-03-12-issue-diagnosis.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5b1c6f590b
commit
de54ed112c
180
docs/test-logs/teacher/2026-03-12-functional-test-plan.md
Normal file
180
docs/test-logs/teacher/2026-03-12-functional-test-plan.md
Normal file
@ -0,0 +1,180 @@
|
||||
# 功能测试计划 - 2026-03-12
|
||||
|
||||
## 测试目标
|
||||
|
||||
验证教师端核心业务流程和数据加载是否正常工作。
|
||||
|
||||
## 测试环境
|
||||
|
||||
- **后端**: http://localhost:3000 (NestJS)
|
||||
- **前端**: http://localhost:5175 (Vite)
|
||||
- **测试账号**: teacher1 / 123456
|
||||
|
||||
---
|
||||
|
||||
## 核心业务流程测试
|
||||
|
||||
### 流程 1: 教师端控制台
|
||||
|
||||
**测试步骤:**
|
||||
1. 登录教师账号
|
||||
2. 进入控制台首页
|
||||
3. 检查统计数据(班级数、学生数、课程数、授课数)
|
||||
4. 检查今日课程
|
||||
5. 检查推荐课程
|
||||
|
||||
**预期结果:**
|
||||
- 统计数据正常显示
|
||||
- 今日课程列表有数据
|
||||
- 推荐课程列表有数据
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/dashboard`
|
||||
- `GET /api/v1/teacher/dashboard/today`
|
||||
- `GET /api/v1/teacher/dashboard/recommend`
|
||||
|
||||
---
|
||||
|
||||
### 流程 2: 课程中心
|
||||
|
||||
**测试步骤:**
|
||||
1. 进入课程中心 (`/teacher/courses`)
|
||||
2. 检查课程列表
|
||||
3. 筛选功能(年级、领域、关键词)
|
||||
4. 点击课程进入详情页
|
||||
5. 检查5个Tab(课程介绍、课程内容、排课参考、环创建设、用户评价)
|
||||
|
||||
**预期结果:**
|
||||
- 课程列表显示正常
|
||||
- 筛选功能正常
|
||||
- 课程详情页5个Tab正常切换
|
||||
- 课程内容Tab显示课程(导入课、集体课、领域课)
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/courses`
|
||||
- `GET /api/v1/teacher/courses/{id}`
|
||||
|
||||
---
|
||||
|
||||
### 流程 3: 课程详情页
|
||||
|
||||
**测试步骤:**
|
||||
1. 从课程列表点击某个课程
|
||||
2. 进入课程详情页
|
||||
3. 切换到"课程内容"Tab
|
||||
4. 检查课程列表(导入课、集体课、领域课)
|
||||
5. 点击"开始备课"按钮
|
||||
|
||||
**预期结果:**
|
||||
- 课程详情正确显示
|
||||
- 课程内容Tab显示课程列表
|
||||
- 备课按钮可点击
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/courses/{id}`
|
||||
|
||||
---
|
||||
|
||||
### 流程 4: 备课模式
|
||||
|
||||
**测试步骤:**
|
||||
1. 从课程详情页点击"开始备课"
|
||||
2. 进入备课模式
|
||||
3. 检查左侧导航(课程概览、课程列表)
|
||||
4. 点击不同课程切换
|
||||
5. 点击教学环节查看详情
|
||||
|
||||
**预期结果:**
|
||||
- 备课模式页面正常显示
|
||||
- 左侧导航可切换
|
||||
- 课程内容正常显示
|
||||
- 环节详情正常显示
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/courses/{courseId}/lessons`
|
||||
|
||||
---
|
||||
|
||||
### 流程 5: 校本课程包
|
||||
|
||||
**测试步骤:**
|
||||
1. 进入校本课程页面 (`/teacher/school-courses`)
|
||||
2. 检查校本课程列表
|
||||
3. 点击某个校本课程查看详情
|
||||
4. 检查课程内容
|
||||
|
||||
**预期结果:**
|
||||
- 校本课程列表正常显示
|
||||
- 校本课程详情正常显示
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/school-courses`
|
||||
- `GET /api/v1/teacher/school-courses/{id}`
|
||||
|
||||
---
|
||||
|
||||
### 流程 6: 上课模式
|
||||
|
||||
**测试步骤:**
|
||||
1. 进入上课记录页面 (`/teacher/lessons`)
|
||||
2. 点击"开始上课"或选择班级上课
|
||||
3. 检查上课界面
|
||||
|
||||
**预期结果:**
|
||||
- 上课模式页面正常显示
|
||||
- 环节切换正常
|
||||
|
||||
**API 检查:**
|
||||
- `GET /api/v1/teacher/lessons`
|
||||
- `POST /api/v1/teacher/lessons`
|
||||
|
||||
---
|
||||
|
||||
## 数据加载问题诊断
|
||||
|
||||
### 检查项目
|
||||
|
||||
| 项目 | 检查方法 | 预期结果 |
|
||||
|------|---------|---------|
|
||||
| API 响应格式 | 查看 Network 标签 | { code, message, data } 格式 |
|
||||
| 响应拦截器 | 查看 Console | 无错误,数据正确解包 |
|
||||
| 数据绑定 | 检查 Vue 组件 | data 响应式数据正确绑定 |
|
||||
| 错误处理 | 检查 catch 块 | 错误信息正确显示 |
|
||||
|
||||
---
|
||||
|
||||
## 测试执行记录
|
||||
|
||||
### 测试时间: 2026-03-12 下午
|
||||
|
||||
#### 测试 1: 教师端控制台
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
#### 测试 2: 课程中心
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
#### 测试 3: 课程详情页
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
#### 测试 4: 备课模式
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
#### 测试 5: 校本课程包
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
#### 测试 6: 上课模式
|
||||
|
||||
**状态**: ⏳ 待测试
|
||||
|
||||
---
|
||||
|
||||
## 问题记录
|
||||
|
||||
| 问题 | 严重程度 | 状态 | 解决方案 |
|
||||
|------|---------|------|---------|
|
||||
| | | | |
|
||||
152
docs/test-logs/teacher/2026-03-12-issue-diagnosis.md
Normal file
152
docs/test-logs/teacher/2026-03-12-issue-diagnosis.md
Normal file
@ -0,0 +1,152 @@
|
||||
# 数据加载问题诊断报告 - 2026-03-12
|
||||
|
||||
## 问题总结
|
||||
|
||||
登录功能正常,但核心业务数据无法正常加载。
|
||||
|
||||
---
|
||||
|
||||
## 已发现的问题
|
||||
|
||||
### 问题 1: API 参数不兼容 ⚠️ 高优先级
|
||||
|
||||
**问题描述:**
|
||||
前端调用 `/api/v1/teacher/courses` 时传递 `page` 和 `pageSize` 参数,后端返回 400 错误:
|
||||
```
|
||||
[property page should not exist, property pageSize should not exist]
|
||||
```
|
||||
|
||||
**原因:**
|
||||
后端 DTO 验证配置导致这些参数被拒绝,尽管 DTO 中定义了这些字段。
|
||||
|
||||
**修复状态:** ✅ 已修复
|
||||
- 修改 `src/api/teacher.ts` 中的 `getTeacherCourses` 函数
|
||||
- 移除 `page` 和 `pageSize` 参数传递
|
||||
|
||||
---
|
||||
|
||||
### 问题 2: 错误处理逻辑不兼容 ⚠️ 高优先级
|
||||
|
||||
**问题描述:**
|
||||
前端使用 `error.response?.data?.message` 获取错误信息,但响应拦截器修改后错误对象结构不同。
|
||||
|
||||
**影响范围:**
|
||||
- 所有使用 `try-catch` 的 API 调用
|
||||
- 错误消息可能无法正确显示
|
||||
|
||||
**修复方案:**
|
||||
需要修改所有错误处理代码,使用 `error.message` 代替 `error.response?.data?.message`
|
||||
|
||||
**影响文件:**
|
||||
- `src/views/teacher/courses/CourseListView.vue`
|
||||
- `src/views/teacher/lessons/LessonView.vue`
|
||||
- 其他所有使用 API 的组件
|
||||
|
||||
---
|
||||
|
||||
### 问题 3: 响应拦截器数据结构 ⚠️ 中优先级
|
||||
|
||||
**当前实现:**
|
||||
```typescript
|
||||
if (typeof data === 'object' && data !== null && 'code' in data && 'data' in data) {
|
||||
return data.data;
|
||||
}
|
||||
return data;
|
||||
```
|
||||
|
||||
**问题:**
|
||||
- 某些 API 可能直接返回数组或对象,不包含 `code` 字段
|
||||
- 导致这些 API 的数据被错误处理
|
||||
|
||||
**需要确认:**
|
||||
- 哪些 API 返回包装格式 `{ code, message, data }`
|
||||
- 哪些 API 直接返回数据
|
||||
|
||||
---
|
||||
|
||||
### 问题 4: Dashboard 组件渲染错误 ⚠️ 中优先级
|
||||
|
||||
**错误信息:**
|
||||
```
|
||||
[Vue warn]: Unhandled error during execution of render function
|
||||
at <DashboardView>
|
||||
```
|
||||
|
||||
**影响:**
|
||||
- 教师端控制台页面可能无法正确显示统计数据
|
||||
|
||||
**需要调查:**
|
||||
- Dashboard 组件的数据绑定
|
||||
- API 返回的数据格式是否匹配
|
||||
|
||||
---
|
||||
|
||||
## 核心业务流程测试结果
|
||||
|
||||
| 流程 | 状态 | 问题描述 |
|
||||
|------|------|---------|
|
||||
| 教师端控制台 | ⚠️ 部分可用 | API 调用成功,但统计数据全是 0 |
|
||||
| 课程中心 | ⚠️ 部分可用 | API 参数问题已修复,待验证 |
|
||||
| 课程详情页 | ⏳ 未测试 | - |
|
||||
| 备课模式 | ⏳ 未测试 | - |
|
||||
| 校本课程包 | ⏳ 未测试 | - |
|
||||
| 上课模式 | ⏳ 未测试 | - |
|
||||
|
||||
---
|
||||
|
||||
## 修复优先级
|
||||
|
||||
### P0 - 立即修复 (阻塞性问题)
|
||||
|
||||
1. **API 参数兼容性** - ✅ 已修复
|
||||
- `getTeacherCourses` - 已移除 page/pageSize 参数
|
||||
|
||||
2. **错误处理逻辑**
|
||||
- 统一修改为使用 `error.message`
|
||||
- 影响所有 API 调用
|
||||
|
||||
### P1 - 高优先级 (影响功能)
|
||||
|
||||
3. **Dashboard 组件修复**
|
||||
- 调查渲染错误原因
|
||||
- 修复数据绑定问题
|
||||
|
||||
4. **响应拦截器优化**
|
||||
- 确保所有 API 格式正确处理
|
||||
- 添加更完善的类型判断
|
||||
|
||||
### P2 - 中优先级 (体验问题)
|
||||
|
||||
5. **数据加载优化**
|
||||
- 添加加载状态
|
||||
- 优化错误提示
|
||||
|
||||
6. **分页功能**
|
||||
- 确认后端分页 API 规范
|
||||
- 前端适配统一分页格式
|
||||
|
||||
---
|
||||
|
||||
## 下一步行动
|
||||
|
||||
### 立即执行
|
||||
|
||||
1. 提交当前修复 (API 参数问题)
|
||||
2. 全面修复错误处理逻辑
|
||||
3. 测试所有核心业务流程
|
||||
|
||||
### 后续工作
|
||||
|
||||
4. 优化响应拦截器
|
||||
5. 完善 Dashboard 组件
|
||||
6. 建立统一的 API 调用规范
|
||||
|
||||
---
|
||||
|
||||
## 测试账号
|
||||
|
||||
| 角色 | 账号 | 密码 |
|
||||
|------|------|------|
|
||||
| 教师 | teacher1 | 123456 |
|
||||
| 超管 | admin | admin123 |
|
||||
| 学校 | school1 | 123456 |
|
||||
@ -65,9 +65,8 @@ export function getTeacherCourses(params: TeacherCourseQueryParams): Promise<{
|
||||
page: number;
|
||||
pageSize: number;
|
||||
}> {
|
||||
// 后端暂不支持分页参数,只传递筛选参数
|
||||
const findAllParams: TeacherCourseControllerFindAllParams = {
|
||||
page: params.page,
|
||||
pageSize: params.pageSize,
|
||||
grade: params.grade,
|
||||
keyword: params.keyword,
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user