79e90410dd
refactor: 替换 Lesson 状态魔法值为 LessonStatus 枚举
...
- 将 LessonServiceImpl 中所有状态魔法值替换为 LessonStatus 枚举
- 提升代码可维护性和类型安全
2026-03-20 11:04:10 +08:00
zhonghua
f90037dd17
feat: 根据排课lessonType直接进入子课程,子课程结束即上课结束;右侧添加课程类型展示
...
- 后端:LessonDetailResponse 新增 lessonType,从 SchedulePlan 读取
- 前端:根据 lessonType 直接进入对应子课程,子课程结束即上课结束
- 前端:右侧面板课程资源上方添加课程类型标签展示
Made-with: Cursor
2026-03-20 10:56:41 +08:00
a054c410c2
refactor: 学校端课程响应重构
...
- 将 toSchoolCourseResponse 转换逻辑从 Controller 移到 Response 类
- 使用静态方法引用简化 Controller 代码
- 删除已弃用的文档文件
2026-03-20 09:42:04 +08:00
c3b1056c29
feat: 租户管理与课程套餐优化
...
- 优化租户管理相关接口与实体类
- 更新课程套餐服务层实现
- 新增数据库迁移脚本 V42
- 同步更新前端 API 类型与页面组件
2026-03-19 23:28:40 +08:00
zhonghua
824ce7ad80
feat: 教师端预约上课与学校端新建排课流程一致
...
- 后端:教师可访问课程套餐/课程包/lesson-types API
- 后端:TeacherScheduleServiceImpl 支持 coursePackageId、lessonType
- 前端:新增 TeacherCreateScheduleModal 四步流程(选择课程包→课程类型→班级→时间)
- 前端:ScheduleView 集成新弹窗
- 前端:课程中心 PrepareModeView 预约上课使用相同四步流程,支持预设
Made-with: Cursor
2026-03-19 18:14:25 +08:00
zhonghua
3f6696d7bb
feat: 教师端排课优化
...
- 排课详情/课表:显示班级、课程、课程类型(使用 toSchedulePlanResponse 填充)
- 开始上课:改用 from-schedule API,避免 teacherId/title/lessonDate 校验失败
- 前端:TeacherSchedule 增加 lessonType/coursePackageName,课程展示兼容 coursePackageName
Made-with: Cursor
2026-03-19 18:00:03 +08:00
2b611f6c17
fix(V41): 修复中间表优化迁移脚本(使用存储过程处理不存在的情况)
...
- 使用存储过程和 IF EXISTS 检查来删除索引和字段
- 避免因为索引/字段不存在导致迁移失败
- 创建临时 FlywayCleanerConfig 用于清理失败的 v41 迁移记录
- 成功执行 V41 迁移,优化中间表结构
影响范围:
- course_collection_package: 删除 uk_collection_package 索引和 deleted 字段
- tenant_course: 删除 uk_tenant_course 索引和 deleted 字段
- class_teacher: 删除 deleted 字段
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 17:28:15 +08:00
48172921d7
fix: 修复 V41 迁移脚本的 SQL 语法错误(MySQL 不支持 IF EXISTS)
2026-03-19 16:54:21 +08:00
dad4c14f97
Merge remote-tracking branch 'origin/master'
2026-03-19 16:40:13 +08:00
60213b513d
refactor(entity): 中间表优化 - 移除联合唯一索引和 deleted 字段
...
- CourseCollectionPackage、TenantCourse、ClassTeacher 改为独立实体类
- 不再继承 BaseEntity,移除 deleted 字段,使用物理删除
- 创建 V41 迁移脚本移除联合唯一索引和 deleted 字段
- 更新中间表设计规范到 CLAUDE.md 和统一开发规范.md
refactor(entity): 中间表优化 - 移除联合唯一索引和 deleted 字段
- CourseCollectionPackage、TenantCourse、ClassTeacher 改为独立实体类
- 不再继承 BaseEntity,移除 deleted 字段,使用物理删除
- 创建 V41 迁移脚本移除联合唯一索引和 deleted 字段
- 更新中间表设计规范到 CLAUDE.md 和统一开发规范.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 16:38:51 +08:00
zhonghua
829a70e448
feat: 学校端课程排期功能完善
...
- 排课计划参考:对齐管理端课程包详情,支持时间/课程类型/课程名称/区域活动/备注五列
- 支持两种 schedule_ref_data 格式(周排课表、课程类型说明)
- 新建排课弹窗样式提取为 CreateScheduleModal.scss 修复 SASS 编译错误
- 切换视图(列表/课表/日历)时自动刷新数据
- 排课列表、课表、日历视图增加课程类型 tag 展示
- 后端:timetable/lesson-types 接口修复,LessonTypeEnum 补充类型
Made-with: Cursor
2026-03-19 16:34:48 +08:00
7743ae7a01
优化
2026-03-19 15:38:00 +08:00
a2751d7aa5
Merge remote-tracking branch 'origin/master'
...
# Conflicts:
# reading-platform-java/src/main/java/com/reading/platform/service/CourseLessonService.java
2026-03-19 15:27:03 +08:00
67b87fae73
refactor(service): Service 层重构 - 接口与实现分离
...
重构以下服务类为接口 + 实现类结构,符合三层架构规范:
- CourseCollectionService → CourseCollectionService + CourseCollectionServiceImpl
- CourseLessonService → CourseLessonService + CourseLessonServiceImpl
- ResourceLibraryService → ResourceLibraryService + ResourceLibraryServiceImpl
- ThemeService → ThemeService + ThemeServiceImpl
变更详情:
- 接口继承 IService<Entity>,定义业务方法签名
- 实现类继承 ServiceImpl 并实现对应接口,添加 @Override 注解
- CourseCollectionServiceImpl 注入 CourseLessonService 接口依赖
- FileStorageService 保持原结构(纯工具类无需拆分)
验证:
- mvn compile -DskipTests 编译通过
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 15:08:01 +08:00
zhonghua
f425209abe
feat: 校园端课程列表筛选与卡片展示参考教师端
...
- 筛选栏:年级/领域/课程类型下拉、搜索框,保留授权新课程按钮
- 卡片:新增 lessonTags 展示(导入课、集体课、领域等)
- 后端:学校课程 API 支持 domain、lessonType 参数及 lessonTags 返回
- 主题保持校园端绿色
Made-with: Cursor
2026-03-19 15:07:40 +08:00
zhonghua
20c500e921
feat: 教师课程中心 - 年级/领域/课程类型筛选与 lessonTags 展示
...
- 新增 lessonType 筛选参数,支持 SOCIAL/SOCIETY/DOMAIN_* 等格式兼容
- 列表接口返回 lessonTags(name,lessonType) 供 tag 展示
- 新增 LessonTagResponse DTO
- 完善 tagMaps 与 LESSON_TYPE_NAMES 映射(INTRO/DOMAIN_*)
- 修复筛选参数未传递到接口的问题
Made-with: Cursor
2026-03-19 15:01:13 +08:00
zhonghua
c652cda7a8
fix: 教师端课程包按 学校->套餐->课程包 层级查询
...
- 新增 getTenantPackageCoursePage 方法实现层级分页查询
- TeacherCourseController 使用新方法替代直接按 tenant_id 查询
- 修复 /api/v1/teacher/courses 无数据问题
Made-with: Cursor
2026-03-19 14:20:49 +08:00
zhonghua
ccce7e66bb
feat(school): 教师管理前后端对齐 - 支持loginAccount/classIds字段
...
- TeacherCreateRequest: 添加@JsonAlias(loginAccount)支持前端字段
- TeacherCreateRequest/UpdateRequest: 支持classIds班级分配
- TeacherResponse: 返回loginAccount、classIds、classNames、lessonCount
- 重置密码接口: 自动生成并返回tempPassword
- 创建/更新教师时处理class_teacher关联
Made-with: Cursor
2026-03-19 14:11:41 +08:00
zhonghua
81dd74662e
fix: 修复 /api/v1/school/courses 接口 gradeTags 前端显示数据丢失
...
- 后端: 增强 SchoolCourseController.parseJsonArray 兼容多种 JSON 格式
- 后端: 新增 SchoolCourseResponse,gradeTags/domainTags 规范为 String[]
- 前端: 学校端课程列表/详情统一使用 parseGradeLevels 解析 gradeTags
- 前端: 兼容 grade_tags/domain_tags snake_case 字段
Made-with: Cursor
2026-03-19 14:05:28 +08:00
efedb37cae
Merge remote-tracking branch 'origin/master'
...
# Conflicts:
# reading-platform-frontend/src/views/admin/collections/CollectionEditView.vue
2026-03-19 12:34:35 +08:00
9a9caab60b
feat(db): 添加 V40 迁移脚本删除 tenant_package 表的 package_id 字段
...
- 创建 V40__drop_tenant_package_package_id.sql 迁移脚本
- 安全删除 tenant_package 表中废弃的 package_id/packageId 列
- 该字段已在 V31 中尝试删除,V40 用于修复执行失败的情况
- TenantPackage 实体已使用 collectionId 字段替代
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 12:34:00 +08:00
zhonghua
8f5a0fcdda
fix: 套餐管理优化与 gradeLevels/重复包修复
...
- gradeLevels: 后端 JSON 解析修复,前端兼容错误格式
- 筛选下拉: 状态选项按业务流程排序
- 已下架: 列表与详情页增加编辑、删除操作
- 课程包关联: 前后端去重,修复 uk_collection_package 唯一约束冲突
Made-with: Cursor
2026-03-19 11:37:04 +08:00
zhonghua
289fcbee52
feat: 课程套餐与课程包管理优化
...
- 课程套餐:适用年级从已选课程包自动同步,年级列改为只读
- 课程套餐:草稿/已驳回状态添加发布按钮
- 课程包:已发布状态不显示编辑按钮,编辑页增加状态校验
- 套餐创建:年级列从课程包读取,不可编辑
Made-with: Cursor
2026-03-19 11:18:02 +08:00
deb8431910
fix: 修复 course.ts 中 http 对象未导入的问题
...
- 添加 http 对象封装,支持 get/post/put/delete 方法
- 修复 submitCourse 和 rejectCourse 函数中 http.post 未导入的问题
- 确保课程包编辑页面的"保存"和"保存草稿"按钮能正常请求后端
同时包含之前的数据库外键修复:
- 新增 V39 迁移脚本删除外键约束
- 修改 V28 移除外键创建语句
- 增强 CourseCollectionService 应用层验证
2026-03-19 10:32:58 +08:00
bad446c069
Merge remote-tracking branch 'origin/master'
2026-03-19 09:39:52 +08:00
Claude Opus 4.6
10936b7a78
fix: 修复迁移脚本被 .gitignore 忽略的问题
...
- 添加 !**/db/migration/*.sql 例外规则
- 补充 V32-V37 Flyway 迁移脚本
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:39:38 +08:00
1d4bf52d05
fix: 修复租户管理选择套餐显示 NaN 元问题
...
问题原因:
- 租户管理页面调用 /api/v1/admin/packages/all 获取课程包
- 但 CoursePackage 实体没有 price 和 discountPrice 字段
- 这些字段在 CourseCollection(课程套餐)实体中
后端修改:
- AdminCourseCollectionController 新增 GET /all 接口
- 返回已发布的课程套餐列表(含价格信息)
- 添加 @Slf4j 注解和必要导入
前端修改:
- src/api/admin.ts 修改 API 调用路径为 /collections/all
- 修改返回类型为 CourseCollectionResponse[]
- TenantListView.vue 修改 packageList 类型
- 修复 formatPackagePrice 处理 undefined 值
- 修复 handlePackageTypeChange 类型检查
数据库迁移:
- 添加 V38 脚本为 course_collection 表添加自增主键
其他修改:
- .gitignore 移除 *.sql 排除规则(允许迁移脚本)
- CourseCollectionRejectRequest 和 CourseRejectRequest 用于审核驳回
修复的 TypeScript 错误:
- formatPackagePrice 参数改为可选类型
- selectedPackage.name 添加可选链操作符
2026-03-19 09:34:54 +08:00
zhonghua
640fbc94f9
feat: 添加 CoursePackageServiceImpl 实现 CoursePackageService 接口修复启动失败
...
Made-with: Cursor
2026-03-18 18:38:45 +08:00
Claude Opus 4.6
ddd3d8c152
feat: 套餐管理功能增强
...
新增功能:
- 后端新增套餐状态管理端点(下架、重新发布、撤销审核)
- 前端套餐详情页增加完整状态流转操作
- 前端套餐管理增加课程包添加/移除功能
- 修复套餐详情页空值引用错误
- 新增 collections.ts API 封装模块
后端变更:
- AdminCourseCollectionController 新增 archive/republish/withdraw 端点
- CourseCollectionService 新增对应服务方法
前端变更:
- collections.ts 新增 API 封装
- CollectionDetailView 增加状态管理按钮和课程包管理
- CollectionListView 增加状态筛选和操作按钮
- 修复 route 配置和 API 调用路径
- 合并远程更新,解决 TenantListView.vue 冲突
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 18:19:25 +08:00
d9a8da6a84
Merge remote-tracking branch 'origin/master'
2026-03-18 15:30:14 +08:00
e08530c04b
fix: 修复 CourseServiceImpl 编译错误
...
修复 getCoursesByTenantId 方法调用 getTenantPackageCourses 时参数不足的问题。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 15:24:57 +08:00
zhonghua
db70b1ad47
fix: 租户管理表单校验与后端字段对齐
...
- 前端: 学习地址必填、有效期绑定 formData.dateRange 修复校验
- 前端: admin.ts 请求体字段映射 loginAccount->code, contactPerson->contactName
- 后端: TenantCreateRequest 新增 password 字段
- 后端: TenantServiceImpl 创建租户时设置 username(code) 和 password
Made-with: Cursor
2026-03-18 15:16:37 +08:00
aff8162180
Merge remote-tracking branch 'origin/master'
...
# Conflicts:
# reading-platform-frontend/src/components.d.ts
2026-03-18 15:14:01 +08:00
db508dc2b6
refactor(teacher): 教师端 Controller 注释中文化
...
将教师端所有 Controller 的 @Tag 和 @Operation 注释从英文改为中文,提升代码可读性和一致性。
涉及的 Controller:
- TeacherCourseController
- TeacherFeedbackController
- TeacherGrowthController
- TeacherLessonController
- TeacherNotificationController
- TeacherScheduleController
- TeacherStatsController
- TeacherTaskController
- TeacherTaskTemplateController
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 15:10:01 +08:00
Claude Opus 4.6
279fa79b56
merge: 合并远程更新并解决冲突
...
- 合并学校课程管理搜索与年级筛选功能
- 修复教学资源区域间距问题
- 删除已忽略的自动生成文件
- 新增排课弹窗优化(移除课程选择,自动选择第一门课程)
- 新增 lessonType 从 schedule_ref_data 解析功能
- 修复前端代理配置(端口 8480)
2026-03-18 14:46:32 +08:00
zhonghua
7fe2c319ee
学校课程管理: 前后端对齐,实现搜索与年级筛选功能
...
Made-with: Cursor
2026-03-18 10:15:37 +08:00
Claude Opus 4.6
6b5d0e171b
feat: 添加排课计划参考示例数据
...
- 创建 Flyway 迁移脚本 V29__add_schedule_ref_data.sql
- 为小猪佩奇绘本阅读、好饿的毛毛虫、三只小猪添加排课计划参考
- 包含导入课、集体课、五大领域课的排课建议
- 更新开发日志和变更日志
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:39:27 +08:00
Claude Opus 4.6
d3cf4fd43b
feat: 添加课程包课程列表查询API
...
- 新增 GET /api/v1/school/packages/{packageId}/courses 接口
- 返回课程包详情,包含课程列表和排课计划参考数据
- 更新开发日志和变更日志
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:39:27 +08:00
Claude Opus 4.6
2e3143affb
feat: 添加课程包排课计划参考数据返回
...
后端改动:
1. CoursePackageResponse.CoursePackageCourseItem 添加 scheduleRefData 和 lessonType 字段
2. CoursePackageService.toResponse() 填充 scheduleRefData 和 lessonType
3. CourseCollectionService.toPackageResponse() 重写以包含课程列表和排课计划参考
4. 添加必要的 mapper 依赖注入
前端改动:
1. school.ts CoursePackage 接口添加 scheduleRefData 字段
2. CreateScheduleModal.vue 优化 selectPackage() 方法,直接从响应数据中提取排课计划参考
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 09:38:52 +08:00
1d7ade9d90
feat: 学校端接口租户隔离修复与Response规范化
...
## 租户隔离修复
- 修复 SchoolCourseController 硬编码 tenantId=1L 的严重 bug
- 为 SchoolClassController 8个接口添加租户验证
- 为 SchoolTeacherController 4个接口添加租户验证
- 为 SchoolStudentController 3个接口添加租户验证
- 为 SchoolParentController 6个接口添加租户验证
- 为 SchoolTaskController 3个接口添加租户验证
- 为 SchoolGrowthController 3个接口添加租户验证
## Map 返回类型改 Response
- SchoolTaskTemplateController: Map → TaskTemplateResponse
- SchoolScheduleController: Map → SchedulePlanResponse
- SchoolPackageController: Map → PackageInfoResponse/PackageUsageResponse
- SchoolSettingsController: Map → SchoolSettingsResponse 等
- SchoolReportController: Map → ReportOverviewResponse 等
## 新增 Response DTO
- PackageInfoResponse, PackageUsageResponse
- SchoolSettingsResponse, BasicSettingsResponse
- NotificationSettingsResponse, SecuritySettingsResponse
- ReportOverviewResponse, TeacherReportResponse
- CourseReportResponse, StudentReportResponse
## 新增 Request DTO
- RenewRequest, SchoolSettingsUpdateRequest
- BasicSettingsUpdateRequest, NotificationSettingsUpdateRequest
- SecuritySettingsUpdateRequest
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 00:02:05 +08:00
Claude Opus 4.6
0a09097095
feat: 添加排课功能支持代码 - 课程类型枚举、冲突检测、定时提醒
...
新增功能:
- LessonTypeEnum: 7种课程类型枚举(导入课、集体课、五大领域课)
- ScheduleConflictService: 排课冲突检测服务
- ScheduleReminderTask: 排课提醒定时任务
- ScheduleConfig: 排课相关配置
- 新增DTO: ScheduleCreateByClassesRequest, CalendarViewResponse等
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 19:34:19 +08:00
Claude Opus 4.6
c90873bea9
Merge remote-tracking branch 'origin/master' and complete two-tier structure refactoring
...
合并同事的远程更新:
- 多地点登录支持功能
- 资源库管理优化
- 数据看板修复
- 视频预览功能
- KidsMode增强
两层结构重构完成:
- 数据库迁移 V28(course_collection、course_collection_package)
- 后端实体、Service、Controller实现
- 前端API类型和组件重构
- 修复冲突文件:CHANGELOG.md、components.d.ts、TeacherLessonController.java
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:59:06 +08:00
zhonghua
193bbe90ae
feat: 资源库管理优化 - 直传、WebOffice预览、接口对齐
...
- 资源上传改为 OSS 直传,支持进度与取消
- Office 文档(PDF/PPT/Word/Excel)使用 WebOffice 在线预览
- 后端 ResourceItemResponse 补充 title/fileType/filePath/fileSize/tags/library
- 后端 getStats 返回 totalLibraries/totalItems/itemsByLibraryType
- 前后端字段对齐:libraryType、name/type 兼容
- 修复 tags 反序列化、name 必填、主键冲突问题
- 新增 V16 迁移修复 resource_item AUTO_INCREMENT
Made-with: Cursor
2026-03-17 15:53:04 +08:00
673214481d
feat: 课程包功能完善与代码优化
...
后端:
- 新增 YesNo 枚举类
- 新增 LessonStepCreateRequest、PackageGrantRequest 等 DTO
- 新增 ResourceItemCreateRequest、ResourceLibraryCreateRequest
- 新增 StatsService 统计服务实现
- 优化 AdminCourseController、AdminResourceController 等控制器
- 完善 TenantService 套餐授权功能
前端:
- 优化套餐详情页和列表页展示
- 更新自动生成的 API 类型定义
文档:
- 更新设计文档和开发日志
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:03:02 +08:00
d57affd2ee
feat: 套餐审核支持通过时同时发布
...
- 后端 PackageReviewRequest 新增 publish 字段
- 后端 CoursePackageService.reviewPackage 支持审核通过后直接发布
- 前端审核弹窗拆分为"通过"和"通过并发布"两个按钮
状态流转:
- 驳回: status → REJECTED
- 仅通过: status → APPROVED
- 通过并发布: status → PUBLISHED
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:00:49 +08:00
bb7fb86c3b
feat: 租户套餐枚举优化与学校端课程查询实现
...
- 新增 TenantPackageStatus 枚举类,消除 status 字段魔法值
- 修改 TenantPackage 实体 status 字段类型为枚举
- 更新 CoursePackageService、TenantServiceImpl、CourseLessonService 使用枚举
- 实现学校端课程查询接口 /api/v1/school/courses
- 新增 CourseService.getTenantPackageCourses() 方法查询租户套餐下的课程
- 前端新增 Course 类型定义
共修改 26 个文件,新增 609 行,删除 83 行
2026-03-17 13:42:01 +08:00
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
e8b44b25e0
优化
2026-03-17 10:38:51 +08:00