tj
2025-05-27 fa74612c99459a8b4e94121d2d3bfcc42915208b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// stores/user.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
import http from '@/plugins/http.js' // 请替换成你实际的 http 封装路径
import storage from '@/plugins/storage' // 同样替换为你的封装路径
import message from '@/plugins/message' // 你使用的消息组件封装
import { WechatLoginData } from '@/types/index'
 
 
export const useUserStore = defineStore('user', () => {
    const hasLogin = ref(false)
    const isBind = ref(false)
    const userInfo = ref<any>(null)
 
    async function getCurrentInfo() {
        const currentInfo = await http.request('get', '/api/current/user', {})
        if (currentInfo && currentInfo.code == 0) {
            console.log('当前用户信息', currentInfo)
            userInfo.value = currentInfo.data // 赋值到 store
        } else {
            message.showToast('获取用户信息失败')
        }
    }
 
    async function loginwx(data: WechatLoginData) {
        const {
            code,
            imgurl = '',
            nickname = '',
            inviter = '',
            phoneNumber = '',
            purePhoneNumber = ''
        } = data
 
        const resp = await http.request('post', '/api/login/wechat', {
            data: {
                code,
                imgurl,
                nickname,
                inviter,
                phoneNumber,
                purePhoneNumber
            }
        })
 
        if (resp && resp.code === 0) {
          
            isBind.value = true
            storage.setItem('token', resp.data.access_token || '')
            hasLogin.value = true
            await getCurrentInfo()
        } else {
            message.showToast('登录失败:' + (resp?.msg || '未知错误'))
            storage.removeItem('openid')
            storage.removeItem('tel')
            storage.removeItem('token')
        }
 
        return resp
    }
 
 
    function initLoginState() {
        const token = storage.getItem('token')
        if (token) {
          hasLogin.value = true
      
          const savedUserInfo = storage.getItem('userInfo')
          if (savedUserInfo) {
            userInfo.value = savedUserInfo
          } else {
            getCurrentInfo()
          }
        } else {
          hasLogin.value = false
        }
      }
      
 
    return {
        hasLogin,
        isBind,
        userInfo,
        loginwx,
        getCurrentInfo,
        initLoginState,
    }
})