Files
smt/hooks/useLogin.js
T

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
}
}