JewelryMall/miniprogram/store/user.ts
2026-02-14 19:29:15 +08:00

62 lines
1.2 KiB
TypeScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { User, Address } from '../types'
import { getUserProfile, getAddressList } from '../api/user'
export const useUserStore = defineStore('user', () => {
const user = ref<User | null>(null)
const token = ref<string>(uni.getStorageSync('token') || '')
const addresses = ref<Address[]>([])
function setUser(u: User) {
user.value = u
}
function setToken(t: string) {
token.value = t
uni.setStorageSync('token', t)
}
function logout() {
user.value = null
token.value = ''
uni.removeStorageSync('token')
}
function setAddresses(list: Address[]) {
addresses.value = list
}
/** 从后端拉取用户信息 */
async function fetchProfile() {
try {
const data = await getUserProfile()
user.value = data
} catch {
// token 可能失效,静默处理
}
}
/** 从后端拉取收货地址列表 */
async function fetchAddresses() {
try {
const list = await getAddressList()
addresses.value = list
} catch {
// 静默处理
}
}
return {
user,
token,
addresses,
setUser,
setToken,
logout,
setAddresses,
fetchProfile,
fetchAddresses,
}
})