From b57767a4552e218ef994dd67d267dcf1363b52ba Mon Sep 17 00:00:00 2001 From: Litrix2 Date: Tue, 9 Apr 2024 17:57:51 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E8=B7=AF=E7=94=B12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 1 + src/App.vue | 53 ++++++++++++++++++++++++++++++++++++------ src/api/index.ts | 19 ++++++++++++--- src/router/index.ts | 13 +++++++++++ src/stores/index.ts | 1 + src/stores/user.ts | 6 +++++ src/views/MainPage.vue | 32 +------------------------ 7 files changed, 84 insertions(+), 41 deletions(-) create mode 100644 src/stores/user.ts diff --git a/components.d.ts b/components.d.ts index eae268a..ac09140 100644 --- a/components.d.ts +++ b/components.d.ts @@ -13,6 +13,7 @@ declare module 'vue' { ElCard: typeof import('element-plus/es')['ElCard'] ElCol: typeof import('element-plus/es')['ElCol'] ElContainer: typeof import('element-plus/es')['ElContainer'] + ElDialog: typeof import('element-plus/es')['ElDialog'] ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] diff --git a/src/App.vue b/src/App.vue index 4f2fc7f..e158f44 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,15 +1,54 @@ + + diff --git a/src/api/index.ts b/src/api/index.ts index 6818f24..f027255 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,6 +1,19 @@ import axios from 'axios'; -const instance = axios.create({ +import { useUserStore } from '@/stores'; +const axiosInstance = axios.create({ baseURL: 'http://wzpmc.cn:18080/' }); -//TODO 拦截器 -export default instance; +axiosInstance.interceptors.request.use((config) => { + const userStore = useUserStore(); + config.headers.setAuthorization(userStore.token, false); + return config; +}); +axiosInstance.interceptors.response.use((response) => { + const userStore = useUserStore(); + const authorization = response.headers['Set-Authorization'] as string | undefined; + if (authorization !== undefined) { + userStore.token = authorization; + } + return response; +}); +export default axiosInstance; diff --git a/src/router/index.ts b/src/router/index.ts index 74233e6..94088ad 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,3 +1,5 @@ +import axiosInstance from '@/api'; +import MainPage from '@/views/MainPage.vue'; import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'; type Route = RouteRecordRaw; const routes: Route[] = []; @@ -5,4 +7,15 @@ const router = createRouter({ history: createWebHistory(), routes: routes }); +let status = false; +router.beforeEach(async (to) => { + console.log(2); + if (!status) { + const value = await axiosInstance.get('/api/user/info'); + router.addRoute({ name: 'test', path: '/', component: MainPage }); + status = true; + return to.fullPath; + } + return true; +}); export default router; diff --git a/src/stores/index.ts b/src/stores/index.ts index 1a66af1..0e830a5 100644 --- a/src/stores/index.ts +++ b/src/stores/index.ts @@ -1,2 +1,3 @@ export * from './background'; export * from './2048'; +export * from './user' diff --git a/src/stores/user.ts b/src/stores/user.ts new file mode 100644 index 0000000..d6ad586 --- /dev/null +++ b/src/stores/user.ts @@ -0,0 +1,6 @@ +import { defineStore } from 'pinia'; +import { useLocalStorage } from '@vueuse/core'; +export const useUserStore = defineStore('user', () => { + const token = useLocalStorage('token', null); + return { token }; +}); diff --git a/src/views/MainPage.vue b/src/views/MainPage.vue index a55b7c1..b2d0e10 100644 --- a/src/views/MainPage.vue +++ b/src/views/MainPage.vue @@ -1,34 +1,4 @@ - - +