# 系统功能结构总览（重构后）

## 1. 系统架构概览

乐绘世界创想活动乐园采用**多端 + 多租户**架构，共分为 3 个端：

```
┌──────────────────────────────────────────────────────────┐
│                 乐绘世界创想活动乐园                       │
├──────────┬───────────────────┬───────────────────────────┤
│  公众端   │    机构管理端      │       平台管理端（超管）    │
│  /p/...  │  /:tenantCode/... │    /super/...             │
├──────────┼───────────────────┼───────────────────────────┤
│ H5 响应式 │    Web 后台        │       Web 后台            │
│ 面向公众  │  面向机构工作人员   │     面向平台运营团队       │
└──────────┴───────────────────┴───────────────────────────┘
```

---

## 2. 公众端（H5）

### 2.1 定位

面向**全国家长和少儿**的活动参与入口。用户自主注册，浏览公开活动、报名、管理子女、提交作品。

### 2.2 访问方式

- **入口地址**：`/p/activities`（活动大厅）
- **登录地址**：`/p/login`（登录/注册合一）
- **适配终端**：手机浏览器、微信内置浏览器、PC 浏览器（响应式设计）
- **登录方式**：一期：用户名+密码；二期：手机号验证码 + 微信扫码

### 2.3 用户角色

| 角色 | 角色编码 | 说明 |
|------|---------|------|
| 公众用户 | `public_user` | 自主注册，归属"公众用户"系统租户（code=public） |

### 2.4 功能清单

```
公众端
├── 🔓 无需登录
│   ├── 活动大厅 (/p/activities)
│   │   ├── 活动卡片网格展示
│   │   ├── 按名称搜索
│   │   └── 分页浏览
│   └── 活动详情 (/p/activities/:id)
│       ├── 活动封面/海报
│       ├── 活动信息（时间、类型、主办方）
│       ├── 活动详情（富文本）
│       ├── 活动公告列表
│       └── 附件下载
│
├── 🔐 需要登录
│   ├── 活动报名
│   │   ├── 选择参与者（我自己 / 子女）
│   │   └── 确认报名
│   │
│   ├── 个人中心 (/p/mine)
│   │   ├── 用户信息展示
│   │   └── 功能入口导航
│   │
│   ├── 我的报名 (/p/mine/registrations)
│   │   ├── 报名记录列表
│   │   ├── 报名状态（待审核/已通过/已拒绝）
│   │   └── 参与者标识（本人/子女）
│   │
│   ├── 我的作品 (/p/mine/works)
│   │   └── 提交的作品网格展示
│   │
│   └── 子女管理 (/p/mine/children)
│       ├── 子女列表
│       ├── 添加子女（姓名、性别、生日、年级、城市、学校）
│       ├── 编辑子女信息
│       └── 删除子女（软删除）
│
└── 📱 H5 适配
    ├── 移动端：底部 Tab 导航（首页 / 我的）
    └── PC 端：顶部导航栏
```

### 2.5 API 端点

| 方法 | 路径 | 认证 | 说明 |
|------|------|------|------|
| POST | `/api/public/auth/register` | 公开 | 注册 |
| POST | `/api/public/auth/login` | 公开 | 登录 |
| GET | `/api/public/activities` | 公开 | 公开活动列表 |
| GET | `/api/public/activities/:id` | 公开 | 活动详情 |
| POST | `/api/public/activities/:id/register` | 需登录 | 报名活动 |
| GET | `/api/public/mine/profile` | 需登录 | 个人信息 |
| PUT | `/api/public/mine/profile` | 需登录 | 更新个人信息 |
| GET/POST/PUT/DELETE | `/api/public/mine/children` | 需登录 | 子女 CRUD |
| GET | `/api/public/mine/registrations` | 需登录 | 我的报名 |
| GET | `/api/public/mine/works` | 需登录 | 我的作品 |

---

## 3. 机构管理端

### 3.1 定位

面向**入驻机构的管理人员**，负责活动的创建、发布、报名审核、评审管理和成果发布。

### 3.2 已入驻机构

| 机构 | 租户编码 | 类型 | 登录地址 | 账号 |
|------|---------|------|---------|------|
| 广东省立中山图书馆 | `gdlib` | 图书馆 | `/gdlib/login` | `admin` / `admin@gdlib` |

### 3.3 支持的机构类型

