// 运行时配置 import { RequestConfig, history } from '@umijs/max'; import '@inspir/assembly-css/dist/special.css'; import { message } from 'antd'; import { RESPONSE_CODE } from './constants/enum'; import { RunTimeLayoutConfig } from '@umijs/max'; import GlobleHeader from './components/UserHeader'; import './style/global.css'; import { getUserInfo } from './utils'; // 全局初始化数据配置,用于 Layout 用户信息和权限初始化 // 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstate export async function getInitialState() { return getUserInfo(); } export const layout: RunTimeLayoutConfig = () => { return { headerRender: GlobleHeader, siderWidth: '190px', layout: 'mix', // 其他属性见:https://procomponents.ant.design/components/layout#prolayout }; }; // export const layout = () => { // return { // menu: { // locale: false, // header: GlobleHeader, // headerRender:GlobleHeader, // rightContentRender: () => GlobleHeader, // // footerRender: () => <Footer />, // }, // // collapsed: true, // // breakpoint:false // }; // }; export const request: RequestConfig = { // 错误处理 errorHandler: (error) => { console.log( '%c [ error ]-35', 'font-size:13px; background:pink; color:#bf2c9f;', error, ); const { response, data } = error; if (response && response.status) { // 401重定向 if (response.status === 401) { if (!location.pathname.includes('login')) { localStorage.removeItem('token'); localStorage.removeItem('userInfo'); message.error('token失效,请重新登录!'); history.push('/login'); return null; } } } return data; }, // 请求处理 requestInterceptors: [ (url: string, options) => { const controller = new AbortController(); // create a controller const { signal } = controller; let authHeader: { Authorization?: string; systemid?: string } = {}; if (localStorage.getItem('token')) { authHeader = { Authorization: localStorage.getItem('token') || undefined, }; } // const requestOption: AxiosRequestConfig = { // method: options.method || 'get', // }; // if (options.header) { // requestOption.headers = options.header; // } // if (options.body) { // options.data = options.body; // } if (options.query) { options.params = options.query; } return { url: '/api' + url, options: { ...options, signal, interceptors: true, headers: authHeader, }, }; }, ], responseInterceptors: [ // 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理 [ (response) => { // 不再需要异步处理读取返回体内容,可直接在data中读出,部分字段可在 config 中找到 const { data = {} as any } = response; if ( data.result !== RESPONSE_CODE.SUCCESS && data.result !== undefined ) { message.error(data.message); } if (data.result === 401) { history.push('/login'); } // do something return response; }, (error: any) => { if (error?.response?.status === 401) { if (!location.pathname.includes('login')) { localStorage.removeItem('token'); localStorage.removeItem('userInfo'); message.error('token失效,请重新登录!'); history.push('/login'); } } return Promise.reject(error); }, ], ], };