user.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. console.log('设置用户头像', avatar)
  38. console.log('userInfo', userInfo.value)
  39. }
  40. // 删除用户信息
  41. const removeUserInfo = () => {
  42. userInfo.value = { ...userInfoState }
  43. uni.removeStorageSync('userInfo')
  44. uni.removeStorageSync('token')
  45. }
  46. /**
  47. * 用户登录
  48. * @param credentials 登录参数
  49. * @returns R<IUserLogin>
  50. */
  51. const login = async (credentials: {
  52. username: string
  53. password: string
  54. code: string
  55. uuid: string
  56. }) => {
  57. const res = await _login(credentials)
  58. console.log('登录信息', res)
  59. toast.success('登录成功')
  60. await getUserInfo()
  61. return res
  62. }
  63. /**
  64. * 获取用户信息
  65. */
  66. const getUserInfo = async () => {
  67. const res = await _getUserInfo()
  68. const userInfo = res.data
  69. setUserInfo(userInfo)
  70. uni.setStorageSync('userInfo', userInfo)
  71. uni.setStorageSync('token', userInfo.token)
  72. // TODO 这里可以增加获取用户路由的方法 根据用户的角色动态生成路由
  73. return res
  74. }
  75. /**
  76. * 退出登录 并 删除用户信息
  77. */
  78. const logout = async () => {
  79. _logout()
  80. removeUserInfo()
  81. }
  82. /**
  83. * 微信登录
  84. */
  85. const wxLogin = async () => {
  86. // 获取微信小程序登录的code
  87. const data = await getWxCode()
  88. console.log('微信登录code', data)
  89. const res = await _wxLogin(data)
  90. await getUserInfo()
  91. return res
  92. }
  93. return {
  94. userInfo,
  95. login,
  96. wxLogin,
  97. getUserInfo,
  98. setUserAvatar,
  99. logout,
  100. }
  101. },
  102. {
  103. persist: true,
  104. },
  105. )