yunzer_go/mobile/src/store/authStore.js
2025-10-27 23:13:08 +08:00

87 lines
2.0 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
export const useAuthStore = defineStore('auth', () => {
// 状态
const userInfo = ref(null)
const token = ref(null)
const isLoggedIn = ref(false)
// 计算属性
const isAuthenticated = computed(() => {
return isLoggedIn.value && token.value && userInfo.value
})
// 登录
const login = (userData, authToken) => {
userInfo.value = userData
token.value = authToken
isLoggedIn.value = true
// 保存到本地存储
uni.setStorageSync('userInfo', userData)
uni.setStorageSync('token', authToken)
uni.setStorageSync('isLoggedIn', true)
}
// 登出
const logout = () => {
userInfo.value = null
token.value = null
isLoggedIn.value = false
// 清除本地存储
uni.removeStorageSync('userInfo')
uni.removeStorageSync('token')
uni.removeStorageSync('isLoggedIn')
console.log('用户已登出')
}
// 初始化认证状态(从本地存储恢复)
const initAuth = () => {
try {
const savedUserInfo = uni.getStorageSync('userInfo')
const savedToken = uni.getStorageSync('token')
const savedIsLoggedIn = uni.getStorageSync('isLoggedIn')
if (savedUserInfo && savedToken && savedIsLoggedIn) {
userInfo.value = savedUserInfo
token.value = savedToken
isLoggedIn.value = savedIsLoggedIn
console.log('从本地存储恢复用户状态')
}
} catch (error) {
console.error('初始化认证状态失败:', error)
}
}
// 检查登录状态
const checkAuth = () => {
return isAuthenticated.value
}
// 更新用户信息
const updateUserInfo = (newUserInfo) => {
userInfo.value = { ...userInfo.value, ...newUserInfo }
uni.setStorageSync('userInfo', userInfo.value)
}
return {
// 状态
userInfo,
token,
isLoggedIn,
// 计算属性
isAuthenticated,
// 方法
login,
logout,
initAuth,
checkAuth,
updateUserInfo
}
})