irc_web/.svn/pristine/4a/4aeb8367dfcd33eccb856a4dd10...

107 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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