实现顺序:题目模块 → 比赛模块。提交/判题模块本期不实现:题目详情页暂不加代码编辑器;比赛排名接口数据为空(待提交模块)。后端每完成一批接口先
npm run api:gen。
meta.requiresCoach(admin | coach 可访问),保留 requiresAdmin(仅 admin,用户管理)# feat: 路由与布局支持coach后台入口npm run api:gen → problem-controller.ts / category-controller.ts + modelsview/problem/ProblemListView.vue(/problems):标题/难度/分类搜索、分页、难度与公开状态标签view/problem/ProblemDetailView.vue(/problems/:id):描述、时间/内存限制、提交/通过数、样例、分类标签# feat: 题目列表与详情页view/admin/ProblemManageView.vue(/admin/problems):仿 UserView,搜索卡+表格+弹窗;编辑时维护分类勾选;详情弹窗管理样例与评测用例(含隐藏标记)view/admin/CategoryManageView.vue(/admin/categories):分类 CRUD# feat: 题目管理与分类管理后台页面npm run api:gen → contest-controller.ts + modelsview/contest/ContestListView.vue(/contests):标题/状态搜索、类型标签、起止时间、分页view/contest/ContestDetailView.vue(/contests/:id):基本信息、题目列表(题号/分值)、报名(password 型先弹密码框再拉取)、已报名/比赛状态判断view/contest/ContestRankingView.vue(/contests/:id/ranking):排名表格(名次/用户/总分/AC最大耗时)# feat: 比赛列表、详情与排名页面view/admin/ContestManageView.vue(/admin/contests):比赛 CRUD、题目配置弹窗(多选题目+displayOrder+score)、报名名单# feat: 比赛管理后台页面npm run build(vue-tsc 严格模式)npm run dev 手工联调:游客浏览公开题 → 登录 → 教练建题/配样例/配用例/建比赛 → 用户报名 → 排名页空列表正常显示(需浏览器 + 已有账号,待用户操作)