user.model.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { getStorage, setStorage, removeStorage } from "../storage";
  2. /** SDK 登录用户信息接口 */
  3. export interface UserInfoInterface {
  4. token: string;
  5. user_name: string;
  6. reg_time: string;
  7. uid: number;
  8. openid: string;
  9. game_id: number;
  10. pop_content?: string;
  11. pop_title?: string;
  12. is_first_login?: boolean;
  13. is_reactive_user?: boolean;
  14. share_ext?:string;
  15. }
  16. const STORAGE_KEY = "userInfo";
  17. const DEFAULT_INFO: UserInfoInterface = {
  18. token: "",
  19. user_name: "",
  20. reg_time: "",
  21. uid: 0,
  22. openid: "",
  23. game_id: 0,
  24. };
  25. /**
  26. * SDK 登录用户信息模型
  27. * 单例模式,自动从缓存加载/保存
  28. */
  29. class UserInfoModel {
  30. private static instance: UserInfoModel | null = null;
  31. private data: UserInfoInterface;
  32. private constructor() {
  33. // 从缓存加载数据
  34. this.data = getStorage<UserInfoInterface>(STORAGE_KEY, DEFAULT_INFO) ?? DEFAULT_INFO;
  35. }
  36. static getInstance(): UserInfoModel {
  37. if (!UserInfoModel.instance) {
  38. UserInfoModel.instance = new UserInfoModel();
  39. }
  40. return UserInfoModel.instance;
  41. }
  42. /** 获取用户信息 */
  43. get(): UserInfoInterface {
  44. let launchOptions = tt.getLaunchOptionsSync();
  45. let query:any = launchOptions.query;
  46. const share_ext = query.share_ext;
  47. this.data.share_ext = share_ext ? share_ext : "";
  48. return this.data;
  49. }
  50. /** 保存用户信息到缓存 */
  51. save(info: UserInfoInterface): boolean {
  52. this.data = info;
  53. return setStorage(STORAGE_KEY, info);
  54. }
  55. /** 更新部分用户信息 */
  56. update(partial: Partial<UserInfoInterface>): boolean {
  57. this.data = { ...this.data, ...partial };
  58. return setStorage(STORAGE_KEY, this.data);
  59. }
  60. /** 清除用户信息 */
  61. clear(): boolean {
  62. this.data = { ...DEFAULT_INFO };
  63. return removeStorage(STORAGE_KEY);
  64. }
  65. /** 是否已登录 */
  66. isLoggedIn(): boolean {
  67. return !!this.data.token && this.data.uid > 0;
  68. }
  69. /** 获取 token */
  70. getToken(): string {
  71. return this.data.token;
  72. }
  73. /** 获取 uid */
  74. getUid(): number {
  75. return this.data.uid;
  76. }
  77. }
  78. export default UserInfoModel;