library-picturebook-activity/docs/legacy/比赛平台-开发计划.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

25 KiB
Raw Permalink Blame History

比赛平台管理系统 - 前后端开发计划

一、项目概述

1.1 技术栈

层级 技术
前端 Vue 3 + TypeScript + Ant Design Vue + Vite
后端 NestJS + Prisma + MySQL
架构 多租户 + RBAC权限 + 动态路由菜单

1.2 系统角色

┌─────────────────────────────────────────────────────────────┐
│                        前端应用                              │
├──────────┬──────────┬──────────┬──────────┬─────────────────┤
│  超管端   │ 学校管理端 │  教师端   │  学生端   │    评委端       │
│ (admin)  │ (school) │(teacher) │(student) │   (judge)       │
└──────────┴──────────┴──────────┴──────────┴─────────────────┘

二、超管端需求对照表(根据需求表格)

2.1 赛事管理模块

2.1.1 赛事列表页

功能点 描述 后端API 前端组件 完成度
列表查询 分页、筛选(赛事名称、状态、时间范围) GET /contests contests/Index.vue 80%
发布/撤销 切换赛事发布状态 PATCH /contests/:id/publish 按钮操作 100%
编辑 跳转编辑页 PATCH /contests/:id 路由跳转 80%
详情 查看赛事详情 GET /contests/:id contests/Detail.vue 80%
删除 删除赛事(软删除) DELETE /contests/:id 按钮+确认 100%
标记完结 将赛事标记为已完结状态 需新增接口 按钮操作 0%

2.1.2 赛事新建/编辑页多Tab表单

Tab 字段 后端支持 前端组件 完成度
基本信息 赛事名称、赛事类型(个人/团队)、赛事封面、赛事简介、详细说明 Contest模型已有 ContestForm.vue 80%
报名信息 报名开始/结束时间、报名范围(年级/班级)、团队人数限制、是否需审核 Contest模型已有 Tab组件 60%
作品信息 提交开始/结束时间、作品类型、是否允许重复提交、作品要求 Contest模型已有 Tab组件 60%
评审信息 评审开始/结束时间、评审规则、评分维度、评委分配 ReviewRule模型 Tab组件 40%

2.1.3 赛事公告

功能点 描述 后端API 前端组件 完成度
公告列表 查询赛事公告 GET /contests/notices/contest/:id 需新增页面 20%
新建公告 创建赛事公告 POST /contests/notices 弹窗表单 20%
编辑公告 修改公告内容 PATCH /contests/notices/:id 弹窗表单 20%
删除公告 删除公告 DELETE /contests/notices/:id 按钮操作 20%

2.2 报名管理模块

2.2.1 个人报名列表

功能点 描述 后端API 前端组件 完成度
列表查询 筛选(赛事、报名状态、学生姓名) GET /contests/registrations registrations/Index.vue 70%
审核通过 批量/单个审核通过 PATCH /registrations/:id/review 按钮操作 70%
审核拒绝 批量/单个审核拒绝 PATCH /registrations/:id/review 按钮操作 70%
导出 导出报名名单Excel 需新增接口 按钮操作 0%
报名详情 查看报名详细信息 GET /registrations/:id 弹窗/抽屉 50%

2.2.2 团队报名列表

功能点 描述 后端API 前端组件 完成度
列表查询 筛选(赛事、团队名称、负责人) GET /contests/teams 需新增页面 30%
团队详情 查看团队成员信息 GET /contests/teams/:id 弹窗/抽屉 30%
审核操作 审核团队报名 PATCH /registrations/:id/review 按钮操作 30%

2.3 参赛作品模块

2.3.1 作品列表

功能点 描述 后端API 前端组件 完成度
列表查询 筛选(赛事、作品状态、参赛者) GET /contests/works works/Index.vue 60%
锁定作品 锁定作品不允许再修改 PATCH /contests/works/:id 按钮操作 50%
分配评委 将作品分配给评委 POST /contests/reviews 弹窗操作 40%
查看详情 跳转作品详情页 GET /contests/works/:id 路由跳转 50%

2.3.2 作品详情页

功能点 描述 后端API 前端组件 完成度
基本信息 作品名称、提交者、提交时间、版本号 GET /contests/works/:id 详情页 50%
作品预览 预览作品内容(图片/视频/文档) 需文件服务 预览组件 20%
附件列表 查看作品附件 已有模型 附件列表 40%
评审记录 查看各评委评分 GET /contests/reviews 评审列表 30%
历史版本 查看作品历史版本 需扩展接口 版本列表 20%

