request-music.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { extend } from 'umi-request'
  2. import cleanDeep from 'clean-deep'
  3. import { browser, openLoading, closeLoading } from '@/helpers/utils'
  4. import { setLogout, setLoginError, state } from './state-music'
  5. import { postMessage } from '../../helpers/native-message'
  6. import { showLoadingToast, showToast, closeToast } from 'vant'
  7. export interface SearchInitParams {
  8. rows?: string | number
  9. page?: string | number
  10. }
  11. const request = extend({
  12. // requestType: 'form',
  13. timeout: 20000,
  14. timeoutMessage: '请求超时'
  15. })
  16. // 是否是初始化接口
  17. let initRequest = false
  18. let toast: ReturnType<typeof setTimeout>
  19. request.interceptors.request.use(
  20. (url, options: any) => {
  21. // openLoading();
  22. if (!options.hideLoading) {
  23. clearTimeout(toast)
  24. showLoadingToast({
  25. message: '加载中...',
  26. forbidClick: true,
  27. loadingType: 'spinner',
  28. duration: 0
  29. })
  30. }
  31. initRequest = options.initRequest || false
  32. const Authorization = sessionStorage.getItem('Authorization') || ''
  33. const authHeaders: any = {}
  34. if (
  35. Authorization &&
  36. ![
  37. '/api-oauth/userlogin',
  38. '/api-oauth/open/sendSms'
  39. ].includes(url)
  40. ) {
  41. authHeaders.Authorization = Authorization
  42. }
  43. return {
  44. url,
  45. options: {
  46. ...options,
  47. params: cleanDeep(options.params),
  48. headers: {
  49. ...options.headers,
  50. ...authHeaders
  51. }
  52. }
  53. }
  54. },
  55. { global: false }
  56. )
  57. request.interceptors.response.use(
  58. async res => {
  59. toast = setTimeout(() => {
  60. closeToast()
  61. }, 100)
  62. if (res.status > 299 || res.status < 200) {
  63. clearTimeout(toast)
  64. const msg = '服务器错误,状态码' + res.status
  65. showToast(msg)
  66. throw new Error(msg)
  67. }
  68. const data = await res.clone().json()
  69. if (data.code !== 200 && data.errCode !== 0) {
  70. let msg = data.msg || data.message || '处理失败,请重试'
  71. if (initRequest) {
  72. if (data.code === 403 || data.code === 5000) {
  73. setLogout()
  74. } else {
  75. setLoginError()
  76. }
  77. }
  78. console.log(data.code, '5104')
  79. if (!(data.code === 403 || data.code === 5000)) {
  80. clearTimeout(toast)
  81. showToast(msg)
  82. }
  83. const browserInfo = browser()
  84. if (data.code === 5000) {
  85. msg += '5000'
  86. if (browserInfo.isApp) {
  87. postMessage({
  88. api: 'login'
  89. })
  90. } else {
  91. setLogout()
  92. }
  93. }
  94. throw new Error(msg)
  95. }
  96. return res
  97. },
  98. { global: false }
  99. )
  100. export default request