From f7b8ef89781c91bdb4a2a3ab97b443f6c90dffd1 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 25 Sep 2025 20:12:24 +0800 Subject: [PATCH] update --- src/admin/problem/detail.vue | 89 +++++++++++++++++++----------------- src/admin/setting/config.vue | 9 ---- src/admin/setting/home.vue | 9 ---- src/admin/user/list.vue | 8 ---- src/main.ts | 37 +++++---------- src/routes.ts | 16 +++---- 6 files changed, 66 insertions(+), 102 deletions(-) diff --git a/src/admin/problem/detail.vue b/src/admin/problem/detail.vue index dacf6aa..09a12ab 100644 --- a/src/admin/problem/detail.vue +++ b/src/admin/problem/detail.vue @@ -119,49 +119,54 @@ async function getProblemDetail() { toggleReady(true) return } - const { data } = await getProblem(props.problemID) - toggleReady(true) - problem.value.id = data.id - problem.value._id = data._id - problem.value.title = data.title - problem.value.description = data.description - problem.value.input_description = data.input_description - problem.value.output_description = data.output_description - problem.value.time_limit = data.time_limit - problem.value.memory_limit = data.memory_limit - problem.value.memory_limit = data.memory_limit - problem.value.difficulty = data.difficulty - problem.value.visible = data.visible - problem.value.share_submission = data.share_submission - problem.value.tags = data.tags - problem.value.languages = data.languages - problem.value.template = data.template - problem.value.samples = data.samples - problem.value.samples = data.samples - problem.value.spj = data.spj - problem.value.spj_language = data.spj_language - problem.value.spj_code = data.spj_code - problem.value.spj_compile_ok = data.spj_compile_ok - problem.value.test_case_id = data.test_case_id - problem.value.test_case_score = data.test_case_score - problem.value.rule_type = data.rule_type - problem.value.hint = data.hint - problem.value.source = data.source - problem.value.io_mode = data.io_mode - if (problem.value.contest_id) { - problem.value.contest_id = problem.value.contest_id - } - - // 下面是用来显示的: - // 代码模板 和 模板开关 - problem.value.languages.forEach((lang) => { - if (data.template[lang]) { - template[lang] = data.template[lang] - toggleNeedTemplate(true) + try { + const { data } = await getProblem(props.problemID) + toggleReady(true) + problem.value.id = data.id + problem.value._id = data._id + problem.value.title = data.title + problem.value.description = data.description + problem.value.input_description = data.input_description + problem.value.output_description = data.output_description + problem.value.time_limit = data.time_limit + problem.value.memory_limit = data.memory_limit + problem.value.memory_limit = data.memory_limit + problem.value.difficulty = data.difficulty + problem.value.visible = data.visible + problem.value.share_submission = data.share_submission + problem.value.tags = data.tags + problem.value.languages = data.languages + problem.value.template = data.template + problem.value.samples = data.samples + problem.value.samples = data.samples + problem.value.spj = data.spj + problem.value.spj_language = data.spj_language + problem.value.spj_code = data.spj_code + problem.value.spj_compile_ok = data.spj_compile_ok + problem.value.test_case_id = data.test_case_id + problem.value.test_case_score = data.test_case_score + problem.value.rule_type = data.rule_type + problem.value.hint = data.hint + problem.value.source = data.source + problem.value.io_mode = data.io_mode + if (problem.value.contest_id) { + problem.value.contest_id = problem.value.contest_id } - }) - // 标签 - tags.value.select = data.tags + + // 下面是用来显示的: + // 代码模板 和 模板开关 + problem.value.languages.forEach((lang) => { + if (data.template[lang]) { + template[lang] = data.template[lang] + toggleNeedTemplate(true) + } + }) + // 标签 + tags.value.select = data.tags + } catch (error) { + message.error("获取题目失败") + router.push({ name: "admin problem list" }) + } } async function getTagList() { diff --git a/src/admin/setting/config.vue b/src/admin/setting/config.vue index 68c4a00..35ae7e9 100644 --- a/src/admin/setting/config.vue +++ b/src/admin/setting/config.vue @@ -2,7 +2,6 @@ import { NButton, NTag } from "naive-ui" import { parseTime } from "~/utils/functions" import { Server } from "~/utils/types" -import { usePermissions } from "~/utils/permissions" import { deleteJudgeServer, editWebsite, @@ -18,14 +17,6 @@ interface Testcase { } const message = useMessage() -const router = useRouter() -const { canManageSystemConfig } = usePermissions() - -// 权限检查:只有super_admin可以管理系统配置 -if (!canManageSystemConfig.value) { - message.error("您没有权限访问此页面") - router.push("/admin") -} const testcaseColumns: DataTableColumn[] = [ { title: "测试用例 ID", key: "id" }, diff --git a/src/admin/setting/home.vue b/src/admin/setting/home.vue index 2f8bf12..c43fb32 100644 --- a/src/admin/setting/home.vue +++ b/src/admin/setting/home.vue @@ -3,7 +3,6 @@ import { NButton } from "naive-ui" import { getRank } from "oj/api" import Pagination from "~/shared/components/Pagination.vue" import { useUserStore } from "~/shared/store/user" -import { usePermissions } from "~/utils/permissions" import { getACRate } from "~/utils/functions" import { Rank } from "~/utils/types" import { getBaseInfo, randomUser10 } from "../api" @@ -14,14 +13,6 @@ const contestCount = ref(0) const userStore = useUserStore() const router = useRouter() const message = useMessage() -const { isSuperAdmin } = usePermissions() - -// 权限检查:只有super_admin可以访问管理员首页 -if (!isSuperAdmin.value) { - message.error("您没有权限访问此页面") - router.push("/admin/problem/list") -} - const showModal = ref(false) const luckyGuy = ref("") const data = ref([]) diff --git a/src/admin/user/list.vue b/src/admin/user/list.vue index 5e42bf7..7bb8735 100644 --- a/src/admin/user/list.vue +++ b/src/admin/user/list.vue @@ -3,7 +3,6 @@ import { DataTableRowKey, SelectOption } from "naive-ui" import Pagination from "~/shared/components/Pagination.vue" import { parseTime, filterEmptyValue } from "~/utils/functions" import { User } from "~/utils/types" -import { usePermissions } from "~/utils/permissions" import { deleteUsers, editUser, @@ -18,13 +17,6 @@ import { USER_TYPE } from "~/utils/constants" const message = useMessage() const router = useRouter() const route = useRoute() -const { canManageUsers } = usePermissions() - -// 权限检查:只有super_admin可以管理用户 -if (!canManageUsers.value) { - message.error("您没有权限访问此页面") - router.push("/admin") -} const total = ref(0) const users = ref([]) diff --git a/src/main.ts b/src/main.ts index e4f2b2d..912e97e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,6 +25,7 @@ import App from "./App.vue" import { admins, ojs } from "./routes" import { toggleLogin } from "./shared/composables/modal" +import { useUserStore } from "./shared/store/user" const router = createRouter({ history: createWebHistory(), @@ -41,23 +42,20 @@ router.beforeEach(async (to, from, next) => { } } - // 检查管理员权限 - if (to.matched.some((record) => - record.meta.requiresAdmin || - record.meta.requiresSuperAdmin || - record.meta.requiresProblemPermission - )) { + // 检查权限 + if ( + to.matched.some( + (record) => + record.meta.requiresSuperAdmin || record.meta.requiresProblemPermission, + ) + ) { if (!storage.get(STORAGE_KEY.AUTHED)) { toggleLogin(true) next("/") return } - // 动态导入用户store来检查权限 - const { useUserStore } = await import("./shared/store/user") const userStore = useUserStore() - - // 确保用户信息已加载 if (!userStore.user) { try { await userStore.getMyProfile() @@ -66,26 +64,15 @@ router.beforeEach(async (to, from, next) => { return } } - - // 检查super admin权限 if (to.matched.some((record) => record.meta.requiresSuperAdmin)) { if (!userStore.isSuperAdmin) { - next("/admin") + next("/") return } - } - - // 检查题目权限 - else if (to.matched.some((record) => record.meta.requiresProblemPermission)) { + } else if ( + to.matched.some((record) => record.meta.requiresProblemPermission) + ) { if (!userStore.hasProblemPermission) { - next("/admin") - return - } - } - - // 检查基本admin权限 - else if (to.matched.some((record) => record.meta.requiresAdmin)) { - if (!userStore.isAdminRole) { next("/") return } diff --git a/src/routes.ts b/src/routes.ts index 53be434..9d7d1b9 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -107,9 +107,8 @@ export const admins: RouteRecordRaw = { path: "", name: "admin home", component: () => import("~/admin/setting/home.vue"), - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, - // 只有super_admin可以访问的路由 { path: "config", name: "admin config", @@ -148,46 +147,45 @@ export const admins: RouteRecordRaw = { props: true, meta: { requiresProblemPermission: true }, }, - // admin和super_admin都可以访问的路由 { path: "contest/list", name: "admin contest list", component: () => import("admin/contest/list.vue"), - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, { path: "contest/create", name: "admin contest create", component: () => import("admin/contest/detail.vue"), - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, { path: "contest/edit/:contestID", name: "admin contest edit", component: () => import("admin/contest/detail.vue"), props: true, - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, { path: "contest/:contestID/problem/list", name: "admin contest problem list", component: () => import("admin/problem/list.vue"), props: true, - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, { path: "contest/:contestID/problem/create", name: "admin contest problem create", component: () => import("admin/problem/detail.vue"), props: true, - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, { path: "contest/:contestID/problem/edit/:problemID", name: "admin contest problem edit", component: () => import("admin/problem/detail.vue"), props: true, - meta: { requiresAdmin: true }, + meta: { requiresSuperAdmin: true }, }, // 只有super_admin可以访问的路由 {