107 lines
3.7 KiB
Plaintext
107 lines
3.7 KiB
Plaintext
import axios from 'axios'
|
||
import { Message, MessageBox } from 'element-ui'
|
||
import store from '@/store'
|
||
import router from '@/router'
|
||
axios.defaults.withCredentials = false
|
||
const service = axios.create({
|
||
baseURL: '/api',
|
||
timeout: 2 * 360000, // request timeout
|
||
withCredentials: false
|
||
})
|
||
|
||
// request interceptor
|
||
service.interceptors.request.use(
|
||
config => {
|
||
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
|
||
if (store.getters.token) {
|
||
config.headers.Authorization = `Bearer ${store.getters.token}`
|
||
}
|
||
return config
|
||
},
|
||
error => {
|
||
return Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
service.interceptors.response.use(
|
||
response => {
|
||
const res = response.data
|
||
let fileReader = new FileReader();
|
||
fileReader.onload = function() {
|
||
try {
|
||
let jsonData = JSON.parse(fileReader.result); // 如果是普通对象数据,后台转换失败
|
||
if (!jsonData.IsSuccess && jsonData.ErrorMessage) {
|
||
MessageBox.confirm(jsonData.ErrorMessage, {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
callback: action => {}
|
||
})
|
||
return Promise.reject(jsonData)
|
||
}
|
||
} catch (err) { // 解析成对象失败,说明是正常的文件流
|
||
let contentDisposition = response.headers['content-disposition']
|
||
let fileName = ''
|
||
if (contentDisposition) {
|
||
fileName = contentDisposition.split('; ')[2].split('=')[1].split("\'")[2]
|
||
fileName = decodeURI(fileName)
|
||
}
|
||
const a = document.createElement('a')
|
||
// xls类型: application/vnd.ms-excel
|
||
// xlsx类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
|
||
const href = URL.createObjectURL(new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }))
|
||
a.download = fileName
|
||
a.href = href
|
||
a.click()
|
||
URL.revokeObjectURL(href)
|
||
return Promise.resolve(res)
|
||
}
|
||
};
|
||
fileReader.readAsText(res)
|
||
},
|
||
error => {
|
||
var message = ''
|
||
if (error && error.response) {
|
||
const status = error.response.status
|
||
switch (status) {
|
||
case 400: message = '请求错误'; break
|
||
case 401: message = '未授权或登陆超时,请重新登录'; break
|
||
case 403: message = '服务器拒绝访问,请联系管理员授权'; break
|
||
case 404: message = `请求地址出错`; break
|
||
case 405: message = `接口参数传递错误,或者请求方法不一致`; break
|
||
case 408: message = '请求超时'; break
|
||
case 429: message = '应用服务限流,您的请求过于频繁,请稍后再试'; break
|
||
case 500: message = '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break
|
||
case 501: message = '服务未实现'; break
|
||
case 502: message = '系统正在升级,请耐心等待。'; break
|
||
case 503: message = '服务不可用'; break
|
||
case 504: message = '网关超时'; break
|
||
case 505: message = 'HTTP版本不受支持'; break
|
||
default: break
|
||
}
|
||
if (error.response.status === 401) {
|
||
if (store.getters.token) {
|
||
Message({
|
||
message: message,
|
||
type: 'warning',
|
||
showClose: true
|
||
})
|
||
store.dispatch('user/logout').then(() => {
|
||
router.push(`/login`)
|
||
})
|
||
}
|
||
} else {
|
||
MessageBox.confirm(message, '警告', {
|
||
type: 'warning',
|
||
showCancelButton: false,
|
||
confirmButtonText: '确定',
|
||
callback: action => {}
|
||
})
|
||
}
|
||
}
|
||
|
||
return Promise.reject(new Error(message || 'Error'))
|
||
}
|
||
)
|
||
|
||
export default service
|