From 03cca647432dda962a7ae16bdbc41759f0144929 Mon Sep 17 00:00:00 2001 From: Twilight Date: Wed, 11 Sep 2024 17:05:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components.d.ts | 2 ++ src/components/Menu.vue | 50 ++++++------------------------------- src/components/UserMenu.vue | 19 ++++++++++++++ src/layouts/Header.vue | 34 ++++++++++++++++++++++--- src/pages/auth/logout.vue | 3 +++ src/plugins/menus/left.ts | 32 ++++++++++++++++++++++++ src/plugins/menus/user.ts | 31 +++++++++++++++++++++++ src/typed-router.d.ts | 1 + 8 files changed, 126 insertions(+), 46 deletions(-) create mode 100644 src/components/UserMenu.vue create mode 100644 src/pages/auth/logout.vue create mode 100644 src/plugins/menus/left.ts create mode 100644 src/plugins/menus/user.ts diff --git a/src/components.d.ts b/src/components.d.ts index 57c14bc..76483a0 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -9,9 +9,11 @@ declare module 'vue' { export interface GlobalComponents { Chat: typeof import('./components/chat/chat.vue')['default'] Container: typeof import('./components/Container.vue')['default'] + copy: typeof import('./components/Menu copy.vue')['default'] Menu: typeof import('./components/Menu.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Test: typeof import('./components/chat/test.vue')['default'] + UserMenu: typeof import('./components/UserMenu.vue')['default'] } } diff --git a/src/components/Menu.vue b/src/components/Menu.vue index ff874ec..376123b 100644 --- a/src/components/Menu.vue +++ b/src/components/Menu.vue @@ -4,54 +4,18 @@ :collapsed="collapsed" :collapsed-width="64" :collapsed-icon-size="22" - :options="menuOptions" + :options="leftMenuOptions" /> diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue new file mode 100644 index 0000000..d07c7d4 --- /dev/null +++ b/src/components/UserMenu.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/layouts/Header.vue b/src/layouts/Header.vue index c359c17..cb9a7e0 100644 --- a/src/layouts/Header.vue +++ b/src/layouts/Header.vue @@ -4,7 +4,12 @@ - + diff --git a/src/pages/auth/logout.vue b/src/pages/auth/logout.vue new file mode 100644 index 0000000..938490a --- /dev/null +++ b/src/pages/auth/logout.vue @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/plugins/menus/left.ts b/src/plugins/menus/left.ts new file mode 100644 index 0000000..4e8a233 --- /dev/null +++ b/src/plugins/menus/left.ts @@ -0,0 +1,32 @@ +import type { MenuOption } from "naive-ui"; +import { RouterLink } from "vue-router"; +import { NIcon } from "naive-ui"; +import { Home as HomeIcon } from "@vicons/ionicons5"; + +const menuOptions: Ref = ref([]); + +function renderIcon(icon: Component) { + return () => h(NIcon, null, { default: () => h(icon) }); +} + +const addMenuItem = (to: string, label: string, icon: any) => { + menuOptions.value.push({ + label: () => + h( + RouterLink, + { + to: { + name: to as any, + }, + }, + { default: () => label } + ), + key: to as string, + icon: renderIcon(icon), + }); +}; + +addMenuItem("/", "Amber", HomeIcon); +addMenuItem("/auth/login", "Amber", HomeIcon); + +export { addMenuItem as addLeftMenu, menuOptions as leftMenuOptions }; diff --git a/src/plugins/menus/user.ts b/src/plugins/menus/user.ts new file mode 100644 index 0000000..9e4395d --- /dev/null +++ b/src/plugins/menus/user.ts @@ -0,0 +1,31 @@ +import type { MenuOption } from "naive-ui"; +import { RouterLink } from "vue-router"; +import { NIcon } from "naive-ui"; +import { LogOutOutline } from "@vicons/ionicons5"; + +const menuOptions: Ref = ref([]); + +function renderIcon(icon: Component) { + return () => h(NIcon, null, { default: () => h(icon) }); +} + +const addMenuItem = (to: string, label: string, icon: any) => { + menuOptions.value.push({ + label: () => + h( + RouterLink, + { + to: { + name: to as any, + }, + }, + { default: () => label } + ), + key: to as string, + icon: renderIcon(icon), + }); +}; + +addMenuItem("/auth/logout", "退出登录", LogOutOutline); + +export { addMenuItem as addUserMenu, menuOptions as userMenuOptions }; diff --git a/src/typed-router.d.ts b/src/typed-router.d.ts index 6268247..cf2fe80 100644 --- a/src/typed-router.d.ts +++ b/src/typed-router.d.ts @@ -22,6 +22,7 @@ declare module 'vue-router/auto-routes' { '/auth/callback': RouteRecordInfo<'/auth/callback', '/auth/callback', Record, Record>, '/auth/continue': RouteRecordInfo<'/auth/continue', '/auth/continue', Record, Record>, '/auth/login': RouteRecordInfo<'/auth/login', '/auth/login', Record, Record>, + '/auth/logout': RouteRecordInfo<'/auth/logout', '/auth/logout', Record, Record>, '/guest/': RouteRecordInfo<'/guest/', '/guest', Record, Record>, '/test': RouteRecordInfo<'/test', '/test', Record, Record>, '/test2': RouteRecordInfo<'/test2', '/test2', Record, Record>,