12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { extend } from 'umi-request'
- import { Toast } from 'vant'
- import cleanDeep from 'clean-deep'
- import { getRequestHostname, browser } from '/src/helpers/utils'
- import ApiRouter from '/src/api-router'
- import { postMessage } from './native-message'
- export interface SearchInitParams {
- rows?: string | number;
- page?: string | number;
- }
- export interface InitSearchRespones {
- data: {
- rows: any[],
- [key: string]: any
- },
- [key: string]: any
- }
- let isOpenLogin = false
- const request = extend({
- requestType: 'json',
- timeout: 10000,
- prefix: getRequestHostname(),
- })
- request.use(async (ctx, next) => {
- const { url, options } = ctx.req
- const prefix = (options.prefix || '')
- const baseUrl: string = url.replace(prefix, '') || ''
- const linkUrl: string = (ApiRouter as any)[baseUrl]
- if (linkUrl) {
- ctx.req.url = prefix + linkUrl
- }
- await next()
- })
- request.interceptors.request.use(
- (url, options: any) => {
- const Authorization = (sessionStorage.getItem('Authorization') || '')
- const authHeaders: any = {}
- if (Authorization && !['/api-auth/usernameLogin', '/api-auth/smsLogin', '/api-auth/code/sendSms'].includes(url)) {
- authHeaders.Authorization = Authorization
- }
- return {
- url,
- options: {
- ...options,
- params: cleanDeep(options.params),
- headers: {
- ...options.headers,
- ...authHeaders
- }
- }
- }
- },
- { global: false }
- )
- request.interceptors.response.use(
- async (res, options) => {
- const url = new URL(res.url)
- if (res.status > 299 || res.status < 200) {
- const msg = '服务器错误,状态码' + res.status
- Toast(msg)
- throw new Error(msg)
- }
- const data = await res.clone().json()
- if (data.code !== 200 && data.errCode !== 0) {
- const msg = data.msg || '处理失败,请重试'
- if (!(data.code === 403 || data.code === 401)) {
- Toast(msg)
- }
- const browserInfo = browser()
- if (data.code === 403 && browserInfo.isApp && !isOpenLogin) {
- if(browserInfo.android) {
- postMessage({
- api: 'login'
- });
- (window as any).DAYA.postMessage(JSON.stringify({api: 'login'}))
- } else if(browserInfo.iPhone) {
- (window as any).webkit.messageHandlers.DAYA.postMessage(JSON.stringify({api: 'login'}))
- }
- }
- throw new Error(msg)
- }
- return res
- },
- { global: false }
- )
- export default request
|