@@ -87,7 +87,12 @@ const menus = computed<MenuOption[]>(() => [
|
||||
icon: renderIcon("streamline-emojis:palm-tree"),
|
||||
},
|
||||
{
|
||||
label: () => h(RouterLink, { to: "/admin" }, { default: () => "后台" }),
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: userStore.isTheAdmin ? "/admin/problem/list" : "/admin" },
|
||||
{ default: () => (userStore.isTheAdmin ? "我出的题" : "后台") },
|
||||
),
|
||||
show: userStore.isAdminRole,
|
||||
key: "admin",
|
||||
icon: renderIcon("streamline-emojis:ghost"),
|
||||
|
||||
@@ -7,55 +7,92 @@ import { useUserStore } from "../store/user"
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const userStore = useUserStore()
|
||||
const options: MenuOption[] = [
|
||||
{
|
||||
label: () => h(RouterLink, { to: "/" }, { default: () => "前台" }),
|
||||
key: "return to OJ",
|
||||
},
|
||||
{
|
||||
label: () => h(RouterLink, { to: "/admin" }, { default: () => "管理" }),
|
||||
key: "admin home",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/config" }, { default: () => "设置" }),
|
||||
key: "admin config",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/problem/list" }, { default: () => "题目" }),
|
||||
key: "admin problem list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/comment/list" }, { default: () => "评论" }),
|
||||
key: "admin comment list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/user/list" }, { default: () => "用户" }),
|
||||
key: "admin user list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/contest/list" }, { default: () => "比赛" }),
|
||||
key: "admin contest list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/announcement/list" },
|
||||
{ default: () => "公告" },
|
||||
),
|
||||
key: "admin announcement list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/tutorial/list" }, { default: () => "教程" }),
|
||||
key: "admin tutorial list",
|
||||
},
|
||||
]
|
||||
|
||||
// 根据用户权限动态生成菜单选项
|
||||
const options = computed<MenuOption[]>(() => {
|
||||
const baseOptions: MenuOption[] = [
|
||||
{
|
||||
label: () => h(RouterLink, { to: "/" }, { default: () => "前台" }),
|
||||
key: "return to OJ",
|
||||
},
|
||||
]
|
||||
|
||||
// admin 可以访问的功能
|
||||
if (userStore.isTheAdmin) {
|
||||
baseOptions.push({
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/problem/list" }, { default: () => "题目" }),
|
||||
key: "admin problem list",
|
||||
})
|
||||
}
|
||||
|
||||
// super_admin 可以访问的功能
|
||||
if (userStore.isSuperAdmin) {
|
||||
baseOptions.push(
|
||||
{
|
||||
label: () => h(RouterLink, { to: "/admin" }, { default: () => "管理" }),
|
||||
key: "admin home",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/problem/list" },
|
||||
{ default: () => "题目" },
|
||||
),
|
||||
key: "admin problem list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/contest/list" },
|
||||
{ default: () => "比赛" },
|
||||
),
|
||||
key: "admin contest list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/config" }, { default: () => "设置" }),
|
||||
key: "admin config",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(RouterLink, { to: "/admin/user/list" }, { default: () => "用户" }),
|
||||
key: "admin user list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/comment/list" },
|
||||
{ default: () => "评论" },
|
||||
),
|
||||
key: "admin comment list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/announcement/list" },
|
||||
{ default: () => "公告" },
|
||||
),
|
||||
key: "admin announcement list",
|
||||
},
|
||||
{
|
||||
label: () =>
|
||||
h(
|
||||
RouterLink,
|
||||
{ to: "/admin/tutorial/list" },
|
||||
{ default: () => "教程" },
|
||||
),
|
||||
key: "admin tutorial list",
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
return baseOptions
|
||||
})
|
||||
|
||||
const active = computed(() => (route.name as string) || "home")
|
||||
|
||||
|
||||
@@ -13,6 +13,9 @@ export const useUserStore = defineStore("user", () => {
|
||||
user.value?.admin_type === USER_TYPE.ADMIN ||
|
||||
user.value?.admin_type === USER_TYPE.SUPER_ADMIN,
|
||||
)
|
||||
const isTheAdmin = computed(
|
||||
() => user.value?.admin_type === USER_TYPE.ADMIN,
|
||||
)
|
||||
const isSuperAdmin = computed(
|
||||
() => user.value?.admin_type === USER_TYPE.SUPER_ADMIN,
|
||||
)
|
||||
@@ -37,6 +40,7 @@ export const useUserStore = defineStore("user", () => {
|
||||
isFinished,
|
||||
user,
|
||||
isAdminRole,
|
||||
isTheAdmin,
|
||||
isSuperAdmin,
|
||||
hasProblemPermission,
|
||||
isAuthed,
|
||||
|
||||
Reference in New Issue
Block a user