perf: 优化个人中心会员卡进度展示
This commit is contained in:
@@ -26,6 +26,13 @@ export const useUserStore = defineStore('user', () => {
|
||||
const user = ref<UserProfileResponse | null>(null)
|
||||
const stats = ref<UserStatsResponse | null>(null)
|
||||
const memberships = ref<readonly MembershipWithCardType[]>([])
|
||||
const membershipsLoading = ref(false)
|
||||
const membershipsLoaded = ref(false)
|
||||
const membershipsError = ref(false)
|
||||
const statsLoading = ref(false)
|
||||
const statsError = ref(false)
|
||||
let membershipRequestId = 0
|
||||
let statsRequestId = 0
|
||||
const token = ref<string>(uni.getStorageSync('token') as string || '')
|
||||
|
||||
// Getters
|
||||
@@ -82,23 +89,42 @@ export const useUserStore = defineStore('user', () => {
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchStats() {
|
||||
if (!isLoggedIn()) return
|
||||
async function fetchStats(): Promise<boolean> {
|
||||
if (!isLoggedIn()) return false
|
||||
const id = ++statsRequestId
|
||||
const session = token.value
|
||||
statsLoading.value = true
|
||||
statsError.value = false
|
||||
try {
|
||||
stats.value = await get<UserStatsResponse>('/user/stats')
|
||||
} catch (err) {
|
||||
console.error('Fetch stats failed:', err)
|
||||
const result = await get<UserStatsResponse>('/user/stats')
|
||||
if (id !== statsRequestId || session !== token.value) return false
|
||||
stats.value = result
|
||||
return true
|
||||
} catch {
|
||||
if (id === statsRequestId && session === token.value) statsError.value = true
|
||||
return false
|
||||
} finally {
|
||||
if (id === statsRequestId && session === token.value) statsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchMemberships(): Promise<boolean> {
|
||||
if (!isLoggedIn()) return false
|
||||
const id = ++membershipRequestId
|
||||
const session = token.value
|
||||
membershipsLoading.value = true
|
||||
membershipsError.value = false
|
||||
try {
|
||||
memberships.value = await get<MembershipWithCardType[]>('/membership/my')
|
||||
const result = await get<MembershipWithCardType[]>('/membership/my')
|
||||
if (id !== membershipRequestId || session !== token.value) return false
|
||||
memberships.value = [...result]
|
||||
membershipsLoaded.value = true
|
||||
return true
|
||||
} catch (err) {
|
||||
console.error('Fetch memberships failed:', err)
|
||||
} catch {
|
||||
if (id === membershipRequestId && session === token.value) membershipsError.value = true
|
||||
return false
|
||||
} finally {
|
||||
if (id === membershipRequestId && session === token.value) membershipsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +148,13 @@ export const useUserStore = defineStore('user', () => {
|
||||
}
|
||||
|
||||
function clearSession() {
|
||||
membershipRequestId++
|
||||
statsRequestId++
|
||||
membershipsLoading.value = false
|
||||
membershipsLoaded.value = false
|
||||
membershipsError.value = false
|
||||
statsLoading.value = false
|
||||
statsError.value = false
|
||||
token.value = ''
|
||||
useInviteStore().reset()
|
||||
user.value = null
|
||||
@@ -138,6 +171,11 @@ export const useUserStore = defineStore('user', () => {
|
||||
setUnauthorizedHandler(clearSession)
|
||||
|
||||
return {
|
||||
membershipsLoading,
|
||||
membershipsLoaded,
|
||||
membershipsError,
|
||||
statsLoading,
|
||||
statsError,
|
||||
user,
|
||||
stats,
|
||||
memberships,
|
||||
|
||||
Reference in New Issue
Block a user