library-picturebook-activity/docs/design/super-admin/results-publish-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

136 lines
5.8 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. 背景与问题
成果发布是活动全生命周期的最后一环,超管需要监控"哪些活动发布了成果、哪些还没有"。当前模块保留两层结构合理(第一层看活动维度的发布状态,第二层看获奖名单),但存在以下问题:
| 问题 | 说明 |
|------|------|
| 第一层有冗余的个人/团队 Tab | 成果发布不需要按参与方式分 Tab发布状态是活动级别的 |
| 缺少统计概览 | 没有已发布/未发布的数量统计 |
| 写操作未隔离 | 详情页有"发布成果/撤回发布"按钮,超管不应有 |
| 搜索能力不足 | 只有活动名称,缺少发布状态筛选 |
| 样式不一致 | 主色 `#1890ff` |
---
## 2. 现状分析
### 2.1 第一层成果发布列表results/Index.vue
- 个人/团队 Tab冗余
- 数据来源:`contestsApi.getList()` 按活动类型过滤
- 搜索:仅活动名称
- 表格列:序号/活动名称/主办机构/报名人数/提交作品数/发布状态/操作
- 操作:详情 → 跳转 Detail
### 2.2 第二层成果详情results/Detail.vue
- 数据来源:`resultsApi.getResults(contestId)`
- 搜索:作品编号/报名账号
- 表格列:序号/作品编号/评委评分/姓名/账号/机构信息/指导老师
- 写操作:"发布成果"/"撤回发布"按钮
---
## 3. 设计方案
### 3.1 整体思路
保留两层结构(活动维度 → 获奖名单),但优化超管视角:第一层去掉 Tab + 增加统计卡片 + 增加发布状态筛选,第二层隐藏写操作。机构端保持不变。
### 3.2 第一层优化
```
┌─ 标题卡片 ──────────────────────────────────────────────┐
│ 成果发布 │
└─────────────────────────────────────────────────────────┘
┌─ 统计卡片 ──────────────────────────────────────────────┐
│ [全部 12] [已发布 8] [未发布 4] │
└─────────────────────────────────────────────────────────┘
┌─ 筛选栏 ────────────────────────────────────────────────┐
│ 活动名称:[______] 发布状态:[下拉] 主办机构:[下拉] │
│ [搜索] [重置] │
└─────────────────────────────────────────────────────────┘
┌─ 数据表格 ──────────────────────────────────────────────┐
│ 活动名称 | 主办机构 | 活动类型 | 报名人数 | 作品数 | │
│ 发布状态 | 发布时间 | 操作 │
└─────────────────────────────────────────────────────────┘
```
**统计卡片**3 张):
| 卡片 | 数据 | 颜色 |
|------|------|------|
| 全部 | 所有已发布状态的活动数 | 主色 |
| 已发布 | resultState='published' | 绿色 |
| 未发布 | resultState!='published' | 灰色 |
统计基于 contests 列表的 resultState 在前端计算即可,无需新增后端接口。
**筛选栏**
| 筛选项 | 组件 | 说明 |
|--------|------|------|
| 活动名称 | Input | 模糊搜索 |
| 发布状态 | Select | 已发布 / 未发布 |
| 主办机构 | Select | 下拉搜索,复用租户列表 |
**表格列**(超管端):
| 列 | 宽度 | 说明 |
|----|------|------|
| 序号 | 60 | |
| 活动名称 | 200 | |
| 主办机构 | 120 | creatorTenant.name |
| 活动类型 | 90 | Tag 个人/团队 |
| 报名人数 | 80 | _count.registrations |
| 作品数 | 80 | _count.works |
| 发布状态 | 90 | Tag 已发布(绿)/ 未发布(灰)|
| 发布时间 | 150 | resultPublishTime未发布显示"-" |
| 操作 | 100 | 查看详情 |
去掉个人/团队 Tab所有活动放在一个列表中。
### 3.3 第二层优化
超管进入成果详情页时:
- **隐藏"发布成果/撤回发布"按钮**(通过 isSuperAdmin 判断)
- 其他保持不变(获奖列表 + 搜索 + 作品详情弹框)
- 样式修复为 `#6366f1`
### 3.4 后端改动
无新增接口。现有 `contestsApi.getList()` 返回的数据已包含 `resultState``resultPublishTime`
---
## 4. 前端改动
| 文件 | 操作 | 说明 |
|------|------|------|
| `frontend/src/views/contests/results/Index.vue` | 修改 | 超管端去掉 Tab + 增加统计卡片 + 发布状态/机构筛选 + 优化表格列 + 样式修复 |
| `frontend/src/views/contests/results/Detail.vue` | 修改 | 超管端隐藏"发布/撤回"按钮 + 样式修复 |
---
## 5. 实施记录
### 2026-03-27 — 首次实现
**后端改动:无**
**前端改动2 个文件):**
- `frontend/src/views/contests/results/Index.vue` — 超管端去掉个人/团队 Tab改为统计卡片全部/已发布/未发布)+ 发布状态和机构筛选 + 优化表格列(增加活动类型、发布时间),机构端保持不变;样式修复为 #6366f1
- `frontend/src/views/contests/results/Detail.vue` — 超管端隐藏"发布成果/撤回发布"按钮v-if="!isSuperAdmin");样式修复为 #6366f1