Files
tkAiPage/src/utils/axios.js

200 lines
5.6 KiB
JavaScript
Raw Normal View History

2025-07-01 21:36:08 +08:00
/**
* axios请求封装
* https://rudon.blog.csdn.net/
*/
import axios from 'axios'
import { getToken, getUser } from '@/utils/storage'
2025-07-15 13:45:36 +08:00
import router from '@/router'
2025-07-01 21:36:08 +08:00
import { ElMessage } from 'element-plus';
2025-07-15 13:45:36 +08:00
// import { usePythonBridge, } from '@/utils/pythonBridge'
// const { stopScript } = usePythonBridge();
2025-07-01 21:36:08 +08:00
2025-07-30 13:34:49 +08:00
const specialBaseURL = 'http://ai.zhukeping.com'
const specialUrlPrefixes = ['chat', 'translation', 'translationToChinese'] // 示例路径前缀
2025-07-01 21:36:08 +08:00
// 请求地址前缀
let baseURL = ''
if (process.env.NODE_ENV === 'development') {
// 生产环境
2025-07-15 13:45:36 +08:00
// baseURL = "https://api.tkpage.yolozs.com"
2025-07-30 13:34:49 +08:00
// baseURL = "http://192.168.1.155:8101"
2025-07-15 13:45:36 +08:00
baseURL = "http://47.79.98.113:8101"
2025-07-01 21:36:08 +08:00
} else {
2025-07-15 13:45:36 +08:00
// 测试环境
// baseURL = "http://120.26.251.180:8085/"
2025-07-01 21:36:08 +08:00
// 开发环境
2025-07-15 13:45:36 +08:00
baseURL = "http://47.79.98.113:8101"
// baseURL = "http://api.tkpage.vvtiktok.cn"
2025-07-01 21:36:08 +08:00
}
// 请求拦截器
axios.interceptors.request.use((config) => {
2025-07-15 13:45:36 +08:00
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();
}
2025-07-01 21:36:08 +08:00
2025-07-15 13:45:36 +08:00
// 判断是否是特殊接口
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)
2025-07-01 21:36:08 +08:00
// 请求超时时间 - 毫秒
config.timeout = 60000
2025-07-15 13:45:36 +08:00
// config.baseURL = baseURL
2025-07-01 21:36:08 +08:00
// 自定义Content-type
config.headers['Content-type'] = 'application/json'
return config;
}, (error) => {
return Promise.reject(error)
})
// 响应拦截器
axios.interceptors.response.use((response) => {
2025-07-30 13:34:49 +08:00
// console.log("response", response.data)
2025-07-15 13:45:36 +08:00
if (response.data.code == 0 || response.data.code == 200) {
2025-07-30 13:34:49 +08:00
// console.log("response", response.data.data)
2025-07-15 13:45:36 +08:00
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)
}
2025-07-01 21:36:08 +08:00
}, (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 => {
2025-07-15 13:45:36 +08:00
resolve(res)
2025-07-01 21:36:08 +08:00
// 请求失败将错误信息传递给reject函数
}).catch(err => {
2025-07-15 13:45:36 +08:00
ElMessage.error(err + 3);
2025-07-01 21:36:08 +08:00
reject(err)
2025-07-15 13:45:36 +08:00
2025-07-01 21:36:08 +08:00
})
})
}
// 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 => {
2025-07-15 13:45:36 +08:00
resolve(res)
2025-07-01 21:36:08 +08:00
}).catch(err => {
2025-07-15 13:45:36 +08:00
ElMessage.error(err + 4);
reject(err)
2025-07-01 21:36:08 +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-07-15 13:45:36 +08:00
// 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 = '/';
// }
// })
// }
2025-07-01 21:36:08 +08:00
//节流函数
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);
}
}
}
2025-07-15 13:45:36 +08:00
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;
}
}
2025-07-01 21:36:08 +08:00
export default axios