Files
thebet365/apps/player/src/components/LeagueAccordionItem.vue
Mars b5dca1bfb1 feat(player): 完善 H5 投注端与 API 演示数据
- 球赛/串关/优胜冠军、赛事详情、历史投注与个人资料编辑
- 固定顶栏、公告与底栏,仅内容区滚动
- 底部导航与站点 favicon 使用 logo,登录页精简
- API 种子、冠军盘与历史注单增强

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 17:18:11 +08:00

117 lines
2.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import MatchBetCard from './MatchBetCard.vue';
import saishiImg from '../assets/images/saishi.png';
defineProps<{
leagueId: string;
leagueName: string;
expanded: boolean;
matches: {
id: string;
homeTeamName: string;
awayTeamName: string;
homeTeamCode?: string;
awayTeamCode?: string;
startTime: string;
}[];
}>();
const emit = defineEmits<{ toggle: []; bet: [id: string] }>();
</script>
<template>
<section class="league-block">
<button type="button" class="league-row" :aria-expanded="expanded" @click="emit('toggle')">
<span class="toggle-icon" :class="{ open: expanded }" aria-hidden="true">
<span class="toggle-mark">{{ expanded ? '' : '+' }}</span>
</span>
<span class="league-title">*{{ leagueName }}</span>
<img :src="saishiImg" alt="" class="league-saishi" />
</button>
<div v-show="expanded" class="match-panel">
<div class="match-grid">
<MatchBetCard
v-for="match in matches"
:key="match.id"
:match="match"
@bet="emit('bet', $event)"
/>
</div>
</div>
</section>
</template>
<style scoped>
.league-block {
margin-bottom: 10px;
}
.league-row {
width: 100%;
display: flex;
align-items: center;
gap: 10px;
padding: 12px 12px;
background: #141414;
border: 1px solid #2e2e2e;
border-radius: 6px;
text-align: left;
cursor: pointer;
}
.league-row:active {
opacity: 0.92;
}
.toggle-icon {
flex-shrink: 0;
width: 26px;
height: 26px;
border-radius: 50%;
background: #141414;
border: 1px solid var(--border-gold-soft);
display: flex;
align-items: center;
justify-content: center;
}
.toggle-mark {
color: var(--primary-light);
font-size: 17px;
font-weight: 900;
line-height: 1;
margin-top: -1px;
}
.league-title {
flex: 1;
font-size: 13px;
font-weight: 800;
color: var(--primary-light);
line-height: 1.35;
min-width: 0;
}
.league-saishi {
flex-shrink: 0;
height: 44px;
width: auto;
max-width: 40px;
object-fit: contain;
margin-left: 4px;
padding-left: 10px;
border-left: 1px solid #2a2a2a;
}
.match-panel {
padding: 10px 0 4px;
}
.match-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 6px;
}
</style>