feat(player): 注册账号、登录双模式与移动端性能优化

注册必填 7-32 位账号,手机号区号/本地号分存;登录默认账号模式并支持切换手机号登录;Player i18n 拆包与赛事接口优化。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-12 10:56:51 +08:00
parent 83f0f380c5
commit 312c3c5816
35 changed files with 1944 additions and 1394 deletions

View File

@@ -3,15 +3,18 @@ import { RouterView, RouterLink, useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { useAuthStore } from '../stores/auth';
import { useBetSlipStore } from '../stores/betSlip';
import BetSlipDrawer from '../components/BetSlipDrawer.vue';
import CashBalanceChip from '../components/CashBalanceChip.vue';
import UserAvatarMenu from '../components/UserAvatarMenu.vue';
import LocaleSwitcher from '../components/LocaleSwitcher.vue';
import { useAppLocale } from '../composables/useAppLocale';
import AnnouncementMarquee from '../components/AnnouncementMarquee.vue';
import BottomNavIcon from '../components/BottomNavIcon.vue';
import CustomerServiceModal from '../components/CustomerServiceModal.vue';
import { computed, onMounted, ref, watch } from 'vue';
import { computed, defineAsyncComponent, onMounted, ref, watch } from 'vue';
const BetSlipDrawer = defineAsyncComponent(() => import('../components/BetSlipDrawer.vue'));
const CustomerServiceModal = defineAsyncComponent(
() => import('../components/CustomerServiceModal.vue'),
);
import { usePlayerHome } from '../composables/usePlayerHome';
import { usePlayerProfile } from '../composables/usePlayerProfile';
@@ -62,7 +65,7 @@ watch(
);
onMounted(() => {
if (auth.user?.locale) initFromUser(auth.user.locale);
if (auth.user?.locale) void initFromUser(auth.user.locale);
});
watch(
@@ -121,7 +124,7 @@ watch(
<main ref="mainRef" :class="['main', { 'has-nav': showBottomNav }]">
<RouterView v-slot="{ Component, route: viewRoute }">
<KeepAlive v-if="viewRoute.meta.keepAlive">
<KeepAlive v-if="viewRoute.meta.keepAlive" :max="3">
<component :is="Component" :key="viewRoute.path" />
</KeepAlive>
<component v-else :is="Component" :key="viewRoute.fullPath" />
@@ -173,9 +176,7 @@ watch(
flex-shrink: 0;
display: flex; justify-content: space-between; align-items: center;
padding: 8px 12px;
background: rgba(26, 26, 26, 0.65);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
background: rgba(17, 17, 17, 0.94);
border-bottom: 1px solid var(--border);
z-index: 110;
}
@@ -270,9 +271,7 @@ watch(
}
.bottom-nav {
display: flex;
background: rgba(17, 17, 17, 0.75);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
background: rgba(17, 17, 17, 0.96);
border-top: 1px solid var(--border);
box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.35);
z-index: 100;