Files
App.k12.Parents/store/user.ts
T
2026-10-29 10:08:39 +08:00

171 lines
3.7 KiB
TypeScript

/**
* 用户状态管理
* 使用 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<UserState>({
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)
}
}