login.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*
  2. * @Author: ChenYaJin
  3. * @Date: 2023-07-04 11:07:44
  4. * @LastEditors: LiZhiWei
  5. * @LastEditTime: 2026-01-09 16:41:58
  6. * @Description: 登录相关状态
  7. */
  8. import {
  9. setToken as setTokenCache,
  10. getToken as getTokenCache,
  11. setRefreshToken,
  12. getRefreshToken,
  13. setUuIdSave,
  14. } from '~/utils/auth'
  15. import { postLogin, postRegister, getAccountInfo, postAccountInfo } from '~/api/user/login'
  16. import type { ILogin, IAccount, ILoginToken } from '~/models/login'
  17. import { useUserStore } from './user'
  18. export interface LoginState {
  19. token: string
  20. refreshToken: string
  21. isAccessTokenNoWorking: boolean // accessToken是否过期
  22. timer: unknown
  23. isShowAccount: boolean // 是否显示账号信息
  24. accountInfo: IAccount
  25. }
  26. export const useLoginStore = defineStore('login', {
  27. state: (): LoginState => {
  28. return {
  29. token: '',
  30. refreshToken: '',
  31. isAccessTokenNoWorking: false,
  32. timer: '',
  33. isShowAccount: false,
  34. accountInfo: {},
  35. }
  36. },
  37. getters: {
  38. getToken(): string {
  39. return this.token || getTokenCache() || ''
  40. },
  41. getRefreshToken(): string {
  42. return this.refreshToken || getRefreshToken() || ''
  43. },
  44. isLogin(): boolean {
  45. return !!this.token || !!getTokenCache()
  46. },
  47. isAccessTokenExpire(): boolean {
  48. return this.isAccessTokenNoWorking
  49. },
  50. },
  51. actions: {
  52. setAccountClose(flag: boolean) {
  53. this.isShowAccount = flag
  54. },
  55. setToken(info: string) {
  56. this.token = info ?? ''
  57. setTokenCache(info)
  58. },
  59. setRefreshToken(info: string) {
  60. this.refreshToken = info ?? ''
  61. setRefreshToken(info)
  62. },
  63. // 登录
  64. login(loginForm: ILogin) {
  65. return new Promise((resolve, reject) => {
  66. postLogin(loginForm)
  67. .then((res) => {
  68. this.isAccessTokenNoWorking = false
  69. const data = res.data
  70. this.setToken(data.accessToken)
  71. this.setRefreshToken(data.refreshToken)
  72. setUuIdSave(data.uid)
  73. resolve(res.data)
  74. })
  75. .catch((error: Error) => {
  76. reject(error)
  77. })
  78. })
  79. },
  80. // 注册
  81. register(registerForm: IAccount) {
  82. return new Promise((resolve, reject) => {
  83. postRegister(registerForm)
  84. .then((res) => {
  85. resolve(res.data)
  86. })
  87. .catch((error: Error) => {
  88. reject(error)
  89. })
  90. })
  91. },
  92. updateToken(data: ILoginToken) {
  93. this.setToken(data.accessToken)
  94. },
  95. // 退出登录
  96. logout() {
  97. return new Promise((resolve) => {
  98. const userStore = useUserStore()
  99. // 数据清理
  100. if (process.browser) {
  101. localStorage.clear()
  102. }
  103. userStore.$reset()
  104. this.$reset()
  105. resolve(1)
  106. })
  107. },
  108. // 获取用户账号信息
  109. getUserAccountInfo(uuid: string): Promise<IAccount> {
  110. return new Promise((resolve, reject) => {
  111. if (this.accountInfo.name) {
  112. resolve(this.accountInfo)
  113. return
  114. }
  115. getAccountInfo(uuid)
  116. .then((res) => {
  117. const data = res.data
  118. this.accountInfo = data
  119. resolve(res.data)
  120. })
  121. .catch((error: Error) => {
  122. reject(error)
  123. })
  124. })
  125. },
  126. updateAccountInfo(data: IAccount) {
  127. return new Promise((resolve, reject) => {
  128. postAccountInfo(data)
  129. .then((res) => {
  130. this.accountInfo = {}
  131. resolve(res.data)
  132. })
  133. .catch((error: Error) => {
  134. reject(error)
  135. })
  136. })
  137. },
  138. },
  139. })