Initial commit
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
import type { StudentAlert, StudentHomeMetrics, StudentHomeProfile } from '../api/student'
|
||||
|
||||
// 仅在本次登录会话内缓存首页学生资料,切换一级页面时不重复请求。
|
||||
export const homeStudentProfile = ref<StudentHomeProfile | null>(null)
|
||||
export const homeStudentMetrics = ref<StudentHomeMetrics | null>(null)
|
||||
export const homeStudentAlerts = ref<StudentAlert[] | null>(null)
|
||||
|
||||
export function setHomeStudentProfile(profile: StudentHomeProfile) {
|
||||
homeStudentProfile.value = profile
|
||||
}
|
||||
|
||||
export function setHomeStudentMetrics(metrics: StudentHomeMetrics) {
|
||||
homeStudentMetrics.value = metrics
|
||||
}
|
||||
|
||||
export function setHomeStudentAlerts(alerts: StudentAlert[]) {
|
||||
homeStudentAlerts.value = alerts
|
||||
}
|
||||
|
||||
export function clearHomeStudentProfile() {
|
||||
homeStudentProfile.value = null
|
||||
homeStudentMetrics.value = null
|
||||
homeStudentAlerts.value = null
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { StudentInfo } from '../api/student'
|
||||
|
||||
// 仅在注册流程中保存待绑定学生,供扫码与手动输入页面共同使用。
|
||||
export const registrationStudents = ref<StudentInfo[]>([])
|
||||
|
||||
export function resetRegistrationStudents() {
|
||||
registrationStudents.value.splice(0)
|
||||
}
|
||||
+170
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
* 用户状态管理
|
||||
* 使用 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user