2.4 评审进度模块

2.4.1 评审进度列表

功能点 描述 后端API 前端组件 完成度
进度概览 各赛事评审进度统计 需新增接口 reviews/Index.vue 30%
评委完成度 各评委评审完成情况 需新增接口 统计列表 20%
作品评审状态 各作品评审状态分布 需新增接口 状态图表 20%

2.4.2 评审进度详情

功能点 描述 后端API 前端组件 完成度
作品评审明细 单个作品各评委评分详情 GET /contests/reviews 详情页 30%
评分对比 评委评分差异对比 需新增接口 对比图表 0%
最终得分 计算并显示最终得分 需完善逻辑 得分展示 20%

2.5 评委管理模块

2.5.1 评委池列表

功能点 描述 后端API 前端组件 完成度
评委列表 查询所有评委 GET /contests/judges/contest/:id 需新增页面 40%
添加评委 从用户中选择添加评委 POST /contests/judges 弹窗选择 40%
设置权重 设置评委权重(加权平均) PATCH /contests/judges/:id 表单编辑 30%
移除评委 移除评委 DELETE /contests/judges/:id 按钮操作 40%

2.5.2 评委详情

功能点 描述 后端API 前端组件 完成度
基本信息 评委姓名、职称、专业领域 GET /contests/judges/:id 详情页 30%
评审统计 已评/待评数量统计 需新增接口 统计卡片 0%
评审记录 该评委的评审记录 GET /contests/reviews 记录列表 20%

2.6 评审规则模块

功能点 描述 后端API 前端组件 完成度
规则配置 在赛事编辑中配置评审规则 POST/PATCH /contests/review-rules Tab组件 40%
评分维度 配置评分维度JSON配置 已支持dimensions字段 动态表单 30%
计分方式 选择计分方式(平均/加权/最高/最低) 已支持calculation字段 下拉选择 40%
分数范围 设置最低/最高分 已支持minScore/maxScore 数字输入 40%

2.7 赛果发布模块

2.7.1 赛果列表

功能点 描述 后端API 前端组件 完成度
排名列表 按最终得分排名 需新增接口 需新增页面 0%
奖项设置 设置一二三等奖及比例 需新增接口 配置表单 0%
批量设置 批量设置获奖等级 需新增接口 批量操作 0%
发布赛果 发布最终结果 需新增接口 按钮操作 0%

2.7.2 赛果详情

功能点 描述 后端API 前端组件 完成度
获奖名单 查看获奖名单 需新增接口 详情页 0%
证书生成 生成获奖证书 需新增接口 证书模板 0%
导出 导出获奖名单 需新增接口 按钮操作 0%

三、现状分析

3.1 后端模块完成度

模块 目录 API完成度 说明
认证模块 src/auth/ 100% 登录、JWT、权限守卫
用户模块 src/users/ 100% 用户CRUD
角色模块 src/roles/ 100% 角色CRUD、权限分配
权限模块 src/permissions/ 100% 权限CRUD
菜单模块 src/menus/ 100% 菜单CRUD、用户菜单
租户模块 src/tenants/ 100% 租户CRUD
字典模块 src/dict/ 100% 字典CRUD
配置模块 src/config/ 100% 系统配置CRUD
学校模块 src/school/ 100% 学校、年级、班级、部门、教师、学生
赛事核心 src/contests/contests/ 90% 赛事CRUD、发布
团队模块 src/contests/teams/ 90% 团队CRUD、成员管理
报名模块 src/contests/registrations/ 85% 报名CRUD、审核
作品模块 src/contests/works/ 80% 作品提交、版本管理
评审规则 src/contests/review-rules/ 70% 规则CRUD
评委模块 src/contests/judges/ 75% 评委CRUD
评审模块 src/contests/reviews/ 60% 分配、评分(需完善统计)
公告模块 src/contests/notices/ 90% 公告CRUD
日志模块 src/logs/ 0% 未实现
赛果模块 - 0% 未实现

3.2 前端页面完成度

