user.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import {
  2. login as _login,
  3. getUserInfo as _getUserInfo,
  4. wxLogin as _wxLogin,
  5. logout as _logout,
  6. getWxCode,
  7. } from '@/api/login'
  8. import { defineStore } from 'pinia'
  9. import { ref } from 'vue'
  10. import { toast } from '@/utils/toast'
  11. import { IUserInfoVo } from '@/api/login.typings'
  12. // 初始化状态
  13. const userInfoState: IUserInfoVo = {
  14. id: 0,
  15. username: '',
  16. avatar: '/static/images/default-avatar.png',
  17. token: '',
  18. }
  19. export const useUserStore = defineStore(
  20. 'user',
  21. () => {
  22. // 定义用户信息
  23. const userInfo = ref<IUserInfoVo>({ ...userInfoState })
  24. // 设置用户信息
  25. const setUserInfo = (val: IUserInfoVo) => {
  26. console.log('设置用户信息', val)
  27. // 若头像为空 则使用默认头像
  28. if (!val.avatar) {
  29. val.avatar = userInfoState.avatar
  30. } else {
  31. val.avatar = 'https://oss.laf.run/ukw0y1-site/avatar.jpg?feige'
  32. }
  33. userInfo.value = val
  34. }
  35. const setUserAvatar = (avatar: string) => {
  36. userInfo.value.avatar = avatar
  37. }
  38. // 删除用户信息
  39. const removeUserInfo = () => {
  40. userInfo.value = { ...userInfoState }
  41. uni.removeStorageSync('userInfo')
  42. uni.removeStorageSync('token')
  43. }
  44. /**
  45. * 用户登录
  46. * @param credentials 登录参数
  47. * @returns R<IUserLogin>
  48. */
  49. const login = async (credentials: {
  50. username: string
  51. password: string
  52. code: string
  53. uuid: string
  54. }) => {
  55. const res = await _login(credentials)
  56. console.log('登录信息', res)
  57. toast.success('登录成功')
  58. getUserInfo()
  59. return res
  60. }
  61. /**
  62. * 获取用户信息
  63. */
  64. const getUserInfo = async () => {
  65. const res = await _getUserInfo()
  66. const userInfo = res.data
  67. setUserInfo(userInfo)
  68. uni.setStorageSync('userInfo', userInfo)
  69. uni.setStorageSync('token', userInfo.token)
  70. // TODO 这里可以增加获取用户路由的方法 根据用户的角色动态生成路由
  71. return res
  72. }
  73. /**
  74. * 退出登录 并 删除用户信息
  75. */
  76. const logout = async () => {
  77. _logout()
  78. removeUserInfo()
  79. }
  80. /**
  81. * 微信登录
  82. */
  83. const wxLogin = async () => {
  84. // 获取微信小程序登录的code
  85. const data = await getWxCode()
  86. console.log('微信登录code', data)
  87. const res = await _wxLogin(data)
  88. getUserInfo()
  89. return res
  90. }
  91. return {
  92. userInfo,
  93. login,
  94. wxLogin,
  95. getUserInfo,
  96. setUserAvatar,
  97. logout,
  98. }
  99. },
  100. {
  101. persist: true,
  102. },
  103. )