kindergarten_java/docs/dev-logs/2026-03-20.md
Claude Opus 4.6 f62aa18e72 feat: 阅读任务模块重写(Phase 1-4)
## 主要变更

### 后端改造 (Phase 1)
- 新增 task_feedback 表存储教师评价
- task 表添加 related_book_name 字段
- task_completion 表添加 video_url, audio_url 字段
- 新增 TaskFeedback 实体和服务层
- 扩展 TaskService 支持完成情况查询和评价功能
- 学校端 API 改为只读模式 (/v1/school/reading-tasks)

### 教师端前端 (Phase 2)
- 创建任务弹窗添加关联绘本字段
- 完成情况弹窗支持新状态值 (PENDING/SUBMITTED/REVIEWED)
- 新增评价弹窗组件(评价结果、评分、评语)
- 显示提交内容预览(照片、视频、音频、文字)

### 家长端前端 (Phase 3)
- 提交功能改造支持照片上传(最多9张)
- 支持视频/音频链接输入
- 阅读心得文字输入
- 新增查看教师评价功能
- 状态驱动操作(待提交/已提交/已评价)

### 学校端前端 (Phase 4)
- 完全重写为只读模式
- 移除创建/编辑/删除功能
- 多维度筛选(关键字、类型、状态、日期、排序)
- 统计卡片(任务数、进行中、已提交、已评价)
- 任务详情弹窗
- 完成情况列表弹窗
- 提交详情弹窗

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 14:08:36 +08:00

