feat(player): 完善 H5 投注端与 API 演示数据

- 球赛/串关/优胜冠军、赛事详情、历史投注与个人资料编辑
- 固定顶栏、公告与底栏,仅内容区滚动
- 底部导航与站点 favicon 使用 logo,登录页精简
- API 种子、冠军盘与历史注单增强

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 17:18:11 +08:00
parent 7af2e418c3
commit b5dca1bfb1
75 changed files with 7077 additions and 384 deletions

View File

@@ -0,0 +1,97 @@
<script setup lang="ts">
import { computed } from 'vue';
const props = withDefaults(
defineProps<{ items: string[]; embedded?: boolean }>(),
{ embedded: false },
);
const text = computed(() => {
const list = props.items.filter(Boolean);
if (!list.length) return '';
return list.join('  ◆  ');
});
</script>
<template>
<div v-if="text" class="marquee-bar" :class="{ embedded }">
<span class="marquee-badge">公告</span>
<div class="marquee-viewport">
<div class="marquee-track">
<span class="marquee-text">{{ text }}</span>
<span class="marquee-text" aria-hidden="true">{{ text }}</span>
</div>
</div>
</div>
</template>
<style scoped>
.marquee-bar {
display: flex;
align-items: center;
gap: 10px;
margin: -4px -2px 14px;
padding: 10px 12px;
background: #141414;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
overflow: hidden;
}
.marquee-bar.embedded {
margin: 0;
padding: 8px 12px;
border: none;
border-radius: 0;
border-bottom: 1px solid var(--border);
background: #111;
}
.marquee-bar.embedded .marquee-badge {
padding: 3px 8px;
font-size: 10px;
}
.marquee-bar.embedded .marquee-text {
font-size: 12px;
}
.marquee-badge {
flex-shrink: 0;
padding: 4px 10px;
font-size: 11px;
font-weight: 800;
letter-spacing: 0.12em;
color: #1A1000;
background: var(--gradient-gold);
border: 1px solid var(--border-gold-soft);
border-radius: 4px;
}
.marquee-viewport {
flex: 1;
overflow: hidden;
min-width: 0;
mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.marquee-track {
display: flex;
width: max-content;
animation: marquee-scroll 22s linear infinite;
}
.marquee-text {
flex-shrink: 0;
padding-right: 80px;
font-size: 13px;
font-weight: 600;
color: var(--primary-light);
white-space: nowrap;
}
@keyframes marquee-scroll {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
</style>