feat(user): 重构用户端竞赛流程并添加新页面

- 将原单页竞赛流程拆分为独立路由页面(首页、封面、规则、抽题、答题、图解、组别、队伍)
- 新增 Pinia store 管理竞赛状态、计时器和音频控制
- 添加 SCSS 变量文件定义主题色
- 更新路由配置和类型定义以支持新页面结构
- 重构 QuestionRenderer 组件优化样式
- 添加图标依赖并更新国际化配置
- 移动图片资源到用户目录并清理旧文件
This commit is contained in:
2026-02-06 17:45:44 +08:00
parent ca42c6a876
commit b71a758474
39 changed files with 1559 additions and 486 deletions

View File

@ -25,6 +25,7 @@ declare module 'vue' {
IconAntDesignSettingOutlined: typeof import('~icons/ant-design/setting-outlined')['default']
IconGridiconsFullscreen: typeof import('~icons/gridicons/fullscreen')['default']
IconGridiconsFullscreenExit: typeof import('~icons/gridicons/fullscreen-exit')['default']
'IconIc:baselineArrowRightAlt': typeof import('~icons/ic/baseline-arrow-right-alt')['default']
'IconIc:baselineDeleteForever': typeof import('~icons/ic/baseline-delete-forever')['default']
'IconIc:roundPublish': typeof import('~icons/ic/round-publish')['default']
IconIcBaselineAdd: typeof import('~icons/ic/baseline-add')['default']
@ -58,6 +59,8 @@ declare module 'vue' {
IconIcOutlineTitle: typeof import('~icons/ic/outline-title')['default']
IconIcRoundAccessTime: typeof import('~icons/ic/round-access-time')['default']
IconIcRoundArrowBack: typeof import('~icons/ic/round-arrow-back')['default']
IconIcRoundArrowLeft: typeof import('~icons/ic/round-arrow-left')['default']
IconIcRoundArrowRight: typeof import('~icons/ic/round-arrow-right')['default']
IconIcRoundDelete: typeof import('~icons/ic/round-delete')['default']
IconIcRoundLibraryAdd: typeof import('~icons/ic/round-library-add')['default']
IconIcRoundPlus: typeof import('~icons/ic/round-plus')['default']
@ -190,6 +193,7 @@ declare global {
const IconAntDesignSettingOutlined: typeof import('~icons/ant-design/setting-outlined')['default']
const IconGridiconsFullscreen: typeof import('~icons/gridicons/fullscreen')['default']
const IconGridiconsFullscreenExit: typeof import('~icons/gridicons/fullscreen-exit')['default']
const 'IconIc:baselineArrowRightAlt': typeof import('~icons/ic/baseline-arrow-right-alt')['default']
const 'IconIc:baselineDeleteForever': typeof import('~icons/ic/baseline-delete-forever')['default']
const 'IconIc:roundPublish': typeof import('~icons/ic/round-publish')['default']
const IconIcBaselineAdd: typeof import('~icons/ic/baseline-add')['default']
@ -223,6 +227,8 @@ declare global {
const IconIcOutlineTitle: typeof import('~icons/ic/outline-title')['default']
const IconIcRoundAccessTime: typeof import('~icons/ic/round-access-time')['default']
const IconIcRoundArrowBack: typeof import('~icons/ic/round-arrow-back')['default']
const IconIcRoundArrowLeft: typeof import('~icons/ic/round-arrow-left')['default']
const IconIcRoundArrowRight: typeof import('~icons/ic/round-arrow-right')['default']
const IconIcRoundDelete: typeof import('~icons/ic/round-delete')['default']
const IconIcRoundLibraryAdd: typeof import('~icons/ic/round-library-add')['default']
const IconIcRoundPlus: typeof import('~icons/ic/round-plus')['default']

View File

@ -26,8 +26,6 @@ declare module "@elegant-router/types" {
"competition_competition-detail": "/competition/competition-detail";
"competition_competition-list": "/competition/competition-list";
"dictionary": "/dictionary";
"groups": "/groups";
"home": "/home";
"iframe-page": "/iframe-page/:url";
"login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?";
"question-store": "/question-store";
@ -35,11 +33,18 @@ declare module "@elegant-router/types" {
"rank_rank-detail": "/rank/rank-detail";
"rank_rank-list": "/rank/rank-list";
"results": "/results";
"teams": "/teams";
"template": "/template";
"template_template-detail": "/template/template-detail";
"template_template-list": "/template/template-list";
"user": "/user";
"user_analysis": "/user/analysis";
"user_cover": "/user/cover";
"user_draw": "/user/draw";
"user_game": "/user/game";
"user_groups": "/user/groups";
"user_home": "/user/home";
"user_rules": "/user/rules";
"user_teams": "/user/teams";
};
/**
@ -77,14 +82,11 @@ declare module "@elegant-router/types" {
| "admin-home"
| "competition"
| "dictionary"
| "groups"
| "home"
| "iframe-page"
| "login"
| "question-store"
| "rank"
| "results"
| "teams"
| "template"
| "user"
>;
@ -113,16 +115,20 @@ declare module "@elegant-router/types" {
| "competition_competition-detail"
| "competition_competition-list"
| "dictionary"
| "groups"
| "home"
| "question-store"
| "rank_rank-detail"
| "rank_rank-list"
| "results"
| "teams"
| "template_template-detail"
| "template_template-list"
| "user"
| "user_analysis"
| "user_cover"
| "user_draw"
| "user_game"
| "user_groups"
| "user_home"
| "user_rules"
| "user_teams"
>;
/**