123 lines
3.6 KiB
TypeScript
123 lines
3.6 KiB
TypeScript
|
import { pinia } from "@/pinia"
|
||
|
import { LoginData } from "@/common/apis/ab98/type"
|
||
|
|
||
|
// 本地存储键名常量
|
||
|
const STORAGE_KEYS = {
|
||
|
FACE: 'ab98_face',
|
||
|
SEX: 'ab98_sex',
|
||
|
NAME: 'ab98_name',
|
||
|
USERID: 'ab98_userid',
|
||
|
REGISTERED: 'ab98_registered',
|
||
|
TEL: 'ab98_tel',
|
||
|
TOKEN: 'ab98_token'
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* AB98用户信息存储
|
||
|
* @description 管理AB98系统用户相关状态信息
|
||
|
*/
|
||
|
export const useAb98UserStore = defineStore("ab98User", () => {
|
||
|
// 用户面部图像URL
|
||
|
const storedFace = localStorage.getItem(STORAGE_KEYS.FACE)
|
||
|
const face_img = ref<string>(storedFace ? atob(storedFace) : '')
|
||
|
// 用户性别(男/女)
|
||
|
const storedSex = localStorage.getItem(STORAGE_KEYS.SEX)
|
||
|
const sex = ref<string>(storedSex ? atob(storedSex) : '')
|
||
|
// 用户真实姓名
|
||
|
const storedName = localStorage.getItem(STORAGE_KEYS.NAME)
|
||
|
const name = ref<string>(storedName ? atob(storedName) : '')
|
||
|
// AB98系统用户唯一标识
|
||
|
const storedUserId = localStorage.getItem(STORAGE_KEYS.USERID)
|
||
|
const userid = ref<string>(storedUserId ? atob(storedUserId) : "")
|
||
|
// 是否已完成注册流程
|
||
|
const registered = ref<boolean>(JSON.parse(localStorage.getItem(STORAGE_KEYS.REGISTERED) || "false"))
|
||
|
// 用户绑定手机号
|
||
|
const storedTel = localStorage.getItem(STORAGE_KEYS.TEL)
|
||
|
const tel = ref<string>(storedTel ? atob(storedTel) : "")
|
||
|
// 用户认证令牌
|
||
|
const storedToken = localStorage.getItem(STORAGE_KEYS.TOKEN)
|
||
|
const token = ref<string>(storedToken ? atob(storedToken) : "")
|
||
|
// 用户登录状态
|
||
|
const isLogin = ref<boolean>(false);
|
||
|
isLogin.value = tel.value ? true : false;
|
||
|
|
||
|
/**
|
||
|
* 更新用户基本信息
|
||
|
* @param data - 登录接口返回的用户数据
|
||
|
*/
|
||
|
const setUserInfo = (data: LoginData) => {
|
||
|
face_img.value = data.face_img
|
||
|
localStorage.setItem(STORAGE_KEYS.FACE, btoa(data.face_img))
|
||
|
sex.value = data.sex
|
||
|
localStorage.setItem(STORAGE_KEYS.SEX, btoa(data.sex))
|
||
|
name.value = data.name
|
||
|
localStorage.setItem(STORAGE_KEYS.NAME, btoa(data.name))
|
||
|
userid.value = data.userid
|
||
|
localStorage.setItem(STORAGE_KEYS.USERID, btoa(data.userid))
|
||
|
registered.value = data.registered
|
||
|
localStorage.setItem(STORAGE_KEYS.REGISTERED, JSON.stringify(data.registered))
|
||
|
tel.value = data.tel
|
||
|
localStorage.setItem(STORAGE_KEYS.TEL, btoa(data.tel))
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 清空用户敏感信息
|
||
|
* @description 用于用户登出或会话过期时
|
||
|
*/
|
||
|
const clearUserInfo = () => {
|
||
|
face_img.value = ""
|
||
|
localStorage.removeItem(STORAGE_KEYS.FACE)
|
||
|
sex.value = ""
|
||
|
localStorage.removeItem(STORAGE_KEYS.SEX)
|
||
|
name.value = ""
|
||
|
localStorage.removeItem(STORAGE_KEYS.NAME)
|
||
|
userid.value = ""
|
||
|
localStorage.removeItem(STORAGE_KEYS.USERID)
|
||
|
registered.value = false
|
||
|
localStorage.removeItem(STORAGE_KEYS.REGISTERED)
|
||
|
tel.value = ""
|
||
|
localStorage.removeItem(STORAGE_KEYS.TEL)
|
||
|
localStorage.removeItem(STORAGE_KEYS.TOKEN)
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 设置认证令牌
|
||
|
* @param value - JWT格式的认证令牌
|
||
|
*/
|
||
|
const setToken = (value: string) => {
|
||
|
localStorage.setItem(STORAGE_KEYS.TOKEN, btoa(value))
|
||
|
token.value = value
|
||
|
}
|
||
|
|
||
|
const setTel = (value: string) => {
|
||
|
localStorage.setItem(STORAGE_KEYS.TEL, btoa(value))
|
||
|
tel.value = value
|
||
|
}
|
||
|
|
||
|
const setIsLogin = (value: boolean) => {
|
||
|
isLogin.value = value;
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
face_img,
|
||
|
sex,
|
||
|
name,
|
||
|
userid,
|
||
|
registered,
|
||
|
tel,
|
||
|
token,
|
||
|
isLogin,
|
||
|
setUserInfo,
|
||
|
setToken,
|
||
|
setTel,
|
||
|
setIsLogin,
|
||
|
clearUserInfo
|
||
|
}
|
||
|
})
|
||
|
|
||
|
/**
|
||
|
* @description 在非setup上下文或SSR场景中使用store
|
||
|
*/
|
||
|
export function useAb98UserStoreOutside() {
|
||
|
return useAb98UserStore(pinia)
|
||
|
}
|