import axios from 'axios' import type { LoginRequest, LoginResponse, RegisterRequest, CaptchaResponse, ApiResponse, RefreshTokenRequest, ChangePasswordRequest, ForgotPasswordRequest, ResetPasswordRequest, UserInfo } from '@/types/auth' // 创建axios实例 const authApi = axios.create({ baseURL: '/api/auth', timeout: 10000, headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 authApi.interceptors.request.use( (config) => { const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => { return Promise.reject(error) } ) // 响应拦截器 authApi.interceptors.response.use( (response) => { return response.data }, (error) => { if (error.response?.status === 401) { // token过期,清除本地存储并跳转到登录页 localStorage.removeItem('token') localStorage.removeItem('userInfo') window.location.href = '/login' } return Promise.reject(error.response?.data || error) } ) export const authService = { // 获取验证码 async getCaptcha(): Promise { const response: ApiResponse = await authApi.get('/captcha') return response.data }, // 用户登录 async login(data: LoginRequest): Promise> { return await authApi.post('/login', data) }, // 用户注册 async register(data: RegisterRequest): Promise> { return await authApi.post('/register', data) }, // 刷新token async refreshToken(data: RefreshTokenRequest): Promise> { return await authApi.post('/refresh-token', data) }, // 用户登出 async logout(): Promise> { return await authApi.post('/logout') }, // 获取用户信息 async getUserInfo(): Promise> { return await authApi.get('/user-info') }, // 修改密码 async changePassword(data: ChangePasswordRequest): Promise> { return await authApi.post('/change-password', data) }, // 忘记密码 async forgotPassword(data: ForgotPasswordRequest): Promise> { return await authApi.post('/forgot-password', data) }, // 重置密码 async resetPassword(data: ResetPasswordRequest): Promise> { return await authApi.post('/reset-password', data) }, // 验证token有效性 async validateToken(): Promise> { return await authApi.get('/validate-token') }, // 检查账号是否存在 async checkAccount(account: string): Promise> { return await authApi.get(`/check-account?account=${account}`) } } // 工具函数 export const authUtils = { // 获取token getToken(): string | null { return localStorage.getItem('token') }, // 设置token setToken(token: string): void { localStorage.setItem('token', token) }, // 移除token removeToken(): void { localStorage.removeItem('token') localStorage.removeItem('userInfo') }, // 获取用户信息 getUserInfo(): UserInfo | null { const userInfo = localStorage.getItem('userInfo') return userInfo ? JSON.parse(userInfo) : null }, // 设置用户信息 setUserInfo(userInfo: UserInfo): void { localStorage.setItem('userInfo', JSON.stringify(userInfo)) }, // 检查是否已登录 isLoggedIn(): boolean { return !!this.getToken() }, // 清除所有认证信息 clearAuth(): void { this.removeToken() } }