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 @@ - - +