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

@@ -2,7 +2,7 @@
import { ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { defaultPhoneIsoForLocale, getPhoneDialFromIso } from '@thebet365/shared';
import { defaultPhoneIsoForLocale, getPhoneDialFromIso, isValidPlayerUsername } from '@thebet365/shared';
import { useAuthStore } from '../stores/auth';
import { useAppLocale } from '../composables/useAppLocale';
import { useSmsCode } from '../composables/useSmsCode';
@@ -16,6 +16,7 @@ const auth = useAuthStore();
const router = useRouter();
const route = useRoute();
const account = ref('');
const phone = ref('');
const countryIso = ref(defaultPhoneIsoForLocale(locale.value));
const password = ref('');
@@ -32,6 +33,14 @@ async function sendCode() {
}
async function submit() {
if (!account.value.trim()) {
error.value = t('auth.username_required');
return;
}
if (!isValidPlayerUsername(account.value)) {
error.value = t('auth.username_format_invalid');
return;
}
if (!sessionId.value) {
error.value = t('auth.sms_required');
return;
@@ -48,6 +57,7 @@ async function submit() {
error.value = '';
try {
await auth.register(
account.value,
phone.value,
getPhoneDialFromIso(countryIso.value),
password.value,
@@ -97,6 +107,19 @@ const fieldError = () => {
<form @submit.prevent="submit" class="login-form ps-gold-frame">
<h2 class="form-title">{{ t('auth.register') }}</h2>
<div class="field">
<label>{{ t('auth.username') }}</label>
<input
v-model="account"
class="field-input"
required
autocomplete="username"
maxlength="32"
minlength="7"
:placeholder="t('auth.username_register_placeholder')"
/>
</div>
<div class="field">
<label>{{ t('auth.phone') }}</label>
<div class="inline-row">