62 lines
1.2 KiB
TypeScript
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,
|
|
}
|
|
})
|