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