Commit Graph

172 Commits

Author SHA1 Message Date
En
dfbf89e8fe feat: 实现多地点登录支持
主要变更:
- 修改 JwtTokenRedisService.validateToken() 方法,移除 token 一致性检查
- 在 JwtAuthenticationFilter 中新增 isAccountActive() 方法,每次请求验证账户状态
- 所有状态判断改为忽略大小写 (equalsIgnoreCase)
- 保留黑名单机制用于主动踢人、登出等场景

功能特性:
- 同一账号可以在多个设备/浏览器同时登录
- 各个登录状态的 token 都有效,不会互踢下线
- 支持所有角色:admin, school, teacher, parent
- JWT token 过期时间(默认 24 小时)保证安全性

修改文件:
- JwtTokenRedisService.java
- JwtAuthenticationFilter.java
- AuthServiceImpl.java

文档更新:
- docs/CHANGELOG.md
- docs/dev-logs/2026-03-17.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 12:13:21 +08:00
zhonghua
a9ee650f66 fix: 上课页面数据与进度保存优化
- 授课记录详情接口返回完整课程和班级:新增 LessonDetailResponse,含 course(courseLessons+steps)、class
- 课程环节增加 steps:CourseLessonResponse 新增 steps 字段,getCourseByIdWithLessons 填充教学步骤
- 进度保存反序列化修复:LessonProgressRequest 的 lessonIds/completedLessonIds 改为 List<Long>,progressData 改为 Object
- LessonStepResponse 增加 NoArgsConstructor/AllArgsConstructor

Made-with: Cursor
2026-03-17 11:40:04 +08:00
zhonghua
c8ecbe277c fix: 教师端课程与授课记录优化
- 修复 assessment_data JSON 字段:普通文本自动包装为有效 JSON
- 修复返回时页面 ID 丢失:校验无效 ID 并跳转,goBackToDetail 优先使用路由 ID
- 修复上课记录列表:getLessons 支持 pageNum、日期范围、状态映射,list 转 items
- 修复班级与课程取值:LessonResponse 增加 courseName/className,接口返回时自动填充
- 备课/详情页增加 ID 校验,防止跳转到 undefined

Made-with: Cursor
2026-03-17 11:24:25 +08:00
Claude Opus 4.6
1d8f040681 Merge remote-tracking branch 'origin/master' 2026-03-17 10:39:43 +08:00
En
e8b44b25e0 优化 2026-03-17 10:38:51 +08:00
En
7b54b29821 fix: 修复课程包审核管理按状态查询不生效问题
- AdminCourseController.getCoursePage 方法添加 status 和 reviewOnly 参数接收
- 修复前端按审核状态过滤时后端无法接收参数的问题
- Service 层已支持参数处理(无需修改)

相关文件:reading-platform-java/.../controller/admin/AdminCourseController.java
2026-03-17 10:33:40 +08:00
Claude Opus 4.6
d0439bc8b5 Merge remote-tracking branch 'origin/master' 2026-03-17 10:29:50 +08:00
En
113994238b Merge remote-tracking branch 'origin/master' 2026-03-17 10:27:33 +08:00
Claude Opus 4.6
1a79fef30f Merge remote-tracking branch 'origin/master' 2026-03-17 10:22:02 +08:00
En
4d4e042c22 fix: 修复 Flyway V13 迁移失败问题与后端启动故障
问题原因:
- Flyway V13/V14/V15 迁移脚本使用了 MySQL 不支持的语法
- 导致数据库迁移失败,后端无法启动

修复内容:
1. 修正 V13/V14/V15 Flyway 迁移脚本
2. 更新 Entity 类添加缺失字段
3. 新增教师端 Service 服务层
4. 新增教师端 DTO 请求/响应类
5. 更新 TeacherController 相关接口

新增文件:
- TaskTemplateService/Impl
- TeacherFeedbackService/Impl
- TeacherScheduleService/Impl
- 7 个 Request DTO
- 1 个 Response DTO

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 10:08:24 +08:00
zhonghua
03726b5ab8 样式优化 2026-03-17 09:56:38 +08:00
zhonghua
4e17ee281c 在线文档支持 2026-03-16 20:06:56 +08:00
En
ce7ee34666 feat: 集成阿里云 IMM (即时媒体服务) 与 OSS 跨域配置优化
主要变更:
- 新增阿里云 IMM SDK 依赖 (imm20200930 v1.28.3)
- 新增 IMM 配置类 (ImmConfig, ImmUtil, ImmController, ImmTokenVo)
- 新增前端 API 生成文件 (imm.api.ts)
- 更新 WebOffice.vue 使用新的 imm.api 导入

