后端重构:
- 添加统一响应格式 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>
4.3 KiB
4.3 KiB
Phase 6 校本课程包功能 - 手动测试指南
测试日期: 2026-03-11 测试人员: [请填写] 测试账号: teacher1 / 123456 前端地址: http://localhost:5173
测试清单
前置条件
- 前端服务运行 (http://localhost:5173)
- 后端服务运行 (http://localhost:3000)
- 数据库连接正常
测试用例
TC-01: 创建校本课程包
步骤:
- 登录系统 (teacher1 / 123456)
- 点击"课程中心"菜单
- 点击任意课程的"查看"按钮
- 在详情页查找"创建校本版本"按钮
- 点击该按钮
- 验证跳转到编辑页面
- 选择"保存到个人课程中心"
- 点击"创建"按钮
- 等待创建完成
预期结果:
- 详情页显示"创建校本版本"按钮
- 点击后跳转到
/school-courses/edit页面 - 显示源课程信息
- 创建成功后跳转到个人课程中心或显示成功消息
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-02: 查看个人课程中心列表
步骤:
- 登录系统
- 点击"个人课程中心"菜单
- 观察页面内容
预期结果:
- 显示校本课程包列表
- 显示保存位置筛选器(全部/个人/校本)
- 显示审核状态标签(如有)
- 每个课程卡片显示编辑、查看、删除按钮
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-03: 编辑校本课程包
步骤:
- 进入个人课程中心
- 点击任意校本课程的"编辑"按钮
- 观察7步编辑器
- 尝试切换各个步骤
- 修改基本信息(如名称)
- 点击"保存"或"保存到个人"
预期结果:
- 进入编辑页面,显示7步导航
- 各步骤内容正确显示
- 可以切换步骤
- 保存成功
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-04: 查看校本课程详情
步骤:
- 进入个人课程中心
- 点击任意校本课程的"查看"按钮
- 观察详情页内容
预期结果:
- 显示课程基本信息
- 显示保存位置标签
- 显示审核状态(如适用)
- 显示课程列表
- 显示"开始备课"按钮
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-05: 备课模式
步骤:
- 进入校本课程详情页
- 点击"开始备课"按钮
- 观察备课模式页面
预期结果:
- 跳转到备课模式页面 (URL 包含
type=school) - 显示左侧导航栏
- 显示课程列表
- 显示右侧内容预览
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-06: 筛选功能
步骤:
- 进入个人课程中心
- 点击"个人"筛选器
- 观察列表变化
- 点击"校本"筛选器
- 观察列表变化
预期结果:
- 筛选器正确切换
- 列表内容相应更新
- 显示正确的筛选结果
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
TC-07: 删除功能
步骤:
- 进入个人课程中心
- 点击任意校本课程的"删除"按钮
- 确认删除操作
预期结果:
- 显示确认对话框
- 确认后课程被删除
- 列表更新
实际结果: [请填写] 状态: [ ] 通过 [ ] 失败 备注: [请填写]
数据库验证
检查 school_courses 表
SELECT id, name, saveLocation, reviewStatus, sourceCourseId
FROM school_courses
ORDER BY createdAt DESC;
预期数据:
- saveLocation 为 'PERSONAL' 或 'SCHOOL'
- reviewStatus 为 'PENDING', 'APPROVED', 或 'REJECTED'
- sourceCourseId 指向有效的课程
检查 school_course_lessons 表
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