import { emitter } from '@kit.BasicServicesKit' import { AppStorageKeyCollect } from '../constants' /** * @description 用户信息类,可结合AppStorage使用,实现响应式更换用户信息,使用时替换为后端传回的用户属性即可 */ export class UserInfo { static KEY: string = 'UserInfo' private declare static instance: UserInfo private isLogin: boolean = false private token?: string //此注释下的属性可按需更改 private memberName?: string private memberPhone?: string private memberEmail?: string private memberIcon?: string private aiCount?: number private userId?: number private memberScore?: number private constructor() { } /** * 获取用户单例 * @returns UserInfo */ static getInstance() { if (!UserInfo.instance) { UserInfo.instance = new UserInfo() } return UserInfo.instance } /** * 设置用户信息并且设置登录状态 * @param _userInfo */ setUserInfoAndLogin(_userInfo: UserInfo) { this.isLogin = true if (_userInfo.token) { userInfo.token = _userInfo.token } this.memberEmail = _userInfo.memberEmail this.memberIcon = _userInfo.memberIcon this.memberName = _userInfo.memberName this.userId = _userInfo.userId this.memberScore = _userInfo.memberScore this.aiCount = _userInfo.aiCount this.memberPhone = _userInfo.memberPhone emitter.emit('refreshList') AppStorage.setOrCreate(UserInfo.KEY, this) } /** * @description 登出并清空用户信息 */ logout() { this.isLogin = false this.token = undefined this.memberEmail = undefined this.memberIcon = undefined this.memberName = undefined this.userId = undefined this.memberScore = undefined this.aiCount = undefined this.memberPhone = undefined AppStorage.setOrCreate(UserInfo.KEY, this) AppStorage.setOrCreate(AppStorageKeyCollect.TOKEN, undefined) } /** * 检测用户是否登录 * @returns boolean */ checkLogin() { return this.isLogin } getToken() { return this.token } setToken(token: string) { this.token = token AppStorage.setOrCreate(AppStorageKeyCollect.TOKEN, token) AppStorage.setOrCreate(UserInfo.KEY, this) return this } getHeadImg() { if (this.memberIcon) { return this.memberIcon } return $r('app.media.app_icon') } setHeadImg(headImg: string) { this.memberIcon = headImg AppStorage.setOrCreate(UserInfo.KEY, this) return this } getEmail() { return this.memberEmail } setEmail(email: string) { this.memberEmail = email AppStorage.setOrCreate(UserInfo.KEY, this) return this } getName() { // this.userInfo.getName() ?? this.userInfo.getPhoneNumber() ?? this.userInfo.getId()?.toString() if (this.memberName) { return this.memberName } else if (this.memberPhone) { return this.memberPhone } else if (this.userId) { return this.userId?.toString() } else { if (this.isLogin) { return '华为用户' } return '未登录' } } setName(name: string) { this.memberName = name AppStorage.setOrCreate(UserInfo.KEY, this) return this } getId() { //(this.userInfo.getId()?.toString().padStart(8, '0') ?? '00000000') if (this.userId) { return this.userId.toString().padStart(8, '0') } return '00000000' } setId(id: number) { this.userId = id AppStorage.setOrCreate(UserInfo.KEY, this) return this } getGoldNum() { return this.memberScore } setGoldNum(goldNum: number) { this.memberScore = goldNum AppStorage.setOrCreate(UserInfo.KEY, this) return this } getAiNum() { return this.aiCount } setAiNum(aiNum: number) { this.aiCount = aiNum AppStorage.setOrCreate(UserInfo.KEY, this) return this } getPhoneNumber() { return this.memberPhone } setPhoneNumber(phoneNumber: string) { this.memberPhone = phoneNumber AppStorage.setOrCreate(UserInfo.KEY, this) return this } } export const userInfo = UserInfo.getInstance()