import axios from 'axios' import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios' import { showFailToast } from 'vant' import { TOKEN_KEY } from '@/utils/constants' // 创建 axios 实例 const service: AxiosInstance = axios.create({ baseURL: '/wlog/api/v1', timeout: 15000 }) // 请求拦截器 service.interceptors.request.use( (config) => { const token = localStorage.getItem(TOKEN_KEY) if (token) { config.headers['Authorization'] = `Bearer ${token}` } return config }, (error) => { return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( (response: AxiosResponse) => { const res = response.data // 业务成功 if (res.success) { return res.data } // 业务失败 showFailToast(res.message || '请求失败') return Promise.reject(new Error(res.message || '请求失败')) }, (error) => { // 401 未登录或 Token 过期 if (error.response?.status === 401) { localStorage.removeItem(TOKEN_KEY) localStorage.removeItem('worklog_user_info') window.location.href = '/login' return Promise.reject(error) } showFailToast(error.response?.data?.message || '网络错误') return Promise.reject(error) } ) // 封装请求方法 export const request = { get(url: string, config?: AxiosRequestConfig): Promise { return service.get(url, config) }, post(url: string, data?: any, config?: AxiosRequestConfig): Promise { return service.post(url, data, config) }, put(url: string, data?: any, config?: AxiosRequestConfig): Promise { return service.put(url, data, config) }, delete(url: string, config?: AxiosRequestConfig): Promise { return service.delete(url, config) } } export default service