配置优化:
- 三环境 (dev/test/prod) 均开启 OSS CORS 跨域支持
- 添加 IMM 服务配置 (endpoint, region, project, 密钥)
- 测试/开发环境跨域域名设置为通配符

技术栈:
- 后端:Spring Boot + 阿里云 IMM SDK
- 前端:Vue 3 + TypeScript API 生成

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 19:35:31 +08:00
zhonghua
709e59e142 feat: 展播模式优化与排课表修复
- 展播模式:空状态/错误状态添加返回上课按钮
- 展播模式:退出时自动跳转回上课页面或关闭标签页
- 数据库:lesson表id添加AUTO_INCREMENT,修复预约上课报错

Made-with: Cursor
2026-03-16 19:22:06 +08:00
zhonghua
50efe68f62 代码调试 2026-03-16 19:04:28 +08:00
zhonghua
a7e22ff35b 文件直传优化 2026-03-16 18:46:16 +08:00
En
e7348656ff feat: 更新 FileUploader 组件和生成的 API 类型
- 更新 FileUploader.vue 组件
- 更新组件类型定义
- 更新 API 生成的类型定义

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 18:15:34 +08:00
En
a1dcd529ef feat: 实现 OSS 直传功能
后端实现:
- 新增 OssTokenVo 响应类
- 修改 OssUtils 支持生成 OSS 直传 Token
- 修改 FileUploadController 添加 /oss/token 接口
- 修改 SecurityConfig 配置 OSS 相关接口权限
- 更新多环境 OSS 配置

前端实现:
- 新增 env.ts 工具函数,支持环境前缀
- file.ts 新增 getOssToken 和 uploadToOss 方法
- 修改 uploadFile 方法使用 OSS 直传

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 18:13:56 +08:00
En
f1bb1447bb feat: 前端 uploadFile 接口改为 OSS 直传
- 修改 uploadFile 方法使用 OSS 直传方式上传
- 新增 getOssToken 和 uploadToOss 方法
- 返回格式保持兼容,filePath 返回 OSS 完整 URL
- 自动添加环境前缀 (dev/test/prod)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 18:11:07 +08:00
zhonghua
d72e85f71a 添加logo 2026-03-16 17:49:09 +08:00
En
a766222733 refactor: 消除课程和套餐状态魔法值,统一使用 CourseStatus 枚举
- 完善 CourseStatus 枚举值:DRAFT, PENDING, REJECTED, PUBLISHED, ARCHIVED, APPROVED
- 替换 CoursePackageService 中的魔法值为 CourseStatus 枚举
- 替换 CourseServiceImpl 中的魔法值为 CourseStatus 枚举
- 替换 TeacherStatsServiceImpl 中的魔法值为 CourseStatus 枚举
- 适配前端状态值,使用大写枚举值

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 16:04:26 +08:00
En
05d075eefc refactor: 代码优化和资源表修复
- 修复 CourseStatus 枚举
- 优化 CourseServiceImpl 和 TeacherStatsServiceImpl
- 修复资源表迁移脚本
- 更新开发日志

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:36:09 +08:00
zhonghua
4a713c41d3 chore: 隐藏通知设置及顶部通知铃铛
- 学校端系统设置:移除通知设置卡片
- 超管端系统设置:移除通知设置标签页
- 各端 Layout:移除顶部通知铃铛图标

Made-with: Cursor
2026-03-16 15:32:19 +08:00
En
2e68b99975 refactor: 将 ORM 实体类 ID 改为数据库自增
- 修改 BaseEntity 的 @TableId 从 ASSIGN_ID 改为 AUTO
- 创建 V11 迁移脚本将所有表的 id 列改为 AUTO_INCREMENT

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:31:41 +08:00
zhonghua
7e96b80a38 Merge branch 'master' of http://8.148.151.56:3000/tonytech/kindergarten_java 2026-03-16 15:28:49 +08:00
zhonghua
1f6bd41b64 删除自动化一键登录按钮 2026-03-16 15:28:45 +08:00
En
57f9c804c9 fix: 登录验证错误信息传递修复
- JwtTokenProvider 新增 validateTokenWithReason 方法,返回具体错误原因
- JwtAuthenticationFilter token 验证失败时返回 401 错误响应
- 前端 axios 拦截器增强 403 处理,区分 token 过期和权限不足场景

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:26:37 +08:00
zhonghua
f25664cf9a feat: 实现各端个人信息功能
- 新增 ProfileView 共享个人信息页面
- 扩展 auth API UserProfile 支持各角色
- 为 admin/school/teacher/parent 添加 profile 路由
- 各端 Layout 用户菜单增加个人信息入口及跳转
- 家长端移动版抽屉菜单增加个人信息入口

