Files
tk-page-Fan/src/utils/axios.js

171 lines
4.5 KiB
JavaScript
Raw Normal View History

2025-04-01 16:04:54 +08:00
/**
* axios请求封装
* https://rudon.blog.csdn.net/
*/
import axios from 'axios'
2025-04-03 16:41:54 +08:00
import { getToken, getUser } from '@/utils/storage'
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';
const router = useRouter();
2025-04-01 16:04:54 +08:00
// 请求地址前缀
let baseURL = ''
2025-04-03 16:41:54 +08:00
if (process.env.NODE_ENV === 'development') {
2025-04-01 16:04:54 +08:00
// 生产环境
2025-04-14 21:52:19 +08:00
baseURL = "http://120.26.251.180:8085/"
// baseURL = "http://192.168.0.114:8085/"
2025-04-01 16:04:54 +08:00
} else {
// 开发环境
2025-04-14 21:52:19 +08:00
baseURL = "http://120.26.251.180:8085/"
2025-04-01 16:04:54 +08:00
}
// 请求拦截器
axios.interceptors.request.use((config) => {
2025-04-03 16:41:54 +08:00
// if (getToken()) {
// config.headers['token'] = getToken();
// }
2025-04-01 16:04:54 +08:00
// 请求超时时间 - 毫秒
2025-04-03 16:41:54 +08:00
config.timeout = 60000
2025-04-01 16:04:54 +08:00
config.baseURL = baseURL
// 自定义Content-type
2025-04-03 16:41:54 +08:00
config.headers['Content-type'] = 'application/json'
2025-04-01 16:04:54 +08:00
return config;
}, (error) => {
return Promise.reject(error)
})
// 响应拦截器
axios.interceptors.response.use((response) => {
/**
* 可添加请求响应的处理逻辑, 例如接口自定义的response.data.code不是200代表失败
* 错误的话 return Promise.reject(response)
* 正确的话 return response
*/
return response
}, (error) => {
// 可添加请求失败后的处理逻辑
return Promise.reject(error)
})
// axios的get请求
// 导出一个函数用于发送GET请求
// 返回一个Promise对象
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 }) {
2025-04-14 21:52:19 +08:00
if (url != 'api/account/login') {
2025-04-03 16:41:54 +08:00
2025-04-14 21:52:19 +08:00
axios.post('api/account/cheekalive', {
2025-04-03 16:41:54 +08:00
userId: getUser().userId,
currcode: getToken(),
},
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
).then(res => {
2025-04-14 21:52:19 +08:00
if (res) {
} else {
alert("账号在其他地方登录!")
router.push('/login')
}
2025-04-03 16:41:54 +08:00
}).catch(err => {
if (err.message == "Network Error") {
// alert("网络错误,请检查网络连接")
ElMessage.error('网络连接错误');
} else {
ElMessage.error(err.message);
}
// console.log(err)
// reject(err)
})
}
2025-04-01 16:04:54 +08:00
return new Promise((resolve, reject) => {
axios.post(
url,
data,
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
).then(res => {
resolve(res.data)
}).catch(err => {
2025-04-03 16:41:54 +08:00
if (err.message == "Network Error") {
// alert("网络错误,请检查网络连接")
ElMessage.error('网络连接错误');
2025-04-09 21:07:15 +08:00
reject('网络连接错误')
2025-04-03 16:41:54 +08:00
} else {
ElMessage.error(err.message);
2025-04-09 21:07:15 +08:00
reject(err.message)
2025-04-03 16:41:54 +08:00
}
// console.log(err)
// reject(err)
2025-04-01 16:04:54 +08:00
})
})
}
2025-04-10 18:11:03 +08:00
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);
}
2025-04-01 16:04:54 +08:00
export default axios