diff --git a/.claude/plans/imperative-honking-kazoo.md b/.claude/plans/imperative-honking-kazoo.md
new file mode 100644
index 0000000..538f1cf
--- /dev/null
+++ b/.claude/plans/imperative-honking-kazoo.md
@@ -0,0 +1,100 @@
+# 学校端家长管理"选择孩子"列表字段完善计划
+
+## 问题背景
+
+学校端家长管理页面中的"选择孩子"弹窗列表(用于将学生关联到家长)缺少两个关键字段的显示:
+1. **性别** (gender) - 学生性别
+2. **所属班级** (className) - 学生所在班级名称
+
+## 问题分析
+
+通过代码审查发现:
+
+### 1. 前端代码 (`ParentListView.vue`)
+- 第 597-601 行定义了表格列,期望显示 `gender` 和 `className`:
+```typescript
+const studentTableColumns = [
+ { title: '姓名', dataIndex: 'name', key: 'name', width: 120 },
+ { title: '性别', dataIndex: 'gender', key: 'gender', width: 80 },
+ { title: '班级', dataIndex: 'className', key: 'className', width: 120 },
+];
+```
+
+### 2. 后端代码 (`SchoolStudentController.java`)
+- 第 89-119 行的 `getStudentPage` 方法返回学生列表
+- 目前只设置了 `classId`,未设置 `className`
+
+### 3. DTO (`StudentResponse.java`)
+- 有 `gender` 字段(第 29 行)✅
+- 有 `classId` 字段(第 56 行)✅
+- **缺少 `className` 字段** ❌
+
+### 4. 实体类 (`Student.java`)
+- 有 `gender` 字段(第 26 行)✅
+
+## 根本原因
+
+1. `StudentResponse` DTO 缺少 `className` 字段
+2. Controller 中只查询和设置了 `classId`,没有查询班级名称并设置 `className`
+
+## 修改方案
+
+### 1. 添加 `className` 字段到 `StudentResponse`
+
+**文件**: `reading-platform-java/src/main/java/com/reading/platform/dto/response/StudentResponse.java`
+
+在 `classId` 字段后添加 `className` 字段:
+```java
+@Schema(description = "所在班级 ID")
+private Long classId;
+
+@Schema(description = "所在班级名称")
+private String className;
+```
+
+### 2. 在 Controller 中设置 `className`
+
+**文件**: `reading-platform-java/src/main/java/com/reading/platform/controller/school/SchoolStudentController.java`
+
+修改 `getStudentPage` 方法(第 100-118 行):
+```java
+for (StudentResponse vo : voList) {
+ // 设置班级
+ var clazz = classService.getPrimaryClassByStudentId(vo.getId());
+ vo.setClassId(clazz != null ? clazz.getId() : null);
+ vo.setClassName(clazz != null ? clazz.getName() : null); // 新增
+
+ // ... 其余代码不变
+}
+```
+
+同样修改 `getStudent` 方法(第 66-86 行),添加 `className` 的设置。
+
+### 3. 验证 `gender` 字段
+
+`gender` 字段应该已通过 MapStruct 自动映射。如果前端仍不显示,需要检查:
+- 数据库中 `gender` 字段是否有值
+- Mapper 是否正确映射了该字段
+
+## 关键文件列表
+
+| 文件路径 | 修改类型 | 说明 |
+|---------|---------|------|
+| `reading-platform-java/src/main/java/com/reading/platform/dto/response/StudentResponse.java` | 修改 | 添加 `className` 字段 |
+| `reading-platform-java/src/main/java/com/reading/platform/controller/school/SchoolStudentController.java` | 修改 | 设置 `className` 字段值 |
+
+## 验证步骤
+
+1. 启动后端服务
+2. 进入学校端家长管理页面
+3. 点击任意家长的"孩子"按钮打开管理弹窗
+4. 点击"添加孩子"打开选择学生弹窗
+5. 验证表格中是否正确显示:
+ - 性别列(男/女)
+ - 班级列(班级名称)
+
+## 风险评估
+
+- **低风险**:只是添加一个返回字段,不影响现有功能
+- **向后兼容**:前端已准备好接收这些字段,不会破坏现有功能
+
diff --git a/reading-platform-frontend/.env.development b/reading-platform-frontend/.env.development
index dbca012..2c62c58 100644
--- a/reading-platform-frontend/.env.development
+++ b/reading-platform-frontend/.env.development
@@ -1,3 +1,4 @@
VITE_API_BASE_URL=
VITE_APP_TITLE=幼儿阅读教学服务平台
VITE_SERVER_BASE_URL=
+VITE_ENABLE_DEFAULT_ACCOUNT=true
diff --git a/reading-platform-frontend/.env.production b/reading-platform-frontend/.env.production
new file mode 100644
index 0000000..fc45e0d
--- /dev/null
+++ b/reading-platform-frontend/.env.production
@@ -0,0 +1,4 @@
+VITE_API_BASE_URL=
+VITE_APP_TITLE=幼儿阅读教学服务平台
+VITE_SERVER_BASE_URL=
+VITE_ENABLE_DEFAULT_ACCOUNT=false
diff --git a/reading-platform-frontend/.env.test b/reading-platform-frontend/.env.test
index 541b272..02355e7 100644
--- a/reading-platform-frontend/.env.test
+++ b/reading-platform-frontend/.env.test
@@ -1,2 +1,3 @@
VITE_APP_PORT=5174
VITE_BACKEND_PORT=8481
+VITE_ENABLE_DEFAULT_ACCOUNT=true
diff --git a/reading-platform-frontend/src/components/course/FileUploader.vue b/reading-platform-frontend/src/components/course/FileUploader.vue
index b2301e9..f3c3a66 100644
--- a/reading-platform-frontend/src/components/course/FileUploader.vue
+++ b/reading-platform-frontend/src/components/course/FileUploader.vue
@@ -56,7 +56,19 @@
-
+
+
+
图片加载失败
+暂不支持预览此类型文件
@@ -103,6 +115,20 @@ const emit = defineEmits<{ const previewVisible = ref(false); const uploading = ref(false); +// 图片预览加载状态 +const imagePreviewLoading = ref(false); +const imagePreviewLoaded = ref(false); +const imagePreviewError = ref(false); + +// 监听 previewUrl 变化,重置加载状态 +watch(() => previewUrl.value, (newUrl) => { + if (newUrl && props.fileType === 'image') { + imagePreviewLoading.value = true; + imagePreviewLoaded.value = false; + imagePreviewError.value = false; + } +}, { immediate: true }); + const buttonText = computed(() => { const typeMap: Record