import { extend } from 'umi-request'; import cleanDeep from 'clean-deep'; import { browser } from '@/helpers/utils'; import { setLogout, setLoginError, state } from '@/state'; import { postMessage } from './native-message'; import { showToast } from 'vant'; // import baseEvent from '@/base-event' export interface SearchInitParams { rows?: string | number; page?: string | number; } const request = extend({ // requestType: 'form', hideLoading: true, // 默认都不显示加载 timeout: 20000, timeoutMessage: '请求超时' }); // 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(); // }) // 是否是初始化接口 let initRequest = false; let toast: ReturnType; request.interceptors.request.use( (url, options: any) => { // openLoading(); // console.log(options, 'request') if (!options.hideLoading) { clearTimeout(toast); // baseEvent.emit('toastShow', 'center') // clearTimeout(toast) // showLoadingToast({ // message: '加载中...', // forbidClick: true, // loadingType: 'spinner', // duration: 0 // }) } initRequest = options.initRequest || false; const Authorization = sessionStorage.getItem('Authorization') || ''; const authHeaders: any = {}; if ( Authorization && ![ '/api-oauth/userlogin', // `${state.platformApi}/user/getUserInfo`, '/api-oauth/open/sendSms' ].includes(url) ) { authHeaders.Authorization = Authorization; } if (state?.user?.data?.schoolInfos) { const schoolId = (state.user.data.schoolInfos || []) .map((item: any) => { return item.id; }) .join(','); if (schoolId) { // console.log('schoolId', schoolId) // options.data ? (options.data.schoolId = schoolId) : null // options.params ? (options.params.schoolId = schoolId) : null authHeaders.schoolId = schoolId; } } return { url, options: { ...options, params: cleanDeep(options.params), data: cleanDeep(options.data), headers: { ...options.headers, ...authHeaders } } }; }, { global: false } ); request.interceptors.response.use( async res => { toast = setTimeout(() => { // baseEvent.emit('toastClose', 'center') // closeToast() }, 100); if (res.status > 299 || res.status < 200) { clearTimeout(toast); const msg = '服务器错误,状态码' + res.status; // baseEvent.emit('toastClose', 'center') showToast(msg); throw new Error(msg); } const data = await res.clone().json(); // 999 为特殊code码 if (data.code !== 200 && data.errCode !== 0 && data.code !== 999) { let msg = data.msg || data.message || '处理失败,请重试'; if (initRequest) { if (data.code === 403 || data.code === 5000) { setLogout(); } else { setLoginError(); } } console.log(data.code, '5104'); if (!(data.code === 403 || data.code === 5000)) { clearTimeout(toast); // baseEvent.emit('toastClose', 'center') showToast(msg); } const browserInfo = browser(); if (data.code === 5000 || data.code === 403) { msg += '5000'; if (browserInfo.isApp) { postMessage({ api: 'login' }); } else { setLogout(); } } throw new Error(msg); } return res; }, { global: false } ); export default request;