模块 页面 路径 完成度 说明
认证 登录页 /login 100%
工作台 首页 /workbench 100%
系统管理 用户管理 /system/users 100%
系统管理 角色管理 /system/roles 100%
系统管理 权限管理 /system/permissions 100%
系统管理 菜单管理 /system/menus 100%
系统管理 租户管理 /system/tenants 100%
系统管理 字典管理 /system/dict 100%
系统管理 配置管理 /system/config 100%
系统管理 日志查询 /system/logs 0% 待开发
学校管理 学校信息 /school/schools 100%
学校管理 部门管理 /school/departments 100%
学校管理 年级管理 /school/grades 100%
学校管理 班级管理 /school/classes 100%
学校管理 教师管理 /school/teachers 100%
学校管理 学生管理 /school/students 100%
赛事管理 赛事列表 /contests/list 70% 需完善筛选、完结功能
赛事管理 赛事详情 /contests/:id 60% 需完善Tab结构
赛事管理 赛事表单 ContestForm.vue 60% 需完善多Tab表单
赛事管理 赛事公告 - 20% 需新增页面
报名管理 个人报名 /contests/registrations 60% 需完善审核、导出
报名管理 团队报名 - 20% 需新增页面
参赛作品 作品列表 /contests/works 50% 需完善分配、锁定
参赛作品 作品详情 - 30% 需完善详情页
评审进度 进度列表 /contests/reviews 30% 需重构为进度看板
评审进度 进度详情 - 10% 需新增页面
评委管理 评委列表 - 30% 需新增页面
评委管理 评委详情 - 10% 需新增页面
评审规则 规则配置 - 30% 需集成到赛事表单
赛果发布 赛果列表 - 0% 待开发
赛果发布 赛果详情 - 0% 待开发

3.3 数据模型完成度Prisma Schema

✅ 已定义的模型:
├── Tenant租户
├── User用户
├── Role/UserRole/Permission/RolePermission权限体系
├── Menu/TenantMenu菜单体系
├── Dict/DictItem字典
├── Config配置
├── Log日志
├── School/Grade/Department/Class/Teacher/Student学校体系
├── Contest赛事
├── ContestAttachment赛事附件
├── ContestReviewRule评审规则
├── ContestTeam/ContestTeamMember团队
├── ContestRegistration报名
├── ContestWork/ContestWorkAttachment作品
├── ContestJudge评委
├── ContestWorkJudgeAssignment作品分配
├── ContestWorkScore作品评分
└── ContestNotice赛事公告

❌ 需要新增/修改的模型:
├── Contest需新增 status: 'ongoing'|'finished' 字段)
└── ContestResult赛果发布- 可选,也可用现有模型扩展

四、待开发清单(按需求表格)

4.1 后端待开发

P0 - 核心功能(超管端闭环)

序号 模块 任务 现状 描述
B1 赛事 添加赛事完结接口 需新增 PATCH /contests/:id/finish
B2 报名 添加报名导出接口 需新增 GET /registrations/export Excel导出
B3 作品 添加作品历史版本接口 需新增 GET /works/:id/versions
B4 评审 添加评审进度统计接口 需新增 GET /reviews/statistics 按赛事统计
B5 评审 添加评委完成度统计 需新增 GET /reviews/judge-statistics
B6 评审 完善最终得分计算 需完善 根据规则计算最终得分
B7 赛果 新增赛果发布模块 需新增 排名、奖项设置、发布
B8 日志 日志模块实现 需新增 操作日志CRUD

P1 - 辅助功能

序号 模块 任务 现状 描述
B9 赛果 证书生成接口 需新增 PDF证书生成
B10 赛果 获奖名单导出 需新增 Excel导出
B11 文件 文件上传服务完善 需完善 支持预览URL生成

4.2 前端待开发

P0 - 超管端核心页面

序号 页面 路径 组件 依赖后端 描述
F1 赛事列表完善 /contests/list contests/Index.vue B1 添加完结按钮、筛选完善
F2 赛事表单重构 /contests/create contests/Form.vue - 多Tab表单基本信息/报名/作品/评审)
F3 赛事详情重构 /contests/:id contests/Detail.vue - 多Tab详情页
F4 赛事公告管理 /contests/:id/notices contests/notices/Index.vue - 公告CRUD
F5 团队报名列表 /contests/team-registrations contests/team-registrations/Index.vue - 团队报名管理
F6 作品详情页 /contests/works/:id contests/works/Detail.vue B3 详情+附件+历史版本
F7 评审进度看板 /contests/:id/review-progress contests/review-progress/Index.vue B4, B5 进度统计
F8 评委管理页 /contests/:id/judges contests/judges/Index.vue - 评委CRUD
F9 评审规则配置 集成到赛事表单 contests/components/ReviewRuleTab.vue - 评分维度配置
F10 赛果发布页 /contests/:id/results contests/results/Index.vue B7 排名/奖项/发布
F11 日志查询页 /system/logs system/logs/Index.vue B8 日志查询

