/** * 用户状态管理 * 使用 uni-app x 的响应式系统 */ import type { UserInfo } from '../api/auth' import { clearHomeStudentProfile } from './home' // 用户状态类型 type UserState = { userInfo: UserInfo | null token: string isLoggedIn: boolean rememberPassword: boolean rememberedPhone: string rememberedPassword: string } // 创建响应式用户状态 const userState = reactive({ userInfo: null, token: '', isLoggedIn: false, rememberPassword: false, rememberedPhone: '', rememberedPassword: '' }) /** * 初始化用户状态 * 从本地存储恢复登录状态和记住密码信息 */ export function initUserStore() { // 恢复登录状态 const token = uni.getStorageSync('token') as string const userInfo = uni.getStorageSync('userInfo') as UserInfo | null if (token && userInfo) { userState.token = token userState.userInfo = userInfo userState.isLoggedIn = true } // 恢复记住密码信息 const rememberInfo = uni.getStorageSync('rememberInfo') as any if (rememberInfo && rememberInfo.remember) { userState.rememberPassword = true userState.rememberedPhone = rememberInfo.phone userState.rememberedPassword = rememberInfo.password } } /** * 设置用户信息 */ export function setUserInfo(userInfo: UserInfo) { userState.userInfo = userInfo userState.token = userInfo.token userState.isLoggedIn = true // 保存到本地存储 uni.setStorageSync('token', userInfo.token) uni.setStorageSync('refreshToken', userInfo.refreshToken) uni.setStorageSync('userInfo', userInfo) } /** * 保存记住密码信息 */ export function saveRememberInfo(phone: string, password: string, remember: boolean) { userState.rememberPassword = remember userState.rememberedPhone = phone userState.rememberedPassword = password if (remember) { uni.setStorageSync('rememberInfo', { phone, password, remember: true }) } else { uni.removeStorageSync('rememberInfo') } } /** * 获取记住的密码信息 */ export function getRememberInfo(): { phone: string, password: string, remember: boolean } { return { phone: userState.rememberedPhone, password: userState.rememberedPassword, remember: userState.rememberPassword } } /** * 清除用户状态 */ export function clearUserInfo() { userState.userInfo = null userState.token = '' userState.isLoggedIn = false // 清除本地存储 uni.removeStorageSync('token') uni.removeStorageSync('refreshToken') uni.removeStorageSync('userInfo') clearHomeStudentProfile() } /** * 退出登录 */ export function logout() { clearUserInfo() // 跳转到登录页 uni.reLaunch({ url: '/pages/login/index' }) } /** * 获取用户信息 */ export function getUserInfo(): UserInfo | null { return userState.userInfo } /** * 获取Token */ export function getToken(): string { return userState.token } /** * 获取登录状态 */ export function getIsLoggedIn(): boolean { return userState.isLoggedIn } /** * 更新Token */ export function updateToken(token: string, refreshToken: string) { userState.token = token uni.setStorageSync('token', token) uni.setStorageSync('refreshToken', refreshToken) if (userState.userInfo !== null) { userState.userInfo.token = token userState.userInfo.refreshToken = refreshToken uni.setStorageSync('userInfo', userState.userInfo) } } // 导出用户状态(只读) export function useUserStore() { return { userInfo: computed(() => userState.userInfo), token: computed(() => userState.token), isLoggedIn: computed(() => userState.isLoggedIn), rememberPassword: computed(() => userState.rememberPassword), rememberedPhone: computed(() => userState.rememberedPhone), rememberedPassword: computed(() => userState.rememberedPassword) } }