import axios from 'axios' import { resReject, resResolve, reqReject, reqResolve } from './interceptors' import { getCurrentEndpoint, getAvailableEndpoints } from '../api-config' export function createAxios(options = {}) { const defaultOptions = { timeout: 12000, } const service = axios.create({ ...defaultOptions, ...options, }) service.interceptors.request.use(reqResolve, reqReject) service.interceptors.response.use(resResolve, resReject) return service } // 创建支持多接口的请求实例 export function createMultiEndpointRequest() { let instances = null // 延迟创建axios实例 function ensureInstances() { if (!instances) { instances = {} const endpoints = getAvailableEndpoints() console.log('创建axios实例,接口列表:', endpoints) endpoints.forEach((endpoint) => { console.log(`创建实例 ${endpoint.key}:`, endpoint.baseURL) instances[endpoint.key] = createAxios({ baseURL: endpoint.baseURL, timeout: endpoint.timeout, }) }) } return instances } return { // 使用当前选中的接口发送请求 async request(config) { const instances = ensureInstances() const currentEndpoint = getCurrentEndpoint() console.log('当前接口配置:', currentEndpoint) console.log('可用实例:', Object.keys(instances)) const instance = instances[currentEndpoint.key] if (!instance) { throw new Error(`接口实例不存在: ${currentEndpoint.key}`) } console.log(`使用接口: ${currentEndpoint.name} (${currentEndpoint.baseURL})`) console.log('请求配置:', config) return await instance(config) }, // 获取当前接口实例 getCurrentInstance() { const instances = ensureInstances() const currentEndpoint = getCurrentEndpoint() return instances[currentEndpoint.key] }, // 获取所有接口实例 getAllInstances() { return ensureInstances() }, } } // export const request = createAxios({ // baseURL: import.meta.env.VITE_BASE_API, // }) // 支持多接口的请求实例 export const multiRequest = createMultiEndpointRequest() // 创建自动适配多接口的request实例 const multiEndpointInstance = createMultiEndpointRequest() // 创建支持axios方法的request实例 export const request = { // 基础请求方法 request: (config) => multiEndpointInstance.request(config), // 自动适配axios方法 get: (url, config = {}) => multiEndpointInstance.request({ method: 'get', url, ...config }), post: (url, data, config = {}) => multiEndpointInstance.request({ method: 'post', url, data, ...config }), put: (url, data, config = {}) => multiEndpointInstance.request({ method: 'put', url, data, ...config }), delete: (url, config = {}) => multiEndpointInstance.request({ method: 'delete', url, ...config }), patch: (url, data, config = {}) => multiEndpointInstance.request({ method: 'patch', url, data, ...config }), head: (url, config = {}) => multiEndpointInstance.request({ method: 'head', url, ...config }), options: (url, config = {}) => multiEndpointInstance.request({ method: 'options', url, ...config }), // 获取当前接口实例(用于直接访问axios实例) getCurrentInstance: () => multiEndpointInstance.getCurrentInstance(), getAllInstances: () => multiEndpointInstance.getAllInstances(), }