| 类型编码 | 名称 | 说明 |
|---------|------|------|
| `library` | 图书馆 | 公共图书馆 |
| `kindergarten` | 幼儿园 | 幼儿教育机构 |
| `school` | 学校 | 中小学校 |
| `institution` | 社会机构 | 美术培训等 |
| `other` | 其他 | 未分类 |

### 3.4 用户角色

| 角色 | 角色编码 | 说明 |
|------|---------|------|
| 机构管理员 | `tenant_admin` | 活动管理全部权限 |

### 3.5 功能清单

```
机构管理端（以广东省图为例）
│
├── 📋 活动管理
│   ├── 活动列表
│   │   ├── 创建活动（含可见范围：公开/指定机构/仅内部）
│   │   ├── 编辑活动
│   │   ├── 发布/撤回活动
│   │   ├── 结束/重新开启活动
│   │   └── 删除活动
│   │
│   ├── 评委管理
│   │   ├── 添加评委
│   │   ├── 查看关联活动
│   │   └── 移除评委
│   │
│   ├── 报名管理
│   │   ├── 查看报名记录（个人参与/团队参与分 Tab）
│   │   ├── 参与方式标识（本人参与/代子女报名+子女姓名）
│   │   ├── 审核报名（通过/拒绝）
│   │   └── 批量操作
│   │
│   ├── 作品管理
│   │   ├── 查看提交的作品
│   │   └── 作品详情
│   │
│   ├── 评审进度
│   │   ├── 评审整体进度统计
│   │   └── 评委评审进度详情
│   │
│   ├── 评审规则
│   │   ├── 创建评审规则
│   │   ├── 编辑评审规则
│   │   └── 关联活动
│   │
│   ├── 成果发布
│   │   ├── 查看活动成果列表
│   │   ├── 设置奖项
│   │   └── 发布/撤回成果
│   │
│   └── 通知管理
│       ├── 创建活动公告
│       ├── 编辑公告
│       └── 删除公告
│
└── ⚙️ 系统管理
    ├── 用户管理（管理机构内部工作人员账号）
    ├── 角色管理（配置机构内的角色权限）
    └── 日志记录（查看本机构操作日志）
```

---

## 4. 平台管理端（超管）

### 4.1 定位

面向**乐绘世界运营团队**，管理整个平台的机构、系统配置和全局数据。

### 4.2 访问方式

| 项目 | 值 |
|------|-----|
| 租户编码 | `super` |
| 登录地址 | `/super/login` |
| 角色 | 超级管理员 (`super_admin`) |

### 4.3 功能清单（重构后，动态菜单驱动）

```
平台管理端（超管）— 只读监管模式，不可创建/编辑/删除活动
│
├── 📋 活动监管（全局只读视角）
│   ├── 全部活动（查看所有机构创建的活动，隐藏写操作按钮）
│   ├── 报名数据
│   ├── 作品数据
│   ├── 评审进度
│   ├── 评委管理
│   ├── 评审规则
│   ├── 成果发布
│   └── 通知管理
│
├── 🏛️ 机构管理（去租户化，精简后的机构列表）
│
├── 👥 用户中心
│   ├── 用户管理（全局用户）
│   ├── 公众用户管理
│   └── 角色管理
│
└── ⚙️ 系统设置
    ├── 菜单管理
    ├── 权限管理
    ├── 数据字典
    ├── 系统配置
    └── 系统日志
```

---

## 4.5 评委端

### 定位

面向**受邀参与活动评审的专业评委**，提供评审工作台和评语管理功能。

### 访问方式

| 项目 | 值 |
|------|-----|
| 租户编码 | `judge` |
| 登录地址 | `/judge/login` |
| 账号 | `admin` / `admin@judge` |
| 角色 | 评委 (`judge`) |

### 功能清单

```
评委端
├── 我的评审
│   ├── 评审任务（我参与评审的活动列表，含进度条和完成状态）
│   └── 预设评语（管理常用评语模板，可跨活动同步）
│
└── 评审工作台（从任务列表点击"进入评审"进入）
    ├── 分配给我的作品列表（分页、搜索、筛选已评/未评）
    ├── 评审打分（打开作品详情，按评审规则维度打分）
    └── 撰写评语（使用预设评语或手动输入）
```

### 业务流程

