library-picturebook-activity/docs/legacy/比赛平台-开发计划.md

578 lines
25 KiB
Markdown
Raw Normal View History

2026-01-08 09:17:46 +08:00
# 比赛平台管理系统 - 前后端开发计划
## 一、项目概述
### 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 需要修改/新增的菜单
```sql
-- 赛事管理下的子菜单调整
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 需要新增的权限
```sql
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*
*更新内容:根据需求表格详细梳理超管端功能,制定开发计划*