user.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * 用户状态管理
  3. */
  4. import { defineStore } from 'pinia'
  5. import { ref, computed } from 'vue'
  6. export const useUserStore = defineStore('user', () => {
  7. // 状态
  8. const token = ref(uni.getStorageSync('token') || '')
  9. const userInfo = ref(uni.getStorageSync('userInfo') || null)
  10. // 计算属性
  11. const isLoggedIn = computed(() => !!token.value)
  12. const userName = computed(() => userInfo.value?.name || '')
  13. const userAvatar = computed(() => userInfo.value?.avatar || '')
  14. // 设置 token
  15. const setToken = (newToken) => {
  16. token.value = newToken
  17. uni.setStorageSync('token', newToken)
  18. }
  19. // 设置用户信息
  20. const setUserInfo = (info) => {
  21. userInfo.value = info
  22. uni.setStorageSync('userInfo', info)
  23. }
  24. // 登录成功
  25. const loginSuccess = (data) => {
  26. if (data.token) {
  27. setToken(data.token)
  28. }
  29. if (data.userInfo) {
  30. setUserInfo(data.userInfo)
  31. }
  32. }
  33. // 退出登录
  34. const logout = () => {
  35. token.value = ''
  36. userInfo.value = null
  37. uni.removeStorageSync('token')
  38. uni.removeStorageSync('userInfo')
  39. }
  40. // 更新用户信息
  41. const updateUserInfo = (info) => {
  42. userInfo.value = {
  43. ...userInfo.value,
  44. ...info
  45. }
  46. uni.setStorageSync('userInfo', userInfo.value)
  47. }
  48. return {
  49. // 状态
  50. token,
  51. userInfo,
  52. // 计算属性
  53. isLoggedIn,
  54. userName,
  55. userAvatar,
  56. // 方法
  57. setToken,
  58. setUserInfo,
  59. loginSuccess,
  60. logout,
  61. updateUserInfo
  62. }
  63. })