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 @@
@@ -23,10 +44,17 @@
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>,