Files
ojnext/src/routes.ts
yuetsh 9f07fcb0a0
Some checks failed
Deploy / deploy (push) Has been cancelled
update
2025-10-23 00:54:10 +08:00

299 lines
8.3 KiB
TypeScript

import { RouteRecordRaw } from "vue-router"
export const ojs: RouteRecordRaw = {
path: "/",
component: () => import("shared/layout/default.vue"),
children: [
{ path: "", component: () => import("oj/problem/list.vue") },
{
path: "problem/:problemID",
component: () => import("oj/problem/detail.vue"),
props: true,
name: "problem",
},
{
path: "submission",
component: () => import("oj/submission/list.vue"),
name: "submissions",
},
{
path: "submission/:submissionID",
component: () => import("oj/submission/detail.vue"),
props: true,
meta: { requiresAuth: true },
},
{
path: "contest",
component: () => import("oj/contest/list.vue"),
name: "contests",
},
{
path: "contest/:contestID",
component: () => import("oj/contest/detail.vue"),
props: true,
meta: { requiresAuth: true },
children: [
{
path: "",
component: () => import("oj/contest/pages/problems.vue"),
props: true,
meta: { requiresAuth: true },
name: "contest problems",
},
{
path: "submission",
component: () => import("oj/submission/list.vue"),
meta: { requiresAuth: true },
name: "contest submissions",
},
{
path: "rank",
component: () => import("oj/contest/pages/rank.vue"),
props: true,
meta: { requiresAuth: true },
name: "contest rank",
},
],
},
{
path: "contest/:contestID/problem/:problemID",
component: () => import("oj/problem/detail.vue"),
props: true,
name: "contest problem",
meta: { requiresAuth: true },
},
{
path: "rank",
component: () => import("oj/rank/list.vue"),
},
{
path: "announcement",
component: () => import("oj/announcement/list.vue"),
},
{
path: "user",
component: () => import("oj/user/index.vue"),
meta: { requiresAuth: true },
},
{
path: "setting",
component: () => import("oj/user/setting.vue"),
meta: { requiresAuth: true },
},
{
path: "message",
component: () => import("oj/user/message.vue"),
meta: { requiresAuth: true },
},
{
path: "learn/:step+",
name: "learn",
component: () => import("oj/learn/index.vue"),
props: true,
},
{
path: "ai-analysis",
component: () => import("oj/ai/analysis.vue"),
meta: { requiresAuth: true },
},
{
path: "flowchart",
component: () => import("oj/flowchart/index.vue"),
},
{
path: "problemset",
component: () => import("oj/problemset/list.vue"),
name: "problemsets",
},
{
path: "problemset/:problemSetId",
component: () => import("oj/problemset/detail.vue"),
props: true,
name: "problemset",
},
{
path: "problemset/:problemSetId/problem/:problemID",
component: () => import("oj/problem/detail.vue"),
props: true,
name: "problemset problem",
meta: { requiresAuth: true },
},
],
}
export const admins: RouteRecordRaw = {
path: "/admin",
component: () => import("shared/layout/admin.vue"),
children: [
{
path: "",
name: "admin home",
component: () => import("admin/setting/home.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "config",
name: "admin config",
component: () => import("admin/setting/config.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "user/list",
name: "admin user list",
component: () => import("admin/user/list.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "user/generate",
name: "admin user generate",
component: () => import("admin/user/generate.vue"),
meta: { requiresSuperAdmin: true },
},
// admin和super_admin都可以访问的路由 (需要题目权限)
{
path: "problem/list",
name: "admin problem list",
component: () => import("admin/problem/list.vue"),
meta: { requiresProblemPermission: true },
},
{
path: "problem/create",
name: "admin problem create",
component: () => import("admin/problem/detail.vue"),
meta: { requiresProblemPermission: true },
},
{
path: "problem/edit/:problemID",
name: "admin problem edit",
component: () => import("admin/problem/detail.vue"),
props: true,
meta: { requiresProblemPermission: true },
},
{
path: "contest/list",
name: "admin contest list",
component: () => import("admin/contest/list.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "contest/create",
name: "admin contest create",
component: () => import("admin/contest/detail.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "contest/edit/:contestID",
name: "admin contest edit",
component: () => import("admin/contest/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/list",
name: "admin contest problem list",
component: () => import("admin/problem/list.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/create",
name: "admin contest problem create",
component: () => import("admin/problem/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/problem/edit/:problemID",
name: "admin contest problem edit",
component: () => import("admin/problem/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "contest/:contestID/helper",
name: "admin contest helper",
component: () => import("admin/contest/helper.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
// 只有super_admin可以访问的路由
{
path: "announcement/list",
name: "admin announcement list",
component: () => import("admin/announcement/list.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "announcement/create",
name: "admin announcement create",
component: () => import("admin/announcement/detail.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "announcement/edit/:announcementID",
name: "admin announcement edit",
component: () => import("admin/announcement/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "comment/list",
name: "admin comment list",
component: () => import("admin/communication/comments.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "message/list",
name: "admin message list",
component: () => import("admin/communication/messages.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "tutorial/list",
name: "admin tutorial list",
component: () => import("admin/tutorial/list.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "tutorial/create",
name: "admin tutorial create",
component: () => import("admin/tutorial/detail.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "tutorial/edit/:tutorialID",
name: "admin tutorial edit",
component: () => import("admin/tutorial/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
// 题单管理路由
{
path: "problemset/list",
name: "admin problemset list",
component: () => import("admin/problemset/list.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "problemset/create",
name: "admin problemset create",
component: () => import("admin/problemset/edit.vue"),
meta: { requiresSuperAdmin: true },
},
{
path: "problemset/edit/:problemSetId",
name: "admin problemset edit",
component: () => import("admin/problemset/edit.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
{
path: "problemset/:problemSetId",
name: "admin problemset detail",
component: () => import("admin/problemset/detail.vue"),
props: true,
meta: { requiresSuperAdmin: true },
},
],
}