```
机构管理端                                评委端
1. 创建活动 + 配置评审规则
2. 在"评委管理"中添加评委
3. 报名截止后，在"评审进度"中
   分配作品给评委
   （支持手动/批量/自动分配）
                                         4. 登录评委端
                                         5. "评审任务"看到活动列表和进度
                                         6. 进入某活动 → 看到分配的作品
                                         7. 逐个作品打分 + 写评语
                                         8. 全部评审完成
9. 查看评审进度（实时同步）
10. 所有评委评完后发布成果
```

---

### 4.4 超管独有能力

- 跨租户查看所有活动、报名、作品、评审数据（只读监管，不可创建/编辑/删除活动）
- 管理机构（去租户化的机构列表）
- 管理公众用户（自主注册的公众端用户）
- 配置系统级菜单和权限
- 查看全局日志

---

## 5. 三端关系与数据流

### 5.1 活动发布流程

```
机构管理端                              公众端
┌───────────────┐                    ┌────────────────┐
│ 广东省图管理员 │                    │   公众用户      │
│               │                    │                │
│ 1. 创建活动    │                    │                │
│ 2. 设置可见范围│                    │                │
│    = "公开"    │                    │                │
│ 3. 发布活动   ─┼───── 活动可见 ────►│ 4. 浏览活动     │
│               │                    │ 5. 注册/登录    │
│               │                    │ 6. 选择参与者   │
│               │◄── 报名数据 ───────┤ 7. 报名         │
│ 8. 审核报名   │                    │                │
│               │◄── 作品数据 ───────┤ 9. 提交作品     │
│ 10. 分配评委  │                    │                │
│ 11. 评审打分  │                    │                │
│ 12. 发布成果  ─┼─── 成果可见 ─────►│ 13. 查看成果    │
└───────────────┘                    └────────────────┘
```

### 5.2 用户体系

```
用户来源
├── 管理员创建 (user_source = 'admin_created')
│   ├── 超管用户 → 归属超级租户 (super)
│   ├── 机构用户 → 归属对应机构租户 (gdlib, school, ...)
│   └── 评委用户 → 归属评委租户 (judge)
│
└── 自主注册 (user_source = 'self_registered')
    └── 公众用户 → 归属公众租户 (public)
        ├── 可以自己报名活动 (participant_type = 'self')
        └── 可以代子女报名 (participant_type = 'child')
            └── 通过 children 表管理子女信息
```

---

## 6. 数据库新增/变更汇总

### 6.1 新增表

| 表名 | 说明 |
|------|------|
| `children` | 子女信息表（parent_id → users.id） |

### 6.2 变更字段

| 表 | 新增字段 | 说明 |
|---|---------|------|
| `tenants` | `tenant_type` | 租户类型（library/school/kindergarten/institution/other） |
| `users` | `wx_openid`, `wx_unionid` | 微信登录预留 |
| `users` | `user_source` | 用户来源（admin_created/self_registered） |
| `users` | `city`, `birthday` | 公众用户信息 |
| `users` | `phone` (unique) | 手机号唯一约束 |
| `t_contest` | `visibility` | 活动可见范围（public/designated/internal） |
| `t_contest_registration` | `participant_type` | 参与者类型（self/child） |
| `t_contest_registration` | `child_id` | 子女 ID 关联 |

---

## 7. 技术要点

### 7.1 公众端架构决策

- **公众租户方案**：创建 `public` 系统租户承载公众用户，而非将 `tenantId` 改为可空。避免改动整条认证链路，风险最低。
- **JWT 兼容**：公众端和管理端共用同一套 JWT 签发/验证机制，token 格式一致。
- **路由隔离**：公众端路由 `/p/` 前缀，路由守卫中直接放行，不走管理端认证逻辑。

### 7.2 响应式适配

```
一套 Vue 代码，CSS 媒体查询适配：
├── < 768px  → H5 移动端（底部 Tab 导航）
└── >= 768px → Web 端（顶部导航栏）
```

### 7.3 UI 设计体系

| 维度 | 值 |
|------|-----|
| 主色 | `#6366F1` Creative Indigo |
| 强调色 | `#EC4899` 玫瑰粉 |
| 字体 | Nunito（Google Fonts） |
| 圆角 | 10-16px |
| 阴影 | 靛蓝色调 |
| 页面背景 | `#F8F7FC` 暖紫 |
