57 lines
973 B
JavaScript
57 lines
973 B
JavaScript
import { ref } from 'vue'
|
|
import { login, isLoggedIn } from '@/api/auth'
|
|
|
|
const loginReady = ref(false)
|
|
let loginPromise = null
|
|
|
|
export function useLogin() {
|
|
async function waitForLogin() {
|
|
if (loginReady.value) {
|
|
return true
|
|
}
|
|
|
|
if (loginPromise) {
|
|
return loginPromise
|
|
}
|
|
|
|
const app = getApp()
|
|
if (app && app.globalData && app.globalData.loginPromise) {
|
|
loginPromise = app.globalData.loginPromise
|
|
const result = await loginPromise
|
|
loginReady.value = true
|
|
return result
|
|
}
|
|
|
|
loginPromise = doLogin()
|
|
return loginPromise
|
|
}
|
|
|
|
async function doLogin() {
|
|
try {
|
|
if (!isLoggedIn()) {
|
|
await login()
|
|
}
|
|
loginReady.value = true
|
|
return true
|
|
} catch (e) {
|
|
console.error('登录失败:', e)
|
|
loginReady.value = true
|
|
return false
|
|
}
|
|
}
|
|
|
|
async function ensureLogin() {
|
|
if (isLoggedIn()) {
|
|
loginReady.value = true
|
|
return true
|
|
}
|
|
return waitForLogin()
|
|
}
|
|
|
|
return {
|
|
loginReady,
|
|
waitForLogin,
|
|
ensureLogin
|
|
}
|
|
}
|