This commit is contained in:
2025-12-04 12:44:54 +08:00
parent d687bf67b1
commit 3f33e5c2f1
8 changed files with 447 additions and 99 deletions

View File

@@ -135,9 +135,9 @@ export const useUserStore = defineStore('user', () => {
// 检查用户信息是否完整
const isUserInfoComplete = computed(() => {
return user.value &&
user.value.id &&
user.value.phone &&
user.value.user_type !== undefined
user.value.id &&
user.value.phone &&
user.value.user_type !== undefined
})
// 强制刷新用户信息
@@ -416,44 +416,73 @@ export const useUserStore = defineStore('user', () => {
}
}
// 初始化标志,防止重复初始化
let isInitializing = false
// 初始化
const init = async () => {
// 监听认证错误事件
authEventBus.onAuthError(handleAuthError)
// 监听版本更新事件
window.addEventListener('version:logout', handleVersionLogout)
window.addEventListener('version:refresh', handleVersionRefresh)
// 进行版本检查
if (!checkVersions()) {
// 如果已经初始化完成,直接返回
if (initialized.value) {
return
}
if (accessToken.value && !user.value) {
// 有token但无用户信息自动拉取
loading.value = true
try {
const result = await fetchUserProfile()
isAuthenticated.value = result.success
// 如果正在初始化,等待完成
if (isInitializing) {
// 等待初始化完成
while (isInitializing) {
await new Promise(resolve => setTimeout(resolve, 50))
}
return
}
// 如果认证成功,启动版本检查器
if (result.success) {
isInitializing = true
try {
// 监听认证错误事件(只注册一次)
if (!authEventBus.listeners.includes(handleAuthError)) {
authEventBus.onAuthError(handleAuthError)
}
// 监听版本更新事件(只注册一次)
if (!window.hasVersionListeners) {
window.addEventListener('version:logout', handleVersionLogout)
window.addEventListener('version:refresh', handleVersionRefresh)
window.hasVersionListeners = true
}
// 进行版本检查
if (!checkVersions()) {
initialized.value = true
return
}
if (accessToken.value && !user.value) {
// 有token但无用户信息自动拉取
loading.value = true
try {
const result = await fetchUserProfile()
isAuthenticated.value = result.success
// 如果认证成功,启动版本检查器
if (result.success) {
versionChecker.startAutoCheck()
}
} catch {
isAuthenticated.value = false
logout()
} finally {
loading.value = false
initialized.value = true
}
} else {
// 如果已经认证,启动版本检查器
if (isAuthenticated.value) {
versionChecker.startAutoCheck()
}
} catch {
isAuthenticated.value = false
logout()
} finally {
loading.value = false
initialized.value = true
}
} else {
// 如果已经认证,启动版本检查器
if (isAuthenticated.value) {
versionChecker.startAutoCheck()
}
initialized.value = true
} finally {
isInitializing = false
}
}