578 lines
25 KiB
Markdown
578 lines
25 KiB
Markdown
|
|
# 比赛平台管理系统 - 前后端开发计划
|
|||
|
|
|
|||
|
|
## 一、项目概述
|
|||
|
|
|
|||
|
|
### 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*
|
|||
|
|
*更新内容:根据需求表格详细梳理超管端功能,制定开发计划*
|