Files
thebet365/apps/player/src/stores/auth.ts
Mars db28390be9 feat(player): 接入创蓝短信手机注册与登录页优化
新增 SMS 验证码注册、8 国手机号选择与 Redis 频控;优化登录/注册 UI 及图形验证码样式。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 10:25:59 +08:00

81 lines
2.2 KiB
TypeScript

import { defineStore } from 'pinia';
import { ref } from 'vue';
import api from '../api';
export const useAuthStore = defineStore('auth', () => {
const token = ref(localStorage.getItem('token') || '');
const user = ref<{ id?: string; username?: string; locale?: string } | null>(
JSON.parse(localStorage.getItem('user') || 'null'),
);
const loginPromptVisible = ref(false);
const loginReturnTo = ref('');
function showLoginPrompt(returnTo?: string) {
loginReturnTo.value = returnTo || '';
loginPromptVisible.value = true;
}
function hideLoginPrompt() {
loginPromptVisible.value = false;
}
async function login(username: string, password: string, countryCode?: string) {
const dial = countryCode?.replace(/\D/g, '');
const { data } = await api.post('/player/auth/login', {
username,
password,
...(dial ? { countryCode: dial } : {}),
});
token.value = data.data.token;
user.value = data.data.user;
localStorage.setItem('token', token.value);
localStorage.setItem('user', JSON.stringify(user.value));
const returnTo = loginReturnTo.value;
loginReturnTo.value = '';
loginPromptVisible.value = false;
return returnTo;
}
async function register(
phone: string,
countryCode: string,
password: string,
smsCode: string,
sessionId: string,
inviteCode?: string,
) {
const locale = localStorage.getItem('locale') || 'zh-CN';
const code = inviteCode?.trim();
const dial = countryCode.replace(/\D/g, '');
const { data } = await api.post('/player/auth/register', {
phone,
countryCode: dial,
password,
smsCode,
sessionId,
locale,
...(code ? { inviteCode: code } : {}),
});
token.value = data.data.token;
user.value = data.data.user;
localStorage.setItem('token', token.value);
localStorage.setItem('user', JSON.stringify(user.value));
loginReturnTo.value = '';
loginPromptVisible.value = false;
}
function logout() {
token.value = '';
user.value = null;
localStorage.removeItem('token');
localStorage.removeItem('user');
}
return {
token, user, login, register, logout,
loginPromptVisible, loginReturnTo,
showLoginPrompt, hideLoginPrompt,
};
});