index.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import before from '@/utils/api/web/request/before'
  2. import afterReturning from './afterReturning'
  3. import afterThrowing from './afterThrowing'
  4. // #ifdef H5
  5. import axios, { AxiosStatic, AxiosRequestConfig, AxiosResponse } from 'axios'
  6. // #endif
  7. // let axios: AxiosStatic = null
  8. // if (config.common.isH5) {
  9. // const Axios = await import('axios')
  10. // axios = Axios.default
  11. // }
  12. const setRequestResult = ({ options, resolve, reject }) => {
  13. const rv = {
  14. // 响应成功
  15. success(res) {
  16. if (options.urlObj.isUpload) {
  17. res.data = JSON.parse(res.data)
  18. }
  19. resolve(res)
  20. },
  21. // 响应失败
  22. fail(err) {
  23. const rejectInfo = afterThrowing.main({
  24. options,
  25. errInfo: err as UniApp.RequestSuccessCallbackResult,
  26. errType: enums.ErrorType.net,
  27. })
  28. reject(rejectInfo)
  29. },
  30. }
  31. options.uur.success = rv.success
  32. options.uur.fail = rv.fail
  33. }
  34. const http = async <T>(options: IRequestOption) => {
  35. if (store.common.data.mockScenes) {
  36. const curMocks = mock.request
  37. const curMock = curMocks[store.common.data.mockScenes][options.urlObj.name]
  38. if (curMock) {
  39. // store.webapi[options.urlObj.group][options.urlObj.name].set(enums.ReqState.success)
  40. return curMock.data
  41. }
  42. }
  43. if (options.urlObj.isUpload) {
  44. options.ext.choosFiles = await func.native.choose({ count: options.ext.fileCount })
  45. }
  46. await before.main(options)
  47. // 1. 返回 Promise 对象
  48. return new Promise<any>((resolve, reject) => {
  49. setRequestResult({ options, resolve, reject })
  50. if (options.urlObj.isUpload) {
  51. uni.uploadFile(options.uur as UniApp.UploadFileOption)
  52. } else {
  53. // #ifdef H5
  54. axios<any, UniApp.RequestSuccessCallbackResult & AxiosResponse>({
  55. ...options.uur,
  56. headers: options.uur.header,
  57. } as AxiosRequestConfig<any>)
  58. .then((res) => {
  59. res.statusCode = res.status
  60. options.uur.success(res)
  61. })
  62. .catch(options.uur.fail)
  63. // #endif
  64. // #ifndef H5
  65. uni.request(options.uur as UniApp.RequestOptions)
  66. // #endif
  67. }
  68. }).then((res) => {
  69. // 接口请求正常
  70. if (res.statusCode === 200) {
  71. // 业务逻辑正确
  72. if (res.data.code === 0) {
  73. return afterReturning.main({ options, res: res.data })
  74. } else {
  75. return afterThrowing.main({ options, res: res.data, errType: enums.ErrorType.business })
  76. }
  77. } else {
  78. return afterThrowing.main({ options, errInfo: res, errType: enums.ErrorType.net })
  79. }
  80. })
  81. }
  82. /**
  83. * GET 请求
  84. * @param url 后台地址
  85. * @param query 请求query参数
  86. * @returns
  87. */
  88. const httpGet = <T>(options: IRequestOption) => {
  89. options.uur.method = 'GET'
  90. return http<T>(options)
  91. }
  92. const httpPost = <T>(options: IRequestOption) => {
  93. options.uur.method = 'POST'
  94. return http<T>(options)
  95. }
  96. export default {
  97. http,
  98. get: httpGet,
  99. post: httpPost,
  100. }