import axios, {AxiosRequestConfig} from 'axios' const API_URL_KEY = 'API_URL' const API_URL = localStorage.getItem(API_URL_KEY) || "http://localhost:8080" // 设置默认的请求头 axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8' const service = axios.create({ baseURL: API_URL, timeout: 10000 }) /** * 默认的结果拦截器 */ service.interceptors.response.use((response) => { if (response && response.status === 200) { return response.data } else { return Promise.reject(response ? response.data : response) } }) /** * API工具类 * @author zhongming */ export default class ApiUtils { /** * 设置api地址 * @param baseUrl api地址 */ public static setApiUrl(baseUrl: string) { localStorage.setItem(API_URL_KEY, baseUrl) } /** * 获取api地址 */ public static getApiUrl(): string | null { return localStorage.getItem(API_URL_KEY) } /** * 发送ajax请求 * @param url * @param parameter * @param headers * @param timeout * @param customeConfig 自定义配置 */ public static postAjax(url: string, parameter?: any, headers?: {[index: string]: any}, timeout?: number, customeConfig?: AxiosRequestConfig): Promise { headers = headers || {} parameter = parameter || {} customeConfig = customeConfig || {} const config: AxiosRequestConfig = { ...customeConfig, headers: headers } if (timeout) { config['timeout'] = timeout } return service.post(url, parameter, config) } /** * 批量上传文件 * @param url * @param fileList * @param parameter * @param headers * @param timeout * @param customeConfig */ public static batchUpload(url: string, fileList: Array, parameter?: any, headers?: {[index: string]: any}, timeout?: number, customeConfig?: AxiosRequestConfig): Promise { const formData: FormData = new FormData(); fileList.forEach((file) => { formData.append('files', file) }) return ApiUtils.doUploadFile(url, formData, parameter, headers, timeout, customeConfig) } /** * 上传文件 * @param url * @param file * @param parameter * @param headers * @param timeout * @param customeConfig */ public static upload(url: string, file: File, parameter?: any, headers?: {[index: string]: any}, timeout?: number, customeConfig?: AxiosRequestConfig): Promise { const formData: FormData = new FormData(); formData.append('file', file) return ApiUtils.doUploadFile(url, formData, parameter, headers, timeout, customeConfig) } /** * 执行文件上传 * @param url * @param formData * @param parameter * @param headers * @param timeout * @param customeConfig */ private static doUploadFile(url: string, formData: FormData, parameter?: any, headers?: {[index: string]: any}, timeout?: number, customeConfig?: AxiosRequestConfig): Promise { customeConfig = customeConfig || {} // 添加其他参数 if (parameter) { Object.keys(parameter) .forEach(key => { formData.append(key, parameter[key]) }) } // 设置请求头 const postHeaders = Object.assign({ 'Content-Type': 'multipart/form-data' }, headers || {}) const config: AxiosRequestConfig = { ...customeConfig, headers: postHeaders } if (timeout) { config['timeout'] = timeout } return service.post(url, formData, config); } } export { service }