feat: 支持同卡种续卡叠加并修复过期登录态

支付成功后将次数或有效期叠加到已有会员卡,首页与详情页引导续卡;接口 401 时同步清掉本地登录态。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
richarjiang
2026-09-07 14:04:11 +08:00
parent 801e2f47da
commit 88cd8419c8
22 changed files with 1370 additions and 123 deletions

View File

@@ -5,8 +5,13 @@ import type {
UserStatsResponse,
MembershipWithCardType,
} from '@mp-pilates/shared'
import { UserRole, MembershipStatus } from '@mp-pilates/shared'
import {
UserRole,
MembershipStatus,
getMembershipRenewalHint,
} from '@mp-pilates/shared'
import { wxLogin, isLoggedIn, logout as authLogout } from '../utils/auth'
import { setUnauthorizedHandler } from '../utils/session'
import { get, put } from '../utils/request'
import { ROUTES } from '../utils/routes'
import { cacheSubscriptionMessageTemplateConfig, resetSubscriptionMessageTemplateCache } from '../utils/wechat-subscription'
@@ -32,6 +37,7 @@ export const useUserStore = defineStore('user', () => {
memberships.value.filter((m) => m.status === MembershipStatus.ACTIVE),
)
const hasValidMembership = computed(() => activeMemberships.value.length > 0)
const renewalHint = computed(() => getMembershipRenewalHint(memberships.value))
const inviteShareEligible = computed(() => !!user.value?.inviteShareEligible)
// Actions
@@ -110,15 +116,21 @@ export const useUserStore = defineStore('user', () => {
}
}
function logout() {
authLogout()
resetSubscriptionMessageTemplateCache()
function clearSession() {
token.value = ''
user.value = null
stats.value = null
memberships.value = []
resetSubscriptionMessageTemplateCache()
}
function logout() {
authLogout()
clearSession()
}
setUnauthorizedHandler(clearSession)
return {
user,
stats,
@@ -129,6 +141,7 @@ export const useUserStore = defineStore('user', () => {
isAdmin,
activeMemberships,
hasValidMembership,
renewalHint,
inviteShareEligible,
login,
loginWithSetup,