library-picturebook-activity/docs/project/07-system-overview.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

380 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 系统功能结构总览(重构后)
## 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` 暖紫 |