Made-with: Cursor
2026-03-16 15:04:48 +08:00
zhonghua
23eab43590 fix(teacher): 教师端多项修复
- 课程中心: 修复搜索框重复图标、页面无数据、gradeTags/domainTags 解析
- 备课/上课: 课程/授课 ID 使用 string 避免 Long 精度丢失
- 预约上课: 补充 teacherId/title/lessonDate 等必填字段
- 备课模式: 解析 gradeTags 字符串修复 translateGradeTags 报错
- 涉及: CourseListView, PrepareModeView, LessonView, BroadcastView, LessonRecordsView

Made-with: Cursor
2026-03-16 14:54:18 +08:00
zhonghua
b6e46ba21e fix(school): 修复搜索框重复显示两个搜索图标
- 移除 a-input-search 的 #prefix 插槽(组件自带搜索按钮)
- 涉及:课程管理、教师/学生/家长/班级管理

Made-with: Cursor
2026-03-16 14:36:24 +08:00
zhonghua
73ff311370 搜索框样式调整 2026-03-16 14:33:13 +08:00
zhonghua
0777d2901a Merge branch 'master' of http://8.148.151.56:3000/tonytech/kindergarten_java 2026-03-16 14:25:32 +08:00
zhonghua
6b65bd656f fix(school): 校园端页面添加内边距,与其他端保持一致
- 为 Dashboard、教师/学生/家长/班级管理、课程、反馈、报告、成长档案、设置等页面添加 padding: 24px
- 任务、排期、课表、操作日志等页面补充 padding 与背景样式
- 课程详情、校本课程包详情页添加内边距
- 统一校园端内容区视觉与 admin/teacher 端一致

Made-with: Cursor
2026-03-16 14:25:05 +08:00
En
928f1b7afe redis添加密码 2026-03-16 14:24:17 +08:00
En
43095f97af fix: 课程创建功能调试和测试脚本优化
前端:
- CourseEditView 添加调试日志,修复创建课程后跳转逻辑(window.location.href → router.push)
- E2E 测试脚本增加日志监听和更精确的选择器
- 优化测试等待时间和元素定位逻辑
- helpers.ts 增强登录流程日志

后端:
- AdminCourseController 添加日志记录,简化课程列表查询参数
- CourseServiceImpl 添加课程创建日志

配置:
- application-dev.yml 修改为本地数据库配置(192.168.1.250)
- application-test.yml 同步使用本地数据库

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:17:11 +08:00
zhonghua
8956f0b790 fix: 课程包管理详情 - 修复大整数 ID 精度丢失,使用 string 传递避免课程不存在
Made-with: Cursor
2026-03-16 14:13:59 +08:00
zhonghua
3918ccc9af 字段读取优化 2026-03-16 13:53:44 +08:00
zhonghua
87899886d1 feat: 套餐审核管理 - 审核页面、驳回可重新编辑提交、审核页已驳回不允许审核
Made-with: Cursor
2026-03-16 13:43:14 +08:00
zhonghua
f5de4e613d fix: 课程套餐管理详情修复 - Long 序列化为 String 避免 JS 精度丢失,修复 PUT 课程列表 JSON 格式
Made-with: Cursor
2026-03-16 11:53:27 +08:00
zhonghua
691e0248a2 fix: 课程包管理审核页面优化
- 修复 list/items 数据格式转换,解决暂无数据问题
- 新增课程驳回接口 POST /api/v1/admin/courses/{id}/reject
- 审核页仅返回待审核和已驳回(reviewOnly),排除已通过
- 修复状态筛选、自动检查列逻辑
- 后端支持 status 和 reviewOnly 参数

Made-with: Cursor
2026-03-16 11:08:27 +08:00
zhonghua
3fba64958c fix: AdminCourseController 添加 @Slf4j 注解修复 log 编译错误
Made-with: Cursor
2026-03-16 10:50:50 +08:00
zhonghua
a461f58d3a fix: orval API 生成优化 - 修复 oneOf schema 验证错误
- 新增 scripts/fetch-openapi.js:拉取并修复 OpenAPI 文档
- 内联 ResultObject[] 的 \,移除非法 schema 名
- orval 使用本地 openapi.json,api:update 自动执行 api:fetch
- AdminStatsController: Result<Object[]> 改为 Result<List<Map<String, Object>>>
- .gitignore: 忽略 openapi.json

