You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
import axios from 'axios'
|
|
import { Loading, Message } from 'element-ui'
|
|
export default function axiosFormatting (customConfig) {
|
|
//将请求头和请求参数的值转化为对象形式
|
|
const headers = arrToObject(customConfig.headers)
|
|
const params = arrToObject(customConfig.params)
|
|
const httpConfig = {
|
|
timeout: 1000 * 30,
|
|
baseURL: '',
|
|
headers
|
|
}
|
|
// let loadingInstance = null // 加载全局的loading
|
|
const instance = axios.create(httpConfig)
|
|
/** 添加请求拦截器 **/
|
|
instance.interceptors.request.use(config => {
|
|
/**
|
|
* 在这里:可以根据业务需求可以在发送请求之前做些什么。
|
|
* config.headers['token'] = sessionStorage.getItem('token') || ''
|
|
*/
|
|
// 执行请求脚本
|
|
eval(customConfig.requestScript)
|
|
return config
|
|
}, error => {
|
|
// 对请求错误做些什么
|
|
return Promise.reject(error)
|
|
})
|
|
|
|
/** 添加响应拦截器 **/
|
|
instance.interceptors.response.use(response => {
|
|
if (response.data.code === 200) {
|
|
// 执行响应脚本
|
|
const data = response.data.data
|
|
eval(customConfig.responseScript)
|
|
Message({
|
|
message: '执行成功',
|
|
type: 'success'
|
|
})
|
|
return Promise.resolve(data)
|
|
} else {
|
|
Message({
|
|
message: response.data.message,
|
|
type: 'error'
|
|
})
|
|
return Promise.reject(response.data.message)
|
|
}
|
|
})
|
|
return new Promise((resolve, reject) => {
|
|
instance({
|
|
method: customConfig.method,
|
|
url: customConfig.url,
|
|
params,
|
|
data: customConfig.method === 'post' ? customConfig.body : undefined
|
|
}).then(response => {
|
|
resolve(response)
|
|
}).catch(error => {
|
|
reject(error)
|
|
})
|
|
})
|
|
}
|
|
// 数组转化为对象
|
|
function arrToObject(list) {
|
|
const obj = {}
|
|
list.forEach(item=>{
|
|
obj[item.key] = item.value
|
|
})
|
|
return obj
|
|
}
|