library-picturebook-activity/docs/project/07-system-overview.md

380 lines
13 KiB
Markdown
Raw Normal View History

# 系统功能结构总览(重构后)
## 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` 玫瑰粉 |
| 字体 | NunitoGoogle Fonts |
| 圆角 | 10-16px |
| 阴影 | 靛蓝色调 |
| 页面背景 | `#F8F7FC` 暖紫 |