/** * 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'; import { usePythonBridge, } from '@/utils/pythonBridge' const { stopScript } = usePythonBridge(); const router = useRouter(); // 请求地址前缀 let baseURL = '' if (process.env.NODE_ENV === 'development') { // 生产环境 // baseURL = "http://api.tkpage.vvtiktok.cn" baseURL = "http://120.26.251.180:8085/" // baseURL = "http://192.168.0.113:8085/" } else { // 开发环境 baseURL = "http://api.tkpage.vvtiktok.cn" } // 请求拦截器 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 { if (err.response.data.message) { ElMessage.error(err.response.data.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 { stopScript(); 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