import '@unocss/reset/sanitize/sanitize.css'; import { message, notification } from 'antd'; import type { RequestConfig } from 'umi'; // 与后端约定的响应数据格式 interface ResponseStructure { code: number; isSuccess: boolean; isAuthorized: boolean; result: any; message: string; error: string; errorCode: string; } export const request: RequestConfig = { timeout: 10000, // other axios options you want errorConfig: { errorThrower(res){ const { code, error: errorMsg, errorCode, isSuccess } = res; if (!isSuccess) { const error: any = new Error(errorMsg); error.name = 'BizError'; error.info = { errorCode, errorMessage: errorMsg }; throw error; // 抛出自制的错误 } }, errorHandler(error: any, opts: any){ if (opts?.skipErrorHandler) throw error; // 我们的 errorThrower 抛出的错误。 if (error.name === 'BizError') { const errorInfo: ResponseStructure | undefined = error.info; if (errorInfo) { const { error: errorMessage } = errorInfo; message.error(errorMessage); } } else if (error.response) { // Axios 的错误 // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围 message.error(`Response status:${error.response.status}`); } else if (error.request) { // 请求已经成功发起,但没有收到响应 // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例, // 而在node.js中是 http.ClientRequest 的实例 message.error('请求无响应,请稍后再试!'); } else { // 发送请求时出了点问题 message.error('请求错误,请稍后再试!'); } }, }, requestInterceptors: [ (url, options) => { const baseUrl = process.env.NODE_ENV === 'production' ? '' : '/api'//'http://ab.dev.jbpm.shalu.com' // https://edesign.shalu.com' // const enterpriseCode = sessionStorage.getItem('enterpriseCode'); const enterpriseCode = 'a'; const token = localStorage.getItem('token_' + enterpriseCode); if(token) { if(!options.headers) { options.headers = {} } options.headers.Authorization = token } return { url: baseUrl + url, options } } ], responseInterceptors: [ (response) => { const {data = {} as any, config} = response; if(data?.error) { // message.error(data.error); return Promise.reject(data.error); } return response; } ] };