import { api } from './api'; import type { UserInfo, LoginRequest, LoginResponse } from '@/types/user'; import type { ApiResponse } from '@/types/common'; /** * Token 存储键名 */ const TOKEN_KEY = 'access_token'; const USER_KEY = 'user_info'; /** * 认证服务 */ class AuthService { /** * 登录 */ async login(credentials: LoginRequest): Promise { const response = await api.post>('/auth/login', credentials); if (response.code === 0 && response.data) { this.setToken(response.data.accessToken); this.setUser(response.data.user); return response.data; } throw new Error(response.message || '登录失败'); } /** * 登出 */ logout(): void { this.removeToken(); this.removeUser(); } /** * 获取当前 token */ getToken(): string | null { return localStorage.getItem(TOKEN_KEY); } /** * 设置 token */ setToken(token: string): void { localStorage.setItem(TOKEN_KEY, token); } /** * 移除 token */ removeToken(): void { localStorage.removeItem(TOKEN_KEY); } /** * 获取当前用户信息 */ getUser(): UserInfo | null { const userStr = localStorage.getItem(USER_KEY); if (!userStr) return null; try { return JSON.parse(userStr); } catch { return null; } } /** * 设置用户信息 */ setUser(user: UserInfo): void { localStorage.setItem(USER_KEY, JSON.stringify(user)); } /** * 移除用户信息 */ removeUser(): void { localStorage.removeItem(USER_KEY); } /** * 检查是否已登录 */ isAuthenticated(): boolean { return !!this.getToken(); } /** * 检查是否为管理员 */ isAdmin(): boolean { const user = this.getUser(); return user?.role === 'admin' || user?.role === 'super_admin'; } } // 导出单例 export const authService = new AuthService();