import axios from "axios";
import { ElMessage } from "element-plus";
const baseURL = '/api'
const server = axios.create({
baseURL: baseURL,
timeout: 60000,
headers: {
'Cache-Control': 'no-cache'
}
})
const pending = []
const whiteList = []
const CancelToken = axios.CancelToken
const removePending = ever => {
for (const p in pending) {
if (pending[p].u === ever.url + '&' + ever.method) {
pending[p].f()
pending.splice(p, 1)
}
}
}
server.interceptors.request.use(config => {
if (localStorage.getItem('token')) {
config.headers.token = localStorage.getItem('token')
}
if (whiteList.indexOf(config.url) === -1) {
removePending(config)
config.cancelToken = new CancelToken(c => {
pending.push({ u: config.url + '&' + config.method, f: c })
})
}
return config
}, error => {
console.log(error)
return Promise.reject(error)
})
server.interceptors.response.use(response => {
const res = response.data
if (!res.code && response.headers['content-type'] !== 'application/json') {
return response
} else if (res.code === 0) {
return res
} else {
showError(res)
return Promise.reject(res)
}
}, error => {
const msg = error.msg || error
const code = 404
showError({code,message:msg})
return Promise.reject(error)
})
const showError = error => {
if (error.code === 403) {
} else {
if (error.msg) {
ElMessage({
message: error.msg,
type: 'error',
duration: 3000
})
}
}
}
export default server