## 学校管理模块

### 1. 功能概述

学校管理模块提供完整的学校组织架构和人员管理功能，包括学校信息、年级、班级、部门、教师和学生的管理。

### 2. 核心功能

#### 2.1 学校信息管理

**功能描述**：

- 管理学校基本信息（地址、电话、校长、建校时间等）
- 上传学校 Logo
- 设置学校网站

**用户角色**：

- 超级管理员：创建和管理所有学校
- 学校管理员：管理本学校信息

**业务规则**：

- 每个租户对应一个学校
- 学校信息与租户信息一对一关联

#### 2.2 年级管理

**功能描述**：

- 创建和管理年级（一年级、二年级等）
- 设置年级级别（用于排序）
- 年级编码唯一性校验

**用户角色**：

- 学校管理员：管理本学校年级

**业务规则**：

- 年级编码在租户内唯一
- 年级级别在租户内唯一（用于排序）
- 删除年级前需先删除所有班级

#### 2.3 班级管理

**功能描述**：

- 创建和管理班级（行政班级和兴趣班）
- 设置班级容量
- 管理班级学生

**用户角色**：

- 学校管理员：管理所有班级
- 班主任：管理本班级学生

**业务规则**：

- **行政班级（type=1）**：
  - 学生必须属于一个行政班级
  - 一个学生只能属于一个行政班级
- **兴趣班（type=2）**：
  - 学生可以加入多个兴趣班
  - 通过多对多关联表管理

#### 2.4 部门管理

**功能描述**：

- 创建和管理部门（支持树形结构）
- 设置部门层级关系
- 管理部门教师

**用户角色**：

- 学校管理员：管理所有部门

**业务规则**：

- 部门支持多级嵌套（树形结构）
- 教师必须归属于一个部门
- 删除部门前需先转移或删除该部门下的所有教师

#### 2.5 教师管理

**功能描述**：

- 创建教师账号（自动创建 User 记录）
- 管理教师信息（工号、部门、科目、职称等）
- 教师账号激活/停用

**用户角色**：

- 学校管理员：管理所有教师
- 部门负责人：查看本部门教师

**业务规则**：

- 教师账号与 User 表一对一关联
- 工号在租户内唯一
- 教师必须归属于一个部门
- 删除教师账号时，级联删除 User 记录

#### 2.6 学生管理

**功能描述**：

- 创建学生账号（自动创建 User 记录）
- 管理学生信息（学号、班级、家长信息等）
- 学生账号激活/停用
- 管理学生兴趣班

**用户角色**：

- 学校管理员：管理所有学生
- 班主任：管理本班级学生

**业务规则**：

- 学生账号与 User 表一对一关联
- 学号在租户内唯一
- 学生必须属于一个行政班级
- 学生可以加入多个兴趣班
- 删除学生账号时，级联删除 User 记录

### 3. 数据模型

```
Tenant (租户/学校)
├── School (学校信息) [1:1]
├── Grade (年级) [1:N]
│   └── Class (班级) [1:N]
│       ├── Student (学生) [1:N, 仅行政班级]
│       └── StudentInterestClass [N:M, 仅兴趣班]
├── Department (部门) [1:N, 树形结构]
│   └── Teacher (教师) [1:N]
└── User (用户) [1:N]
    ├── Teacher [1:1]
    └── Student [1:1]
```

## 技术架构

### 4. 关键业务规则

1. **数据隔离**：所有数据通过 `tenantId` 实现租户隔离
2. **用户统一**：教师和学生都基于 User 表，通过扩展表存储特定信息
3. **级联删除**：删除租户时，级联删除所有相关数据
4. **限制删除**：删除部门/班级前，需先处理关联的教师/学生

### 1. 后端架构

```
backend/
├── src/
│   ├── school/              # 学校管理模块
│   │   ├── schools/
│   │   ├── grades/
│   │   ├── classes/
│   │   ├── departments/
│   │   ├── teachers/
│   │   └── students/
```

### 2. 前端架构

```
frontend/
├── src/
│   ├── views/
│   │   ├── school/          # 学校管理页面
│   │   │   ├── schools/
│   │   │   ├── grades/
│   │   │   ├── classes/
│   │   │   ├── departments/
│   │   │   ├── teachers/
│   │   │   └── students/
```

## 权限设计

### 1. 角色规划

**学校管理员（school_admin）**：

- 学校管理：school:\*
- 年级管理：grade:\*
- 班级管理：class:\*
- 部门管理：department:\*
- 教师管理：teacher:\*
- 学生管理：student:\*

**教师（teacher）**：

- 比赛查看：contest:read
- 比赛报名：contest:register
- 作品提交：work:submit
- 作品查看：work:read
- 学生管理：student:read（本班级）

**学生（student）**：

- 比赛查看：contest:read
- 比赛报名：contest:register
- 作品提交：work:submit
- 作品查看：work:read（自己的作品）
- 结果查看：result:read

### 2. 权限编码

#### 2.1 学校管理权限

```
school:create      # 创建学校
school:read        # 查看学校
school:update      # 更新学校
school:delete      # 删除学校

grade:create       # 创建年级
grade:read         # 查看年级
grade:update       # 更新年级
grade:delete       # 删除年级

class:create       # 创建班级
class:read         # 查看班级
class:update       # 更新班级
class:delete       # 删除班级

department:create  # 创建部门
department:read    # 查看部门
department:update  # 更新部门
department:delete  # 删除部门

teacher:create     # 创建教师
teacher:read       # 查看教师
teacher:update     # 更新教师
teacher:delete     # 删除教师

student:create     # 创建学生
student:read       # 查看学生
student:update     # 更新学生
student:delete     # 删除学生
```
