/* * @Author: 田鑫 * @Date: 2023-02-17 11:58:44 * @LastEditors: Please set LastEditors * @LastEditTime: 2025-06-20 06:00:54 * @Description: */ import axios from 'axios'; import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; import { handleUserLogout } from '@/utils/user'; const contentType = 'application/json'; const requestTimeout = 30000; const HttpStatusCode = { OK: 200, BadRequest: 400, // 请求参数错误 Unauthorized: 401, // token 无效或过期 NotFound: 404, InternalServerError: 500, }; import { useEnterpriseStore } from '@/stores/modules/enterprise'; import pinia from '@/stores'; const store = useEnterpriseStore(pinia); const enterprise = store.getEnterpriseInfo(); //* 导出Request类,可以用来自定义传递配置来创建实例 export class Request { //* axios 实例 private instance: AxiosInstance; //* 基础配置 private baseConfig: AxiosRequestConfig = { baseURL: import.meta.env.EO_API_URL, timeout: requestTimeout, headers: { 'Content-Type': contentType, }, }; public constructor(config: AxiosRequestConfig) { this.instance = axios.create(Object.assign(this.baseConfig, config)); this.instance.interceptors.request.use( (config: AxiosRequestConfig) => { const token = localStorage.getItem('accessToken') as string; config.headers!.Authorization = token; if (token) { config.headers!.Authorization = token; } else { config.headers!.satoken = '123'; } if (enterprise) { config.headers!['enterprise-id'] = enterprise.id; } return config; }, (err: any) => { return Promise.reject(err); }, ); this.instance.interceptors.response.use( (res: AxiosResponse) => { const { data } = res; switch (data.code) { case HttpStatusCode.OK: return data; default: return Promise.reject(data); } }, (err: any) => { const message = err.response?.data?.message ?? err.message; AMessage.error(message); // 这里用来处理http常见错误,进行全局提示 return Promise.reject(err.response); }, ); } //* 定义请求方法 public request(config: AxiosRequestConfig): Promise { return this.instance.request(config); } public get(url: string, params?: any, config?: AxiosRequestConfig): Promise { return this.instance.get(url, { params, ...config }); } public post(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.post(url, data, config); } public put(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.put(url, data, config); } public delete(url: string, config?: AxiosRequestConfig): Promise { return this.instance.delete(url, config); } public patch(url: string, data?: any, config?: AxiosRequestConfig): Promise { return this.instance.patch(url, data, config); } } //* 默认导出Request实例 export default new Request({});