diff --git a/src/oj/user/index.vue b/src/oj/user/index.vue
new file mode 100644
index 0000000..a46b7b5
--- /dev/null
+++ b/src/oj/user/index.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/oj/user/setting.vue b/src/oj/user/setting.vue
new file mode 100644
index 0000000..a46b7b5
--- /dev/null
+++ b/src/oj/user/setting.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/routes.ts b/src/routes.ts
index 99d3f8a..55d7308 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -71,6 +71,16 @@ export const routes: RouteRecordRaw[] = [
component: () => import("oj/rank/list.vue"),
beforeEnter: loadChart,
},
+ {
+ path: "user",
+ component: () => import("oj/user/index.vue"),
+ meta: { requiresAuth: true },
+ },
+ {
+ path: "setting",
+ component: () => import("oj/user/setting.vue"),
+ meta: { requiresAuth: true },
+ },
{
path: "learn",
redirect: "learn/step-1",
diff --git a/src/shared/Header.vue b/src/shared/Header.vue
index a2a1252..727fcbe 100644
--- a/src/shared/Header.vue
+++ b/src/shared/Header.vue
@@ -15,25 +15,19 @@ import { code } from "~/shared/composables/learn"
const userStore = useUserStore()
const route = useRoute()
const router = useRouter()
+const active = computed(() => {
+ const path = route.path.split("/")[1] || "problem"
+ return !["user", "setting"].includes(path) ? path : ""
+})
async function handleLogout() {
await logout()
- userStore.clearMyProfile()
+ userStore.clearProfile()
router.replace("/")
}
-function handleDropdown(key: string) {
- switch (key) {
- case "logout":
- handleLogout()
- break
- }
-}
-
onMounted(userStore.getMyProfile)
-const defaultValue = computed(() => route.path.split("/")[1] || "problem")
-
const menus: MenuOption[] = [
{
label: () =>
@@ -60,12 +54,30 @@ const menus: MenuOption[] = [
]
const options = computed>(() => [
- { label: "我的主页", key: "home" },
- { label: "我的提交", key: "status" },
- { label: "我的设置", key: "setting" },
+ {
+ label: "我的主页",
+ key: "home",
+ props: {
+ onClick: () => router.push("/user"),
+ },
+ },
+ {
+ label: "我的提交",
+ key: "status",
+ props: {
+ onClick: () => router.push("/submission?myself=1"),
+ },
+ },
+ {
+ label: "我的设置",
+ key: "setting",
+ props: {
+ onClick: () => router.push("/setting"),
+ },
+ },
{ label: "后台管理", key: "admin", show: userStore.isAdminRole },
{ type: "divider" },
- { label: "退出", key: "logout" },
+ { label: "退出", key: "logout", props: { onClick: handleLogout } },
])
function run() {
@@ -75,7 +87,7 @@ function run() {
-
+
@@ -88,7 +100,6 @@ function run() {
v-if="userStore.isAuthed"
:options="options"
trigger="click"
- @select="handleDropdown"
>
{{ userStore.user.username }}
@@ -106,12 +117,7 @@ function run() {
运行
-
+
{{ userStore.user.username }}
diff --git a/src/shared/store/user.ts b/src/shared/store/user.ts
index 7955aa1..eb1f2cc 100644
--- a/src/shared/store/user.ts
+++ b/src/shared/store/user.ts
@@ -27,7 +27,7 @@ export const useUserStore = defineStore("user", () => {
storage.set(STORAGE_KEY.AUTHED, !!user.value.email)
}
- function clearMyProfile() {
+ function clearProfile() {
profile.value = {}
storage.clear()
}
@@ -40,6 +40,6 @@ export const useUserStore = defineStore("user", () => {
hasProblemPermission,
isAuthed,
getMyProfile,
- clearMyProfile,
+ clearProfile,
}
})