tj
2025-05-30 d9a780fa538cb7a83aefa04e75cb53185d690d7d
store/user.ts
@@ -1,6 +1,101 @@
// stores/user.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
import http from '@/plugins/http.js'
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)
    const address = 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
        }
      }
      function updateAddress(addressParam:any) {
        // 合并新信息到 userInfo 中
        console.log("addressParam",addressParam)
        address.value = addressParam
        // 如果你有持久化,这里也同步一下
        // storage.setItem('userInfo', userInfo.value)
      }
    return {
        hasLogin,
        isBind,
        userInfo,
        address,
        loginwx,
        getCurrentInfo,
        initLoginState,
        updateAddress,
    }
})