| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | import Footer from '@/components/Footer';import { Question, SelectLang } from '@/components/RightContent';import { LinkOutlined } from '@ant-design/icons';import type { Settings as LayoutSettings } from '@ant-design/pro-components';import { SettingDrawer } from '@ant-design/pro-components';import type { RunTimeLayoutConfig } from '@umijs/max';import { history, Link } from '@umijs/max';import defaultSettings from '../config/defaultSettings';import { errorConfig } from './requestErrorConfig';import { currentUser as queryCurrentUser } from './services/ant-design-pro/api';import React from 'react';import { AvatarDropdown, AvatarName } from './components/RightContent/AvatarDropdown';const isDev = process.env.NODE_ENV === 'development';const loginPath = '/user/login';// 不显示页脚页面配置const doNotFooter = ['/opus'];/** * @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 = await queryCurrentUser({        skipErrorHandler: true,      });      return msg.data;    } catch (error) {      history.push(loginPath);    }    return undefined;  };  // 如果不是登录页面,执行  const { location } = history;  if (location.pathname !== loginPath) {    const currentUser = await fetchUserInfo();    return {      fetchUserInfo,      currentUser: {        avatar: `https://xsgames.co/randomusers/avatar.php?g=pixel&key=${Math.floor(Math.random() * 10)}`,        ...currentUser      },      settings: defaultSettings as Partial<LayoutSettings>,    };  }  return {    fetchUserInfo,    settings: defaultSettings as Partial<LayoutSettings>,  };}// ProLayout 支持的api https://procomponents.ant.design/components/layoutexport const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {  return {    actionsRender: () => [<Question key="doc" />], // <SelectLang key="SelectLang" />    avatarProps: {      src: initialState?.currentUser?.avatar || `https://xsgames.co/randomusers/avatar.php?g=pixel&key=${Math.floor(Math.random() * 20)}`,      title: <AvatarName />,      render: (_, avatarChildren) => {        return <AvatarDropdown>{avatarChildren}</AvatarDropdown>;      },    },    waterMarkProps: {      content: initialState?.currentUser?.mobile,    },    footerRender: () => !doNotFooter.includes(location.pathname)  ? <Footer /> : null,    onPageChange: () => {      const { location } = history;      // 如果没有登录,重定向到 login      if (!initialState?.currentUser && location.pathname !== loginPath) {        history.push(loginPath);      }    },    layoutBgImgList: [      {        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr',        left: 85,        bottom: 100,        height: '303px',      },      {        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr',        bottom: -68,        right: -45,        height: '303px',      },      {        src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr',        bottom: 0,        left: 0,        width: '331px',      },    ],    links: isDev      ? [        <Link key="openapi" to="http://47.97.38.17:9988/swagger-ui.html#/" target="_blank">          <LinkOutlined />          <span>OpenAPI 文档</span>        </Link>,      ]      : [],    menuHeaderRender: undefined,    // 自定义 403 页面    // unAccessible: <div>unAccessible</div>,    // 增加一个 loading 的状态    childrenRender: (children) => {      // if (initialState?.loading) return <PageLoading />;      return (        <>          {children}          <SettingDrawer            disableUrlParams            enableDarkTheme            settings={initialState?.settings}            onSettingChange={(settings) => {              setInitialState((preInitialState) => ({                ...preInitialState,                settings,              }));            }}          />        </>      );    },    ...initialState?.settings,  };};/** * @name request 配置,可以配置错误处理 * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。 * @doc https://umijs.org/docs/max/request#配置 */export const request = {  ...errorConfig};
 |