import { AppStorageKeyCollect, EmitterKeyCollection } from '../constants' import { emitter } from '@kit.BasicServicesKit' import { YTUserRequest } from '../apis/YTUserRequest' import { YTLog } from '../../../../Index' /** * @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 declare pushToken: string private constructor() { } /** * 获取用户单例 * @returns UserInfo */ static getInstance() { if (!UserInfo.instance) { UserInfo.instance = new UserInfo() } return UserInfo.instance } /** * 设置用户信息并且设置登录状态 * @param _userInfo */ setUserInfoAndLogin(_userInfo: UserInfo) { userInfo.isLogin = true if (_userInfo.token) { userInfo.token = _userInfo.token } userInfo.memberEmail = _userInfo.memberEmail userInfo.memberIcon = _userInfo.memberIcon userInfo.memberName = _userInfo.memberName userInfo.userId = _userInfo.userId userInfo.memberScore = _userInfo.memberScore userInfo.aiCount = _userInfo.aiCount userInfo.memberPhone = _userInfo.memberPhone emitter.emit(EmitterKeyCollection.LOGIN) AppStorage.setOrCreate(UserInfo.KEY, userInfo) } /** * @description 登出并清空用户信息 */ logout() { userInfo.isLogin = false userInfo.token = undefined userInfo.memberEmail = undefined userInfo.memberIcon = undefined userInfo.memberName = undefined userInfo.userId = undefined userInfo.memberScore = undefined userInfo.aiCount = undefined userInfo.memberPhone = undefined AppStorage.setOrCreate(UserInfo.KEY, userInfo) emitter.emit(EmitterKeyCollection.LOGOUT) 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(defaultIcon?: ResourceStr) { if (this.memberIcon) { return this.memberIcon } if (defaultIcon) { return defaultIcon } 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 } setPushToken(pushToken: string) { this.pushToken = pushToken return this } pushPushTokenToBackEnd(success: () => void) { YTUserRequest.savePushToken(this, (res, err) => { if (!err && res) { YTLog.info(res) success() } else { YTLog.error(err) } }) } } export const userInfo = UserInfo.getInstance()