user.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { defineStore } from 'pinia'
  2. import { ref, computed } from 'vue'
  3. import { userApi } from '@/api/user'
  4. export const useUserStore = defineStore('user', () => {
  5. // 状态
  6. const userInfo = ref(uni.getStorageSync('userInfo') || null)
  7. const loginPopupVisible = ref(false)
  8. // 计算属性
  9. const isLoggedIn = computed(() => !!userInfo.value?.openid)
  10. const userId = computed(() => userInfo.value?.userId)
  11. const userName = computed(() => userInfo.value?.username)
  12. // 方法
  13. const showLoginPopup = () => {
  14. loginPopupVisible.value = true
  15. }
  16. const hideLoginPopup = () => {
  17. loginPopupVisible.value = false
  18. }
  19. const setUserInfo = (info) => {
  20. userInfo.value = info
  21. uni.setStorageSync('userInfo', info)
  22. }
  23. const clearUserInfo = () => {
  24. userInfo.value = null
  25. uni.removeStorageSync('userInfo')
  26. }
  27. // 登录方法
  28. const wechatLogin = async (code) => {
  29. console.log('wechatLogin', code)
  30. try {
  31. const data = await userApi.login({ code })
  32. setUserInfo(data)
  33. return data
  34. } catch (error) {
  35. console.error('微信登录失败:', error)
  36. throw error
  37. }
  38. }
  39. const accountLogin = async (username, password) => {
  40. try {
  41. const data = await userApi.mobileLogin({ username, password })
  42. setUserInfo(data)
  43. return data
  44. } catch (error) {
  45. console.error('账号登录失败:', error)
  46. throw error
  47. }
  48. }
  49. // 登出
  50. const logout = () => {
  51. clearUserInfo()
  52. uni.reLaunch({
  53. url: '/pages/parent/index'
  54. })
  55. }
  56. return {
  57. // 状态
  58. userInfo,
  59. loginPopupVisible,
  60. // 计算属性
  61. isLoggedIn,
  62. userId,
  63. userName,
  64. // 方法
  65. showLoginPopup,
  66. hideLoginPopup,
  67. setUserInfo,
  68. clearUserInfo,
  69. wechatLogin,
  70. accountLogin,
  71. logout
  72. }
  73. })