library-picturebook-activity/docs/design/super-admin/review-progress-optimization.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

167 lines
7.4 KiB
Markdown
Raw Permalink 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.

# 评审进度模块优化 — 设计方案
> 所属端:超管端
> 状态:已实现(待验收)
> 创建日期2026-03-27
> 最后更新2026-03-27
---
## 1. 背景与问题
超管端"评审进度"菜单是两层结构,问题模式与报名数据、作品数据一致:第一层是活动列表精简版(冗余),第二层围绕管理操作设计(开始评审/结束评审/替换评委),不符合超管只读监管定位。
### 核心问题
| 问题 | 说明 |
|------|------|
| 第一层与全部活动列表重复 | 活动列表已有评审进度列(已评/总数),两个入口功能重叠 |
| 写操作未隔离 | "开始评审""结束评审""替换评委"均为机构管理端操作 |
| 评审状态筛选无效 | 第一层评审状态下拉选了不生效(前端计算但未传后端) |
| 缺少全局统计 | 没有全平台评审总进度概览 |
| 无跨活动维度 | 不能跨活动查看所有作品的评审状态 |
| TODO 未实现 | 未提交作品列表、评委替换 API 均为空实现 |
| 样式不一致 | 主色 `#1890ff` |
---
## 2. 现状分析
### 2.1 第一层评审进度reviews/Progress.vue
- 个人参与/团队参与 Tab
- 数据来源:`contestsApi.getList()` 按活动类型过滤
- 搜索:活动名称 + 评审状态(无效)
- 表格列:序号/活动名称/主办机构/评审状态/已评审÷作品数/评审时间/操作
- 操作:查看详情 → 跳转 ProgressDetail
### 2.2 第二层评审进度详情reviews/ProgressDetail.vue
- 数据来源:`worksApi.getList({ contestId })`
- 搜索:作品编号/报名账号/评审进度
- 表格列:序号/作品编号/报名账号/评委评分/评审进度/操作
- 操作按钮:开始评审、结束评审、未提交作品、导出
- 评审详情 Drawer每个评委评分 + 替换评委
- 评委替换 Drawer选择新评委
---
## 3. 设计方案
### 3.1 整体思路
与报名/作品模块一致:**超管端两层合一为扁平作品评审列表**,展示全平台所有作品的评审状态和评分情况。隐藏所有写操作,只保留查看能力。机构端保持不变。
### 3.2 页面结构
```
┌─ 标题卡片 ──────────────────────────────────────────────┐
│ 评审进度 │
└─────────────────────────────────────────────────────────┘
┌─ 统计卡片 ──────────────────────────────────────────────┐
│ [全部 120] [未评审 60] [评审中 40] [已完成 20] │
└─────────────────────────────────────────────────────────┘
┌─ 筛选栏 ────────────────────────────────────────────────┐
│ 所属活动:[下拉搜索] 作品/作者:[______] 评审进度:[下拉] │
│ [搜索] [重置] │
└─────────────────────────────────────────────────────────┘
┌─ 数据表格 ──────────────────────────────────────────────┐
│ 所属活动 | 作品编号 | 提交者 | 报名账号 | │
│ 评审进度 | 平均分 | 递交时间 | 操作 │
└─────────────────────────────────────────────────────────┘
```
### 3.3 统计卡片
4 张卡片,可点击筛选:
| 卡片 | 数据 | 颜色 | 说明 |
|------|------|------|------|
| 全部 | 作品总数 | 主色 | validState=1 且 isLatest=true |
| 未评审 | 无评分记录的作品 | 灰色 | assignments 为空或 scores 为空 |
| 评审中 | 部分评委已评的作品 | 橙色 | 有评分但未全部评完 |
| 已完成 | 所有评委评完的作品 | 绿色 | reviewedCount >= totalJudgesCount |
复用作品 stats 接口数据即可submitted≈未评审reviewing≈评审中reviewed≈已完成
### 3.4 筛选栏
| 筛选项 | 组件 | 说明 |
|--------|------|------|
| 所属活动 | Select远程搜索 | 按活动名称搜索下拉 |
| 作品/作者 | Input | 搜索作品编号、提交者姓名 |
| 评审进度 | Select | 未评审 / 评审中 / 已完成 |
### 3.5 表格列
| 列 | 宽度 | 渲染方式 |
|----|------|----------|
| 所属活动 | 180 | 活动名称,可点击跳转活动详情 |
| 作品编号 | 130 | workNo可点击查看作品详情 |
| 提交者 | 130 | 昵称 / 队伍名 |
| 报名账号 | 120 | username |
| 评审进度 | 100 | Tag未评审/ 评审中 x/y/ 已完成(绿) |
| 平均分 | 80 | averageScore已完成时显示分数否则"-" |
| 递交时间 | 150 | YYYY-MM-DD HH:mm |
| 操作 | 100 | 查看详情 |
### 3.6 详情 Drawer
点击"查看详情"打开 Drawer展示该作品的评审明细
```
作品信息
├── 所属活动 / 作品编号
├── 提交者 / 报名账号
├── 平均分 / 评审进度x/y
评委评分列表(表格)
├── 评委姓名 / 所属单位 / 评分 / 评分时间
```
不提供"替换评委"操作。
### 3.7 URL 参数支持
- `/super/contests/reviews/progress` — 全部作品评审进度
- `/super/contests/reviews/progress?contestId=3` — 从活动列表跳转,筛选某活动
---
## 4. 后端改动
无新增接口。复用已有能力:
- 统计:复用 `GET /api/contests/works/stats`(已有 submitted/reviewing/reviewed
- 列表:复用 `GET /api/contests/works`(已返回 reviewedCount/totalJudgesCount/averageScore/assignments
- 评分详情:复用 `GET /api/contests/reviews/works/:workId/scores`(已有)
### 4.1 评审进度前端过滤
"评审进度"筛选(未评审/评审中/已完成)基于返回数据的 `reviewedCount``totalJudgesCount` 在前端过滤,或后端 works 接口增加 `reviewProgress` 参数。
简化方案:前端直接利用作品 status 字段 + scores 数据判定,不改后端。
---
## 5. 前端改动
| 文件 | 操作 | 说明 |
|------|------|------|
| `frontend/src/views/contests/reviews/Progress.vue` | 修改 | 超管端改为扁平评审进度列表(统计卡片+筛选+表格+评分Drawer机构端保持不变 |
后端无需改动,完全复用已有的 works 接口和 stats 接口。
---
## 6. 实施记录
### 2026-03-27 — 首次实现
**后端改动:无**(完全复用 works 接口和 reviews/scores 接口)
**前端改动1 个文件):**
- `frontend/src/views/contests/reviews/Progress.vue` — 完全重写:超管端为扁平评审进度列表(统计卡片复用 worksApi.getStats + 筛选栏 + 全平台作品表格含评审进度/平均分 + 评分详情 Drawer 含评委评分明细),机构端保持原有两层结构;评审进度筛选为前端过滤(基于 reviewedCount/totalJudgesCount支持 URL 参数联动(?contestId=xx