172 lines
4.4 KiB
JavaScript
172 lines
4.4 KiB
JavaScript
/**
|
||
* axios请求封装
|
||
* https://rudon.blog.csdn.net/
|
||
*/
|
||
import axios from 'axios'
|
||
import { getToken, getUser } from '@/utils/storage'
|
||
import { useRouter } from 'vue-router';
|
||
import { ElMessage } from 'element-plus';
|
||
|
||
const router = useRouter();
|
||
// axios.defaults.withCredentials = true;
|
||
// 请求地址前缀
|
||
let baseURL = ''
|
||
if (process.env.NODE_ENV === 'development') {
|
||
// 生产环境
|
||
// baseURL = "http://120.26.251.180:8085/"
|
||
baseURL = "http://120.26.251.180:15330"
|
||
} else {
|
||
// 开发环境
|
||
baseURL = "http://120.26.251.180:8085/"
|
||
}
|
||
|
||
// 请求拦截器
|
||
axios.interceptors.request.use((config) => {
|
||
// if (getToken()) {
|
||
// config.headers['token'] = getToken();
|
||
// }
|
||
|
||
// 请求超时时间 - 毫秒
|
||
config.timeout = 60000
|
||
config.baseURL = baseURL
|
||
// 自定义Content-type
|
||
config.headers['Content-type'] = 'application/json'
|
||
return config;
|
||
}, (error) => {
|
||
return Promise.reject(error)
|
||
})
|
||
|
||
// 响应拦截器
|
||
axios.interceptors.response.use((response) => {
|
||
return response
|
||
}, (error) => {
|
||
// 可添加请求失败后的处理逻辑
|
||
return Promise.reject(error)
|
||
})
|
||
|
||
|
||
|
||
// axios的get请求
|
||
export function getAxios({ url, params }) {
|
||
// 使用axios发送GET请求
|
||
return new Promise((resolve, reject) => {
|
||
axios.get(url, {
|
||
params
|
||
// 请求成功,将返回的数据传递给resolve函数
|
||
}).then(res => {
|
||
resolve(res.data)
|
||
// 请求失败,将错误信息传递给reject函数
|
||
}).catch(err => {
|
||
console.log(err)
|
||
reject(err)
|
||
})
|
||
})
|
||
}
|
||
|
||
// axios的post请求
|
||
export function postAxios({ url, data }) {
|
||
// if (url != 'api/account/login') {
|
||
|
||
// throttledCheekalive();
|
||
|
||
// }
|
||
|
||
|
||
return new Promise((resolve, reject) => {
|
||
axios.post(
|
||
url,
|
||
data,
|
||
{
|
||
headers: {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
}
|
||
}
|
||
).then(res => {
|
||
resolve(res.data)
|
||
}).catch(err => {
|
||
if (err.message == "Network Error") {
|
||
// alert("网络错误,请检查网络连接")
|
||
// ElMessage.error('网络连接错误');
|
||
reject('网络连接错误')
|
||
|
||
} else {
|
||
ElMessage.error(err.message);
|
||
reject(err.message)
|
||
|
||
}
|
||
// console.log(err)
|
||
// reject(err)
|
||
})
|
||
})
|
||
}
|
||
export const downFile = async (urlstr, data) => {
|
||
|
||
// 发送请求,获取文件流
|
||
const response = await axios.post(urlstr, data, { responseType: 'blob' });
|
||
|
||
// 获取文件名(如果后端设置了 Content-Disposition)
|
||
const contentDisposition = response.headers['content-disposition'];
|
||
let fileName = 'default-file-name'; // 默认文件名
|
||
console.log(contentDisposition)
|
||
console.log(response)
|
||
if (contentDisposition) {
|
||
// 从响应头中提取文件名
|
||
const fileNameMatch = contentDisposition.match(/filename="(.+)"/);
|
||
if (fileNameMatch && fileNameMatch.length > 1) {
|
||
fileName = fileNameMatch[1];
|
||
}
|
||
}
|
||
|
||
// 创建一个临时的下载链接
|
||
const blob = new Blob([response.data], { type: response.headers['content-type'] });
|
||
const url = window.URL.createObjectURL(blob);
|
||
const a = document.createElement('a');
|
||
a.href = url;
|
||
a.download = fileName; // 设置下载的文件名
|
||
a.click();
|
||
|
||
// 释放 URL 对象
|
||
window.URL.revokeObjectURL(url);
|
||
|
||
|
||
}
|
||
//请求前验证
|
||
function cheekalive() {
|
||
axios.post('api/account/cheekalive', {
|
||
userId: getUser().userId,
|
||
currcode: getToken(),
|
||
},
|
||
{
|
||
headers: {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
}
|
||
}
|
||
).then(res => {
|
||
console.log(res.data)
|
||
if (res.data) {
|
||
|
||
} else {
|
||
alert("账号在其他地方登录!")
|
||
window.location.href = '/';
|
||
}
|
||
|
||
|
||
})
|
||
}
|
||
//节流函数
|
||
function throttle(func, limit) {
|
||
let inThrottle;
|
||
return function () {
|
||
const args = arguments;
|
||
const context = this;
|
||
if (!inThrottle) {
|
||
func.apply(context, args);
|
||
inThrottle = true;
|
||
setTimeout(() => inThrottle = false, limit);
|
||
}
|
||
}
|
||
}
|
||
|
||
const throttledCheekalive = throttle(cheekalive, 5000);
|
||
|
||
export default axios |