123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- 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: <PageLoading />,
- };
- /**
- * @see https://umijs.org/zh-CN/plugins/plugin-initial-state
- * */
- export async function getInitialState(): Promise<{
- settings?: Partial<LayoutSettings>;
- currentUser?: API.CurrentUser;
- loading?: boolean;
- fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
- }> {
- 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: () => <RightContent />,
- disableContentMargin: false,
- waterMarkProps: {
- content: initialState?.currentUser?.name,
- },
- footerRender: () => <Footer />,
- onPageChange: () => {
- const { location } = history;
- // 如果没有登录,重定向到 login
- if (!initialState?.currentUser && location.pathname !== loginPath) {
- history.push(loginPath);
- }
- },
- menuHeaderRender: undefined,
- // 自定义 403 页面
- // unAccessible: <div>unAccessible</div>,
- // 增加一个 loading 的状态
- childrenRender: (children: any, props: { location: { pathname: string | string[] } }) => {
- // if (initialState?.loading) return <PageLoading />;
- return (
- <>
- {children}
- {!props.location?.pathname?.includes('/login') && (
- <SettingDrawer
- disableUrlParams
- enableDarkTheme
- settings={initialState?.settings}
- onSettingChange={(settings) => {
- 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],
- };
|