import Footer from '@/components/Footer';
import RightContent from '@/components/RightContent';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import { PageLoading, SettingDrawer } from '@ant-design/pro-components';
import type { RunTimeLayoutConfig } from 'umi';
import { history } from 'umi';
import defaultSettings from '../config/defaultSettings';
import { currentUser as queryCurrentUser } from './services/ant-design-pro/api';
import { message } from 'antd';
const loginPath = '/user/login';
/** 获取用户信息比较慢的时候会展示一个 loading */
export const initialStateConfig = {
loading: ,
};
/**
* @see https://umijs.org/zh-CN/plugins/plugin-initial-state
* */
export async function getInitialState(): Promise<{
settings?: Partial;
currentUser?: API.CurrentUser;
loading?: boolean;
fetchUserInfo?: () => Promise;
}> {
const fetchUserInfo = async () => {
try {
const msg: any = await queryCurrentUser(localStorage.getItem('token'));
return {
name: msg.data.user_name,
};
} catch (error) {
history.push(loginPath);
}
return undefined;
};
// 如果不是登录页面,执行
if (history.location.pathname !== loginPath) {
const currentUser = await fetchUserInfo();
return {
fetchUserInfo,
currentUser,
settings: defaultSettings,
};
}
return {
fetchUserInfo,
settings: defaultSettings,
};
}
// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
return {
rightContentRender: () => ,
disableContentMargin: false,
waterMarkProps: {
content: initialState?.currentUser?.name,
},
footerRender: () => ,
onPageChange: () => {
const { location } = history;
// 如果没有登录,重定向到 login
if (!initialState?.currentUser && location.pathname !== loginPath) {
history.push(loginPath);
}
},
menuHeaderRender: undefined,
// 自定义 403 页面
// unAccessible: unAccessible
,
// 增加一个 loading 的状态
childrenRender: (children: any, props: { location: { pathname: string | string[] } }) => {
// if (initialState?.loading) return ;
return (
<>
{children}
{!props.location?.pathname?.includes('/login') && (
{
setInitialState((preInitialState: any) => ({
...preInitialState,
settings,
}));
}}
/>
)}
>
);
},
...initialState?.settings,
};
};
const addToken = async (url: any, options: any) => {
// 此处为拦截器,每次发送请求之前判断能否取到token
if (localStorage.getItem('token')) {
const headers = {
Authorization: `${localStorage.getItem('token')}`,
};
return {
url,
options: { ...options, headers },
};
}
return false;
};
const MainResponseInterceptors = (response: { status: number }) => {
if (response.status === 401) {
message.warn('帐号登录过期,请重新登录');
history.push(loginPath);
}
return response;
};
export const request = {
errorConfig: {
adaptor: (resData: any) => {
return {
showType: resData.code ? 2 : 0,
errorMessage: resData.message,
};
},
},
requestInterceptors: [addToken],
responseInterceptors: [MainResponseInterceptors],
};