/** * axios请求封装 * https://rudon.blog.csdn.net/ */ import axios from 'axios' import { getToken, getUser } from '@/utils/storage' import router from '@/router' import { ElMessage } from 'element-plus'; // import { usePythonBridge, } from '@/utils/pythonBridge' // const { stopScript } = usePythonBridge(); const specialBaseURL = 'http://ai.zhukeping.com' const specialUrlPrefixes = ['chat', 'translation', 'translationToChinese'] // 示例路径前缀 // 请求地址前缀 let baseURL = '' if (process.env.NODE_ENV === 'development') { // 生产环境 // baseURL = "https://api.tkpage.yolozs.com" // baseURL = "http://192.168.1.155:8101" baseURL = "http://47.79.98.113:8101" } else { // 测试环境 // baseURL = "http://120.26.251.180:8085/" // 开发环境 baseURL = "http://47.79.98.113:8101" // baseURL = "http://api.tkpage.vvtiktok.cn" } // 请求拦截器 axios.interceptors.request.use((config) => { console.log("config", config) const url = sliceUrl(config.url) console.log("url", url) if (!(config.url == 'doLogin' || config.url == 'get-id-by-name')) { config.headers['vvtoken'] = getToken(); } // 判断是否是特殊接口 const isSpecial = specialUrlPrefixes.some(prefix => config.url.includes(prefix)); console.log("isSpecial", isSpecial) // 根据接口设置 baseURL config.baseURL = isSpecial ? specialBaseURL : baseURL; console.log("config.baseURL", config.baseURL) // 请求超时时间 - 毫秒 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) => { // console.log("response", response.data) if (response.data.code == 0 || response.data.code == 200) { // console.log("response", response.data.data) return response.data.data } else if (response.data.code == 40400) { // stopScript(); router.push('/') ElMessage.error(response.data.code + '' + response.data.message + 1); } else { ElMessage.error(response.data.code + '' + response.data.message + 2); Promise.reject(response.data.code + '' + response.data.message) } }, (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) // 请求失败,将错误信息传递给reject函数 }).catch(err => { ElMessage.error(err + 3); reject(err) }) }) } // axios的post请求 export function postAxios({ url, data }) { return new Promise((resolve, reject) => { axios.post( url, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } ).then(res => { resolve(res) }).catch(err => { ElMessage.error(err + 4); 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); } } } function sliceUrl(url) { const lastSlash = url.lastIndexOf('/'); const questionMark = url.indexOf('?'); if (questionMark == -1) { const result = url.slice(lastSlash + 1, url.length); return result; } else { const result = url.slice(lastSlash + 1, questionMark); return result; } } export default axios