diff --git a/docs/test-logs/teacher/2026-03-12-functional-test-plan.md b/docs/test-logs/teacher/2026-03-12-functional-test-plan.md new file mode 100644 index 0000000..3ec6536 --- /dev/null +++ b/docs/test-logs/teacher/2026-03-12-functional-test-plan.md @@ -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: 上课模式 + +**状态**: ⏳ 待测试 + +--- + +## 问题记录 + +| 问题 | 严重程度 | 状态 | 解决方案 | +|------|---------|------|---------| +| | | | | diff --git a/docs/test-logs/teacher/2026-03-12-issue-diagnosis.md b/docs/test-logs/teacher/2026-03-12-issue-diagnosis.md new file mode 100644 index 0000000..b3eca04 --- /dev/null +++ b/docs/test-logs/teacher/2026-03-12-issue-diagnosis.md @@ -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 +``` + +**影响:** +- 教师端控制台页面可能无法正确显示统计数据 + +**需要调查:** +- 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 | diff --git a/reading-platform-frontend/src/api/teacher.ts b/reading-platform-frontend/src/api/teacher.ts index a9cb46d..71b0d4b 100644 --- a/reading-platform-frontend/src/api/teacher.ts +++ b/reading-platform-frontend/src/api/teacher.ts @@ -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, };