feat(user): 重构用户端竞赛流程并添加新页面
- 将原单页竞赛流程拆分为独立路由页面(首页、封面、规则、抽题、答题、图解、组别、队伍) - 新增 Pinia store 管理竞赛状态、计时器和音频控制 - 添加 SCSS 变量文件定义主题色 - 更新路由配置和类型定义以支持新页面结构 - 重构 QuestionRenderer 组件优化样式 - 添加图标依赖并更新国际化配置 - 移动图片资源到用户目录并清理旧文件
This commit is contained in:
@ -25,14 +25,18 @@ export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<Ro
|
||||
"competition_competition-detail": () => import("@/views/competition/competition-detail/index.vue"),
|
||||
"competition_competition-list": () => import("@/views/competition/competition-list/index.vue"),
|
||||
dictionary: () => import("@/views/dictionary/index.vue"),
|
||||
groups: () => import("@/views/groups/index.vue"),
|
||||
home: () => import("@/views/home/index.vue"),
|
||||
"question-store": () => import("@/views/question-store/index.vue"),
|
||||
"rank_rank-detail": () => import("@/views/rank/rank-detail/index.vue"),
|
||||
"rank_rank-list": () => import("@/views/rank/rank-list/index.vue"),
|
||||
results: () => import("@/views/results/index.vue"),
|
||||
teams: () => import("@/views/teams/index.vue"),
|
||||
"template_template-detail": () => import("@/views/template/template-detail/index.vue"),
|
||||
"template_template-list": () => import("@/views/template/template-list/index.vue"),
|
||||
user: () => import("@/views/user/index.vue"),
|
||||
user_analysis: () => import("@/views/user/analysis/index.vue"),
|
||||
user_cover: () => import("@/views/user/cover/index.vue"),
|
||||
user_draw: () => import("@/views/user/draw/index.vue"),
|
||||
user_game: () => import("@/views/user/game/index.vue"),
|
||||
user_groups: () => import("@/views/user/groups/index.vue"),
|
||||
user_home: () => import("@/views/user/home/index.vue"),
|
||||
user_rules: () => import("@/views/user/rules/index.vue"),
|
||||
user_teams: () => import("@/views/user/teams/index.vue"),
|
||||
};
|
||||
|
||||
@ -104,32 +104,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
order: 6
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'groups',
|
||||
path: '/groups',
|
||||
component: 'layout.blank$view.groups',
|
||||
meta: {
|
||||
title: 'groups',
|
||||
i18nKey: 'route.groups',
|
||||
icon: 'material-symbols:group',
|
||||
order: 2,
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'home',
|
||||
path: '/home',
|
||||
component: 'layout.blank$view.home',
|
||||
meta: {
|
||||
title: 'home',
|
||||
i18nKey: 'route.home',
|
||||
icon: 'material-symbols:home',
|
||||
order: 0,
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'iframe-page',
|
||||
path: '/iframe-page/:url',
|
||||
@ -213,17 +187,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
order: 2
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'teams',
|
||||
path: '/teams',
|
||||
component: 'layout.blank$view.teams',
|
||||
meta: {
|
||||
title: 'teams',
|
||||
i18nKey: 'route.teams',
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'template',
|
||||
path: '/template',
|
||||
@ -263,14 +226,103 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
{
|
||||
name: 'user',
|
||||
path: '/user',
|
||||
component: 'layout.blank$view.user',
|
||||
component: 'layout.blank',
|
||||
redirect: '/user/home',
|
||||
meta: {
|
||||
title: 'user',
|
||||
i18nKey: 'route.user',
|
||||
icon: 'material-symbols:account-circle',
|
||||
order: 6,
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: 'user_analysis',
|
||||
path: '/user/analysis',
|
||||
component: 'view.user_analysis',
|
||||
meta: {
|
||||
title: 'user_analysis',
|
||||
i18nKey: 'route.user_analysis',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_cover',
|
||||
path: '/user/cover',
|
||||
component: 'view.user_cover',
|
||||
meta: {
|
||||
title: 'user_cover',
|
||||
i18nKey: 'route.user_cover',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_draw',
|
||||
path: '/user/draw',
|
||||
component: 'view.user_draw',
|
||||
meta: {
|
||||
title: 'user_draw',
|
||||
i18nKey: 'route.user_draw',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_game',
|
||||
path: '/user/game',
|
||||
component: 'view.user_game',
|
||||
meta: {
|
||||
title: 'user_game',
|
||||
i18nKey: 'route.user_game',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_groups',
|
||||
path: '/user/groups',
|
||||
component: 'view.user_groups',
|
||||
meta: {
|
||||
title: 'user_groups',
|
||||
i18nKey: 'route.user_groups',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_home',
|
||||
path: '/user/home',
|
||||
component: 'view.user_home',
|
||||
meta: {
|
||||
title: 'user_home',
|
||||
i18nKey: 'route.user_home',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_rules',
|
||||
path: '/user/rules',
|
||||
component: 'view.user_rules',
|
||||
meta: {
|
||||
title: 'user_rules',
|
||||
i18nKey: 'route.user_rules',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'user_teams',
|
||||
path: '/user/teams',
|
||||
component: 'view.user_teams',
|
||||
meta: {
|
||||
title: 'user_teams',
|
||||
i18nKey: 'route.user_teams',
|
||||
hideInMenu: true,
|
||||
constant: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@ -172,8 +172,6 @@ const routeMap: RouteMap = {
|
||||
"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",
|
||||
@ -181,11 +179,18 @@ const routeMap: RouteMap = {
|
||||
"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": "/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"
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -9,6 +9,16 @@ import { transformElegantRoutesToVueRoutes } from '../elegant/transform'
|
||||
* @link https://github.com/reader-starjs/elegant-router?tab=readme-ov-file#custom-route
|
||||
*/
|
||||
const customRoutes: CustomRoute[] = [
|
||||
{
|
||||
name: 'root',
|
||||
path: '/',
|
||||
redirect: '/user/home',
|
||||
meta: {
|
||||
title: 'root',
|
||||
constant: true,
|
||||
hideInMenu: true,
|
||||
},
|
||||
} as unknown as CustomRoute,
|
||||
{
|
||||
name: 'admin',
|
||||
path: '/admin',
|
||||
|
||||
Reference in New Issue
Block a user