feat(admin): 新增题库、排行榜、实时结果和模板管理功能

- 添加题库管理页面及相关组件
- 实现排行榜管理功能,包括列表和详情页
- 新增实时结果展示页面
- 添加模板制作和管理功能
- 完善路由配置和国际化支持
- 新增阿里云OSS文件上传服务
- 添加多种工具函数和类型定义
- 优化表格和表单组件
- 调整布局和样式细节
This commit is contained in:
2026-01-22 17:55:35 +08:00
parent d950bb4018
commit 697d606611
47 changed files with 3810 additions and 685 deletions

View File

@ -24,5 +24,9 @@ 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"),
home: () => import("@/views/home/index.vue"),
question: () => import("@/views/question/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"),
template: () => import("@/views/template/index.vue"),
};

View File

@ -45,7 +45,9 @@ export const generatedRoutes: GeneratedRoute[] = [
component: 'layout.base',
meta: {
title: 'competition',
i18nKey: 'route.competition'
i18nKey: 'route.competition',
icon: 'material-symbols:settings-motion-mode-outline-rounded',
order: 1
},
children: [
{
@ -89,7 +91,8 @@ export const generatedRoutes: GeneratedRoute[] = [
title: 'home',
i18nKey: 'route.home',
icon: 'mdi:monitor-dashboard',
order: 1
order: 99,
hideInMenu: true
}
},
{
@ -118,12 +121,72 @@ export const generatedRoutes: GeneratedRoute[] = [
}
},
{
name: 'question',
path: '/question',
component: 'layout.base$view.question',
name: 'question-store',
path: '/question-store',
component: 'layout.base$view.question-store',
meta: {
title: 'question',
i18nKey: 'route.question'
title: 'question-store',
i18nKey: 'route.question-store',
icon: 'solar:clipboard-text-outline',
order: 3
}
},
{
name: 'rank',
path: '/rank',
component: 'layout.base',
meta: {
title: 'rank',
i18nKey: 'route.rank',
icon: 'mdi:chart-line',
order: 5
},
children: [
{
name: 'rank_rank-detail',
path: '/rank/rank-detail',
component: 'view.rank_rank-detail',
meta: {
title: 'rank_rank-detail',
i18nKey: 'route.rank_rank-detail',
icon: 'mdi:chart-line-variant',
multiTab: true,
hideInMenu: true
}
},
{
name: 'rank_rank-list',
path: '/rank/rank-list',
component: 'view.rank_rank-list',
meta: {
title: 'rank_rank-list',
i18nKey: 'route.rank_rank-list',
icon: 'mdi:chart-line-variant',
order: 1
}
}
]
},
{
name: 'results',
path: '/results',
component: 'layout.base$view.results',
meta: {
title: 'results',
i18nKey: 'route.results',
icon: 'mdi:clipboard-check-multiple',
order: 2
}
},
{
name: 'template',
path: '/template',
component: 'layout.base$view.template',
meta: {
title: 'template',
i18nKey: 'route.template',
icon: 'material-symbols:settings-motion-mode-outline-rounded',
order: 4
}
}
];

View File

@ -173,7 +173,12 @@ const routeMap: RouteMap = {
"home": "/home",
"iframe-page": "/iframe-page/:url",
"login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?",
"question": "/question"
"question-store": "/question-store",
"rank": "/rank",
"rank_rank-detail": "/rank/rank-detail",
"rank_rank-list": "/rank/rank-list",
"results": "/results",
"template": "/template"
};
/**