2026-03-06 12:23:10 +08:00
|
|
|
|
# CLAUDE.md
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
本文档为 Claude Code (claude.ai/code) 在本项目中工作时提供指导。
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 项目概述
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
这是一个**少儿智慧阅读平台**(Kindergarten Course Management System),采用 Spring Boot 后端 + Vue 3 前端架构。系统管理幼儿园的课程、课时、任务和学生成长记录。
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 技术架构
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 后端 (`reading-platform-java`)
|
|
|
|
|
|
- **框架**: Spring Boot 3.2.3 + Java 17
|
|
|
|
|
|
- **持久层**: MyBatis-Plus 3.5.5
|
|
|
|
|
|
- **安全**: Spring Security + JWT
|
|
|
|
|
|
- **API 文档**: Knife4j (Swagger OpenAPI 3)
|
|
|
|
|
|
- **数据库**: MySQL 8.0
|
|
|
|
|
|
- **数据库迁移**: Flyway
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 前端 (`reading-platform-frontend`)
|
|
|
|
|
|
- **框架**: Vue 3 + TypeScript + Vite
|
|
|
|
|
|
- **UI 组件库**: Ant Design Vue
|
|
|
|
|
|
- **状态管理**: Pinia
|
|
|
|
|
|
- **API**: Axios + Orval 自动生成的 TypeScript 客户端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 多租户架构
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
系统支持多个幼儿园(租户):
|
|
|
|
|
|
- `admin` 角色:超级管理员(无租户,管理全系统课程)
|
|
|
|
|
|
- `school` 角色:学校管理员(管理本校的教师、学生、班级)
|
|
|
|
|
|
- `teacher` 角色:教师(管理本校的课时和任务)
|
|
|
|
|
|
- `parent` 角色:家长(查看孩子的进度和任务)
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
除 `admin_users` 外,每个实体都有 `tenant_id` 字段。系统课程的 `tenant_id = NULL`。
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 项目结构
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
kindergarten_java/
|
2026-03-10 01:06:03 +08:00
|
|
|
|
├── reading-platform-java/ # Spring Boot 后端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│ ├── src/main/java/.../controller/
|
2026-03-10 01:06:03 +08:00
|
|
|
|
│ │ ├── admin/ # 超级管理员端点 (/api/v1/admin/*)
|
|
|
|
|
|
│ │ ├── school/ # 学校管理员端点 (/api/v1/school/*)
|
|
|
|
|
|
│ │ ├── teacher/ # 教师端点 (/api/v1/teacher/*)
|
|
|
|
|
|
│ │ └── parent/ # 家长端点 (/api/v1/parent/*)
|
|
|
|
|
|
│ ├── entity/ # 数据库实体(27张表)
|
|
|
|
|
|
│ ├── mapper/ # MyBatis-Plus 映射器
|
|
|
|
|
|
│ ├── service/ # 服务层接口 + 实现
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│ ├── common/
|
2026-03-10 01:06:03 +08:00
|
|
|
|
│ │ ├── annotation/RequireRole # 基于角色的访问控制
|
|
|
|
|
|
│ │ ├── security/ # JWT 认证
|
|
|
|
|
|
│ │ ├── enums/ # UserRole, CourseStatus 等枚举
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│ │ ├── response/ # Result<T>, PageResult<T>
|
2026-03-10 01:06:03 +08:00
|
|
|
|
│ │ └── config/ # Security, MyBatis, OpenAPI 配置
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│ └── resources/
|
2026-03-10 01:06:03 +08:00
|
|
|
|
│ ├── db/migration/ # Flyway 迁移脚本
|
|
|
|
|
|
│ └── mapper/ # MyBatis XML 文件
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│
|
2026-03-10 01:06:03 +08:00
|
|
|
|
├── reading-platform-frontend/ # Vue 3 前端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│ ├── src/views/
|
2026-03-10 01:06:03 +08:00
|
|
|
|
│ │ ├── admin/ # 超级管理员页面
|
|
|
|
|
|
│ │ ├── school/ # 学校管理员页面
|
|
|
|
|
|
│ │ ├── teacher/ # 教师页面
|
|
|
|
|
|
│ │ └── parent/ # 家长页面
|
|
|
|
|
|
│ ├── api/generated/ # 自动生成的 API 客户端
|
|
|
|
|
|
│ ├── api-spec.yml # OpenAPI 规范
|
|
|
|
|
|
│ └── router/index.ts # Vue Router 配置
|
2026-03-06 12:23:10 +08:00
|
|
|
|
│
|
2026-03-10 01:06:03 +08:00
|
|
|
|
├── docker-compose.yml # 后端 + 前端服务
|
|
|
|
|
|
└── docs/开发协作指南.md # 开发指南(中文)
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 关键模式
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 1. 基于角色的访问控制
|
|
|
|
|
|
在 Controller/Service 上使用 `@RequireRole` 注解:
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```java
|
2026-03-10 01:06:03 +08:00
|
|
|
|
@RequireRole(UserRole.SCHOOL) // 只有学校管理员可以访问
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 2. 租户隔离
|
|
|
|
|
|
在学校/教师/家长端点中使用 `SecurityUtils.getCurrentTenantId()` 按当前租户过滤数据。
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 3. 统一响应格式
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```java
|
|
|
|
|
|
Result<T> success(T data) // { code: 200, message: "success", data: ... }
|
|
|
|
|
|
Result<T> error(code, msg) // { code: xxx, message: "...", data: null }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 4. OpenAPI 驱动开发
|
|
|
|
|
|
- 后端:在 Controller 上使用 `@Operation`、`@Parameter`、`@Schema` 注解
|
|
|
|
|
|
- 前端:运行 `npm run api:update` 从 `api-spec.yml` 重新生成 TypeScript 客户端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
## 开发命令
|
2026-03-06 12:23:10 +08:00
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 后端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```bash
|
2026-03-10 01:06:03 +08:00
|
|
|
|
# 使用 Docker Compose 运行(推荐)
|
2026-03-06 12:23:10 +08:00
|
|
|
|
docker compose up --build
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
# 本地运行(需要 MySQL 已启动)
|
2026-03-06 12:23:10 +08:00
|
|
|
|
cd reading-platform-java
|
|
|
|
|
|
mvn spring-boot:run
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
# 构建
|
2026-03-06 12:23:10 +08:00
|
|
|
|
mvn clean package -DskipTests
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 前端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
```bash
|
|
|
|
|
|
cd reading-platform-frontend
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
npm run build
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
# 从后端规范更新 API 客户端
|
2026-03-06 12:23:10 +08:00
|
|
|
|
npm run api:update
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-10 01:06:03 +08:00
|
|
|
|
### 数据库迁移
|
|
|
|
|
|
- 将新的迁移脚本添加到 `reading-platform-java/src/main/resources/db/migration/V{n}__description.sql`
|
|
|
|
|
|
- Flyway 会在后端启动时自动运行(仅开发模式)
|
|
|
|
|
|
|
|
|
|
|
|
## 数据库表结构(27张表)
|
|
|
|
|
|
- **租户**: tenants, tenant_courses
|
|
|
|
|
|
- **用户**: admin_users, teachers, students, parents, parent_students
|
|
|
|
|
|
- **班级**: classes, class_teachers, student_class_history
|
|
|
|
|
|
- **课程**: courses, course_versions, course_resources, course_scripts, course_script_pages, course_activities
|
|
|
|
|
|
- **课时**: lessons, lesson_feedbacks, student_records
|
|
|
|
|
|
- **任务**: tasks, task_targets, task_completions, task_templates
|
|
|
|
|
|
- **成长**: growth_records
|
|
|
|
|
|
- **资源**: resource_libraries, resource_items
|
|
|
|
|
|
- **日程**: schedule_plans, schedule_templates
|
|
|
|
|
|
- **系统**: system_settings, notifications, operation_logs, tags
|
|
|
|
|
|
|
|
|
|
|
|
## 测试账号
|
|
|
|
|
|
| 角色 | 用户名 | 密码 |
|
|
|
|
|
|
|------|--------|------|
|
|
|
|
|
|
| 管理员 | admin | admin123 |
|
|
|
|
|
|
| 学校 | school | 123456 |
|
|
|
|
|
|
| 教师 | teacher1 | 123456 |
|
|
|
|
|
|
| 家长 | parent1 | 123456 |
|
|
|
|
|
|
|
|
|
|
|
|
## API 文档
|
|
|
|
|
|
- 访问地址:http://localhost:8080/doc.html(后端启动后)
|