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