P1 - 详情与导出

序号 页面 路径 组件 依赖后端 描述
F12 报名导出功能 - - B2 导出Excel按钮
F13 评委详情弹窗 - contests/judges/Detail.vue B5 评委评审统计
F14 评审详情页 /contests/reviews/:id contests/reviews/Detail.vue - 各评委评分明细
F15 赛果详情页 /contests/:id/results/:workId contests/results/Detail.vue B7 获奖详情
F16 证书下载 - - B9 证书下载功能

五、开发优先级排期

Phase 1: 赛事管理闭环3天

目标完善赛事列表、赛事表单多Tab、赛事详情

Day 1:
  - F2: 赛事表单重构多Tab基本信息、报名信息、作品信息

Day 2:
  - F2续: 赛事表单评审信息Tab + 评审规则配置 F9
  - B1: 赛事完结接口
  - F1: 赛事列表完善(完结按钮、筛选)

Day 3:
  - F3: 赛事详情页重构多Tab展示
  - F4: 赛事公告管理页

Phase 2: 报名与作品管理2天

目标:完善报名审核、团队管理、作品详情

Day 4:
  - F5: 团队报名列表页
  - B2: 报名导出接口
  - F12: 报名导出功能

Day 5:
  - B3: 作品历史版本接口
  - F6: 作品详情页(含附件、历史版本)

Phase 3: 评审进度与评委管理2天

目标:评审进度可视化、评委管理

Day 6:
  - B4: 评审进度统计接口
  - B5: 评委完成度统计接口
  - F7: 评审进度看板

Day 7:
  - F8: 评委管理页
  - F13: 评委详情弹窗
  - F14: 评审详情页

Phase 4: 赛果发布2天

目标:排名计算、奖项设置、赛果发布

Day 8:
  - B6: 最终得分计算逻辑完善
  - B7: 赛果发布模块(排名、奖项设置、发布接口)

Day 9:
  - F10: 赛果发布页
  - F15: 赛果详情页

Phase 5: 辅助功能与优化2天

目标:日志、证书、文件服务

Day 10:
  - B8: 日志模块实现
  - F11: 日志查询页
  - B11: 文件上传服务完善

Day 11:
  - B9: 证书生成接口
  - B10: 获奖名单导出
  - F16: 证书下载功能
  - 联调测试、Bug修复

超管端总计约11天


六、目录结构规划

6.1 后端新增/修改

backend/src/
├── logs/                          🆕 新增
│   ├── logs.controller.ts
│   ├── logs.service.ts
│   ├── logs.module.ts
│   └── dto/
├── contests/
│   ├── contests/                  🔧 修改
│   │   └── contests.service.ts   # 添加 finish 方法
│   ├── registrations/             🔧 修改
│   │   └── registrations.service.ts  # 添加 export 方法
│   ├── works/                     🔧 修改
│   │   └── works.service.ts      # 添加 getVersions 方法
│   ├── reviews/                   🔧 修改
│   │   └── reviews.service.ts    # 添加统计方法、完善计分
│   └── results/                   🆕 新增
│       ├── results.controller.ts
│       ├── results.service.ts
│       └── dto/
└── files/                         🔧 完善
    └── files.service.ts          # 添加预览URL生成

6.2 前端新增/修改

frontend/src/views/
├── contests/
│   ├── Index.vue                  🔧 修改(添加完结操作)
│   ├── Detail.vue                 🔧 重构多Tab
│   ├── Form.vue                   🆕 新增多Tab表单
│   ├── components/
│   │   ├── ContestForm.vue        🔧 修改拆分为Tab组件
│   │   ├── BasicInfoTab.vue       🆕 新增
│   │   ├── RegistrationTab.vue    🆕 新增
│   │   ├── WorkInfoTab.vue        🆕 新增
│   │   └── ReviewRuleTab.vue      🆕 新增
│   ├── notices/
│   │   └── Index.vue              🆕 新增
│   ├── team-registrations/
│   │   └── Index.vue              🆕 新增
│   ├── works/
│   │   ├── Index.vue              🔧 修改
│   │   └── Detail.vue             🆕 新增
│   ├── review-progress/
│   │   └── Index.vue              🆕 新增
│   ├── judges/
│   │   ├── Index.vue              🆕 新增
│   │   └── Detail.vue             🆕 新增(弹窗组件)
│   ├── reviews/
│   │   ├── Index.vue              🔧 重构
│   │   └── Detail.vue             🆕 新增
│   └── results/
│       ├── Index.vue              🆕 新增
│       └── Detail.vue             🆕 新增
└── system/
    └── logs/
        └── Index.vue              🆕 新增