321 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发日志 - 2026-03-20
## 阅读任务模块重写 Phase 1 - 后端基础改造
### 完成的工作
#### 1. 数据库迁移脚本
- 文件: `V43__add_reading_task_features.sql`
- 创建 `task_feedback` 表(评价表)
-`task` 表添加 `related_book_name` 字段
-`task_completion` 表添加 `video_url`, `audio_url` 字段
#### 2. 实体类
- `TaskFeedback.java` - 新增评价实体
- `Task.java` - 添加 `relatedBookName` 字段(已存在)
- `TaskCompletion.java` - 添加新字段(已存在)
#### 3. DTO
- `TaskFeedbackRequest.java` - 评价请求 DTO
- `TaskFeedbackResponse.java` - 评价响应 DTO
- `TaskCompletionDetailResponse.java` - 完成详情响应 DTO
- `TaskSubmitRequest.java` - 家长提交请求 DTO
#### 4. Service 层
**新增**:
- `TaskFeedbackService.java` - 评价服务接口
- `TaskFeedbackServiceImpl.java` - 评价服务实现
**扩展**:
- `TaskService.java` - 添加以下方法:
- `getTaskCompletions()` - 获取任务完成情况列表
- `getCompletionDetail()` - 获取提交详情
- `submitTaskCompletion()` - 家长提交任务完成
- `getSchoolTaskList()` - 学校端任务列表(多维度筛选)
- `getTaskDetailForSchool()` - 学校端任务详情
- `ClassService.java` - 添加:
- `getPrimaryClassByStudentId()` - 获取学生当前所在班级
#### 5. Controller 层
**教师端** (`TeacherTaskController.java`):
- `GET /api/v1/teacher/tasks/{taskId}/completions` - 完成情况列表
- `GET /api/v1/teacher/tasks/completions/{completionId}` - 提交详情
- `POST /api/v1/teacher/tasks/completions/{completionId}/feedback` - 提交评价
- `PUT /api/v1/teacher/tasks/completions/{completionId}/feedback` - 修改评价
**家长端** (`ParentTaskController.java`):
- `POST /api/v1/parent/tasks/{taskId}/submit` - 提交任务完成
- `PUT /api/v1/parent/tasks/{taskId}/submit` - 修改提交
- `GET /api/v1/parent/tasks/completions/{completionId}/feedback` - 获取评价
- `GET /api/v1/parent/tasks/completions/{completionId}` - 获取提交详情
**学校端** (`SchoolTaskController.java`) - **完全重写为只读**:
- `GET /api/v1/school/reading-tasks` - 任务列表(多维度筛选)
- `GET /api/v1/school/reading-tasks/{taskId}` - 任务详情
- `GET /api/v1/school/reading-tasks/{taskId}/completions` - 完成情况列表
- `GET /api/v1/school/reading-tasks/completions/{completionId}` - 学生提交详情
- `GET /api/v1/school/reading-tasks/statistics` - 统计数据TODO
**移除的学校端 API**:
- ~~POST 创建任务~~
- ~~PUT 更新任务~~
- ~~DELETE 删除任务~~
### 关键设计决策
1. **学校端只读**: 学校端 API 路径从 `/api/v1/school/tasks` 改为 `/api/v1/school/reading-tasks`,完全只读
2. **评价结果枚举**: `EXCELLENT`(优秀)/ `PASSED`(通过)/ `NEEDS_WORK`(需改进)
3. **完成状态**: `PENDING`(待提交)/ `SUBMITTED`(已提交)/ `REVIEWED`(已评价)
4. **文件存储**: 继续使用现有 OSS照片以 JSON 数组存储
---
## 阅读任务模块重写 Phase 2 - 教师端前端改造 ✅
### 完成的工作
#### 1. API 类型更新 (`src/api/teacher.ts`)
- 更新 `TaskCompletion` 接口添加新字段:
- `photos: string[]` - 照片列表
- `videoUrl: string` - 视频链接
- `audioUrl: string` - 音频链接
- `content: string` - 提交内容
- `submittedAt: string` - 提交时间
- `reviewedAt: string` - 评价时间
- `feedback: TaskFeedback` - 关联评价
- 添加 `TaskFeedbackDto` 接口(评价请求)
- 添加新 API 函数:
- `getTeacherTaskCompletions()` - 获取完成情况列表
- `getCompletionDetail()` - 获取提交详情
- `submitCompletionFeedback()` - 提交评价
- `updateCompletionFeedback()` - 修改评价
#### 2. TaskListView.vue 改造
**创建任务弹窗**:
- [x] 添加 `relatedBookName`(关联绘本名称)字段
- [x] 编辑任务时加载已有绘本名称
**完成情况弹窗改造**:
- [x] 状态筛选改为新状态值PENDING/SUBMITTED/REVIEWED
- [x] 显示提交内容预览(照片数量、视频、文字内容)
- [x] 统计标签更新为:待提交/已提交/已评价
**评价弹窗组件**:
- [x] 新增评价弹窗 UI
- [x] 提交内容预览区域(照片、视频、音频、文字)
- [x] 评价结果选择(优秀/通过/需改进)
- [x] 评分组件1-5 星)
- [x] 评语输入框
- [x] 支持新建和编辑评价
**状态显示逻辑**:
- [x] `getCompletionStatusColor()` - 新状态颜色映射
- [x] `getCompletionStatusText()` - 新状态文本映射
- [x] `completionStats` computed 使用新状态值
### 文件变更清单
**修改文件**:
- `src/api/teacher.ts` - API 类型和函数
- `src/views/teacher/tasks/TaskListView.vue` - 教师任务管理页面
### TypeScript 编译验证
- `src/views/teacher/tasks/TaskListView.vue` ✅ 无错误
---
## 下一步
### Phase 3: 家长端前端改造
- [ ] 改造提交功能
- [ ] 新增查看评价页面
### Phase 4: 学校端前端重写
- [ ] 重写任务列表页(只读+多维度筛选)
- [ ] 新增任务详情页
- [ ] 新增学生提交详情页
---
## 阅读任务模块重写 Phase 3 - 家长端前端改造 ✅
### 完成的工作
#### 1. API 类型更新 (`src/api/parent.ts`)
- 添加新的类型定义:
- `TaskCompletionStatus` - 完成状态类型
- `FeedbackResult` - 评价结果类型
- `TeacherFeedback` - 教师评价接口
- `TaskCompletion` - 任务完成记录接口
- `TaskSubmitRequest` - 提交请求接口
- 更新 `TaskWithCompletion` 接口添加新字段:
- `photos: string[]` - 照片列表
- `videoUrl: string` - 视频链接
- `audioUrl: string` - 音频链接
- `content: string` - 提交内容
- `submittedAt: string` - 提交时间
- `reviewedAt: string` - 评价时间
- `teacherFeedback: TeacherFeedback` - 教师评价
- 添加新 API 函数:
- `submitTaskCompletion()` - 提交任务完成
- `updateTaskCompletion()` - 修改提交
- `getCompletionDetail()` - 获取提交详情
- `getCompletionFeedback()` - 获取教师评价
#### 2. TaskListView.vue 完全重写
**任务卡片展示**:
- [x] 显示关联绘本名称
- [x] 状态标签更新为新状态(待提交/已提交/已评价)
- [x] 已提交内容预览(照片数量、视频、音频、文字)
- [x] 教师评价显示区域(评价结果、评分、评语)
**提交功能改造**:
- [x] 照片上传最多9张
- [x] 视频链接输入
- [x] 音频链接输入
- [x] 阅读心得文字输入
- [x] 支持新建和修改提交
**查看评价功能**:
- [x] 评价详情弹窗
- [x] 评价结果展示(优秀/通过/需改进)
- [x] 评分显示1-5星
- [x] 教师评语展示
- [x] 提交内容回顾(照片网格、链接、文字)
- [x] 图片预览功能
**状态驱动操作**:
- [x] 待提交状态 → 显示"提交完成"按钮
- [x] 已提交状态 → 显示"修改提交"按钮
- [x] 已评价状态 → 显示"查看评价详情"按钮
### 文件变更清单
**修改文件**:
- `src/api/parent.ts` - API 类型和函数
- `src/views/parent/tasks/TaskListView.vue` - 家长任务管理页面
### TypeScript 编译验证
- `src/api/parent.ts` ✅ 无错误
- `src/views/parent/tasks/TaskListView.vue` ✅ 无错误
---
## 阅读任务模块重写 Phase 4 - 学校端前端重写 ✅
### 完成的工作
#### 1. API 层更新 (`src/api/school.ts`)
**新增只读接口类型**:
- `TaskCompletionStatus` - 完成状态PENDING/SUBMITTED/REVIEWED
- `FeedbackResult` - 评价结果EXCELLENT/PASSED/NEEDS_WORK
- `TaskTeacherFeedback` - 教师评价接口
- `TaskCompletionRecord` - 任务完成记录(新设计)
- `SchoolTaskQueryParams` - 多维度筛选参数
**新增 API 函数**:
- `getReadingTaskList()` - 获取任务列表(多维度筛选)
- `getReadingTaskDetail()` - 获取任务详情
- `getReadingTaskCompletions()` - 获取完成情况列表
- `getCompletionDetail()` - 获取提交详情
**保留旧接口**: 保留 create/update/delete 函数以保持向后兼容
#### 2. TaskListView.vue 完全重写(只读模式)
**移除的功能**:
- ❌ 创建任务
- ❌ 编辑任务
- ❌ 删除任务
- ❌ 发布任务按钮
**新增/改进的功能**:
**统计卡片**:
- [x] 全部任务数
- [x] 进行中任务数
- [x] 已提交数量
- [x] 已评价数量
**多维度筛选**:
- [x] 关键字搜索
- [x] 任务类型筛选(阅读/活动/作业)
- [x] 任务状态筛选(进行中/草稿/已归档)
- [x] 日期范围筛选
- [x] 排序方式选择
**任务列表**:
- [x] 卡片式展示
- [x] 显示关联绘本名称
- [x] 显示创建人
- [x] 完成情况统计(待提交/已提交/已评价)
- [x] 完成率进度条
- [x] 点击查看详情
**任务详情弹窗**:
- [x] 基本信息(类型、状态、时间等)
- [x] 关联绘本
- [x] 完成情况统计
- [x] 查看完成列表入口
**完成情况列表弹窗**:
- [x] 学生信息(姓名、班级、头像)
- [x] 状态标签
- [x] 提交内容预览(照片数量、视频、音频)
- [x] 教师评价显示
- [x] 筛选和分页
- [x] 查看详情按钮
**提交详情弹窗**:
- [x] 学生信息卡片
- [x] 提交状态显示
- [x] 照片网格展示(支持预览)
- [x] 视频/音频链接
- [x] 阅读心得文字
- [x] 提交时间
- [x] 教师评价详情(结果、评分、评语)
- [x] 评价时间
### 文件变更清单
**修改文件**:
- `src/api/school.ts` - 新增只读接口类型和函数
- `src/views/school/tasks/TaskListView.vue` - 完全重写为只读模式
### TypeScript 编译验证
- `src/api/school.ts` ✅ 无错误
- `src/views/school/tasks/TaskListView.vue` ✅ 无错误
---
## 总结
### 阅读任务模块重写全部完成 ✅
| Phase | 端 | 状态 |
|-------|-----|------|
| Phase 1 | 后端基础改造 | ✅ 完成 |
| Phase 2 | 教师端前端 | ✅ 完成 |
| Phase 3 | 家长端前端 | ✅ 完成 |
| Phase 4 | 学校端前端 | ✅ 完成 |
### 关键设计决策
1. **学校端只读**: 学校端 API 路径改为 `/api/v1/school/reading-tasks`,完全只读
2. **新状态值**: `PENDING``SUBMITTED``REVIEWED`
3. **评价结果**: `EXCELLENT`(优秀)/ `PASSED`(通过)/ `NEEDS_WORK`(需改进)
4. **多维度筛选**: 支持关键字、类型、状态、日期范围、排序等筛选条件
---
*Last updated: 2026-03-20 19:30*