54 lines
1.5 KiB
Vue
54 lines
1.5 KiB
Vue
<script setup lang="ts">
|
|
import { onMounted, onUnmounted, ref } from 'vue'
|
|
import RechargeDialog from '../components/RechargeDialog.vue'
|
|
import ScoreDetailDialog from '../components/ScoreDetailDialog.vue'
|
|
import { getMyTeam } from '../utils/teamApi'
|
|
|
|
const rechargeOpen = ref(false)
|
|
const scoreDetailOpen = ref(false)
|
|
const teamId = ref(localStorage.getItem('team_id') || '')
|
|
const teamScore = ref(Number(localStorage.getItem('team_score') || 0))
|
|
|
|
async function syncTeam(): Promise<void> {
|
|
const team = await getMyTeam()
|
|
if (!team) return
|
|
teamId.value = String(team.team_id)
|
|
teamScore.value = team.score ?? 0
|
|
window.dispatchEvent(new CustomEvent('laimiao:team-updated', { detail: { score: teamScore.value } }))
|
|
}
|
|
|
|
function openRecharge(): void {
|
|
void syncTeam()
|
|
rechargeOpen.value = true
|
|
}
|
|
|
|
function openScoreDetail(): void {
|
|
void syncTeam()
|
|
scoreDetailOpen.value = true
|
|
}
|
|
|
|
function handlePaymentSuccess(): void {
|
|
void syncTeam()
|
|
}
|
|
|
|
onMounted(() => {
|
|
window.addEventListener('laimiao:open-recharge', openRecharge)
|
|
window.addEventListener('laimiao:open-score-detail', openScoreDetail)
|
|
})
|
|
|
|
onUnmounted(() => {
|
|
window.removeEventListener('laimiao:open-recharge', openRecharge)
|
|
window.removeEventListener('laimiao:open-score-detail', openScoreDetail)
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<RechargeDialog
|
|
v-model:isOpen="rechargeOpen"
|
|
:team-id="teamId"
|
|
vip-type="laimiao"
|
|
@payment-success="handlePaymentSuccess"
|
|
/>
|
|
<ScoreDetailDialog v-model:isOpen="scoreDetailOpen" :team-id="teamId" :team-score="teamScore" />
|
|
</template>
|