feat(admin,api,player): 优胜赛配置、赛事管理重构与玩家端投注体验优化

管理端拆分赛事/优胜赛 Tab,新增联赛优胜赔率面板(批量、排序、外侧删除);统一 list-chrome 工具栏对齐与列表页布局;Dashboard 失败重试、Users 操作下拉、小屏侧栏等体验修复。

API 扩展优胜赛与赛事目录接口,完善投注与钱包查询;玩家端重构赛事卡片、串关面板、注单/钱包页,新增注单详情、下注成功动画与下拉刷新。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-08 09:55:56 +08:00
parent efff7c27e6
commit 24fa1b275c
66 changed files with 6289 additions and 1426 deletions

View File

@@ -21,7 +21,19 @@ const { initFromUser } = useAppLocale();
const route = useRoute();
const slip = useBetSlipStore();
const showAnnouncement = computed(() => !route.path.startsWith('/profile'));
const isDetailPage = computed(() => {
const p = route.path;
return p.startsWith('/match/') || p.startsWith('/bet/') || p.startsWith('/bets/');
});
const showHeader = computed(() => !isDetailPage.value);
const showAnnouncement = computed(() => !isDetailPage.value && !route.path.startsWith('/profile'));
const showBottomNav = computed(() => {
const p = route.path;
if (p === '/' || p === '/bet' || p === '/bets' || p === '/wallet' || p === '/profile') return true;
return false;
});
const { announcements, load: loadPlayerHome } = usePlayerHome();
const { loadProfile } = usePlayerProfile();
@@ -45,7 +57,7 @@ watch(
<template>
<div class="layout">
<header class="header">
<header v-if="showHeader" class="header">
<img src="/logo.png" alt="TheBet365" class="logo" />
<div class="header-actions">
<LocaleSwitcher />
@@ -58,11 +70,11 @@ watch(
<AnnouncementMarquee :items="announcements" embedded />
</div>
<main class="main">
<main :class="['main', { 'has-nav': showBottomNav }]">
<RouterView />
</main>
<nav class="bottom-nav" aria-label="Main">
<nav v-if="showBottomNav" class="bottom-nav" aria-label="Main">
<RouterLink to="/" class="nav-item" :class="{ active: route.path === '/' }">
<BottomNavIcon name="home" />
<span class="nav-label">{{ t('nav.home') }}</span>
@@ -143,7 +155,11 @@ watch(
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
padding: 12px 16px 16px;
padding: 12px 16px 0;
}
.main.has-nav {
padding-bottom: 16px;
}
.bottom-nav {
display: flex;