diff --git a/src/router/index.ts b/src/router/index.ts index 24cfc33..43de51f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,7 +1,7 @@ import { createRouter, createWebHistory } from 'vue-router' import { useUserInfoStore } from '@/stores/userInfo' import { useGlobalStore } from '@/stores/global' -import { getUserLanguage } from '@/api/user' +import { getUserLanguage, fetchUserProfile } from '@/api/user' import { fetchAllUnreadMessage } from '@/api/notification' import i18n from '@/lang/index' import myEvent from '@/utils/myEvent' @@ -20,7 +20,7 @@ let languageSynced = false * 1. 设置路由的meta属性为{ cache: true },表示需要缓存 * 2. App.vue中使用RouteCache组件,通过路由的name来进行匹配 * 3. 路由的name默认是文件名,如果文件名与name不一致,通过defineOptions({ name: 'componentName' })来设置 - * + * * 需要登录路由: meta={ login:true } */ const router = createRouter({ @@ -98,7 +98,7 @@ const router = createRouter({ }) router.beforeEach((to, from, next) => { - if(to.meta?.login && !useUserInfoStore().state.token) { + if (to.meta?.login && !useUserInfoStore().state.token) { myEvent.emit('openLoginDialog') } next() @@ -113,9 +113,19 @@ router.afterEach(async () => { return } - const globalStore = useGlobalStore() + const avatarUrl = userInfoStore.state.userInfo.avatarUrl + if (!avatarUrl) { + fetchUserProfile().then((res) => { + const profile = res as any + if (profile.avatarUrl) { + userInfoStore.setAvatarUrl(profile.avatarUrl) + } + }) + } + + const globalStore = useGlobalStore() fetchAllUnreadMessage().then((res) => { - globalStore.setUnredCount(res.totalUnread) + globalStore.setUnredCount(res.totalUnread) }) if (languageSynced) { diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts index 5c6bc54..80610fc 100644 --- a/src/stores/userInfo.ts +++ b/src/stores/userInfo.ts @@ -13,6 +13,7 @@ export const useUserInfoStore = defineStore('userInfo', () => { username: "", accessToken: "", expiresIn: "", + avatarUrl: "", }, token: '' }) @@ -28,6 +29,10 @@ export const useUserInfoStore = defineStore('userInfo', () => { setLocal(data, 'token') } + const setAvatarUrl = (url: string) => { + state.value.userInfo.avatarUrl = url + } + const logout = async (reload: boolean = false) => { // 处理退出登录的一些逻辑 const userId = state.value.userInfo.userId @@ -38,6 +43,7 @@ export const useUserInfoStore = defineStore('userInfo', () => { username: "", accessToken: "", expiresIn: "", + avatarUrl: "", } state.value.token = '' removeLocal('token') @@ -49,6 +55,7 @@ export const useUserInfoStore = defineStore('userInfo', () => { state, setToken, setUserInfo, + setAvatarUrl, logout } -}) +}) \ No newline at end of file diff --git a/src/views/main-header.vue b/src/views/main-header.vue index 7062f06..d63f9fa 100644 --- a/src/views/main-header.vue +++ b/src/views/main-header.vue @@ -51,7 +51,9 @@