七、菜单配置

7.1 需要修改/新增的菜单

-- 赛事管理下的子菜单调整
UPDATE menus SET path = '/contests/list', component = 'contests/Index' WHERE name = '赛事列表';

-- 新增菜单项
INSERT INTO menus (tenant_id, name, path, component, icon, parent_id, permission, sort, valid_state) VALUES
-- 赛事管理子菜单
(1, '赛事公告', '/contests/notices', 'contests/notices/Index', 'NotificationOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '赛事管理') t), 'contest:notice:read', 15, 1),
(1, '团队报名', '/contests/team-registrations', 'contests/team-registrations/Index', 'TeamOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '赛事管理') t), 'registration:read', 25, 1),
(1, '评审进度', '/contests/review-progress', 'contests/review-progress/Index', 'DashboardOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '赛事管理') t), 'review:read', 45, 1),
(1, '评委管理', '/contests/judges', 'contests/judges/Index', 'UserSwitchOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '赛事管理') t), 'judge:read', 55, 1),
(1, '赛果发布', '/contests/results', 'contests/results/Index', 'TrophyOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '赛事管理') t), 'result:read', 65, 1),

-- 系统管理-日志
(1, '日志查询', '/system/logs', 'system/logs/Index', 'FileTextOutlined',
  (SELECT id FROM (SELECT id FROM menus WHERE name = '系统管理') t), 'log:read', 80, 1);

7.2 需要新增的权限

INSERT INTO permissions (tenant_id, code, name, resource, action, valid_state) VALUES
-- 公告权限
(1, 'contest:notice:read', '查看赛事公告', 'contest_notice', 'read', 1),
(1, 'contest:notice:create', '创建赛事公告', 'contest_notice', 'create', 1),
(1, 'contest:notice:update', '编辑赛事公告', 'contest_notice', 'update', 1),
(1, 'contest:notice:delete', '删除赛事公告', 'contest_notice', 'delete', 1),

-- 评委权限
(1, 'judge:read', '查看评委', 'judge', 'read', 1),
(1, 'judge:create', '添加评委', 'judge', 'create', 1),
(1, 'judge:update', '编辑评委', 'judge', 'update', 1),
(1, 'judge:delete', '移除评委', 'judge', 'delete', 1),

-- 赛果权限
(1, 'result:read', '查看赛果', 'result', 'read', 1),
(1, 'result:publish', '发布赛果', 'result', 'publish', 1),
(1, 'result:export', '导出赛果', 'result', 'export', 1),

-- 日志权限
(1, 'log:read', '查看日志', 'log', 'read', 1);

八、验收标准

8.1 功能验收清单

赛事管理

  • 赛事列表支持按名称、状态、时间筛选
  • 赛事可以发布/撤销/编辑/删除/标记完结
  • 赛事表单包含4个Tab基本信息/报名/作品/评审)
  • 赛事详情页展示完整信息
  • 赛事公告支持CRUD

报名管理

  • 个人报名列表支持筛选、审核、导出
  • 团队报名列表展示团队信息、成员
  • 支持批量审核通过/拒绝

参赛作品

  • 作品列表支持筛选、分配评委、锁定
  • 作品详情展示基本信息、附件、历史版本
  • 作品可预览(图片/视频/文档)

评审进度

  • 评审进度看板展示整体完成率
  • 可查看各评委评审进度
  • 可查看单个作品各评委评分详情

评委管理

  • 评委列表支持添加、设置权重、移除
  • 评委详情显示评审统计

赛果发布

  • 支持按得分排名
  • 支持设置奖项等级
  • 支持发布赛果
  • 支持导出获奖名单

8.2 技术验收

  • 代码符合 TypeScript 规范
  • API 接口RESTful风格
  • 权限控制前后端一致
  • 关键功能有错误处理

九、风险与注意事项

风险 影响 应对措施
评分计算逻辑复杂 影响赛果准确性 仔细设计计算规则,支持多种计分方式
多Tab表单数据校验 用户体验差 分Tab校验+整体校验
文件预览兼容性 部分格式无法预览 使用第三方预览服务或限制格式
大数据量导出 性能问题 分批导出、后台任务
证书模板设计 设计复杂 先用简单模板,后续迭代

文档版本v3.0 更新时间2026-01-06 更新内容:根据需求表格详细梳理超管端功能,制定开发计划