Made-with: Cursor
2026-03-16 10:45:15 +08:00
En
938503f2b8 chore: 更新启动脚本使用 Java (Spring Boot) 后端
- 修改后端目录从 reading-platform-backend 改为 reading-platform-java
- 修改后端端口从 3000 改为 8080
- 修改启动命令从 npm run start:dev 改为 mvn spring-boot:run
- 添加 JAVA_HOME 自动检测和设置(默认使用 /f/Java/jdk-17)
- 修改日志文件从 reading-platform-backend.log 改为 reading-platform-java.log
- 修改健康检查接口为 /actuator/health
- 增加启动等待超时时间到 60 秒(Java 启动较慢)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 10:35:30 +08:00
En
6e11c874d2 chore: 忽略 target 目录和 .class 文件
- 添加 target/ 到 .gitignore
- 从 git 暂存区移除已追踪的 target 目录

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:50:54 +08:00
En
1aec778dd6 fix: 修复教师端成长档案列表 loading 问题
- 删除 teacher.ts 中重复的 getTeacherCourseUsage 导出
- 修复 GrowthRecordView.vue 中字段名不匹配:items -> list

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:36:57 +08:00
En
1fb6488468 test: 学校端 E2E 测试全部通过 - 修复菜单点击和退出登录问题
修复的问题:
- 二级菜单点击问题:使用 page.evaluate() 绕过 Playwright 可见性检查
- 页面标题断言严格模式冲突:使用 getByRole('heading').first()
- 退出登录功能:增强 logout() 函数,支持多种退出方式

测试结果:
- 69 个测试全部通过
- 1 个测试跳过(通知管理 - 学校端无此菜单)
- 执行时间:8.3 分钟

修改的文件:
- tests/e2e/school/helpers.ts - 修复 clickSubMenu 和 logout 函数
- tests/e2e/school/04-students.spec.ts - 修复页面标题断言
- tests/e2e/school/05-teachers.spec.ts - 修复页面标题断言
- tests/e2e/school/99-logout.spec.ts - 使用增强的 logout 函数

文档更新:
- docs/dev-logs/2026-03-14.md - 更新测试结果
- docs/CHANGELOG.md - 添加学校端测试记录
- docs/test-logs/school/2026-03-14-school-e2e-full-pass.md - 详细测试报告

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:25:38 +08:00
Claude Opus 4.6
56e839f99a docs: 更新今日开发日志和测试记录
- 新增第4节:代码合规性审查与重构(P0/P1/P2修复)
- 新增第5节:Playwright自动化测试
- 新增自动化测试记录文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 15:36:18 +08:00
Claude Opus 4.6
c0b465dcea docs: 更新CHANGELOG - 记录代码合规性审查修复
- P0 三层架构违规修复(4项)
- P1 API 路径统一(8项)
- P2 文档规范更新(5项)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:14:51 +08:00
Claude Opus 4.6
066b1f2257 refactor: 代码合规性审查修复 - 三层架构、API路径、文档规范
## P0 三层架构违规修复 (4项)
- 创建 SchoolStatsService/TeacherStatsService,移除Controller直接调用Mapper
- 修复 AdminCourseController 使用 Service 层方法
- 修复 TeacherCourseController 使用 ClassService 获取班级
- 新增 ClassService.getActiveClassesByTenantId()
- 新增 CourseService.createSystemCourse()

## P1 API 路径统一 (8项)
后端路径统一为 /api/v1/admin/*:
- AdminCourseController: /api/admin/courses → /api/v1/admin/courses
- AdminTenantController: /api/admin/tenants → /api/v1/admin/tenants

前端配置调整:
- vite.config.ts: 移除代理重写规则
- src/api/index.ts: baseURL /api/v1 → /api
- 更新 admin.ts, lesson.ts, package.ts, theme.ts 使用 /v1/admin/* 路径

## P2 文档规范更新 (5项)
- 更新 CLAUDE.md 前端 API 调用文档
- 新增三种调用方式说明(http/适配层/Orval客户端)
- 新增 API 路径规范表格
- 更新前端目录结构说明

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:13:46 +08:00
Claude Opus 4.6
56508eb066 feat: 三端全链路测试完成 - 学校端、教师端、课程包业务
## 后端修复
- 修复教师端课程查询 - 包含系统课程和租户课程
- 修复系统课程创建 - isSystem 标志正确保存到数据库
- 新增套餐授权接口 POST /api/v1/admin/packages/{id}/grant

## 新增 Controller
- SchoolStatsController - 学校端统计数据
- SchoolCourseController - 学校端课程管理
- TeacherStatsController - 教师端统计数据

## 前端修复
- 修复 API 客户端导入 - getApi → getReadingPlatformAPI
- 修复三端 API 调用方法名
- 更新 Orval 生成配置和 API 类型
- 修复学校端视图 - result.items → result.list

## 测试结果
-  超管端:课程创建/发布、套餐完整流程、授权
-  学校端:登录、统计、课程、套餐查看
-  教师端:登录、Dashboard、班级、课程查看

## 文档更新
- 新增测试记录:/docs/test-logs/
- 更新 CHANGELOG.md
- 更新今日开发日志

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:48:28 +08:00