2026-02-28 16:41:39 +08:00
|
|
|
|
# 变更日志 (CHANGELOG)
|
|
|
|
|
|
|
|
|
|
|
|
本文档记录项目的所有重要变更。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
|
2026-03-14 11:25:38 +08:00
|
|
|
|
### 学校端 E2E 自动化测试 ✅ (2026-03-14)
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:全部通过 (69 通过,1 跳过,0 失败)**
|
|
|
|
|
|
|
|
|
|
|
|
**测试覆盖范围:**
|
|
|
|
|
|
- 登录流程:5 个测试用例 ✅
|
|
|
|
|
|
- 仪表盘功能:7 个测试用例 ✅
|
|
|
|
|
|
- 班级管理:6 个测试用例 ✅
|
|
|
|
|
|
- 学生管理:6 个测试用例 ✅
|
|
|
|
|
|
- 教师管理:7 个测试用例 ✅
|
|
|
|
|
|
- 家长管理:7 个测试用例 ✅
|
|
|
|
|
|
- 校本课程包:7 个测试用例 ✅
|
|
|
|
|
|
- 任务管理:7 个测试用例 ✅
|
|
|
|
|
|
- 成长记录:7 个测试用例 ✅
|
|
|
|
|
|
- 系统设置:6 个测试用例 ✅
|
|
|
|
|
|
- 退出登录:3 个测试用例 ✅
|
|
|
|
|
|
- 完整流程集成测试:1 个测试用例 ✅
|
|
|
|
|
|
- 通知管理:1 个测试用例 ⏭️ (跳过,学校端无此菜单)
|
|
|
|
|
|
|
|
|
|
|
|
**测试文件结构:**
|
|
|
|
|
|
```
|
|
|
|
|
|
tests/e2e/school/
|
|
|
|
|
|
├── fixtures.ts # 测试数据和常量
|
|
|
|
|
|
├── helpers.ts # 通用工具函数
|
|
|
|
|
|
├── 01-login.spec.ts # 登录流程测试
|
|
|
|
|
|
├── 02-dashboard.spec.ts # 仪表盘功能测试
|
|
|
|
|
|
├── 03-classes.spec.ts # 班级管理测试
|
|
|
|
|
|
├── 04-students.spec.ts # 学生管理测试
|
|
|
|
|
|
├── 05-teachers.spec.ts # 教师管理测试
|
|
|
|
|
|
├── 06-parents.spec.ts # 家长管理测试
|
|
|
|
|
|
├── 07-school-courses.spec.ts # 校本课程包测试
|
|
|
|
|
|
├── 08-tasks.spec.ts # 任务管理测试
|
|
|
|
|
|
├── 09-growth.spec.ts # 成长记录测试
|
|
|
|
|
|
├── 10-notifications.spec.ts # 通知管理测试 (已跳过)
|
|
|
|
|
|
├── 11-settings.spec.ts # 系统设置测试
|
|
|
|
|
|
├── 99-logout.spec.ts # 退出登录测试
|
|
|
|
|
|
└── school-full-flow.spec.ts # 完整流程集成测试
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**修复的问题:**
|
|
|
|
|
|
1. 二级菜单点击问题 - 使用 `page.evaluate()` 绕过可见性检查
|
|
|
|
|
|
2. 页面标题断言严格模式冲突 - 使用 `getByRole('heading').first()`
|
|
|
|
|
|
3. 退出登录功能 - 增强 `logout()` 函数,使用多种方式尝试退出
|
|
|
|
|
|
|
|
|
|
|
|
**执行命令:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 运行所有学校端测试(有头模式)
|
|
|
|
|
|
npm run test:e2e:headed -- --project=chromium tests/e2e/school/
|
|
|
|
|
|
|
|
|
|
|
|
# 运行完整流程测试
|
|
|
|
|
|
npm run test:e2e:headed -- tests/e2e/school/school-full-flow.spec.ts
|
|
|
|
|
|
|
|
|
|
|
|
# 无头模式(CI/CD)
|
|
|
|
|
|
npm run test:e2e -- --project=chromium tests/e2e/school/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 超管端 E2E 自动化测试 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**测试覆盖范围:**
|
|
|
|
|
|
- 登录流程:5 个测试用例
|
|
|
|
|
|
- 数据看板:7 个测试用例
|
|
|
|
|
|
- 课程包管理:12 个测试用例
|
|
|
|
|
|
- 套餐管理:7 个测试用例
|
|
|
|
|
|
- 主题字典:7 个测试用例
|
|
|
|
|
|
- 租户管理:15 个测试用例
|
|
|
|
|
|
- 资源库:9 个测试用例
|
|
|
|
|
|
- 系统设置:12 个测试用例
|
|
|
|
|
|
- 退出登录:4 个测试用例
|
|
|
|
|
|
- 完整流程集成测试:1 个测试用例
|
|
|
|
|
|
|
|
|
|
|
|
**测试文件结构:**
|
|
|
|
|
|
```
|
|
|
|
|
|
tests/e2e/admin/
|
|
|
|
|
|
├── fixtures.ts # 测试数据和常量
|
|
|
|
|
|
├── helpers.ts # 通用工具函数
|
|
|
|
|
|
├── 01-login.spec.ts # 登录流程测试
|
|
|
|
|
|
├── 02-dashboard.spec.ts # 数据看板测试
|
|
|
|
|
|
├── 03-courses.spec.ts # 课程包管理测试
|
|
|
|
|
|
├── 04-packages.spec.ts # 套餐管理测试
|
|
|
|
|
|
├── 05-themes.spec.ts # 主题字典测试
|
|
|
|
|
|
├── 06-tenants.spec.ts # 租户管理测试
|
|
|
|
|
|
├── 07-resources.spec.ts # 资源库测试
|
|
|
|
|
|
├── 08-settings.spec.ts # 系统设置测试
|
|
|
|
|
|
├── 99-logout.spec.ts # 退出登录测试
|
|
|
|
|
|
└── admin-full-flow.spec.ts # 完整流程集成测试
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**执行命令:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 运行所有超管端测试(有头模式)
|
|
|
|
|
|
npm run test:e2e:headed -- --project=chromium tests/e2e/admin/
|
|
|
|
|
|
|
|
|
|
|
|
# 运行完整流程测试
|
|
|
|
|
|
npm run test:e2e:headed -- tests/e2e/admin/admin-full-flow.spec.ts
|
|
|
|
|
|
|
|
|
|
|
|
# 无头模式(CI/CD)
|
|
|
|
|
|
npm run test:e2e -- --project=chromium tests/e2e/admin/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**总计:** 约 79 个测试用例,覆盖超管端所有主要功能模块
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### ORM 实体类重构 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**重构背景:**
|
|
|
|
|
|
为减少代码重复,将项目中所有 40 个实体类的公共字段(id, createdAt, updatedAt, deleted)提取到 `BaseEntity` 基类中,所有业务实体类继承此基类。
|
|
|
|
|
|
|
|
|
|
|
|
**BaseEntity 定义:**
|
|
|
|
|
|
```java
|
|
|
|
|
|
public abstract class BaseEntity {
|
|
|
|
|
|
private Long id; // 雪花算法 ID
|
|
|
|
|
|
private String createBy; // 创建人
|
|
|
|
|
|
private LocalDateTime createdAt; // 创建时间
|
|
|
|
|
|
private String updateBy; // 更新人
|
|
|
|
|
|
private LocalDateTime updatedAt; // 更新时间
|
|
|
|
|
|
private Integer deleted; // 逻辑删除
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Flyway 迁移脚本:**
|
|
|
|
|
|
1. `V20260313__rename_tables_to_singular.sql` - 表名规范化(复数改单数,31 个表)
|
|
|
|
|
|
2. `V20260313_2__add_audit_fields.sql` - 为所有表添加审计字段(create_by, update_by)
|
|
|
|
|
|
3. `V20260313_3__fix_missing_tables.sql` - 修复缺失的表(创建所有 39 个基础表)
|
|
|
|
|
|
|
|
|
|
|
|
**修改的实体类(40 个):**
|
|
|
|
|
|
- 状态 A(37 个):完整字段 → 移除 4 个重复字段 + extends BaseEntity
|
|
|
|
|
|
- 状态 B(2 个):CoursePackage, Theme → 移除 3 个字段 + extends BaseEntity
|
|
|
|
|
|
- 状态 C(1 个):StudentClassHistory → 移除 2 个字段 + extends BaseEntity
|
|
|
|
|
|
|
|
|
|
|
|
**编译验证:** ✅ BUILD SUCCESS
|
|
|
|
|
|
|
|
|
|
|
|
**变更统计:**
|
|
|
|
|
|
- 修改文件:40 个实体类
|
|
|
|
|
|
- 新增文件:2 个 Flyway 迁移脚本
|
|
|
|
|
|
- 代码减少:约 200+ 行重复代码
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-03-13 14:14:51 +08:00
|
|
|
|
### 代码合规性审查修复 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**P0 - 三层架构违规修复 (4项):**
|
|
|
|
|
|
- ✅ 创建 `SchoolStatsService` - 移除 SchoolStatsController 直接调用 Mapper
|
|
|
|
|
|
- ✅ 创建 `TeacherStatsService` - 移除 TeacherStatsController 直接调用 Mapper
|
|
|
|
|
|
- ✅ 修复 `AdminCourseController` - 使用 `CourseService.createSystemCourse()` 方法
|
|
|
|
|
|
- ✅ 修复 `TeacherCourseController` - 使用 `ClassService.getActiveClassesByTenantId()` 方法
|
|
|
|
|
|
- ✅ 新增 `ClassService.getActiveClassesByTenantId()` - 获取活跃班级列表
|
|
|
|
|
|
- ✅ 新增 `CourseService.createSystemCourse()` - 创建系统课程专用方法
|
|
|
|
|
|
|
|
|
|
|
|
**P1 - API 路径统一 (8项):**
|
|
|
|
|
|
|
|
|
|
|
|
后端路径统一:
|
|
|
|
|
|
- ✅ `AdminCourseController`: `/api/admin/courses` → `/api/v1/admin/courses`
|
|
|
|
|
|
- ✅ `AdminTenantController`: `/api/admin/tenants` → `/api/v1/admin/tenants`
|
|
|
|
|
|
|
|
|
|
|
|
前端配置调整:
|
|
|
|
|
|
- ✅ `vite.config.ts`: 移除代理重写规则,直接透传 `/api/*`
|
|
|
|
|
|
- ✅ `src/api/index.ts`: baseURL `/api/v1` → `/api`
|
|
|
|
|
|
- ✅ `src/api/admin.ts`: 更新所有路径为 `/v1/admin/*`
|
|
|
|
|
|
- ✅ `src/api/lesson.ts`: 更新所有路径为 `/v1/admin/courses/*`
|
|
|
|
|
|
- ✅ `src/api/package.ts`: 更新所有路径为 `/v1/admin/packages/*`
|
|
|
|
|
|
- ✅ `src/api/theme.ts`: 更新所有路径为 `/v1/admin/themes/*`
|
|
|
|
|
|
|
|
|
|
|
|
**P2 - 文档规范更新 (5项):**
|
|
|
|
|
|
- ✅ 更新 `.claude/CLAUDE.md` 前端 API 调用文档
|
|
|
|
|
|
- ✅ 新增三种调用方式说明(http 方法 / 业务适配层 / Orval 客户端)
|
|
|
|
|
|
- ✅ 新增 API 路径规范表格(超管/学校/教师/家长/认证)
|
|
|
|
|
|
- ✅ 更新前端目录结构说明(`client.ts` → `index.ts`)
|
|
|
|
|
|
- ✅ 更新 Controller 层路径约定说明
|
|
|
|
|
|
|
|
|
|
|
|
**变更统计:**
|
|
|
|
|
|
- 修改文件:16 个
|
|
|
|
|
|
- 新增文件:4 个 Service 类
|
|
|
|
|
|
- 代码变更:+592 行,-305 行
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-03-13 13:48:28 +08:00
|
|
|
|
### 课程包三端全链路测试完成 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**核心修复:**
|
|
|
|
|
|
- ✅ 修复登录 API 路径 - `/api/v1/auth/login` → `/api/auth/login`
|
|
|
|
|
|
- ✅ 修复角色名称大小写 - `ADMIN` → `admin`
|
|
|
|
|
|
- ✅ 修复测试账号密码 - `admin123` → `123456`
|
|
|
|
|
|
- ✅ 修复教师端课程查询 - 包含系统课程和租户课程
|
|
|
|
|
|
- ✅ 修复系统课程创建 - `isSystem` 标志正确保存到数据库
|
|
|
|
|
|
- ✅ 新增套餐授权接口 - `POST /api/v1/admin/packages/{id}/grant`
|
|
|
|
|
|
|
|
|
|
|
|
**Bug 修复详情:**
|
|
|
|
|
|
1. **AdminPackageController** - 新增授权给租户接口
|
|
|
|
|
|
2. **AdminCourseController** - 修复 `isSystem` 标志未保存问题
|
|
|
|
|
|
3. **CourseServiceImpl** - 修复教师端无法查看系统课程问题
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:**
|
|
|
|
|
|
- ✅ 超管端:创建课程、发布课程、创建套餐、添加课程、提交审核、审核通过、发布套餐、授权给租户
|
|
|
|
|
|
- ✅ 学校端:查看授权套餐
|
|
|
|
|
|
- ✅ 教师端:查看可用课程
|
|
|
|
|
|
|
|
|
|
|
|
**测试脚本:**
|
|
|
|
|
|
- `test_package_full_api.py` - 完整套餐 API 测试
|
|
|
|
|
|
- `test_three_ends.py` - 三端全链路测试
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 教师端 Dashboard API 修复完成 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**核心修复:**
|
|
|
|
|
|
- ✅ 修复 API 客户端导入错误 - `getApi` → `getReadingPlatformAPI`
|
|
|
|
|
|
- ✅ 创建 Teacher Stats API - 教师端统计数据接口
|
|
|
|
|
|
- ✅ 更新前端 API 调用方法名 - 6 个方法全部修正
|
|
|
|
|
|
- ✅ 添加教师班级端点 - `/api/teacher/classes`
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Controller(1个):**
|
|
|
|
|
|
- `TeacherStatsController` - `/api/teacher`
|
|
|
|
|
|
- `GET /api/teacher/dashboard` - 教师端首页统计
|
|
|
|
|
|
- `GET /api/teacher/today-lessons` - 今日课程
|
|
|
|
|
|
- `GET /api/teacher/recommended-courses` - 推荐课程
|
|
|
|
|
|
- `GET /api/teacher/weekly-stats` - 本周统计
|
|
|
|
|
|
- `GET /api/teacher/lesson-trend` - 授课趋势
|
|
|
|
|
|
- `GET /api/teacher/course-usage` - 课程使用统计
|
|
|
|
|
|
|
|
|
|
|
|
**前端 API 更新:**
|
|
|
|
|
|
- 修复 `src/api/client.ts` 导入函数名
|
|
|
|
|
|
- 修复 `src/api/teacher.ts` 6 个 API 方法调用
|
|
|
|
|
|
- 移除未使用的类型导入
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:**
|
|
|
|
|
|
- ✅ Dashboard 加载成功,显示 25 个统计卡片
|
|
|
|
|
|
- ✅ 所有 Dashboard API 调用正常(不再返回 500 错误)
|
|
|
|
|
|
- ✅ 授课趋势、课程使用统计 API 正常响应
|
|
|
|
|
|
- ⚠️ 班级管理页面待进一步测试
|
|
|
|
|
|
|
|
|
|
|
|
**技术要点:**
|
|
|
|
|
|
- 使用 try-catch 优雅处理缺失的数据库表
|
|
|
|
|
|
- Orval 生成代码只读,通过 `src/api/*.ts` 适配层调用
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 学校端 API 修复完成 ✅ (2026-03-13)
|
|
|
|
|
|
|
|
|
|
|
|
**核心修复:**
|
|
|
|
|
|
- ✅ 用户密码重置 - 所有用户密码统一为 `123456`
|
|
|
|
|
|
- ✅ 创建 School Stats API - 统计数据接口
|
|
|
|
|
|
- ✅ 创建 School Course API - 课程管理接口
|
|
|
|
|
|
- ✅ 修复 API 响应格式不匹配 - `items` → `list`,`page` → `pageNum`
|
|
|
|
|
|
- ✅ 修复 SchoolPackageController 路径错误
|
|
|
|
|
|
- ✅ 创建学校端数据库表(8个)
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Controller(2个):**
|
|
|
|
|
|
- `SchoolStatsController` - `/api/school/stats`
|
|
|
|
|
|
- `GET /api/school/stats` - 学校统计数据
|
|
|
|
|
|
- `GET /api/school/stats/teachers` - 活跃教师排行
|
|
|
|
|
|
- `GET /api/school/stats/courses` - 课程使用统计
|
|
|
|
|
|
- `GET /api/school/stats/activities` - 近期活动
|
|
|
|
|
|
- `GET /api/school/stats/lesson-trend` - 授课趋势
|
|
|
|
|
|
- `GET /api/school/stats/course-distribution` - 课程分布
|
|
|
|
|
|
- `SchoolCourseController` - `/api/school/courses`
|
|
|
|
|
|
- `GET /api/school/courses` - 学校课程列表
|
|
|
|
|
|
- `GET /api/school/courses/{id}` - 课程详情
|
|
|
|
|
|
|
|
|
|
|
|
**新增数据库表(8个):**
|
|
|
|
|
|
- `classes` - 班级表
|
|
|
|
|
|
- `class_teachers` - 班级教师关联表
|
|
|
|
|
|
- `student_class_history` - 学生班级历史表
|
|
|
|
|
|
- `parent_students` - 家长学生关联表
|
|
|
|
|
|
- `tasks` - 任务表
|
|
|
|
|
|
- `task_targets` - 任务目标表
|
|
|
|
|
|
- `task_completions` - 任务完成表
|
|
|
|
|
|
- `growth_records` - 成长记录表
|
|
|
|
|
|
|
|
|
|
|
|
**前端 API 更新:**
|
|
|
|
|
|
- 修复 `src/api/school.ts` 响应格式
|
|
|
|
|
|
- 更新所有视图文件:`result.items` → `result.list`
|
|
|
|
|
|
- 修复 `getClasses()` 提取列表数据
|
|
|
|
|
|
|
|
|
|
|
|
**API 状态(13个全部正常):**
|
|
|
|
|
|
- ✅ `/api/auth/login` - 登录
|
|
|
|
|
|
- ✅ `/api/school/stats` - 统计数据
|
|
|
|
|
|
- ✅ `/api/school/stats/*` - 统计子接口(6个)
|
|
|
|
|
|
- ✅ `/api/school/courses` - 课程列表
|
|
|
|
|
|
- ✅ `/api/school/teachers` - 教师列表
|
|
|
|
|
|
- ✅ `/api/school/students` - 学生列表
|
|
|
|
|
|
- ✅ `/api/school/classes` - 班级列表
|
|
|
|
|
|
- ✅ `/api/school/parents` - 家长列表
|
|
|
|
|
|
- ✅ `/api/school/tasks` - 任务列表
|
|
|
|
|
|
- ✅ `/api/school/growth-records` - 成长记录
|
|
|
|
|
|
- ✅ `/api/school/packages` - 套餐列表
|
|
|
|
|
|
|
|
|
|
|
|
**新增脚本:**
|
|
|
|
|
|
- `reset_passwords.py` - 密码重置脚本
|
|
|
|
|
|
- `test_db_query.py` - 数据库查询测试脚本
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-03-12 20:03:15 +08:00
|
|
|
|
### 登录问题修复 ✅ (2026-03-12)
|
|
|
|
|
|
|
|
|
|
|
|
**问题修复:**
|
|
|
|
|
|
- ✅ 修正实体类表名映射(去除 `t_` 前缀)
|
|
|
|
|
|
- ✅ 添加学校(Tenant)用户登录支持
|
|
|
|
|
|
- ✅ 为所有角色添加完整的认证支持
|
|
|
|
|
|
|
|
|
|
|
|
**实体类表名修正:**
|
|
|
|
|
|
- `Teacher.java`: `t_teacher` → `teachers`
|
|
|
|
|
|
- `Parent.java`: `t_parent` → `parents`
|
|
|
|
|
|
- `Student.java`: `t_student` → `students`
|
|
|
|
|
|
- `AdminUser.java`: `t_admin_user` → `admin_users`
|
|
|
|
|
|
- `Tenant.java`: `t_tenant` → `tenants`
|
|
|
|
|
|
- `Tenant.java`: 添加 `username` 和 `password` 字段
|
|
|
|
|
|
|
|
|
|
|
|
**AuthServiceImpl 增强:**
|
|
|
|
|
|
- 添加 `TenantMapper` 依赖
|
|
|
|
|
|
- 添加 `school` 角色枚举支持
|
|
|
|
|
|
- `login()` 方法添加 tenant 自动检测
|
|
|
|
|
|
- `getCurrentUserInfo()` 添加 school case
|
|
|
|
|
|
- `changePassword()` 添加 school case
|
|
|
|
|
|
|
|
|
|
|
|
**新增文件:**
|
|
|
|
|
|
- `init-users.sql` - 用户数据初始化脚本
|
|
|
|
|
|
- `V20260312__fix_login_issues.sql` - 数据库迁移脚本
|
|
|
|
|
|
- `/docs/test-logs/2026-03-12-full-test.md` - 功能测试记录
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果(13/13 全部通过):**
|
|
|
|
|
|
- ✅ 超管登录 (admin/123456)
|
|
|
|
|
|
- ✅ 学校登录 (school1/123456)
|
|
|
|
|
|
- ✅ 教师登录 (teacher1/123456)
|
|
|
|
|
|
- ✅ 家长登录 (parent1/123456)
|
|
|
|
|
|
- ✅ 课程套餐创建
|
|
|
|
|
|
- ✅ 主题管理
|
|
|
|
|
|
- ✅ 资源库管理
|
|
|
|
|
|
|
|
|
|
|
|
**提交记录:**
|
|
|
|
|
|
- `eb6724a` - fix: 修复登录问题 - 所有角色登录功能正常
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-03-12 19:49:48 +08:00
|
|
|
|
### Java 后端完成迁移与启动 ✅ (2026-03-12)
|
|
|
|
|
|
|
|
|
|
|
|
**环境配置完成:**
|
|
|
|
|
|
- ✅ Java 17.0.18 (Amazon Corretto) - 通过 SDKMAN 安装
|
|
|
|
|
|
- ✅ Maven 3.9.13 - 通过 SDKMAN 安装
|
|
|
|
|
|
- ✅ Python 3.9.6 - 已安装
|
|
|
|
|
|
- ✅ MySQL 连接器 - 已安装
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Java 实体(7个):**
|
|
|
|
|
|
- `CoursePackage` - 课程套餐实体
|
|
|
|
|
|
- `CoursePackageCourse` - 套餐课程关联
|
|
|
|
|
|
- `TenantPackage` - 租户套餐关联
|
|
|
|
|
|
- `CourseLesson` - 课程环节(6种类型)
|
|
|
|
|
|
- `LessonStep` - 教学环节
|
|
|
|
|
|
- `LessonStepResource` - 环节资源关联
|
|
|
|
|
|
- `Theme` - 主题字典
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Mapper(7个):**
|
|
|
|
|
|
- `CoursePackageMapper`
|
|
|
|
|
|
- `CoursePackageCourseMapper`
|
|
|
|
|
|
- `TenantPackageMapper`
|
|
|
|
|
|
- `CourseLessonMapper`
|
|
|
|
|
|
- `LessonStepMapper`
|
|
|
|
|
|
- `LessonStepResourceMapper`
|
|
|
|
|
|
- `ThemeMapper`
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Service(5个):**
|
|
|
|
|
|
- `ThemeService` - 主题管理服务
|
|
|
|
|
|
- `CoursePackageService` - 课程套餐服务
|
|
|
|
|
|
- `CourseLessonService` - 课程环节服务
|
|
|
|
|
|
- `FileStorageService` - 文件存储服务
|
|
|
|
|
|
- `ResourceLibraryService` - 资源库服务
|
|
|
|
|
|
|
|
|
|
|
|
**新增 Controller(6个):**
|
|
|
|
|
|
- `AdminThemeController` - `/api/v1/admin/themes`
|
|
|
|
|
|
- `AdminPackageController` - `/api/v1/admin/packages`
|
|
|
|
|
|
- `SchoolPackageController` - `/api/v1/school/packages`
|
|
|
|
|
|
- `AdminCourseLessonController` - `/api/v1/admin/courses/{courseId}/lessons`
|
|
|
|
|
|
- `AdminResourceController` - `/api/v1/admin/resources`
|
|
|
|
|
|
- `FileUploadController` - `/api/v1/files/upload`
|
|
|
|
|
|
|
|
|
|
|
|
**数据库配置:**
|
|
|
|
|
|
- 远程 MySQL: 8.148.151.56:3306/reading_platform
|
|
|
|
|
|
- JWT 配置完成
|
|
|
|
|
|
- 数据表映射修复(`t_` 前缀)
|
|
|
|
|
|
|
|
|
|
|
|
**API 端点总数:40+**
|
|
|
|
|
|
- 认证接口:登录、获取用户信息、修改密码
|
|
|
|
|
|
- 超管端:主题、套餐、课程环节、资源库管理
|
|
|
|
|
|
- 学校端:套餐查询、续费
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:**
|
|
|
|
|
|
- ✅ 登录接口正常
|
|
|
|
|
|
- ✅ JWT Token 生成正常
|
|
|
|
|
|
- ✅ 主题管理 API 正常
|
|
|
|
|
|
- ✅ 课程套餐 API 正常
|
|
|
|
|
|
- ✅ 资源库 API 正常
|
|
|
|
|
|
|
|
|
|
|
|
**访问地址:**
|
|
|
|
|
|
- API 文档:http://localhost:8080/doc.html
|
|
|
|
|
|
- 服务端口:8080
|
|
|
|
|
|
|
|
|
|
|
|
**开发日志:**
|
|
|
|
|
|
- `/docs/dev-logs/2026-03-12-java-migration.md`
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [Unreleased]
|
|
|
|
|
|
|
2026-03-12 14:09:56 +08:00
|
|
|
|
### 代码重构(规范化)✅ (2026-03-12)
|
|
|
|
|
|
|
|
|
|
|
|
**后端重构:**
|
|
|
|
|
|
- 添加统一响应格式 `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 类型错误** ✅
|
2026-03-12 14:37:01 +08:00
|
|
|
|
- **教师模块迁移到新 API 客户端** ✅
|
|
|
|
|
|
- **修复 school-course.ts 类型错误** ✅
|
2026-03-12 14:09:56 +08:00
|
|
|
|
- **清理 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 客户端验证通过
|
|
|
|
|
|
|
|
|
|
|
|
**新增文件:**
|
|
|
|
|
|
- `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`
|
|
|
|
|
|
|
|
|
|
|
|
**开发日志:**
|
|
|
|
|
|
- `/docs/dev-logs/2026-03-12.md`
|
|
|
|
|
|
|
2026-03-12 14:37:01 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 问题修复与功能测试 ✅ (2026-03-12 下午)
|
|
|
|
|
|
|
|
|
|
|
|
**问题分析:**
|
|
|
|
|
|
重构后登录正常,但数据全部无法正常加载,核心功能流程不能跑通。
|
|
|
|
|
|
|
|
|
|
|
|
**根本原因:**
|
|
|
|
|
|
1. 路由配置严重缺失 - 从 100+ 个嵌套路由减少到不到 10 个
|
|
|
|
|
|
2. API 参数不兼容 - 后端拒绝 `page` 和 `pageSize` 参数
|
|
|
|
|
|
3. 错误处理逻辑过时 - 使用 `error.response?.data?.message` 但响应拦截器已修改
|
|
|
|
|
|
4. 重复函数声明 - teacher.ts 中有重复的 dashboard 函数
|
|
|
|
|
|
5. Dashboard 组件渲染错误
|
|
|
|
|
|
|
|
|
|
|
|
**修复内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**路由配置恢复:**
|
|
|
|
|
|
- 从 git 历史恢复完整的嵌套路由配置
|
|
|
|
|
|
- 恢复 LayoutView 作为父路由的布局结构
|
|
|
|
|
|
- 所有 100+ 路由恢复正常
|
|
|
|
|
|
|
|
|
|
|
|
**API 适配:**
|
|
|
|
|
|
- 添加教师控制台 Dashboard API 函数 (6个函数)
|
|
|
|
|
|
- 修复 API 参数兼容性 (移除 page/pageSize)
|
|
|
|
|
|
- 统一错误处理逻辑 (error.response?.data?.message → error.message)
|
|
|
|
|
|
- 删除重复函数声明
|
|
|
|
|
|
|
|
|
|
|
|
**测试文档:**
|
|
|
|
|
|
- 功能测试计划: `docs/test-logs/teacher/2026-03-12-functional-test-plan.md`
|
|
|
|
|
|
- 问题诊断报告: `docs/test-logs/teacher/2026-03-12-issue-diagnosis.md`
|
|
|
|
|
|
- 测试总结: `docs/test-logs/teacher/2026-03-12-final-summary.md`
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:**
|
|
|
|
|
|
- 教师端核心功能基本可用 ✓
|
|
|
|
|
|
- 登录、控制台、课程中心、校本课程、授课记录 ✓
|
|
|
|
|
|
|
|
|
|
|
|
**提交记录:**
|
|
|
|
|
|
- `3e77985` fix: 恢复路由配置并添加缺失的 API 函数
|
|
|
|
|
|
- `5b1c6f5` fix: 删除 teacher.ts 中重复的函数声明
|
|
|
|
|
|
- `de54ed1` fix: 修复教师课程 API 参数问题
|
|
|
|
|
|
- `4e13f18` fix: 统一修改错误处理逻辑
|
|
|
|
|
|
- `6da26fa` docs: 添加功能测试总结和问题诊断报告
|
|
|
|
|
|
- `cfb3549` docs: 更新开发日志 - 记录下午的功能测试和问题修复工作
|
|
|
|
|
|
|
|
|
|
|
|
**仍存在的问题:**
|
|
|
|
|
|
- Dashboard 组件 `classCount` 读取失败 (非阻塞性)
|
|
|
|
|
|
- `records.forEach` 类型错误 (非阻塞性)
|
|
|
|
|
|
- 课程图片未显示 (非阻塞性)
|
|
|
|
|
|
|
2026-03-12 17:27:13 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### 超管端深度测试完成 ✅ (2026-03-12 傍晚)
|
|
|
|
|
|
|
|
|
|
|
|
**测试任务:**
|
|
|
|
|
|
对超管端所有 8 个模块进行全面的功能测试。
|
|
|
|
|
|
|
|
|
|
|
|
**测试方式:**
|
|
|
|
|
|
使用 Playwright 自动化测试框架进行功能验证。
|
|
|
|
|
|
|
|
|
|
|
|
**测试结果:**
|
|
|
|
|
|
|
|
|
|
|
|
| 模块 | 状态 | 通过率 |
|
|
|
|
|
|
|------|------|--------|
|
|
|
|
|
|
| 数据看板 | ✓ | 75% (3/4) |
|
|
|
|
|
|
| 租户管理 | ✓ | 100% (6/6) |
|
|
|
|
|
|
| 课程包管理 | ✓ | 100% (5/5) |
|
|
|
|
|
|
| 课程审核 | ✓ | 100% (4/4) |
|
|
|
|
|
|
| 套餐管理 | ✓ | 100% (5/5) |
|
|
|
|
|
|
| 资源库管理 | ✓ | 100% (4/4) |
|
|
|
|
|
|
| 主题字典 | ✓ | 100% (5/5) |
|
|
|
|
|
|
| 系统设置 | ✓ | 100% (3/3) |
|
|
|
|
|
|
|
|
|
|
|
|
**总体通过率:** 97.8% (44/45 测试项)
|
|
|
|
|
|
|
|
|
|
|
|
**测试数据:**
|
|
|
|
|
|
- 租户: 2 个 (测试幼儿园、月亮幼儿园)
|
|
|
|
|
|
- 主题: 6 条
|
|
|
|
|
|
- 套餐: 4 条
|
|
|
|
|
|
|
|
|
|
|
|
**API 验证:**
|
|
|
|
|
|
所有后端 API 均正常响应 (9/9 端点)
|
|
|
|
|
|
|
|
|
|
|
|
**测试文档:**
|
|
|
|
|
|
- 测试计划: `docs/test-logs/admin/2026-03-12-admin-test-plan.md`
|
|
|
|
|
|
- 测试截图: 保存至 `/tmp/admin_*.png`
|
|
|
|
|
|
|
|
|
|
|
|
**结论:**
|
|
|
|
|
|
✓ 超管端功能基本完整,所有模块均可正常使用。仅有一个非关键性问题(数据看板缺少用户统计),不影响系统主要功能。
|
|
|
|
|
|
|
|
|
|
|
|
**建议:**
|
|
|
|
|
|
1. 短期 (1-2 天): 添加数据看板的用户统计模块
|
|
|
|
|
|
2. 中期 (3-5 天): 添加批量操作功能、优化移动端显示
|
|
|
|
|
|
3. 长期 (1-2 周): 实现权限细粒度控制、添加操作审计日志
|
|
|
|
|
|
|
2026-03-12 14:09:56 +08:00
|
|
|
|
### 教师端重构完成 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**设计文档:**
|
|
|
|
|
|
- `/docs/design/22-教师端重构开发规划.md` - 6阶段开发规划
|
|
|
|
|
|
- `/docs/design/23-校本课程包功能完善设计.md` - 校本课程包完整设计
|
|
|
|
|
|
- `/docs/design/24-展播模式优化设计.md` - 展播模式儿童友好设计
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 1: API类型定义更新 ✅**
|
|
|
|
|
|
- `CourseLesson` 接口完整定义
|
|
|
|
|
|
- `LessonStep` 接口完整定义
|
|
|
|
|
|
- `Course` 接口新字段支持
|
|
|
|
|
|
- 后端API `course.service.findOne` 返回完整关联
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 2: 课程详情页重构 ✅**
|
|
|
|
|
|
- 5个Tab导航(课程介绍、课程内容、排课参考、环创建设、用户评价)
|
|
|
|
|
|
- 课程介绍8个富文本字段展示
|
|
|
|
|
|
- 课程内容展示(导入课、集体课、五大领域课)
|
|
|
|
|
|
- LessonCard组件(课程类型徽章、教学目标、环节流程图)
|
|
|
|
|
|
- SelectLessonsModal组件(整体教学/选择课程模式)
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 3: 备课模式重构 ✅**
|
|
|
|
|
|
- 左右分栏布局(6:18)
|
|
|
|
|
|
- PrepareNavigation(三级导航:课程包概览、包含课程、备课笔记)
|
|
|
|
|
|
- PreparePreview(11个内容展示组件)
|
|
|
|
|
|
- 课程包概览:基本信息、课程介绍、排课计划、环创建设
|
|
|
|
|
|
- 课程内容:核心资源、教学目标、教学准备、教学过程、教学延伸、教学反思
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 4: 上课模式重构 ✅**
|
|
|
|
|
|
- 支持多课程上课(lessons数组)
|
|
|
|
|
|
- 课程进度导航(Steps组件)
|
|
|
|
|
|
- 环节进度条
|
|
|
|
|
|
- 跨课程环节切换
|
|
|
|
|
|
- 新资源结构支持(images/videos/audioList/pptFiles/documents)
|
|
|
|
|
|
- 展播模式适配(BroadcastView、KidsMode更新)
|
|
|
|
|
|
- 键盘快捷键支持
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 5: 课程进度追踪 ✅**
|
|
|
|
|
|
- 数据库字段:lessonIds、completedLessonIds、currentLessonId、currentStepId、progressData
|
|
|
|
|
|
- 后端API:保存/获取课程进度
|
|
|
|
|
|
- 前端API:saveLessonProgress、getLessonProgress
|
|
|
|
|
|
- 进度自动保存(课程/环节切换时)
|
|
|
|
|
|
- 上课开始时恢复进度(需用户确认)
|
|
|
|
|
|
- 课程结束后清除进度
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6: 校本课程包功能完善 ✅**
|
|
|
|
|
|
- Phase 6.1: 数据库扩展(SchoolCourse、SchoolCourseLesson字段扩展)
|
|
|
|
|
|
- Phase 6.2: 后端API实现(创建、获取、更新、审核API)
|
|
|
|
|
|
- Phase 6.3: 共享组件提取(7个Step组件到src/components/course-edit/)
|
|
|
|
|
|
- Phase 6.4: 编辑页面实现(7步编辑器、保存位置选择)
|
|
|
|
|
|
- Phase 6.5: 个人课程中心(列表页、详情页增强)
|
|
|
|
|
|
- Phase 6.6: 教学集成(备课模式支持校本课程包)
|
|
|
|
|
|
- Phase 6.7: 功能测试和Bug修复(自动化测试7/7通过)
|
|
|
|
|
|
|
|
|
|
|
|
**新增组件:**
|
|
|
|
|
|
- LessonCard.vue - 课程卡片
|
|
|
|
|
|
- SelectLessonsModal.vue - 课程选择弹窗
|
|
|
|
|
|
- PrepareNavigation.vue - 备课导航
|
|
|
|
|
|
- PreparePreview.vue - 备课预览
|
|
|
|
|
|
- CourseBasicInfo.vue - 基本信息
|
|
|
|
|
|
- CourseIntroContent.vue - 课程介绍
|
|
|
|
|
|
- CourseScheduleContent.vue - 排课参考
|
|
|
|
|
|
- CourseEnvironmentContent.vue - 环创建设
|
|
|
|
|
|
- LessonResourcesContent.vue - 核心资源
|
|
|
|
|
|
- LessonObjectivesContent.vue - 教学目标
|
|
|
|
|
|
- LessonPreparationContent.vue - 教学准备
|
|
|
|
|
|
- LessonStepsContent.vue - 教学过程
|
|
|
|
|
|
- LessonExtensionContent.vue - 教学延伸
|
|
|
|
|
|
- LessonReflectionContent.vue - 教学反思
|
|
|
|
|
|
|
|
|
|
|
|
**修改文件:**
|
|
|
|
|
|
- CourseDetailView.vue - 重构为新结构(5个Tab)
|
|
|
|
|
|
- PrepareModeView.vue - 重构为新布局(左右分栏)
|
|
|
|
|
|
- LessonView.vue - 支持多课程上课和新结构
|
|
|
|
|
|
- BroadcastView.vue - 适配新结构
|
|
|
|
|
|
- KidsMode.vue - 适配新结构
|
|
|
|
|
|
|
|
|
|
|
|
### Bug修复 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-001: JWT Strategy返回字段不匹配**
|
|
|
|
|
|
- 位置:`jwt.strategy.ts`
|
|
|
|
|
|
- 修复:确保返回字段与控制器期望一致
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-002: 备课模式课程类型过滤不匹配**
|
|
|
|
|
|
- 位置:`PrepareNavigation.vue`
|
|
|
|
|
|
- 修复:更新过滤逻辑,INTRODUCTION → INTRO,LANGUAGE → DOMAIN_LANGUAGE等
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-003: 课程介绍内容折叠显示**
|
|
|
|
|
|
- 位置:`CourseIntroContent.vue`
|
|
|
|
|
|
- 修复:移除collapse组件,内容完全展开
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-004: 授课页面课程内容不显示**
|
|
|
|
|
|
- 位置:`lesson.service.ts`(后端)、`LessonView.vue`(前端)
|
|
|
|
|
|
- 修复:添加courseLessons关联查询和数据转换
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-005: 授课页面进度条课程类型显示错误**
|
|
|
|
|
|
- 位置:`LessonView.vue`
|
|
|
|
|
|
- 修复:更新getLessonShortName类型映射
|
|
|
|
|
|
|
|
|
|
|
|
**BUG-006: 展播模式资源显示问题**
|
|
|
|
|
|
- 位置:`BroadcastView.vue`、`KidsMode.vue`
|
|
|
|
|
|
- 修复:资源结构转换、路径处理、图片显示支持
|
|
|
|
|
|
|
|
|
|
|
|
### PDF查看器增强:PDF.js实现 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**需求:**
|
|
|
|
|
|
解决PDF预览界面丑陋、高度限制导致内容截断、工具栏遮挡内容的问题
|
|
|
|
|
|
|
|
|
|
|
|
**修改内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**新增文件:**
|
|
|
|
|
|
- `PdfViewer.vue` - 基于PDF.js的完整PDF查看器组件
|
|
|
|
|
|
|
|
|
|
|
|
**新增依赖:**
|
|
|
|
|
|
- `pdfjs-dist@3.11.174` - Mozilla PDF.js库
|
|
|
|
|
|
|
|
|
|
|
|
**修改文件:**
|
|
|
|
|
|
- `SlidesViewer.vue` - 集成新PDF查看器,移除embed标签
|
|
|
|
|
|
|
|
|
|
|
|
**功能特性:**
|
|
|
|
|
|
- ✅ PDF.js Canvas渲染,无高度限制
|
|
|
|
|
|
- ✅ 完整页面显示,无截断问题
|
|
|
|
|
|
- ✅ 浮动工具栏设计,不遮挡内容
|
|
|
|
|
|
- ✅ 页码导航(上一页/下一页/直接跳转)
|
|
|
|
|
|
- ✅ 缩放控制(放大/缩小/适合宽度)
|
|
|
|
|
|
- ✅ 全屏模式支持
|
|
|
|
|
|
- ✅ 目录侧边栏(缩略图导航)
|
|
|
|
|
|
- ✅ 键盘快捷键(←→翻页,+/-缩放,F全屏,ESC退出)
|
|
|
|
|
|
- ✅ 儿童友好设计(暖色背景、大按钮、平滑动画)
|
|
|
|
|
|
|
|
|
|
|
|
**技术实现:**
|
|
|
|
|
|
- Canvas渲染替代embed标签
|
|
|
|
|
|
- PDF.js worker配置
|
|
|
|
|
|
- 缩略图自动生成
|
|
|
|
|
|
- 响应式布局适配
|
|
|
|
|
|
|
|
|
|
|
|
### PDF文档直接预览功能 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**需求:**
|
|
|
|
|
|
用户点击PDF教学资源时,直接在上方区域加载并预览PDF,要求预览界面设计漂亮,并添加翻页动画
|
|
|
|
|
|
|
|
|
|
|
|
**修改内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**KidsMode.vue 组件修改:**
|
|
|
|
|
|
- 移除"打开文档"按钮的占位符界面
|
|
|
|
|
|
- 复用 `SlidesViewer` 组件直接显示PDF
|
|
|
|
|
|
- 添加 `currentDocumentPage` 状态
|
|
|
|
|
|
- 添加 `handleDocumentPageChange` 方法
|
|
|
|
|
|
- 更新 `slidesPages` 计算属性支持 document 类型
|
|
|
|
|
|
- 添加资源类型切换监听,自动重置页码
|
|
|
|
|
|
|
|
|
|
|
|
**功能特性:**
|
|
|
|
|
|
- ✅ PDF直接在主内容区域显示
|
|
|
|
|
|
- ✅ 使用 `<embed>` 标签内嵌预览
|
|
|
|
|
|
- ✅ 翻页按钮(上一页/下一页)
|
|
|
|
|
|
- ✅ 页码指示器
|
|
|
|
|
|
- ✅ 翻页动画(淡入淡出 + 缩放)
|
|
|
|
|
|
- ✅ 工具栏(新窗口打开/下载)
|
|
|
|
|
|
- ✅ 左右箭头悬停提示
|
|
|
|
|
|
- ✅ 键盘快捷键支持(左右箭头)
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式界面重构 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**需求:**
|
|
|
|
|
|
展播模式不需要展示教学环节,改为直接展示所有数字资源,教师点击资源即可在上方播放区播放
|
|
|
|
|
|
|
|
|
|
|
|
**修改内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. KidsMode.vue 模板结构调整**
|
|
|
|
|
|
- 移除"教学环节"区域
|
|
|
|
|
|
- 新增"教学资源"区域,展示所有可播放资源
|
|
|
|
|
|
- 进度条从"环节进度"改为"资源进度"
|
|
|
|
|
|
- 控制按钮从"上一环节/下一环节"改为"上一个/下一个"
|
|
|
|
|
|
|
|
|
|
|
|
**2. 新增资源管理逻辑**
|
|
|
|
|
|
- `allLessonResources` - 收集课程包级、课程级、环节级所有资源
|
|
|
|
|
|
- `currentResourceIndex` - 跟踪当前播放的资源索引
|
|
|
|
|
|
- `resourceProgressPercent` - 计算资源播放进度
|
|
|
|
|
|
|
|
|
|
|
|
**3. 新增资源切换方法**
|
|
|
|
|
|
- `handleResourceByIndex(index)` - 根据索引加载并显示资源
|
|
|
|
|
|
- `prevResource()` - 切换到上一个资源
|
|
|
|
|
|
- `nextResource()` - 切换到下一个资源
|
|
|
|
|
|
|
|
|
|
|
|
**4. 样式优化**
|
|
|
|
|
|
- 增大资源按钮尺寸(18px 字号,更大的内边距)
|
|
|
|
|
|
- 添加资源名称显示样式
|
|
|
|
|
|
- 优化资源按钮激活状态
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式资源显示修复 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**问题描述:**
|
|
|
|
|
|
展播模式没有根据不同类型的课程展示对应的环节和数字资源
|
|
|
|
|
|
|
|
|
|
|
|
**修复内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. BroadcastView.vue - 资源结构转换**
|
|
|
|
|
|
- 后端返回:`resources: [{ resourceType, resourceName, fileUrl }]`
|
|
|
|
|
|
- 前端期望:`images[]`, `videos[]`, `audioList[]`, `pptFiles[]`, `documents[]`
|
|
|
|
|
|
- 添加转换逻辑,根据 `resourceType` 分类资源
|
|
|
|
|
|
|
|
|
|
|
|
**2. KidsMode.vue - 资源路径处理**
|
|
|
|
|
|
- 修复 `getStepResources` 函数,使用 `getFileUrl` 处理所有资源路径
|
|
|
|
|
|
- 支持 `path` 和 `url` 两种属性名
|
|
|
|
|
|
- 确保相对路径正确添加服务器前缀
|
|
|
|
|
|
|
|
|
|
|
|
**3. KidsMode.vue - 自动加载资源**
|
|
|
|
|
|
- 修复 `loadCurrentStepResources` 函数
|
|
|
|
|
|
- 优先使用新结构(分类资源数组)
|
|
|
|
|
|
- 回退到旧结构
|
|
|
|
|
|
|
|
|
|
|
|
**4. KidsMode.vue - 图片显示支持**
|
|
|
|
|
|
- 添加 `image` 类型的显示组件
|
|
|
|
|
|
- 添加图片查看器样式
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式优化完成 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**设计文档:** `/docs/design/24-展播模式优化设计.md`
|
|
|
|
|
|
|
|
|
|
|
|
**优化内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. 视觉风格优化**
|
|
|
|
|
|
- 背景从深蓝色改为暖色渐变(#FFF8E1 → #FFE0B2 → #FFCCBC)
|
|
|
|
|
|
- 添加浮动云朵装饰动画
|
|
|
|
|
|
- 底部导航改为白色毛玻璃效果 + 橙色边框
|
|
|
|
|
|
- 环节卡片使用暖色渐变背景 + 3px橙色边框
|
|
|
|
|
|
- 按钮尺寸增大到最小56px高度,适合儿童点击
|
|
|
|
|
|
- 字体大小放大到18-22px
|
|
|
|
|
|
|
|
|
|
|
|
**2. 资源陈列优化**
|
|
|
|
|
|
- 环节图标从16px增大到24px
|
|
|
|
|
|
- 资源图标从12px增大到18px
|
|
|
|
|
|
- 添加环节徽章显示关联资源数量
|
|
|
|
|
|
- 添加区域标签图标(📚 教学环节、🎨 延伸活动、📁 其他资源)
|
|
|
|
|
|
- 控制按钮图标从24px增大到28px
|
|
|
|
|
|
|
|
|
|
|
|
**3. 动画效果增强**
|
|
|
|
|
|
- 内容切换动画:淡入淡出 + 缩放效果
|
|
|
|
|
|
- 云朵浮动动画:8-10秒循环漂浮
|
|
|
|
|
|
- 星星弹出动画:缩放 + 旋转组合效果
|
|
|
|
|
|
- 脉冲动画:当前环节呼吸效果
|
|
|
|
|
|
- 按钮悬停动画:放大 + 阴影增强
|
|
|
|
|
|
- 进度条动画:0.5秒缓动过渡
|
|
|
|
|
|
|
|
|
|
|
|
**4. 音效和互动反馈**
|
|
|
|
|
|
- Web Audio API 实现音效系统
|
|
|
|
|
|
- 四种音效:click(点击)、success(成功)、complete(完成)、star(星星)
|
|
|
|
|
|
- 左上角静音开关按钮(金色边框 + 毛玻璃效果)
|
|
|
|
|
|
- 右上角星星奖励显示区域
|
|
|
|
|
|
- 完成环节自动获得星星 + 弹出动画
|
|
|
|
|
|
|
|
|
|
|
|
**修改文件:**
|
|
|
|
|
|
- `reading-platform-frontend/src/views/teacher/lessons/components/KidsMode.vue`
|
|
|
|
|
|
|
|
|
|
|
|
### 进行中
|
|
|
|
|
|
- **教师端重构** (2026-03-11开始)
|
|
|
|
|
|
- Phase 1 ✅: API类型定义更新、后端API适配确认
|
|
|
|
|
|
- Phase 2 ✅: 课程详情页重构(5个Tab + 课程列表展示)
|
|
|
|
|
|
- Phase 3 ✅: 备课模式重构
|
|
|
|
|
|
- Phase 4 ✅: 上课模式重构
|
|
|
|
|
|
- Phase 5 ✅: 课程进度追踪
|
|
|
|
|
|
- Phase 6 ✅: 校本课程包功能完善 (2026-03-11完成,待测试)
|
|
|
|
|
|
- Phase 6.1 ✅: 数据库扩展
|
|
|
|
|
|
- Phase 6.2 ✅: 后端API实现
|
|
|
|
|
|
- Phase 6.3 ✅: 共享组件提取
|
|
|
|
|
|
- Phase 6.4 ✅: 编辑页面实现
|
|
|
|
|
|
- Phase 6.5 ✅: 个人课程中心
|
|
|
|
|
|
- Phase 6.6 ✅: 教学集成
|
|
|
|
|
|
- Phase 6.7 ✅: 功能测试和Bug修复
|
|
|
|
|
|
|
|
|
|
|
|
### 授课页面内容显示修复 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**问题描述:**
|
|
|
|
|
|
点击"开始上课"按钮进入授课页面后,课程内容没有正常呈现
|
|
|
|
|
|
|
|
|
|
|
|
**修复内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**后端修复:**
|
|
|
|
|
|
- `lesson.service.ts` - `findOne()` 方法添加 `courseLessons` 关联查询和数据转换
|
|
|
|
|
|
- `lesson.service.ts` - `start()` 方法添加 `courseLessons` 关联查询和数据转换
|
|
|
|
|
|
|
|
|
|
|
|
**前端修复:**
|
|
|
|
|
|
- `LessonView.vue` - 添加课程资源面板(显示视频、课件、文档)
|
|
|
|
|
|
- `LessonView.vue` - 添加教学准备面板
|
|
|
|
|
|
- `LessonView.vue` - 添加教学延伸面板
|
|
|
|
|
|
- `LessonView.vue` - 修复 SCSS 语法错误(`.evaluation-card` 大括号匹配)
|
|
|
|
|
|
|
|
|
|
|
|
**测试验证:**
|
|
|
|
|
|
- Playwright 自动化测试通过
|
|
|
|
|
|
- 工具面板: 4个
|
|
|
|
|
|
- 课程资源: 正常显示
|
|
|
|
|
|
- 教学准备: 正常显示
|
|
|
|
|
|
- 教学延伸: 正常显示
|
|
|
|
|
|
|
|
|
|
|
|
### Phase 6.7 测试完成 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**自动化测试完成**:
|
|
|
|
|
|
- 7个测试用例全部通过
|
|
|
|
|
|
- 创建、编辑、查看、删除、筛选功能验证通过
|
|
|
|
|
|
- 备课模式集成验证通过
|
|
|
|
|
|
|
|
|
|
|
|
**教师端核心功能全面测试完成**:
|
|
|
|
|
|
- 测试套件:7个主要流程
|
|
|
|
|
|
- 测试用例:60个
|
|
|
|
|
|
- 通过率:93.3% (56/60)
|
|
|
|
|
|
- 失败:4个(均为非功能缺陷:Playwright strict mode violation / modal)
|
|
|
|
|
|
|
|
|
|
|
|
**测试覆盖范围**:
|
|
|
|
|
|
- ✅ Phase 6 校本课程包 (7/7)
|
|
|
|
|
|
- ✅ 标准课程包查看 (7/8)
|
|
|
|
|
|
- ✅ Phase 3 备课模式 (11/12) **已修复课程类型过滤和内容展开问题**
|
|
|
|
|
|
- ✅ Phase 4 上课模式 (8/9)
|
|
|
|
|
|
- ✅ Phase 5 进度追踪 (9/10)
|
|
|
|
|
|
- ✅ 课后记录流程 (12/12)
|
|
|
|
|
|
- ⚠️ 展播模式 (2/10, 8个跳过需实际上课记录)
|
|
|
|
|
|
|
|
|
|
|
|
**测试文件**:
|
|
|
|
|
|
- `tests/e2e/phase6-school-course/school-course.spec.ts`
|
|
|
|
|
|
- `tests/e2e/course-view-flow/course-view.spec.ts`
|
|
|
|
|
|
- `tests/e2e/prepare-mode-flow/prepare-mode.spec.ts`
|
|
|
|
|
|
- `tests/e2e/teaching-mode-flow/teaching-mode.spec.ts`
|
|
|
|
|
|
- `tests/e2e/progress-flow/progress.spec.ts`
|
|
|
|
|
|
- `tests/e2e/post-class-flow/post-class.spec.ts`
|
|
|
|
|
|
- `tests/e2e/broadcast-flow/broadcast.spec.ts`
|
|
|
|
|
|
|
|
|
|
|
|
**测试报告**: `/docs/test-logs/teacher/2026-03-11-comprehensive-testing-summary.md`
|
|
|
|
|
|
|
|
|
|
|
|
**发现的Bug修复**:
|
|
|
|
|
|
- BUG-001: JWT strategy 返回字段与控制器期望不匹配 → 已修复
|
|
|
|
|
|
- BUG-002: 备课模式课程类型过滤不匹配 → 已修复 (INTRO, DOMAIN_*)
|
|
|
|
|
|
- BUG-003: 课程介绍内容折叠显示 → 已修复 (移除 collapse 组件)
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式优化完成 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**设计文档:** `/docs/design/24-展播模式优化设计.md`
|
|
|
|
|
|
|
|
|
|
|
|
**优化内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. 视觉风格优化**
|
|
|
|
|
|
- 背景从深蓝色改为暖色渐变(#FFF8E1 → #FFE0B2 → #FFCCBC)
|
|
|
|
|
|
- 添加浮动云朵装饰动画
|
|
|
|
|
|
- 底部导航改为白色毛玻璃效果 + 橙色边框
|
|
|
|
|
|
- 环节卡片使用暖色渐变背景 + 3px橙色边框
|
|
|
|
|
|
- 按钮尺寸增大到最小56px高度,适合儿童点击
|
|
|
|
|
|
- 字体大小放大到18-22px
|
|
|
|
|
|
|
|
|
|
|
|
**2. 资源陈列优化**
|
|
|
|
|
|
- 环节图标从16px增大到24px
|
|
|
|
|
|
- 资源图标从12px增大到18px
|
|
|
|
|
|
- 添加环节徽章显示关联资源数量
|
|
|
|
|
|
- 添加区域标签图标(📚 教学环节、🎨 延伸活动、📁 其他资源)
|
|
|
|
|
|
- 控制按钮图标从24px增大到28px
|
|
|
|
|
|
|
|
|
|
|
|
**3. 动画效果增强**
|
|
|
|
|
|
- 内容切换动画:淡入淡出 + 缩放效果
|
|
|
|
|
|
- 云朵浮动动画:8-10秒循环漂浮
|
|
|
|
|
|
- 星星弹出动画:缩放 + 旋转组合效果
|
|
|
|
|
|
- 脉冲动画:当前环节呼吸效果
|
|
|
|
|
|
- 按钮悬停动画:放大 + 阴影增强
|
|
|
|
|
|
- 进度条动画:0.5秒缓动过渡
|
|
|
|
|
|
|
|
|
|
|
|
**4. 音效和互动反馈**
|
|
|
|
|
|
- Web Audio API 实现音效系统
|
|
|
|
|
|
- 四种音效:click(点击)、success(成功)、complete(完成)、star(星星)
|
|
|
|
|
|
- 左上角静音开关按钮(金色边框 + 毛玻璃效果)
|
|
|
|
|
|
- 右上角星星奖励显示区域
|
|
|
|
|
|
- 完成环节自动获得星星 + 弹出动画
|
|
|
|
|
|
|
|
|
|
|
|
**修改文件:**
|
|
|
|
|
|
- `reading-platform-frontend/src/views/teacher/lessons/components/KidsMode.vue`
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式界面重构 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**需求:**
|
|
|
|
|
|
展播模式不需要展示教学环节,改为直接展示所有数字资源,教师点击资源即可在上方播放区播放
|
|
|
|
|
|
|
|
|
|
|
|
**修改内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. KidsMode.vue 模板结构调整**
|
|
|
|
|
|
- 移除"教学环节"区域
|
|
|
|
|
|
- 新增"教学资源"区域,展示所有可播放资源
|
|
|
|
|
|
- 进度条从"环节进度"改为"资源进度"
|
|
|
|
|
|
- 控制按钮从"上一环节/下一环节"改为"上一个/下一个"
|
|
|
|
|
|
|
|
|
|
|
|
**2. 新增资源管理逻辑**
|
|
|
|
|
|
- `allLessonResources` - 收集课程包级、课程级、环节级所有资源
|
|
|
|
|
|
- `currentResourceIndex` - 跟踪当前播放的资源索引
|
|
|
|
|
|
- `resourceProgressPercent` - 计算资源播放进度
|
|
|
|
|
|
|
|
|
|
|
|
**3. 新增资源切换方法**
|
|
|
|
|
|
- `handleResourceByIndex(index)` - 根据索引加载并显示资源
|
|
|
|
|
|
- `prevResource()` - 切换到上一个资源
|
|
|
|
|
|
- `nextResource()` - 切换到下一个资源
|
|
|
|
|
|
|
|
|
|
|
|
**4. 样式优化**
|
|
|
|
|
|
- 增大资源按钮尺寸(18px 字号,更大的内边距)
|
|
|
|
|
|
- 添加资源名称显示样式
|
|
|
|
|
|
- 优化资源按钮激活状态
|
|
|
|
|
|
|
|
|
|
|
|
### 展播模式资源显示修复 ✅ (2026-03-11)
|
|
|
|
|
|
|
|
|
|
|
|
**问题描述:**
|
|
|
|
|
|
展播模式没有根据不同类型的课程展示对应的环节和数字资源
|
|
|
|
|
|
|
|
|
|
|
|
**修复内容:**
|
|
|
|
|
|
|
|
|
|
|
|
**1. BroadcastView.vue - 资源结构转换**
|
|
|
|
|
|
- 后端返回:`resources: [{ resourceType, resourceName, fileUrl }]`
|
|
|
|
|
|
- 前端期望:`images[]`, `videos[]`, `audioList[]`, `pptFiles[]`, `documents[]`
|
|
|
|
|
|
- 添加转换逻辑,根据 `resourceType` 分类资源
|
|
|
|
|
|
|
|
|
|
|
|
**2. KidsMode.vue - 资源路径处理**
|
|
|
|
|
|
- 修复 `getStepResources` 函数,使用 `getFileUrl` 处理所有资源路径
|
|
|
|
|
|
- 支持 `path` 和 `url` 两种属性名
|
|
|
|
|
|
- 确保相对路径正确添加服务器前缀
|
|
|
|
|
|
|
|
|
|
|
|
**3. KidsMode.vue - 自动加载资源**
|
|
|
|
|
|
- 修复 `loadCurrentStepResources` 函数
|
|
|
|
|
|
- 优先使用新结构(分类资源数组)
|
|
|
|
|
|
- 回退到旧结构
|
|
|
|
|
|
|
|
|
|
|
|
**4. KidsMode.vue - 图片显示支持**
|
|
|
|
|
|
- 添加 `image` 类型的显示组件
|
|
|
|
|
|
- 添加图片查看器样式
|
|
|
|
|
|
|
|
|
|
|
|
### Phase 6 校本课程包功能完成
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.1 数据库扩展 ✅**
|
|
|
|
|
|
- SchoolCourse 表添加字段:saveLocation, reviewStatus, reviewedBy, reviewedAt, reviewComment
|
|
|
|
|
|
- SchoolCourse 表添加课程配置字段:themeId, gradeTags, domainTags, duration, coverImagePath
|
|
|
|
|
|
- SchoolCourse 表添加课程介绍8字段:introSummary, introHighlights, introGoals, introSchedule, introKeyPoints, introMethods, introEvaluation, introNotes
|
|
|
|
|
|
- SchoolCourse 表添加排课参考和环创建设:scheduleRefData, environmentConstruction
|
|
|
|
|
|
- SchoolCourseLesson 表添加完整配置:name, description, duration, 资源文件, stepsData
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.2 后端API实现 ✅**
|
|
|
|
|
|
- POST `/school/school-courses/from-source` - 从源课程创建校本课程包
|
|
|
|
|
|
- GET `/school/school-courses/:id/full` - 获取完整详情
|
|
|
|
|
|
- PUT `/school/school-courses/:id/full` - 更新完整数据
|
|
|
|
|
|
- POST `/school/school-courses/:id/approve` - 审核通过
|
|
|
|
|
|
- POST `/school/school-courses/:id/reject` - 审核驳回
|
|
|
|
|
|
- 教师端对应API (`/teacher/school-courses/...`)
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.3 共享组件提取 ✅**
|
|
|
|
|
|
- 新增目录:`/components/course-edit/`
|
|
|
|
|
|
- 复制7个Step组件到共享位置供复用
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.4 编辑页面实现 ✅**
|
|
|
|
|
|
- 新增:`SchoolCourseEditView.vue` - 7步编辑器
|
|
|
|
|
|
- 新增:包装组件适配校本课程场景
|
|
|
|
|
|
- 课程详情页添加"创建校本版本"按钮
|
|
|
|
|
|
- 保存位置选择弹窗(个人/校本)
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.5 个人课程中心 ✅**
|
|
|
|
|
|
- 列表页:保存位置筛选、审核状态显示
|
|
|
|
|
|
- 详情页:完整信息展示、备课/上课入口
|
|
|
|
|
|
- 类型定义更新:SchoolCourse 和 SchoolCourseLesson 接口
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.6 教学集成 ✅**
|
|
|
|
|
|
- PrepareModeView 支持 `?type=school` 参数加载校本课程包
|
|
|
|
|
|
- 解析 stepsData JSON字段转换为标准课程结构
|
|
|
|
|
|
- 详情页按钮跳转到备课模式
|
|
|
|
|
|
|
|
|
|
|
|
**Phase 6.7 测试状态 🚧**
|
|
|
|
|
|
- TypeScript 编译通过(校本课程相关 0 错误)
|
|
|
|
|
|
- 待浏览器手动测试完整流程
|
|
|
|
|
|
|
|
|
|
|
|
### Phase 5 课程进度追踪完成
|
|
|
|
|
|
- **数据库字段添加**
|
|
|
|
|
|
- Lesson 表添加进度追踪字段
|
|
|
|
|
|
- lessonIds: 已选择的课程ID列表(JSON数组)
|
|
|
|
|
|
- completedLessonIds: 已完成的课程ID列表(JSON数组)
|
|
|
|
|
|
- currentLessonId: 当前进行到的课程ID
|
|
|
|
|
|
- currentStepId: 当前进行到的环节ID
|
|
|
|
|
|
- progressData: 进度数据(JSON,包含课程包结构)
|
|
|
|
|
|
- **后端API**
|
|
|
|
|
|
- POST `/teacher/lessons/:id/progress` - 保存课程进度
|
|
|
|
|
|
- GET `/teacher/lessons/:id/progress` - 获取课程进度
|
|
|
|
|
|
- **前端API**
|
|
|
|
|
|
- saveLessonProgress() - 保存课程进度
|
|
|
|
|
|
- getLessonProgress() - 获取课程进度
|
|
|
|
|
|
- **进度自动保存**
|
|
|
|
|
|
- 课程/环节切换时自动保存进度
|
|
|
|
|
|
- 上课开始时恢复上次进度(需用户确认)
|
|
|
|
|
|
- 课程结束后清除进度
|
|
|
|
|
|
|
|
|
|
|
|
### Phase 4 上课模式重构完成
|
|
|
|
|
|
- **LessonView.vue 重构**
|
|
|
|
|
|
- 支持多课程上课(lessons 数组)
|
|
|
|
|
|
- 课程进度导航(Steps 组件)
|
|
|
|
|
|
- 环节进度条(当前课程内环节进度)
|
|
|
|
|
|
- 跨课程环节切换
|
|
|
|
|
|
- 新资源结构支持(images/videos/audioList/pptFiles/documents)
|
|
|
|
|
|
- **BroadcastView.vue 适配**
|
|
|
|
|
|
- 支持课程和环节索引参数
|
|
|
|
|
|
- 更新 KidsMode 组件调用
|
|
|
|
|
|
- 键盘快捷键支持
|
|
|
|
|
|
- **KidsMode.vue 更新**
|
|
|
|
|
|
- 接收 currentLesson 参数
|
|
|
|
|
|
- 使用 steps 替代 scripts
|
|
|
|
|
|
- 新旧资源结构兼容
|
|
|
|
|
|
|
|
|
|
|
|
### Phase 3 备课模式重构完成
|
|
|
|
|
|
- **新增组件**
|
|
|
|
|
|
- PrepareNavigation - 左侧导航(课程包概览、包含课程、备课笔记)
|
|
|
|
|
|
- PreparePreview - 右侧内容预览(11个内容展示组件)
|
|
|
|
|
|
- CourseBasicInfo - 基本信息(封面、统计、标签)
|
|
|
|
|
|
- CourseIntroContent - 课程介绍(8个富文本字段)
|
|
|
|
|
|
- CourseScheduleContent - 排课参考(表格)
|
|
|
|
|
|
- CourseEnvironmentContent - 环创建设
|
|
|
|
|
|
- LessonResourcesContent - 核心资源(图片/视频/音频/PPT/文档)
|
|
|
|
|
|
- LessonObjectivesContent - 教学目标
|
|
|
|
|
|
- LessonPreparationContent - 教学准备
|
|
|
|
|
|
- LessonStepsContent - 教学过程(环节列表+详情展开)
|
|
|
|
|
|
- LessonExtensionContent - 教学延伸
|
|
|
|
|
|
- LessonReflectionContent - 教学反思(含快速记录)
|
|
|
|
|
|
- **重构页面**
|
|
|
|
|
|
- PrepareModeView - 左右分栏布局,支持三级导航
|
|
|
|
|
|
- **组件优化**
|
|
|
|
|
|
- LessonCard - 修复事件定义
|
|
|
|
|
|
|
2026-02-28 16:41:39 +08:00
|
|
|
|
### 待处理
|
|
|
|
|
|
- TypeScript 编译警告修复(约63个)
|
|
|
|
|
|
- 性能优化
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-28]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- **课程包第7步 - 环创建设**
|
|
|
|
|
|
- 课程包创建/编辑增加第7步"环创建设"
|
|
|
|
|
|
- 富文本输入框(最大3000字)
|
|
|
|
|
|
- 填写提示(主题环境布置、区域活动环境、阅读角创设、材料投放建议等)
|
|
|
|
|
|
- 超管端和学校端课程包详情页展示环创建设内容
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- **学校端课程管理年级Tab重设计**
|
|
|
|
|
|
- 原设计:使用 Ant Design Radio.Group,与页面风格不协调
|
|
|
|
|
|
- 新设计:白色卡片容器 + 自定义Tab按钮
|
|
|
|
|
|
- 选中状态:绿色渐变背景,与页面头部呼应
|
|
|
|
|
|
- 筛选功能:支持按年级(全部/小班/中班/大班)筛选课程
|
|
|
|
|
|
|
|
|
|
|
|
### 数据库变更
|
|
|
|
|
|
- Course 表添加 `environment_construction` 字段(TEXT类型)
|
|
|
|
|
|
|
|
|
|
|
|
### 文件变更
|
|
|
|
|
|
- 新增:`Step7Environment.vue` 组件
|
|
|
|
|
|
- 修改:7个文件(后端2个,前端5个)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-27]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- **课程包创建/编辑6步流程重构**
|
|
|
|
|
|
- 步骤1:基本信息(名称、主题、年级、核心内容、封面)
|
|
|
|
|
|
- 步骤2:课程介绍(8个Tab:简介、亮点、目标、安排、重难点、方法、评价、注意事项)
|
|
|
|
|
|
- 步骤3:排课计划参考(可编辑表格)
|
|
|
|
|
|
- 步骤4:导入课配置(含资源上传、教学反思)
|
|
|
|
|
|
- 步骤5:集体课配置(含核心资源、4环节模板)
|
|
|
|
|
|
- 步骤6:五大领域课配置(健康/语言/社会/科学/艺术)
|
|
|
|
|
|
- **新组件**
|
|
|
|
|
|
- FileUploader - 统一文件上传组件
|
|
|
|
|
|
- LessonStepsEditor - 教学环节编辑器
|
|
|
|
|
|
- LessonConfigPanel - 课程配置面板
|
|
|
|
|
|
- **文件类型扩展**
|
|
|
|
|
|
- 新增 audio 音频类型支持
|
|
|
|
|
|
- 新增 document 文档类型支持
|
|
|
|
|
|
- PPT类型同时支持PDF格式
|
|
|
|
|
|
- **数据库字段**
|
|
|
|
|
|
- 课程介绍8个字段(introSummary等)
|
|
|
|
|
|
- coreContent 核心内容字段
|
|
|
|
|
|
- scheduleRefData 排课参考字段
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- 富文本输入框字符限制从500增加到1500
|
|
|
|
|
|
- 添加字数统计显示(show-count)
|
|
|
|
|
|
- 课程封面图片URL构建逻辑优化
|
|
|
|
|
|
- 保存错误处理优化,添加详细日志
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 课程封面图片不显示 - URL路径重复问题
|
|
|
|
|
|
- 导入课缺少资源上传功能
|
|
|
|
|
|
- 导入课缺少教学反思字段
|
|
|
|
|
|
- 教学课件只支持PPT不支持PDF
|
|
|
|
|
|
- 保存课程偶发失败
|
|
|
|
|
|
- 文件预览URL路径错误
|
|
|
|
|
|
- 学校端课程详情不显示课程配置 - API缺少courseLessons关联
|
|
|
|
|
|
- 超管端排课参考表格列名不匹配 - dayOfWeek/activity
|
|
|
|
|
|
- 学校端排课参考表格不显示 - 数组类型判断
|
|
|
|
|
|
|
|
|
|
|
|
### 学校端新功能(晚上)
|
|
|
|
|
|
- **套餐管理重构**
|
|
|
|
|
|
- 已授权套餐列表(卡片布局)
|
|
|
|
|
|
- 套餐详情弹窗
|
|
|
|
|
|
- 续订功能(6/12/24个月)
|
|
|
|
|
|
- 到期状态提醒
|
|
|
|
|
|
- **课程详情页适配新结构**
|
|
|
|
|
|
- 信息卡片网格布局
|
|
|
|
|
|
- 课程介绍8个Tab
|
|
|
|
|
|
- 排课参考表格
|
|
|
|
|
|
- 课程配置卡片
|
|
|
|
|
|
- 数字资源汇总
|
|
|
|
|
|
- **校本课程包功能完善**
|
|
|
|
|
|
- 列表页统计概览
|
|
|
|
|
|
- 预约功能弹窗
|
|
|
|
|
|
- 排课管理弹窗
|
|
|
|
|
|
- 详情页预约记录
|
|
|
|
|
|
|
|
|
|
|
|
### 文件变更
|
|
|
|
|
|
- 后端新增:14 个文件(新模块)
|
|
|
|
|
|
- 后端修改:3 个文件
|
|
|
|
|
|
- 前端新增:16 个文件(页面和组件)
|
|
|
|
|
|
- 前端修改:5 个文件
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-24]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- **学校端家长管理功能**
|
|
|
|
|
|
- 家长列表(卡片网格布局)
|
|
|
|
|
|
- 家长CRUD操作(创建、编辑、删除)
|
|
|
|
|
|
- 重置密码(生成临时密码)
|
|
|
|
|
|
- 管理关联孩子(查看、添加、解除)
|
|
|
|
|
|
- 关系标签显示(父亲/母亲/祖父/祖母/其他,不同颜色)
|
|
|
|
|
|
- **选择孩子功能优化**
|
|
|
|
|
|
- 弹窗+表格+搜索方式替代下拉框
|
|
|
|
|
|
- 支持按姓名搜索、按班级筛选
|
|
|
|
|
|
- 分页加载,支持大量学生数据
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 家长管理页面重复变量声明错误 - 合并重复代码块
|
|
|
|
|
|
- 学生选择表格行选择类型错误 - 修正 onChange 参数类型
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- 孩子列表显示关系标签,格式为"关系:XX"
|
|
|
|
|
|
- 不同关系使用不同颜色标签区分
|
|
|
|
|
|
- 移除未使用的代码(allStudents、loadAllStudents、availableStudents)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-23]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- **学校端任务管理 API**
|
|
|
|
|
|
- SchoolTask、TaskCompletion 类型定义
|
|
|
|
|
|
- getSchoolTasks、createSchoolTask、updateSchoolTask、deleteSchoolTask
|
|
|
|
|
|
- getSchoolTaskCompletions 获取任务完成情况
|
|
|
|
|
|
- **学校端导航菜单二级结构**
|
|
|
|
|
|
- 人员管理:教师管理、学生管理、班级管理
|
|
|
|
|
|
- 教学管理:课程管理、课程排期、阅读任务、任务模板、课程反馈
|
|
|
|
|
|
- 数据中心:数据报告、成长档案
|
|
|
|
|
|
- 系统管理:套餐管理、操作日志、系统设置
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 学校端任务列表无法加载数据 - 补全 API 函数和类型定义
|
|
|
|
|
|
- 教师端上课记录缺少布置任务入口 - 添加"课后记录"按钮跳转
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- 学校端导航菜单重构:14个扁平菜单 → 5个一级菜单 + 子菜单
|
|
|
|
|
|
- 移除所有 Emoji 图标,使用 Ant Design Vue 图标组件
|
|
|
|
|
|
- 添加 UI 规范:禁止使用 Emoji 图标
|
|
|
|
|
|
|
|
|
|
|
|
### 功能确认(已实现)
|
|
|
|
|
|
- **P1 数据统计增强** ✅
|
|
|
|
|
|
- 学校端授课统计图表(stats.service.ts)
|
|
|
|
|
|
- 教师端个人统计(teacher-course.service.ts)
|
|
|
|
|
|
- 数据导出功能(export.service.ts)
|
|
|
|
|
|
- **P2 排课功能增强** ✅
|
|
|
|
|
|
- 课程提醒(schedule-notification.service.ts)
|
|
|
|
|
|
- 排课模板(school.service.ts)
|
|
|
|
|
|
- 批量排课(batchCreateSchedules)
|
|
|
|
|
|
- 拖拽调课(CalendarView.vue + fullcalendar)
|
|
|
|
|
|
- **P0 阅读任务模块** ✅
|
|
|
|
|
|
- 家长端任务功能
|
|
|
|
|
|
- 教师端完成情况详情页
|
|
|
|
|
|
- 课后记录→布置任务流程
|
|
|
|
|
|
- **P2/P3 任务模块增强** ✅
|
|
|
|
|
|
- 任务模板功能(TaskTemplate)
|
|
|
|
|
|
- 任务提醒通知(定时任务+手动提醒)
|
|
|
|
|
|
- 任务统计报表
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-22]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 测试记录文档系统 (`/docs/test-logs/`)
|
|
|
|
|
|
- 各端测试记录模板和规范
|
|
|
|
|
|
- **班级管理功能增强**
|
|
|
|
|
|
- 数据模型:ClassTeacher 关联表(支持多教师协作)、StudentClassHistory 调班历史表
|
|
|
|
|
|
- 学校端:班级教师团队管理(添加/编辑/移除教师,设置角色和班主任)
|
|
|
|
|
|
- 学校端:学生调班功能(选择目标班级、填写原因、查看调班历史)
|
|
|
|
|
|
- 教师端:班级角色显示(主班/配班/保育员标签、班主任标记)
|
|
|
|
|
|
- **超管端功能完善**
|
|
|
|
|
|
- 租户管理完整功能(CRUD、配额调整、密码重置、状态管理)
|
|
|
|
|
|
- 系统设置后端API
|
|
|
|
|
|
- 数据看板图表(ECharts:趋势图、统计卡片)
|
|
|
|
|
|
- **展播模式独立页面**
|
|
|
|
|
|
- 新路由 `/teacher/broadcast/:id`
|
|
|
|
|
|
- 新标签页打开,便于教师投屏给学生看的同时自己查看讲稿
|
|
|
|
|
|
- 支持通过 URL 参数 `?step=N` 指定初始环节
|
|
|
|
|
|
- 自动全屏、键盘快捷键支持
|
|
|
|
|
|
- Lucide Vue Next 图标库
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- "投屏模式"改名为"展播模式"
|
|
|
|
|
|
- 移除授课页面冗余的全屏按钮
|
|
|
|
|
|
- 展播页面深色主题设计,高对比度配色,适合课堂投影
|
|
|
|
|
|
|
|
|
|
|
|
### 测试
|
|
|
|
|
|
- 超管端完整功能测试
|
|
|
|
|
|
- 数据看板、资源库管理正常
|
|
|
|
|
|
- 租户管理、系统设置已实现
|
|
|
|
|
|
- 学校端回归测试
|
|
|
|
|
|
- 所有模块正常
|
|
|
|
|
|
- 修复系统设置页面导入错误
|
|
|
|
|
|
- 教师端回归测试
|
|
|
|
|
|
- 所有模块正常
|
|
|
|
|
|
- 家长端功能测试
|
|
|
|
|
|
- 所有模块正常
|
|
|
|
|
|
- **展播模式自动化测试** (Playwright)
|
|
|
|
|
|
- 新标签页打开功能 ✅
|
|
|
|
|
|
- KidsMode 组件显示 ✅
|
|
|
|
|
|
- 导航控制正常 ✅
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 学校端系统设置页面无法加载 - 修复 fileApi 导入方式 (`SettingsView.vue`)
|
|
|
|
|
|
- 租户详情API 500错误 - BigInt转String序列化
|
|
|
|
|
|
- 租户配额显示模板语法错误
|
|
|
|
|
|
- 资源上传响应属性名不匹配
|
|
|
|
|
|
- 文件下载URL未定义
|
|
|
|
|
|
- 课程年级筛选API 500错误 - SQLite JSON查询兼容
|
|
|
|
|
|
- 学生性别统计/显示不一致
|
|
|
|
|
|
- 课程授权后统计未更新
|
|
|
|
|
|
- 课程搜索不工作
|
|
|
|
|
|
- 套餐配额数据不同步
|
|
|
|
|
|
- 学生年龄显示格式异常
|
|
|
|
|
|
- 学生调班API 500错误 - 前端变量名冲突 + 数据库字段约束 (`StudentListView.vue`, `schema.prisma`)
|
|
|
|
|
|
- 学校端导航栏缺少班级管理入口 - 添加菜单项 (`LayoutView.vue`)
|
|
|
|
|
|
- 教师端移除"添加新班级"功能 - 班级创建应由学校管理员操作 (`ClassListView.vue`)
|
|
|
|
|
|
- **PDF资源无法显示** - EbookViewer 使用 embed 标签替代 img 标签 (`EbookViewer.vue`)
|
|
|
|
|
|
|
|
|
|
|
|
### 测试验证
|
|
|
|
|
|
- 班级教师管理功能 - 添加/编辑教师角色 ✅
|
|
|
|
|
|
- 学生调班功能 - 调班操作和历史记录 ✅
|
|
|
|
|
|
- 教师端班级角色显示 - 主班/班主任标签 ✅
|
|
|
|
|
|
- 展播模式新标签页功能 ✅
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-21]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 家长端完整功能
|
|
|
|
|
|
- 登录、孩子信息
|
|
|
|
|
|
- 阅读记录
|
|
|
|
|
|
- 任务查看
|
|
|
|
|
|
- 成长档案
|
|
|
|
|
|
- 通知系统(NotificationBell组件)
|
|
|
|
|
|
- 数据导出功能
|
|
|
|
|
|
- 教师端课程反馈页面
|
|
|
|
|
|
- `GET /teacher/feedbacks` - 反馈列表
|
|
|
|
|
|
- `GET /teacher/feedbacks/stats` - 反馈统计
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 家长登录400错误 - LoginDto 添加 `parent` 角色
|
|
|
|
|
|
- User 接口缺少 `parent` 角色类型
|
|
|
|
|
|
- NotificationBell.vue 未使用的导入
|
|
|
|
|
|
- tagMaps.ts 重复的 ART 属性
|
|
|
|
|
|
- 教师端课程反馈404错误
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-14]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 学校端核心管理模块
|
|
|
|
|
|
- 教师管理 CRUD
|
|
|
|
|
|
- 学生管理 CRUD + 批量导入
|
|
|
|
|
|
- 班级管理
|
|
|
|
|
|
- 统计数据
|
|
|
|
|
|
- 套餐信息
|
|
|
|
|
|
- 教师端首页API
|
|
|
|
|
|
- 今日课程
|
|
|
|
|
|
- 推荐课程
|
|
|
|
|
|
- 本周统计
|
|
|
|
|
|
- P1功能模块
|
|
|
|
|
|
- 资源库管理
|
|
|
|
|
|
- 成长档案
|
|
|
|
|
|
- 阅读任务
|
|
|
|
|
|
- 课程反馈
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 学校端登录失败 - Tenant模型添加 loginAccount/passwordHash
|
|
|
|
|
|
- SQLite不支持@db.Text - 移除注解
|
|
|
|
|
|
- classEntity.lessons不存在 - 使用 lessonCount 替代
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-13]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 课程发布审核流程
|
|
|
|
|
|
- 状态流转:草稿 → 待审核 → 已发布/已驳回
|
|
|
|
|
|
- 发布前完整性验证
|
|
|
|
|
|
- 版本历史快照
|
|
|
|
|
|
- 文件预览功能
|
|
|
|
|
|
- PDF预览(iframe)
|
|
|
|
|
|
- 音视频播放器
|
|
|
|
|
|
- 图片预览
|
|
|
|
|
|
- PPT在线预览
|
|
|
|
|
|
- 逐页脚本自动展开功能
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 课程编辑数据持久化问题
|
|
|
|
|
|
- 课堂计划数据保存/加载
|
|
|
|
|
|
- 延伸活动数据保存/加载
|
|
|
|
|
|
- 测评工具数据保存/加载
|
|
|
|
|
|
- "保存课程"按钮状态错误 - 改为 DRAFT
|
|
|
|
|
|
- 提交审核验证逻辑错误
|
|
|
|
|
|
- PaletteOutlined 图标不存在 - 替换为 BgColorsOutlined
|
|
|
|
|
|
|
|
|
|
|
|
### 优化
|
|
|
|
|
|
- 延伸活动 UI 重新设计(卡片式布局)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-12]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 教师端核心业务流程打通
|
|
|
|
|
|
- 课程中心
|
|
|
|
|
|
- 备课模式
|
|
|
|
|
|
- 上课模式
|
|
|
|
|
|
- 课后记录
|
|
|
|
|
|
- 种子数据脚本
|
|
|
|
|
|
- 超管端课程包发布功能
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 教师端LayoutView编译错误 - JSX语法问题
|
|
|
|
|
|
- 教师端API 404错误 - 模块未编译
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-02-10]
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 文件上传系统重构
|
|
|
|
|
|
- FormData文件上传
|
|
|
|
|
|
- Multer处理multipart/form-data
|
|
|
|
|
|
- 本地文件系统存储
|
|
|
|
|
|
- 多文件上传支持(每分类15个,单文件200MB)
|
|
|
|
|
|
- 统一启动脚本 (start-all.sh / stop-all.sh)
|
|
|
|
|
|
|
|
|
|
|
|
### 修复
|
|
|
|
|
|
- 封面图片显示文件名问题 - 静态文件路径配置
|
|
|
|
|
|
- 中文文件名乱码 - 安全文件名生成
|
|
|
|
|
|
- Vue编译错误 - 重复函数声明
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## [2026-01-29] - 项目启动
|
|
|
|
|
|
|
|
|
|
|
|
### 新增
|
|
|
|
|
|
- 项目初始化
|
|
|
|
|
|
- 技术选型确定
|
|
|
|
|
|
- 数据库模型设计(15张表)
|
|
|
|
|
|
- 认证系统基础框架
|
|
|
|
|
|
- 四端页面框架
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 版本说明
|
|
|
|
|
|
|
|
|
|
|
|
- **[Unreleased]**: 开发中功能
|
|
|
|
|
|
- **[日期]**: 当天发布的版本
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
*本变更日志从 2026-02-22 开始规范化维护。*
|