feat: 支持自动续期
This commit is contained in:
@@ -13,7 +13,7 @@ import {
|
||||
getMembershipRenewalHint,
|
||||
} from '@mp-pilates/shared'
|
||||
import { wxLogin, isLoggedIn, logout as authLogout } from '../utils/auth'
|
||||
import { setUnauthorizedHandler } from '../utils/session'
|
||||
import { setUnauthorizedHandler, setRenewedHandler } from '../utils/session'
|
||||
import { get, put } from '../utils/request'
|
||||
import { ROUTES } from '../utils/routes'
|
||||
import { cacheSubscriptionMessageTemplateConfig, resetSubscriptionMessageTemplateCache } from '../utils/wechat-subscription'
|
||||
@@ -34,6 +34,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
const statsError = ref(false)
|
||||
let membershipRequestId = 0
|
||||
let statsRequestId = 0
|
||||
let sessionId = 0
|
||||
const token = ref<string>(uni.getStorageSync('token') as string || '')
|
||||
|
||||
// Getters
|
||||
@@ -53,6 +54,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
async function login() {
|
||||
try {
|
||||
const result = await wxLogin()
|
||||
sessionId++
|
||||
token.value = result.token
|
||||
user.value = result.user
|
||||
await useInviteStore().refresh().catch(() => {})
|
||||
@@ -93,39 +95,39 @@ export const useUserStore = defineStore('user', () => {
|
||||
async function fetchStats(): Promise<boolean> {
|
||||
if (!isLoggedIn()) return false
|
||||
const id = ++statsRequestId
|
||||
const session = token.value
|
||||
const session = sessionId
|
||||
statsLoading.value = true
|
||||
statsError.value = false
|
||||
try {
|
||||
const result = await get<UserStatsResponse>('/user/stats')
|
||||
if (id !== statsRequestId || session !== token.value) return false
|
||||
if (id !== statsRequestId || session !== sessionId) return false
|
||||
stats.value = result
|
||||
return true
|
||||
} catch {
|
||||
if (id === statsRequestId && session === token.value) statsError.value = true
|
||||
if (id === statsRequestId && session === sessionId) statsError.value = true
|
||||
return false
|
||||
} finally {
|
||||
if (id === statsRequestId && session === token.value) statsLoading.value = false
|
||||
if (id === statsRequestId && session === sessionId) statsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchMemberships(): Promise<boolean> {
|
||||
if (!isLoggedIn()) return false
|
||||
const id = ++membershipRequestId
|
||||
const session = token.value
|
||||
const session = sessionId
|
||||
membershipsLoading.value = true
|
||||
membershipsError.value = false
|
||||
try {
|
||||
const result = await get<MembershipWithCardType[]>('/membership/my')
|
||||
if (id !== membershipRequestId || session !== token.value) return false
|
||||
if (id !== membershipRequestId || session !== sessionId) return false
|
||||
memberships.value = [...result]
|
||||
membershipsLoaded.value = true
|
||||
return true
|
||||
} catch {
|
||||
if (id === membershipRequestId && session === token.value) membershipsError.value = true
|
||||
if (id === membershipRequestId && session === sessionId) membershipsError.value = true
|
||||
return false
|
||||
} finally {
|
||||
if (id === membershipRequestId && session === token.value) membershipsLoading.value = false
|
||||
if (id === membershipRequestId && session === sessionId) membershipsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,6 +151,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
}
|
||||
|
||||
function clearSession() {
|
||||
sessionId++
|
||||
membershipRequestId++
|
||||
statsRequestId++
|
||||
membershipsLoading.value = false
|
||||
@@ -171,6 +174,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
}
|
||||
|
||||
setUnauthorizedHandler(clearSession)
|
||||
setRenewedHandler((renewedToken) => { token.value = renewedToken })
|
||||
|
||||
return {
|
||||
membershipsLoading,
|
||||
|
||||
Reference in New Issue
Block a user