request.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import axios from 'axios'
  2. import { showFailToast } from 'vant'
  3. import { userInfo } from '~/store/user'
  4. // const { token } = userInfo
  5. let token = userInfo?.token;
  6. const service = axios.create({
  7. baseURL: window.globalVariables.api,
  8. method: 'post',
  9. timeout: 60000,
  10. headers: {
  11. 'Content-Type': 'application/x-www-form-urlencoded',
  12. },
  13. })
  14. service.interceptors.request.use(
  15. (config) => {
  16. // do something before request is sent
  17. config.data = Object.assign(
  18. {
  19. token,
  20. site: 'jnmf',
  21. client: 'web',
  22. api: 'json',
  23. // from: 'backend',
  24. issubmit: (config.url.endsWith('add') || config.url.endsWith('edit')) ? 1 : undefined,
  25. },
  26. config.data || {},
  27. )
  28. if (config.method === 'get') {
  29. config.params = Object.assign(
  30. {
  31. token,
  32. },
  33. config.params || {},
  34. )
  35. }
  36. // 短时间多个请求会冲突
  37. // console.groupCollapsed('axios: ' + config.url)
  38. // console.log('request', config.data)
  39. return config
  40. },
  41. (error) => {
  42. // do something with request error
  43. console.log(error) // for debug
  44. return Promise.reject(error)
  45. },
  46. )
  47. // response interceptor
  48. let isRelogin = false
  49. service.interceptors.response.use(
  50. (response, c) => {
  51. const { code, msg, data } = response.data
  52. if (code === '10001') {
  53. if (!isRelogin) {
  54. isRelogin = true
  55. showFailToast(msg)
  56. request({
  57. url: '/user/main/login',
  58. data: {
  59. token: data.token,
  60. },
  61. }).then((res) => {
  62. if (res.code == 1) {
  63. localStorage.setItem('userInfo', JSON.stringify(res.data))
  64. isRelogin = false
  65. // 视情况打开
  66. // location.reload()
  67. }
  68. })
  69. }
  70. }
  71. else if (code !== '1') {
  72. showFailToast(msg)
  73. }
  74. // console.log('response', response.data)
  75. // console.groupEnd()
  76. return response.data
  77. },
  78. (error) => {
  79. console.error(`err${error}`) // for debug
  80. return Promise.reject(error)
  81. },
  82. )
  83. // 上传
  84. export const request = axios.create({
  85. baseURL: window.globalVariables.api,
  86. method: 'post',
  87. timeout: 5000,
  88. headers: {
  89. 'Content-Type': 'application/x-www-form-urlencoded',
  90. },
  91. })
  92. request.interceptors.response.use(
  93. (response) => {
  94. const { code, msg } = response.data
  95. if (code !== '1')
  96. showFailToast(msg)
  97. return response.data
  98. },
  99. (error) => {
  100. console.log(`err${error}`) // for debug
  101. return Promise.reject(error)
  102. },
  103. )
  104. const obj2form = (data) => {
  105. const formData = new FormData()
  106. Object.keys(data).forEach(key => formData.append(key, data[key]))
  107. return formData;
  108. }
  109. export const REQUEST = {
  110. empty: axios,
  111. default: service,
  112. import: (c) => service({
  113. timeout: 10 * 60 * 1000,
  114. transformRequest: [obj2form],
  115. ...c
  116. }),
  117. upload: (c) => service({
  118. timeout: 3 * 60 * 1000,
  119. transformRequest: [obj2form],
  120. ...c
  121. }),
  122. download: (c) => service({
  123. timeout: 1 * 60 * 1000,
  124. method: 'get',
  125. params: { token, limit: 10000, page: 1, api: 'xls', ...c }
  126. })
  127. }
  128. export function download(url, data, name) {
  129. const params = Object.assign({ token, limit: 10000, page: 1, api: 'xls' }, data)
  130. const paramsStr = Object.entries(params).map(([k, v]) => `${k}=${v}`).join('&')
  131. const el = document.createElement('a')
  132. const href = `${window.globalVariables.api}${url}?${paramsStr}`
  133. el.setAttribute('href', href)
  134. name && el.setAttribute('download', name)
  135. el.click()
  136. }
  137. export function download2(url, name) {
  138. const el = document.createElement('a')
  139. const href = `${window.globalVariables.api}/openapi/download.php?path=${url}&name=${name}`
  140. el.setAttribute('href', href)
  141. name && el.setAttribute('download', name)
  142. el.click()
  143. }
  144. export default (...args) => {
  145. if (!isRelogin)
  146. return service(...args)
  147. else
  148. return Promise.reject({})
  149. }