// +--------------------------------------------------------------------- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ] // +--------------------------------------------------------------------- // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. // +--------------------------------------------------------------------- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 // +--------------------------------------------------------------------- // | Author: CRMEB Team // +--------------------------------------------------------------------- import axios from 'axios'; import store from '@/store'; // import { Spin } from 'iview' const addErrorLog = (errorInfo) => { const { statusText, status, request: { responseURL }, } = errorInfo; let info = { type: 'ajax', code: status, mes: statusText, url: responseURL, }; if (!responseURL.includes('save_error_logger')) store.dispatch('addErrorLog', info); }; class HttpRequest { constructor(baseUrl = baseURL) { this.baseUrl = 'http://admin.crmeb.net/adminapi'; this.queue = {}; } getInsideConfig() { const config = { baseURL: this.baseUrl, headers: { // }, }; return config; } destroy(url) { delete this.queue[url]; if (!Object.keys(this.queue).length) { // Spin.hide() } } interceptors(instance, url) { // 请求拦截 instance.interceptors.request.use( (config) => { // 添加全局的loading... if (!Object.keys(this.queue).length) { // Spin.show() // 不建议开启,因为界面不友好 } this.queue[url] = true; return config; }, (error) => { return Promise.reject(error); }, ); // 响应拦截 instance.interceptors.response.use( (res) => { this.destroy(url); const { data, status } = res; return { data, status }; }, (error) => { this.destroy(url); let errorInfo = error.response; if (!errorInfo) { const { request: { statusText, status }, config, } = JSON.parse(JSON.stringify(error)); errorInfo = { statusText, status, request: { responseURL: config.url }, }; } addErrorLog(errorInfo); return Promise.reject(error); }, ); } request(options) { const instance = axios.create(); options = Object.assign(this.getInsideConfig(), options); this.interceptors(instance, options.url); return instance(options); } } export default HttpRequest;