request.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
  2. import { useUserStoreHook } from "@/store/modules/user";
  3. import {getToken, setToken, removeToken} from '@/utils/js-cookie'
  4. // 创建 axios 实例
  5. const service = axios.create({
  6. baseURL: import.meta.env.VITE_APP_BASE_API,
  7. timeout: 50000,
  8. headers: { "Content-Type": "application/json;charset=utf-8" },
  9. });
  10. // 请求拦截器
  11. service.interceptors.request.use(
  12. (config: InternalAxiosRequestConfig) => {
  13. const userStore = useUserStoreHook();
  14. config.headers['X-ERP-User-From'] = 100;
  15. if (userStore.user.token) {
  16. config.headers['X-Token'] = getToken('Access-100-Token');
  17. }
  18. if (getToken('dataBaseAlias')) {
  19. config.headers['X-ERP-DataSource-Id'] = getToken('dataBaseAlias');
  20. }
  21. if (getToken('shardingKey')) {
  22. config.headers['X-ERP-Supplier-Code'] = getToken('shardingKey');
  23. }
  24. return config;
  25. },
  26. (error: any) => {
  27. return Promise.reject(error);
  28. }
  29. );
  30. // 响应拦截器
  31. service.interceptors.response.use(
  32. (response: AxiosResponse) => {
  33. const res = response.data
  34. // console.log(res);
  35. if (res.httpCode !== 200 && res.httpCode!=undefined) {
  36. ElMessage({
  37. message: res.msg || res.data,
  38. type: 'error',
  39. duration: 5 * 1000,
  40. showClose: true,
  41. })
  42. if (res.httpCode === 403 || res.httpCode === 401 || res.httpCode === 50014) {
  43. // to re-login
  44. ElMessageBox.confirm('您已注销,可以取消以留在此页,或重新登录', '确认?', {
  45. confirmButtonText: '重新登录',
  46. cancelButtonText: '取消',
  47. type: 'warning'
  48. }).then(() => {
  49. location.reload()
  50. })
  51. }
  52. return Promise.reject(res)
  53. } else {
  54. return res
  55. }
  56. },
  57. (error: any) => {
  58. console.log('err' + error) // for debug
  59. return Promise.reject(error)
  60. }
  61. );
  62. // 导出 axios 实例
  63. export default service;