diff --git a/src/main.ts b/src/main.ts index f906f63..07de5ce 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,14 +4,14 @@ import { createPinia } from "pinia" import storage from "utils/storage" import { STORAGE_KEY } from "utils/constants" -import { routes } from "./routes" +import { ojs, admins } from "./routes" import App from "./App.vue" import { toggleLogin } from "./shared/composables/modal" const router = createRouter({ history: createWebHistory(), - routes: [routes], + routes: [ojs, admins], }) router.beforeEach((to, from, next) => { diff --git a/src/routes.ts b/src/routes.ts index 4dfa05f..e6cd87b 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,7 +1,7 @@ import { RouteRecordRaw } from "vue-router" import { loadChart } from "./shared/composables/chart" -export const routes: RouteRecordRaw = { +export const ojs: RouteRecordRaw = { path: "/", component: () => import("~/shared/layout/default.vue"), children: [ @@ -89,86 +89,87 @@ export const routes: RouteRecordRaw = { component: () => import("learn/index.vue"), name: "learn", }, + ], +} + +export const admins: RouteRecordRaw = { + path: "/admin", + component: () => import("~/shared/layout/admin.vue"), + children: [ { - path: "/admin", - component: () => import("~/shared/layout/admin.vue"), - children: [ - { - path: "", - name: "admin home", - component: () => import("~/admin/setting/home.vue"), - }, - { - path: "config", - name: "admin config", - component: () => import("admin/setting/config.vue"), - }, - { - path: "announcement", - name: "admin announcement", - component: () => import("admin/setting/announcement.vue"), - }, - { - path: "user/list", - name: "admin user list", - component: () => import("admin/user/list.vue"), - }, - { - path: "user/generate", - name: "admin user generate", - component: () => import("~/admin/user/generate.vue"), - }, - { - path: "problem/list", - name: "admin problem list", - component: () => import("admin/problem/list.vue"), - }, - { - path: "problem/create", - name: "admin problem create", - component: () => import("admin/problem/detail.vue"), - }, - { - path: "problem/edit/:problemID", - name: "admin problem edit", - component: () => import("admin/problem/detail.vue"), - props: true, - }, - { - path: "contest/list", - name: "admin contest list", - component: () => import("admin/contest/list.vue"), - }, - { - path: "contest/create", - name: "admin contest create", - component: () => import("admin/contest/detail.vue"), - }, - { - path: "contest/edit/:contestID", - name: "admin contest edit", - component: () => import("admin/contest/detail.vue"), - props: true, - }, - { - path: "contest/:contestID/problem/list", - name: "admin contest problem list", - component: () => import("admin/problem/list.vue"), - props: true, - }, - { - path: "contest/:contestID/problem/create", - name: "admin contest problem create", - component: () => import("admin/problem/detail.vue"), - props: true, - }, - { - path: "contest/:contestID/problem/edit/:problemID", - name: "admin contest problem edit", - component: () => import("admin/problem/detail.vue"), - props: true, - }, - ], + path: "", + name: "admin home", + component: () => import("~/admin/setting/home.vue"), + }, + { + path: "config", + name: "admin config", + component: () => import("admin/setting/config.vue"), + }, + { + path: "announcement", + name: "admin announcement", + component: () => import("admin/setting/announcement.vue"), + }, + { + path: "user/list", + name: "admin user list", + component: () => import("admin/user/list.vue"), + }, + { + path: "user/generate", + name: "admin user generate", + component: () => import("~/admin/user/generate.vue"), + }, + { + path: "problem/list", + name: "admin problem list", + component: () => import("admin/problem/list.vue"), + }, + { + path: "problem/create", + name: "admin problem create", + component: () => import("admin/problem/detail.vue"), + }, + { + path: "problem/edit/:problemID", + name: "admin problem edit", + component: () => import("admin/problem/detail.vue"), + props: true, + }, + { + path: "contest/list", + name: "admin contest list", + component: () => import("admin/contest/list.vue"), + }, + { + path: "contest/create", + name: "admin contest create", + component: () => import("admin/contest/detail.vue"), + }, + { + path: "contest/edit/:contestID", + name: "admin contest edit", + component: () => import("admin/contest/detail.vue"), + props: true, + }, + { + path: "contest/:contestID/problem/list", + name: "admin contest problem list", + component: () => import("admin/problem/list.vue"), + props: true, + }, + { + path: "contest/:contestID/problem/create", + name: "admin contest problem create", + component: () => import("admin/problem/detail.vue"), + props: true, + }, + { + path: "contest/:contestID/problem/edit/:problemID", + name: "admin contest problem edit", + component: () => import("admin/problem/detail.vue"), + props: true, }, ], } diff --git a/src/shared/layout/admin.vue b/src/shared/layout/admin.vue index 410a3c9..89e56a4 100644 --- a/src/shared/layout/admin.vue +++ b/src/shared/layout/admin.vue @@ -8,6 +8,10 @@ const route = useRoute() const router = useRouter() const userStore = useUserStore() const options: MenuOption[] = [ + { + label: () => h(RouterLink, { to: "/" }, { default: () => "返回 OJ" }), + key: "return to OJ", + }, { label: () => h(RouterLink, { to: "/admin" }, { default: () => "首页" }), key: "admin home", @@ -101,19 +105,14 @@ onMounted(async () => { - +