todo.md 2.7 KB

客户端开发计划 (todo)

实现顺序:题目模块 → 比赛模块。提交/判题模块本期不实现:题目详情页暂不加代码编辑器;比赛排名接口数据为空(待提交模块)。后端每完成一批接口先 npm run api:gen。

Phase 0 路由与权限扩展

  • router 新增 meta.requiresCoach(admin | coach 可访问),保留 requiresAdmin(仅 admin,用户管理)
  • AdminLayout:菜单按角色过滤;UserLayout:后台管理入口对 admin 和 coach 均显示
  • Commit(ui): # feat: 路由与布局支持coach后台入口

Phase 1 题目模块 · API生成 + 用户浏览页

  • npm run api:gen → problem-controller.ts / category-controller.ts + models
  • view/problem/ProblemListView.vue(/problems):标题/难度/分类搜索、分页、难度与公开状态标签
  • view/problem/ProblemDetailView.vue(/problems/:id):描述、时间/内存限制、提交/通过数、样例、分类标签
  • 注册 userRoutes + 顶部导航菜单
  • Commit(ui): # feat: 题目列表与详情页

Phase 2 题目模块 · 管理后台页

  • view/admin/ProblemManageView.vue(/admin/problems):仿 UserView,搜索卡+表格+弹窗;编辑时维护分类勾选;详情弹窗管理样例与评测用例(含隐藏标记)
  • view/admin/CategoryManageView.vue(/admin/categories):分类 CRUD
  • 注册 adminRoutes + 侧边菜单
  • Commit(ui): # feat: 题目管理与分类管理后台页面

Phase 3 比赛模块 · API生成 + 用户浏览页

  • npm run api:gen → contest-controller.ts + models
  • view/contest/ContestListView.vue(/contests):标题/状态搜索、类型标签、起止时间、分页
  • view/contest/ContestDetailView.vue(/contests/:id):基本信息、题目列表(题号/分值)、报名(password 型先弹密码框再拉取)、已报名/比赛状态判断
  • view/contest/ContestRankingView.vue(/contests/:id/ranking):排名表格(名次/用户/总分/AC最大耗时)
  • 注册 userRoutes + 导航菜单
  • Commit(ui): # feat: 比赛列表、详情与排名页面

Phase 4 比赛模块 · 管理后台页

  • view/admin/ContestManageView.vue(/admin/contests):比赛 CRUD、题目配置弹窗(多选题目+displayOrder+score)、报名名单
  • 注册 adminRoutes + 侧边菜单
  • Commit(ui): # feat: 比赛管理后台页面

Phase 5 验证

  • npm run build(vue-tsc 严格模式)
  • npm run dev 手工联调:游客浏览公开题 → 登录 → 教练建题/配样例/配用例/建比赛 → 用户报名 → 排名页空列表正常显示(需浏览器 + 已有账号,待用户操作)