import before from '@/utils/api/web/request/before' import afterReturning from './afterReturning' import afterThrowing from './afterThrowing' // #ifdef H5 import axios, { AxiosStatic, AxiosRequestConfig, AxiosResponse } from 'axios' // #endif // let axios: AxiosStatic = null // if (config.common.isH5) { // const Axios = await import('axios') // axios = Axios.default // } const setRequestResult = ({ options, resolve, reject }) => { const rv = { // 响应成功 success(res) { if (options.urlObj.isUpload) { res.data = JSON.parse(res.data) } resolve(res) }, // 响应失败 fail(err) { const rejectInfo = afterThrowing.main({ options, errInfo: err as UniApp.RequestSuccessCallbackResult, errType: enums.ErrorType.net, }) reject(rejectInfo) }, } options.uur.success = rv.success options.uur.fail = rv.fail } const http = async (options: IRequestOption) => { if (store.common.data.mockScenes) { const curMocks = mock.request const curMock = curMocks[store.common.data.mockScenes][options.urlObj.name] if (curMock) { // store.webapi[options.urlObj.group][options.urlObj.name].set(enums.ReqState.success) return curMock.data } } if (options.urlObj.isUpload) { options.ext.choosFiles = await func.native.choose({ count: options.ext.fileCount }) } await before.main(options) // 1. 返回 Promise 对象 return new Promise((resolve, reject) => { setRequestResult({ options, resolve, reject }) if (options.urlObj.isUpload) { uni.uploadFile(options.uur as UniApp.UploadFileOption) } else { // #ifdef H5 axios({ ...options.uur, headers: options.uur.header, } as AxiosRequestConfig) .then((res) => { res.statusCode = res.status options.uur.success(res) }) .catch(options.uur.fail) // #endif // #ifndef H5 uni.request(options.uur as UniApp.RequestOptions) // #endif } }).then((res) => { // 接口请求正常 if (res.statusCode === 200) { // 业务逻辑正确 if (res.data.code === 0) { return afterReturning.main({ options, res: res.data }) } else { return afterThrowing.main({ options, res: res.data, errType: enums.ErrorType.business }) } } else { return afterThrowing.main({ options, errInfo: res, errType: enums.ErrorType.net }) } }) } /** * GET 请求 * @param url 后台地址 * @param query 请求query参数 * @returns */ const httpGet = (options: IRequestOption) => { options.uur.method = 'GET' return http(options) } const httpPost = (options: IRequestOption) => { options.uur.method = 'POST' return http(options) } export default { http, get: httpGet, post: httpPost, }