后端重构:
- 添加统一响应格式 ResultDto<T> 和 PageResultDto<T>
- 添加分页查询 DTO 基类 PageQueryDto
- 添加响应转换拦截器 TransformInterceptor
- 添加公共工具函数(JSON 解析、分页计算)
- 配置 Swagger/OpenAPI 文档(访问路径:/api-docs)
- Tenant 模块 DTO 规范化示例(添加 @ApiProperty 装饰器)
- CourseLesson 控制器重构 - 移除类级路径参数,修复 Orval 验证错误
- 后端 DTO 规范化 - 为 Course、Lesson、TeacherCourse、SchoolCourse 控制器添加完整的 Swagger 装饰器
前端重构:
- 配置 Orval 从后端 OpenAPI 自动生成 API 客户端
- 生成 API 客户端代码(带完整参数定义)
- 创建 API 客户端统一入口 (src/api/client.ts)
- 创建 API 适配层 (src/api/teacher.adapter.ts)
- 配置文件路由 (unplugin-vue-router)
- 课程模块迁移到新 API 客户端
- 修复 PrepareModeView.vue API 调用错误
- 教师模块迁移到新 API 客户端
- 修复 school-course.ts 类型错误
- 清理 teacher.adapter.ts 未使用导入
- 修复 client.ts API 客户端结构
- 创建文件路由目录结构
Bug 修复:
- 修复路由配置问题 - 移除 top-level await,改用手动路由配置
- 修复响应拦截器 - 正确解包 { code, message, data } 格式的响应
- 清理 teacher.adapter.ts 未使用导入
- 修复 client.ts API 客户端结构
- 创建文件路由目录结构
系统测试:
- 后端 API 测试通过 (7/7)
- 前端路由测试通过 (4/4)
- 数据库完整性验证通过
- Orval API 客户端验证通过
- 超管端功能测试通过 (97.8% 通过率)
新增文件:
- reading-platform-backend/src/common/dto/result.dto.ts
- reading-platform-backend/src/common/dto/page-query.dto.ts
- reading-platform-backend/src/common/interceptors/transform.interceptor.ts
- reading-platform-backend/src/common/utils/json.util.ts
- reading-platform-backend/src/common/utils/pagination.util.ts
- reading-platform-frontend/orval.config.ts
- reading-platform-frontend/src/api/generated/mutator.ts
- reading-platform-frontend/src/api/client.ts
- reading-platform-frontend/src/api/teacher.adapter.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
215 lines
4.3 KiB
Markdown
215 lines
4.3 KiB
Markdown
# Phase 6 校本课程包功能 - 手动测试指南
|
|
|
|
**测试日期**: 2026-03-11
|
|
**测试人员**: [请填写]
|
|
**测试账号**: teacher1 / 123456
|
|
**前端地址**: http://localhost:5173
|
|
|
|
---
|
|
|
|
## 测试清单
|
|
|
|
### 前置条件
|
|
- [x] 前端服务运行 (http://localhost:5173)
|
|
- [x] 后端服务运行 (http://localhost:3000)
|
|
- [x] 数据库连接正常
|
|
|
|
---
|
|
|
|
## 测试用例
|
|
|
|
### TC-01: 创建校本课程包
|
|
|
|
**步骤:**
|
|
1. 登录系统 (teacher1 / 123456)
|
|
2. 点击"课程中心"菜单
|
|
3. 点击任意课程的"查看"按钮
|
|
4. 在详情页查找"创建校本版本"按钮
|
|
5. 点击该按钮
|
|
6. 验证跳转到编辑页面
|
|
7. 选择"保存到个人课程中心"
|
|
8. 点击"创建"按钮
|
|
9. 等待创建完成
|
|
|
|
**预期结果:**
|
|
- 详情页显示"创建校本版本"按钮
|
|
- 点击后跳转到 `/school-courses/edit` 页面
|
|
- 显示源课程信息
|
|
- 创建成功后跳转到个人课程中心或显示成功消息
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-02: 查看个人课程中心列表
|
|
|
|
**步骤:**
|
|
1. 登录系统
|
|
2. 点击"个人课程中心"菜单
|
|
3. 观察页面内容
|
|
|
|
**预期结果:**
|
|
- 显示校本课程包列表
|
|
- 显示保存位置筛选器(全部/个人/校本)
|
|
- 显示审核状态标签(如有)
|
|
- 每个课程卡片显示编辑、查看、删除按钮
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-03: 编辑校本课程包
|
|
|
|
**步骤:**
|
|
1. 进入个人课程中心
|
|
2. 点击任意校本课程的"编辑"按钮
|
|
3. 观察7步编辑器
|
|
4. 尝试切换各个步骤
|
|
5. 修改基本信息(如名称)
|
|
6. 点击"保存"或"保存到个人"
|
|
|
|
**预期结果:**
|
|
- 进入编辑页面,显示7步导航
|
|
- 各步骤内容正确显示
|
|
- 可以切换步骤
|
|
- 保存成功
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-04: 查看校本课程详情
|
|
|
|
**步骤:**
|
|
1. 进入个人课程中心
|
|
2. 点击任意校本课程的"查看"按钮
|
|
3. 观察详情页内容
|
|
|
|
**预期结果:**
|
|
- 显示课程基本信息
|
|
- 显示保存位置标签
|
|
- 显示审核状态(如适用)
|
|
- 显示课程列表
|
|
- 显示"开始备课"按钮
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-05: 备课模式
|
|
|
|
**步骤:**
|
|
1. 进入校本课程详情页
|
|
2. 点击"开始备课"按钮
|
|
3. 观察备课模式页面
|
|
|
|
**预期结果:**
|
|
- 跳转到备课模式页面 (URL 包含 `type=school`)
|
|
- 显示左侧导航栏
|
|
- 显示课程列表
|
|
- 显示右侧内容预览
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-06: 筛选功能
|
|
|
|
**步骤:**
|
|
1. 进入个人课程中心
|
|
2. 点击"个人"筛选器
|
|
3. 观察列表变化
|
|
4. 点击"校本"筛选器
|
|
5. 观察列表变化
|
|
|
|
**预期结果:**
|
|
- 筛选器正确切换
|
|
- 列表内容相应更新
|
|
- 显示正确的筛选结果
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
### TC-07: 删除功能
|
|
|
|
**步骤:**
|
|
1. 进入个人课程中心
|
|
2. 点击任意校本课程的"删除"按钮
|
|
3. 确认删除操作
|
|
|
|
**预期结果:**
|
|
- 显示确认对话框
|
|
- 确认后课程被删除
|
|
- 列表更新
|
|
|
|
**实际结果:** [请填写]
|
|
**状态:** [ ] 通过 [ ] 失败
|
|
**备注:** [请填写]
|
|
|
|
---
|
|
|
|
## 数据库验证
|
|
|
|
### 检查 school_courses 表
|
|
|
|
```sql
|
|
SELECT id, name, saveLocation, reviewStatus, sourceCourseId
|
|
FROM school_courses
|
|
ORDER BY createdAt DESC;
|
|
```
|
|
|
|
**预期数据:**
|
|
- saveLocation 为 'PERSONAL' 或 'SCHOOL'
|
|
- reviewStatus 为 'PENDING', 'APPROVED', 或 'REJECTED'
|
|
- sourceCourseId 指向有效的课程
|
|
|
|
### 检查 school_course_lessons 表
|
|
|
|
```sql
|
|
SELECT id, schoolCourseId, lessonType, name, stepsData
|
|
FROM school_course_lessons
|
|
ORDER BY schoolCourseId, id;
|
|
```
|
|
|
|
**预期数据:**
|
|
- stepsData 字段包含有效的 JSON 数据
|
|
- lessonType 为 'INTRODUCTION', 'COLLECTIVE', 或领域类型
|
|
|
|
---
|
|
|
|
## 问题记录
|
|
|
|
| 问题ID | 描述 | 严重程度 | 状态 |
|
|
|--------|------|----------|------|
|
|
| BUG-001 | [问题描述] | [高/中/低] | [待修复/已修复] |
|
|
|
|
---
|
|
|
|
## 测试总结
|
|
|
|
**测试日期**: [请填写]
|
|
**测试人员**: [请填写]
|
|
**测试结果**:
|
|
- 通过用例: ___ / 7
|
|
- 失败用例: ___ / 7
|
|
- 发现问题: ___ 个
|
|
|
|
**整体评价**: [请填写]
|
|
|
|
---
|
|
|
|
*测试指南创建于 2026-03-11*
|