// 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)
|
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,
|
}
|
})
|