UserLayout.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import SelectLang from '@/components/SelectLang';
  2. import { MenuDataItem } from '@/components/SiderMenu';
  3. import { ConnectProps, ConnectState } from '@/models/connect';
  4. import getPageTitle from '@/utils/getPageTitle';
  5. import { GlobalFooter } from 'ant-design-pro';
  6. import { Icon } from 'antd';
  7. import { connect } from 'dva';
  8. import React, { Component, Fragment } from 'react';
  9. import DocumentTitle from 'react-document-title';
  10. import { formatMessage } from 'umi-plugin-locale';
  11. import Link from 'umi/link';
  12. import logo from '../assets/logo.svg';
  13. import styles from './UserLayout.less';
  14. const links = [
  15. {
  16. key: 'help',
  17. title: formatMessage({ id: 'layout.user.link.help' }),
  18. href: '',
  19. },
  20. {
  21. key: 'privacy',
  22. title: formatMessage({ id: 'layout.user.link.privacy' }),
  23. href: '',
  24. },
  25. {
  26. key: 'terms',
  27. title: formatMessage({ id: 'layout.user.link.terms' }),
  28. href: '',
  29. },
  30. ];
  31. const copyright = (
  32. <Fragment>
  33. Copyright <Icon type="copyright" /> 2018 蚂蚁金服体验技术部出品
  34. </Fragment>
  35. );
  36. export interface UserLayoutProps extends ConnectProps {
  37. route: MenuDataItem;
  38. breadcrumbNameMap: { [path: string]: MenuDataItem };
  39. navTheme: string;
  40. }
  41. class UserLayout extends Component<UserLayoutProps> {
  42. componentDidMount() {
  43. const {
  44. dispatch,
  45. route: { routes, authority },
  46. } = this.props;
  47. dispatch!({
  48. type: 'menu/getMenuData',
  49. payload: { routes, authority },
  50. });
  51. }
  52. render() {
  53. const { children, location, breadcrumbNameMap } = this.props;
  54. return (
  55. <DocumentTitle title={getPageTitle(location!.pathname, breadcrumbNameMap)}>
  56. <div className={styles.container}>
  57. <div className={styles.lang}>
  58. <SelectLang />
  59. </div>
  60. <div className={styles.content}>
  61. <div className={styles.top}>
  62. <div className={styles.header}>
  63. <Link to="/">
  64. <img alt="logo" className={styles.logo} src={logo} />
  65. <span className={styles.title}>Ant Design</span>
  66. </Link>
  67. </div>
  68. <div className={styles.desc}>Ant Design 是西湖区最具影响力的 Web 设计规范</div>
  69. </div>
  70. {children}
  71. </div>
  72. <GlobalFooter links={links} copyright={copyright} />
  73. </div>
  74. </DocumentTitle>
  75. );
  76. }
  77. }
  78. export default connect(({ menu: menuModel }: ConnectState) => ({
  79. menuData: menuModel.menuData,
  80. breadcrumbNameMap: menuModel.breadcrumbNameMap,
  81. }))(UserLayout);