fix(frontend): 改进订阅状态实时刷新机制
- 在 Dashboard 页面加载时强制刷新订阅状态 - 在兑换订阅卡密后立即刷新订阅状态 - 清理订阅轮询相关注释
This commit is contained in:
@@ -79,7 +79,7 @@ export const useSubscriptionStore = defineStore('subscriptions', () => {
|
||||
}
|
||||
|
||||
/**
|
||||
* Start auto-refresh polling (every 5 minutes)
|
||||
* Start auto-refresh polling
|
||||
*/
|
||||
function startPolling() {
|
||||
if (pollerInterval) return
|
||||
@@ -88,7 +88,7 @@ export const useSubscriptionStore = defineStore('subscriptions', () => {
|
||||
fetchActiveSubscriptions(true).catch((error) => {
|
||||
console.error('Subscription polling failed:', error)
|
||||
})
|
||||
}, 5 * 60 * 1000) // 5 minutes
|
||||
}, 5 * 60 * 1000)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -661,6 +661,7 @@ import { ref, computed, onMounted, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { useSubscriptionStore } from '@/stores/subscriptions'
|
||||
import { formatDateTime } from '@/utils/format'
|
||||
|
||||
const { t } = useI18n()
|
||||
@@ -701,6 +702,7 @@ ChartJS.register(
|
||||
|
||||
const router = useRouter()
|
||||
const authStore = useAuthStore()
|
||||
const subscriptionStore = useSubscriptionStore()
|
||||
|
||||
const user = computed(() => authStore.user)
|
||||
const stats = ref<UserDashboardStats | null>(null)
|
||||
@@ -1018,6 +1020,11 @@ onMounted(async () => {
|
||||
// Load critical data first
|
||||
await loadDashboardStats()
|
||||
|
||||
// Force refresh subscription status when entering dashboard (bypass cache)
|
||||
subscriptionStore.fetchActiveSubscriptions(true).catch((error) => {
|
||||
console.error('Failed to refresh subscription status:', error)
|
||||
})
|
||||
|
||||
// Initialize date range (synchronous)
|
||||
initializeDateRange()
|
||||
|
||||
|
||||
@@ -445,6 +445,7 @@ import { ref, computed, onMounted } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { useAppStore } from '@/stores/app'
|
||||
import { useSubscriptionStore } from '@/stores/subscriptions'
|
||||
import { redeemAPI, authAPI, type RedeemHistoryItem } from '@/api'
|
||||
import AppLayout from '@/components/layout/AppLayout.vue'
|
||||
import { formatDateTime } from '@/utils/format'
|
||||
@@ -452,6 +453,7 @@ import { formatDateTime } from '@/utils/format'
|
||||
const { t } = useI18n()
|
||||
const authStore = useAuthStore()
|
||||
const appStore = useAppStore()
|
||||
const subscriptionStore = useSubscriptionStore()
|
||||
|
||||
const user = computed(() => authStore.user)
|
||||
|
||||
@@ -544,6 +546,11 @@ const handleRedeem = async () => {
|
||||
// Refresh user data to get updated balance/concurrency
|
||||
await authStore.refreshUser()
|
||||
|
||||
// If subscription type, immediately refresh subscription status
|
||||
if (result.type === 'subscription') {
|
||||
await subscriptionStore.fetchActiveSubscriptions(true) // force refresh
|
||||
}
|
||||
|
||||
// Clear the input
|
||||
redeemCode.value = ''
|
||||
|
||||
|
||||
Reference in New Issue
Block a user