UserInfo.ets 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. import { AppStorageKeyCollect, EmitterKeyCollection } from '../constants'
  2. import { emitter } from '@kit.BasicServicesKit'
  3. import { YTUserRequest } from '../apis/YTUserRequest'
  4. import { YTLog } from '../../../../Index'
  5. /**
  6. * @description 用户信息类,可结合AppStorage使用,实现响应式更换用户信息,使用时替换为后端传回的用户属性即可
  7. */
  8. export class UserInfo {
  9. static KEY: string = 'UserInfo'
  10. private declare static instance: UserInfo
  11. private isLogin: boolean = false
  12. private token?: string
  13. //此注释下的属性可按需更改
  14. private memberName?: string
  15. private memberPhone?: string
  16. private memberEmail?: string
  17. private memberIcon?: string
  18. private aiCount?: number
  19. private userId?: number
  20. private memberScore?: number
  21. private declare pushToken: string
  22. private constructor() {
  23. }
  24. /**
  25. * 获取用户单例
  26. * @returns UserInfo
  27. */
  28. static getInstance() {
  29. if (!UserInfo.instance) {
  30. UserInfo.instance = new UserInfo()
  31. }
  32. return UserInfo.instance
  33. }
  34. /**
  35. * 设置用户信息并且设置登录状态
  36. * @param _userInfo
  37. */
  38. setUserInfoAndLogin(_userInfo: UserInfo) {
  39. userInfo.isLogin = true
  40. if (_userInfo.token) {
  41. userInfo.token = _userInfo.token
  42. }
  43. userInfo.memberEmail = _userInfo.memberEmail
  44. userInfo.memberIcon = _userInfo.memberIcon
  45. userInfo.memberName = _userInfo.memberName
  46. userInfo.userId = _userInfo.userId
  47. userInfo.memberScore = _userInfo.memberScore
  48. userInfo.aiCount = _userInfo.aiCount
  49. userInfo.memberPhone = _userInfo.memberPhone
  50. emitter.emit(EmitterKeyCollection.LOGIN)
  51. AppStorage.setOrCreate(UserInfo.KEY, userInfo)
  52. }
  53. /**
  54. * @description 登出并清空用户信息
  55. */
  56. logout() {
  57. userInfo.isLogin = false
  58. userInfo.token = undefined
  59. userInfo.memberEmail = undefined
  60. userInfo.memberIcon = undefined
  61. userInfo.memberName = undefined
  62. userInfo.userId = undefined
  63. userInfo.memberScore = undefined
  64. userInfo.aiCount = undefined
  65. userInfo.memberPhone = undefined
  66. AppStorage.setOrCreate(UserInfo.KEY, userInfo)
  67. emitter.emit(EmitterKeyCollection.LOGOUT)
  68. AppStorage.setOrCreate(AppStorageKeyCollect.TOKEN, undefined)
  69. }
  70. /**
  71. * 检测用户是否登录
  72. * @returns boolean
  73. */
  74. checkLogin() {
  75. return this.isLogin
  76. }
  77. getToken() {
  78. return this.token
  79. }
  80. setToken(token: string) {
  81. this.token = token
  82. AppStorage.setOrCreate<string>(AppStorageKeyCollect.TOKEN, token)
  83. AppStorage.setOrCreate(UserInfo.KEY, this)
  84. return this
  85. }
  86. getHeadImg(defaultIcon?: ResourceStr) {
  87. if (this.memberIcon) {
  88. return this.memberIcon
  89. }
  90. if (defaultIcon) {
  91. return defaultIcon
  92. }
  93. return $r('app.media.app_icon')
  94. }
  95. setHeadImg(headImg: string) {
  96. this.memberIcon = headImg
  97. AppStorage.setOrCreate(UserInfo.KEY, this)
  98. return this
  99. }
  100. getEmail() {
  101. return this.memberEmail
  102. }
  103. setEmail(email: string) {
  104. this.memberEmail = email
  105. AppStorage.setOrCreate(UserInfo.KEY, this)
  106. return this
  107. }
  108. getName() {
  109. // this.userInfo.getName() ?? this.userInfo.getPhoneNumber() ?? this.userInfo.getId()?.toString()
  110. if (this.memberName) {
  111. return this.memberName
  112. } else if (this.memberPhone) {
  113. return this.memberPhone
  114. } else if (this.userId) {
  115. return this.userId?.toString()
  116. } else {
  117. if (this.isLogin) {
  118. return '华为用户'
  119. }
  120. return '未登录'
  121. }
  122. }
  123. setName(name: string) {
  124. this.memberName = name
  125. AppStorage.setOrCreate(UserInfo.KEY, this)
  126. return this
  127. }
  128. getId() {
  129. //(this.userInfo.getId()?.toString().padStart(8, '0') ?? '00000000')
  130. if (this.userId) {
  131. return this.userId.toString().padStart(8, '0')
  132. }
  133. return '00000000'
  134. }
  135. setId(id: number) {
  136. this.userId = id
  137. AppStorage.setOrCreate(UserInfo.KEY, this)
  138. return this
  139. }
  140. getGoldNum() {
  141. return this.memberScore
  142. }
  143. setGoldNum(goldNum: number) {
  144. this.memberScore = goldNum
  145. AppStorage.setOrCreate(UserInfo.KEY, this)
  146. return this
  147. }
  148. getAiNum() {
  149. return this.aiCount
  150. }
  151. setAiNum(aiNum: number) {
  152. this.aiCount = aiNum
  153. AppStorage.setOrCreate(UserInfo.KEY, this)
  154. return this
  155. }
  156. getPhoneNumber() {
  157. return this.memberPhone
  158. }
  159. setPhoneNumber(phoneNumber: string) {
  160. this.memberPhone = phoneNumber
  161. AppStorage.setOrCreate(UserInfo.KEY, this)
  162. return this
  163. }
  164. setPushToken(pushToken: string) {
  165. this.pushToken = pushToken
  166. return this
  167. }
  168. pushPushTokenToBackEnd(success: () => void) {
  169. YTUserRequest.savePushToken(this, (res, err) => {
  170. if (!err && res) {
  171. YTLog.info(res)
  172. success()
  173. } else {
  174. YTLog.error(err)
  175. }
  176. })
  177. }
  178. }
  179. export const userInfo = UserInfo.getInstance()