smart-admin/smart-admin-web/javascript-ant-design-vue3/src/lib/axios.js

130 lines
3.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* ajax请求
*
* @Author: 1024创新实验室-主任:卓大
* @Date: 2022-09-06 20:46:03
* @Wechat: zhuda1024
* @Email: lab1024@163.com
* @Copyright 1024创新实验室 https://1024lab.net Since 2012
*/
import { message } from 'ant-design-vue';
import axios from 'axios';
import { clearAllCoolies, getTokenFromCookie } from '/@/utils/cookie-util';
import { localClear } from '/@/utils/local-util';
// token的消息头
const TOKEN_HEADER = 'x-access-token';
// 创建axios对象
const smartAxios = axios.create({
baseURL: import.meta.env.VITE_APP_API_URL,
});
// ================================= 请求拦截器 =================================
smartAxios.interceptors.request.use(
(config) => {
// 在发送请求之前消息头加入token token
const token = getTokenFromCookie();
if (token) {
config.headers[TOKEN_HEADER] = token;
} else {
delete config.headers[TOKEN_HEADER];
}
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// ================================= 响应拦截器 =================================
// 添加响应拦截器
smartAxios.interceptors.response.use(
(response) => {
// 对响应数据做点什么
const res = response.data;
if (res.code && res.code !== 1) {
// `token` 过期或者账号已在别处登录
if (res.code === 30007 || res.code === 30008) {
message.error('您没有登录,请重新登录');
clearAllCoolies();
localClear();
//跳转到登录页面,直接使用页面刷新的策略
setTimeout(() => {
location.href = '/';
}, 300);
return Promise.reject(response);
}
message.error(res.msg);
return Promise.reject(response);
} else {
return Promise.resolve(res);
}
},
(error) => {
// 对响应错误做点什么
if (error.message.indexOf('timeout') != -1) {
message.error('网络超时');
} else if (error.message == 'Network Error') {
message.error('网络连接错误');
}else if (error.message.indexOf('Request') != -1) {
message.error('网络发生错误');
}
return Promise.reject(error);
}
);
// ================================= 对外提供请求方法通用请求get post, 下载download等 =================================
/**
* 通用请求封装
* @param config
*/
export const request = (config) => {
return smartAxios.request(config);
};
/**
* post请求
*/
export const postRequest = (url, data) => {
return request({ data, url, method: 'post' });
};
/**
* get请求
*/
export const getRequest = (url, params) => {
return request({ url, method: 'get', params });
};
/**
* 文件下载
*/
export const download = function (fileName, url, params) {
request({
method: 'get',
url: url,
params: params,
responseType: 'blob',
})
.then((data) => {
if (!data) {
return;
}
let url = window.URL.createObjectURL(new Blob([data]));
let link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', fileName);
document.body.appendChild(link);
link.click();
})
.catch((error) => {
throw error;
});
};