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/layout
- export 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
- };
|