api.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import axios, { AxiosResponse } from 'axios';
  2. import { message } from 'antd';
  3. import { encryptBase64, encryptWithAes, generateAesKey, decryptWithAes, decryptBase64 } from '@/app/utils/crypto';
  4. import { encrypt, decrypt } from '@/app/utils/jsencrypt';
  5. const encryptHeader = 'encrypt-key';
  6. import {replaceUrl} from '@/app/utils/index'
  7. // 创建axios实例
  8. const axiosInstance = axios.create({
  9. baseURL: '/bigmodel-api',
  10. timeout: 300000,// 请求超时5分钟
  11. });
  12. // 请求拦截器
  13. axiosInstance.interceptors.request.use(
  14. (config) => {
  15. const isEncrypt = config.headers?.isEncrypt === 'true';
  16. config.headers['Content-Language'] = 'zh_CN';
  17. const userInfoStr = localStorage.getItem('userInfo');
  18. const token = localStorage.getItem('token');
  19. config.headers['clientid'] = 'e5cd7e4891bf95d1d19206ce24a7b32e';
  20. if (userInfoStr) {
  21. const userInfo = JSON.parse(userInfoStr);
  22. if (userInfo.token) {
  23. config.headers['Authorization'] = 'Bearer '+userInfo.token;
  24. }
  25. }else if (token) {
  26. config.headers['Authorization'] = 'Bearer '+token;
  27. }
  28. if (isEncrypt && (config.method === 'post' || config.method === 'put')) {
  29. // 生成一个 AES 密钥
  30. const aesKey = generateAesKey();
  31. config.headers[encryptHeader] = encrypt(encryptBase64(aesKey));
  32. config.data = typeof config.data === 'object' ? encryptWithAes(JSON.stringify(config.data), aesKey) : encryptWithAes(config.data, aesKey);
  33. }
  34. return config;
  35. }
  36. );
  37. // 响应拦截器
  38. axiosInstance.interceptors.response.use(
  39. (response: AxiosResponse) => {// 成功信息
  40. const { config, data } = response;
  41. if (config.responseType === 'blob') {
  42. return Promise.resolve(data);
  43. } else {
  44. if (data.code === 200) {// 成功
  45. return Promise.resolve(data);
  46. } else {// 失败
  47. // console.log('请求失败',config,'--data',data)
  48. if(data.msg||data.code){
  49. message.error(data.msg || `请求失败`);
  50. }
  51. if (data.code === 401) {
  52. localStorage.clear();
  53. window.sessionStorage.clear();
  54. window.location.replace(`${replaceUrl}?redirectUrl=${encodeURIComponent(window.location.href)}`);
  55. // const originUrl = window.location.origin;
  56. // window.open(originUrl + '/#/login', '_self');
  57. }
  58. return Promise.reject(data);
  59. }
  60. }
  61. },
  62. (error) => {// 错误信息
  63. return Promise.reject();
  64. }
  65. );
  66. export default axiosInstance;