You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

httpN.ts 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import { IHttpResponse, IObject } from '@/types/interface'
  2. import router from "@/router";
  3. // import { useRouter, useRoute } from 'vue-router'
  4. import axios, { AxiosRequestConfig } from 'axios'
  5. import qs from 'qs'
  6. import { getToken } from './cache'
  7. import { getValueByKeys } from './utils'
  8. import { ElMessage } from 'element-plus'
  9. import { SM4Util } from '@/utils/sm4'
  10. import { sm4Key } from '@/utils/utils'
  11. import BaseService from '@/utils/baseService'
  12. import { setCache } from '@/utils/cache'
  13. // const router = useRouter()
  14. const sm4 = new SM4Util()
  15. let baseURL = ''
  16. console.log(import.meta.env)
  17. if (import.meta.env.MODE === 'production') {
  18. // 生产环境逻辑
  19. console.log('这是生产环境')
  20. baseURL = import.meta.env.VITE_APP_BASE_URL_N
  21. } else {
  22. // 开发环境逻辑
  23. console.log('这是开发环境')
  24. }
  25. const httpN = axios.create({
  26. baseURL,
  27. timeout: 10 * 1000,
  28. })
  29. httpN.interceptors.request.use(
  30. function (config: any) {
  31. config.headers['X-Requested-With'] = 'XMLHttpRequest'
  32. config.headers['Request-Start'] = new Date().getTime()
  33. const token = getToken()
  34. if (token) {
  35. config.headers['Access-Token'] = token
  36. }
  37. if (config.method?.toUpperCase() === 'GET') {
  38. config.params = { ...config.params, _t: new Date().getTime() }
  39. }
  40. if (
  41. Object.values(config.headers).includes(
  42. 'application/x-www-form-urlencoded'
  43. )
  44. ) {
  45. config.data = qs.stringify(config.data)
  46. }
  47. return config
  48. },
  49. function (error) {
  50. return Promise.reject(error)
  51. }
  52. )
  53. httpN.interceptors.response.use(
  54. (response) => {
  55. if (response.data.code === 401002) {
  56. // redirectLogin()
  57. // // 刷新token
  58. // BaseService.post('/iaw/portal/phoneLogin', {}).then((res: any) => {
  59. // if (res && res.code === 0) {
  60. // setCache('refreshCacheAccessToken', res.data, false)
  61. // ElMessage.warning('token更新,请重试!')
  62. // } else {
  63. // ElMessage.error(response.data.message)
  64. // redirectLogin()
  65. // }
  66. // return
  67. // })
  68. } else if (response.data.code === 401001) {
  69. redirectLogin()
  70. } else if (
  71. response.data.code === 403003 ||
  72. response.data.code === 403001 ||
  73. response.data.code === 403004
  74. ) {
  75. ElMessage.error(response.data.message)
  76. }
  77. return response
  78. },
  79. (error) => {
  80. const status = getValueByKeys(error, 'response.status', 500)
  81. const httpCodeLabel: IObject<string> = {
  82. 400: '请求参数错误',
  83. 401: '未授权,请登录',
  84. 403: '拒绝访问',
  85. 404: `请求地址出错: ${getValueByKeys(error, 'response.config.url', '')}`,
  86. 408: '请求超时',
  87. 500: 'API接口报500错误',
  88. 501: '服务未实现',
  89. 502: '网关错误',
  90. 503: '服务不可用',
  91. 504: '网关超时',
  92. 505: 'HTTP版本不受支持',
  93. }
  94. if (error && error.response) {
  95. console.error('请求错误', error.response.data)
  96. }
  97. if (status === 401) {
  98. redirectLogin()
  99. }
  100. return Promise.reject(new Error(httpCodeLabel[status] || '接口错误'))
  101. }
  102. )
  103. const redirectLogin = () => {
  104. console.log('redirectLogin');
  105. router.push('/login')
  106. return
  107. }
  108. export default (o: AxiosRequestConfig): Promise<IHttpResponse> => {
  109. return new Promise((resolve, reject) => {
  110. httpN(o)
  111. .then((res: any) => {
  112. //登录失效
  113. // if(res.data && res.data.statusCode === 401){
  114. // router.push("/login");
  115. // ElMessage.error("登录失效,请重新登录!")
  116. // return;
  117. // } else if (res.data) {
  118. // //解密
  119. // if(res?.data && res.data.statusCode === 0 && res.data.bizContent && (import.meta.env.VITE_APP_BASE_URL.includes('https://qtzl.etcjz.cn') || import.meta.env.VITE_APP_BASE_URL.includes('http://100.65.11.2'))) {
  120. // res.data.bizContent = sm4.decryptData_CBC(res.data.bizContent, sm4Key);
  121. // if(res && res.data) {
  122. // return resolve(res.data);
  123. // } else {
  124. // ElMessage.error("接口返回解密数据,解密失败!")
  125. // }
  126. // } else {
  127. // return resolve(res.data);
  128. // }
  129. res.data.statusCode = res.data.code
  130. return resolve(res.data)
  131. // }
  132. })
  133. .catch(reject)
  134. })
  135. }