176 lines
5.1 KiB
Plaintext
176 lines
5.1 KiB
Plaintext
import axios from 'axios'
|
||
// import type { AxiosRequestConfig } from 'axios';
|
||
import { token } from "@/stores/modules/user";
|
||
import { message } from "./message";
|
||
import router from '@/router';
|
||
|
||
const TOKEN_KEY = "token";
|
||
|
||
declare module 'axios' {
|
||
export interface AxiosRequestConfig {
|
||
showLoading?: boolean
|
||
// [自定义属性声明]
|
||
}
|
||
}
|
||
// const { createMessage, createWarningModal } = useMessage()
|
||
// 创建axios实例
|
||
const service = axios.create({
|
||
// 服务接口请求
|
||
baseURL: "/test-api",
|
||
// 超时设置
|
||
timeout: 15000,
|
||
headers: { 'Content-Type': 'application/json;charset=utf-8;' },
|
||
showLoading: false
|
||
})
|
||
|
||
// let loading: any;
|
||
// const [openFullLoading, closeFullLoading] = useLoading({
|
||
// tip: '拼命加载中,请稍后...'
|
||
// })
|
||
//正在请求的数量
|
||
let requestCount: number = 0
|
||
//显示loading
|
||
const showLoading = () => {
|
||
if (requestCount === 0) {
|
||
//加载中显示样式可以自行修改
|
||
// loading = ElLoading.service({
|
||
// text: "拼命加载中,请稍后...",
|
||
// background: 'rgba(0, 0, 0, 0.7)',
|
||
// spinner: 'el-icon-loading',
|
||
// })
|
||
message.loading('请求中...')
|
||
}
|
||
requestCount++
|
||
}
|
||
//隐藏loading
|
||
const hideLoading = () => {
|
||
requestCount--
|
||
if (requestCount == 0) {
|
||
// loading.close()
|
||
message.destroyAll()
|
||
}
|
||
}
|
||
|
||
// 请求拦截
|
||
service.interceptors.request.use(
|
||
(config) => {
|
||
// config.showLoading
|
||
if (config.showLoading) {
|
||
showLoading()
|
||
}
|
||
if (token) config.headers[TOKEN_KEY] = unref(token);
|
||
// if (getToken()) {
|
||
// // 是否需要设置 token放在请求头
|
||
// config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||
// }
|
||
|
||
// get请求映射params参数
|
||
if (config.method === 'get' && config.params) {
|
||
let url = config.url + '?'
|
||
for (const propName of Object.keys(config.params)) {
|
||
const value = config.params[propName]
|
||
const part = encodeURIComponent(propName) + '='
|
||
if (value !== null && typeof value !== 'undefined') {
|
||
// 对象处理
|
||
if (typeof value === 'object') {
|
||
for (const key of Object.keys(value)) {
|
||
const params = propName + '[' + key + ']'
|
||
const subPart = encodeURIComponent(params) + '='
|
||
url += subPart + encodeURIComponent(value[key]) + '&'
|
||
}
|
||
} else {
|
||
url += part + encodeURIComponent(value) + '&'
|
||
}
|
||
}
|
||
}
|
||
url = url.slice(0, -1)
|
||
config.params = {}
|
||
config.url = url
|
||
}
|
||
return config
|
||
},
|
||
(error) => {
|
||
// console.log(error)
|
||
Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
// 响应拦截器
|
||
service.interceptors.response.use(
|
||
async (response: any) => {
|
||
// console.log('响应拦截器res', response)
|
||
// if (res.config.showLoading) {
|
||
// showLoading()
|
||
// }
|
||
hideLoading()
|
||
// 未设置状态码则默认成功状态
|
||
|
||
const { data, status } = response;
|
||
if (data instanceof Blob || data instanceof ArrayBuffer) {
|
||
if (response.headers["content-disposition"]) {
|
||
const fileName = response.headers["content-disposition"]
|
||
?.split(";")[1]
|
||
?.split("=")[1];
|
||
return {
|
||
data,
|
||
fileName,
|
||
};
|
||
}
|
||
else {
|
||
return Promise.reject("没有访问权限");
|
||
}
|
||
}
|
||
const { errCode, code, msg } = data || {};
|
||
const errMsg = data?.errMsg || data?.message || msg;
|
||
// console.log(11, code, errMsg)
|
||
|
||
if(code === 2000){
|
||
await router.push('/');
|
||
}
|
||
|
||
if (![0, 200].includes(code)) {
|
||
|
||
// if(errMsg==='用户未登录')
|
||
// { message.error(errMsg);}
|
||
// else if(errMsg==='密码不正确'){
|
||
// message.error(errMsg);
|
||
// }
|
||
// else if(errMsg==="账户信息查找为空"){
|
||
// message.error(errMsg);
|
||
// }
|
||
// else{ message.error("服务器升级维护中,请稍后重试!")}\
|
||
message.error(errMsg);
|
||
return Promise.reject(errMsg);
|
||
}
|
||
|
||
if (/^[4|5].*/.test(code || errCode || status)) {
|
||
// console.error('> axios(interceptors.response): ', errMsg);
|
||
message.error(errMsg);
|
||
// message.error("服务器访问过多,请稍后重试!");
|
||
// 处理未登录,token过期等 情况
|
||
// if (code !== 404 && /^[4].*/.test(code || errCode || status)) {
|
||
// await app.fedLogout();
|
||
// }
|
||
|
||
return Promise.reject(data);
|
||
}
|
||
return data;
|
||
},
|
||
(error) => {
|
||
// console.log('err' + error)
|
||
hideLoading()
|
||
let { message } = error
|
||
if (message == 'Network Error') {
|
||
message = '后端接口连接异常'
|
||
} else if (message.includes('timeout')) {
|
||
message = '系统接口请求超时'
|
||
} else if (message.includes('Request failed with status code')) {
|
||
message = '系统接口' + message.substr(message.length - 3) + '异常'
|
||
}
|
||
message.err("服务器升级维护中,请稍后重试!")
|
||
return Promise.reject(error)
|
||
}
|
||
)
|
||
|
||
export default service
|