From 178787e89aef02b02aad090d0ab02cc173ca4ad6 Mon Sep 17 00:00:00 2001 From: Mars <3361409208a@gmail.com> Date: Tue, 30 Jun 2026 17:42:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(player-desktop):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B3=A8=E5=8D=95=E4=BE=A7=E6=A0=8F=E9=9D=A2=E6=9D=BF=E6=8A=98?= =?UTF-8?q?=E5=8F=A0=E3=80=81=E9=9A=90=E8=97=8F=E9=A6=96=E9=A1=B5=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E6=9D=A1=E3=80=81=E9=BB=98=E8=AE=A4=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E8=81=94=E8=B5=9B=E3=80=81=E4=B8=BB=E9=A1=B5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BF=91=E6=9C=9F=E7=83=AD=E9=97=A8=E5=BF=AB=E9=80=9F=E4=B8=8B?= =?UTF-8?q?=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/desktop/BetSlipPanel.vue | 28 ++ .../components/desktop/DesktopBetSlipRail.vue | 163 ++++++++ .../src/components/desktop/DesktopShell.vue | 30 +- .../src/components/desktop/LeagueSidebar.vue | 4 +- apps/player/src/composables/usePlayerHome.ts | 23 ++ apps/player/src/stores/betSlip.ts | 38 ++ apps/player/src/styles/desktop/layout.css | 30 +- apps/player/src/styles/desktop/tokens.css | 7 + .../src/views/desktop/DesktopHomeView.vue | 350 ++++++++++++++---- 9 files changed, 583 insertions(+), 90 deletions(-) create mode 100644 apps/player/src/components/desktop/DesktopBetSlipRail.vue diff --git a/apps/player/src/components/desktop/BetSlipPanel.vue b/apps/player/src/components/desktop/BetSlipPanel.vue index 6f364ec..a39bfc1 100644 --- a/apps/player/src/components/desktop/BetSlipPanel.vue +++ b/apps/player/src/components/desktop/BetSlipPanel.vue @@ -857,6 +857,16 @@ onUnmounted(() => {

{{ t('bet.bet_slip') || '投注单' }}

+
@@ -1173,6 +1183,24 @@ onUnmounted(() => { color: var(--primary-light); } +.panel-close-btn { + border: none; + background: transparent; + color: var(--text-muted); + cursor: pointer; + padding: 4px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background 0.2s, color 0.2s; +} + +.panel-close-btn:hover { + background: var(--bg-hover); + color: var(--primary); +} + .clear-slip-btn { background: transparent; border: 1px solid var(--border); diff --git a/apps/player/src/components/desktop/DesktopBetSlipRail.vue b/apps/player/src/components/desktop/DesktopBetSlipRail.vue new file mode 100644 index 0000000..6ba9a76 --- /dev/null +++ b/apps/player/src/components/desktop/DesktopBetSlipRail.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/apps/player/src/components/desktop/DesktopShell.vue b/apps/player/src/components/desktop/DesktopShell.vue index 1ed6b87..3e7d9e3 100644 --- a/apps/player/src/components/desktop/DesktopShell.vue +++ b/apps/player/src/components/desktop/DesktopShell.vue @@ -7,16 +7,28 @@ import DesktopOddsBetPopover from './DesktopOddsBetPopover.vue'; import SportsCategoryBar from './SportsCategoryBar.vue'; import LeagueSidebar from './LeagueSidebar.vue'; import MatchSidebar from './MatchSidebar.vue'; -import BetSlipPanel from './BetSlipPanel.vue'; +import DesktopBetSlipRail from './DesktopBetSlipRail.vue'; import FloatingMailbox from '../FloatingMailbox.vue'; import { usePlayerHome } from '../../composables/usePlayerHome'; import { useAuthStore } from '../../stores/auth'; +import { useBetSlipStore } from '../../stores/betSlip'; const route = useRoute(); const { locale } = useI18n(); const auth = useAuthStore(); +const slip = useBetSlipStore(); const { load: loadPlayerHome } = usePlayerHome(); +const showBetSlipRail = computed(() => { + const p = route.path; + if (p === '/bets' || p.startsWith('/bets/')) return false; + if (p.startsWith('/wallet') || p.startsWith('/profile')) return false; + if (route.params.id && (p.startsWith('/announcements/') || p.startsWith('/messages/'))) { + return false; + } + return true; +}); + const layoutMode = computed<'betting' | 'account' | 'hub' | 'marketing'>(() => { const p = route.path; if (p === '/bet' || p.startsWith('/match/') || p.startsWith('/outright/')) { @@ -61,11 +73,18 @@ watch(