http.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import axios from 'axios';
  2. import { generateSign } from '@/utils/hmac';
  3. import { showMessage } from '@/utils/common';
  4. // 创建 axios 实例
  5. const http = axios.create({
  6. baseURL: import.meta.env.VITE_BASE_API || '/api', // 根据环境变量配置
  7. timeout: 100000 // 超时时间
  8. });
  9. // 请求拦截器
  10. http.interceptors.request.use(
  11. async (config) => {
  12. const { url } = config;
  13. const extendParams = {
  14. msgId: '730d7bbaf1914e8ba60e9c922d58a8c8',
  15. url: url as string,
  16. nonce: Date.now().toString()
  17. };
  18. const signature = generateSign(extendParams);
  19. Object.assign(config.headers, extendParams, { signature });
  20. return config;
  21. },
  22. (error) => {
  23. return Promise.reject(error);
  24. }
  25. );
  26. // 响应拦截器
  27. http.interceptors.response.use(
  28. (response: any) => {
  29. const res = response.data;
  30. // 你可以根据后端约定的 code 来处理
  31. if (res.state !== 200) {
  32. // showMessage({
  33. // type: 'error',
  34. // message: response.msg || '请求失败'
  35. // });
  36. return Promise.reject(res.msg);
  37. }
  38. return response.data; // 正常返回数据
  39. },
  40. (error) => {
  41. let message: string = '';
  42. if (error.response) {
  43. const status = error.response.status;
  44. switch (status) {
  45. case 401:
  46. message = '没有权限';
  47. break;
  48. case 404:
  49. message = '接口不存在';
  50. break;
  51. case 500:
  52. message = '服务器错误';
  53. break;
  54. default:
  55. message = error.message;
  56. }
  57. } else {
  58. message = '本月次数已用完';
  59. }
  60. showMessage({
  61. type: 'warning',
  62. message
  63. });
  64. return Promise.reject(error);
  65. }
  66. );
  67. export function uploadFile(file: File, extraData: Record<string, any> = {}) {
  68. const formData = new FormData();
  69. formData.append('file', file);
  70. // 如果还要附带额外参数
  71. Object.keys(extraData).forEach((key) => {
  72. formData.append(key, extraData[key]);
  73. });
  74. return http.post('/v3/oss/common/upload', formData, {
  75. headers: {
  76. 'Content-Type': 'multipart/form-data'
  77. }
  78. });
  79. }
  80. export default http;