index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import React from 'react';
  2. import { FormattedMessage } from 'umi-plugin-react/locale';
  3. import Link from 'umi/link';
  4. import { PageHeader, Tabs, Typography } from 'antd';
  5. import { connect } from 'dva';
  6. import classNames from 'classnames';
  7. import GridContent from './GridContent';
  8. import styles from './index.less';
  9. import MenuContext from '@/layouts/MenuContext';
  10. import { conversionBreadcrumbList } from './breadcrumb';
  11. const { Title } = Typography;
  12. /**
  13. * render Footer tabList
  14. * In order to be compatible with the old version of the PageHeader
  15. * basically all the functions are implemented.
  16. */
  17. const renderFooter = ({ tabList, activeKeyProps, onTabChange, tabBarExtraContent }) => {
  18. return tabList && tabList.length ? (
  19. <Tabs
  20. className={styles.tabs}
  21. {...activeKeyProps}
  22. onChange={key => {
  23. if (onTabChange) {
  24. onTabChange(key);
  25. }
  26. }}
  27. tabBarExtraContent={tabBarExtraContent}
  28. >
  29. {tabList.map(item => (
  30. <Tabs.TabPane tab={item.tab} key={item.key} />
  31. ))}
  32. </Tabs>
  33. ) : null;
  34. };
  35. const PageHeaderWrapper = ({
  36. children,
  37. contentWidth,
  38. wrapperClassName,
  39. top,
  40. title,
  41. content,
  42. logo,
  43. extraContent,
  44. ...restProps
  45. }) => {
  46. return (
  47. <div style={{ margin: '-24px -24px 0' }} className={classNames(classNames, styles.main)}>
  48. {top}
  49. {title && content && (
  50. <MenuContext.Consumer>
  51. {value => {
  52. return (
  53. <PageHeader
  54. wide={contentWidth === 'Fixed'}
  55. title={
  56. <Title
  57. level={4}
  58. style={{
  59. marginBottom: 0,
  60. }}
  61. >
  62. {title}
  63. </Title>
  64. }
  65. key="pageheader"
  66. {...restProps}
  67. breadcrumb={conversionBreadcrumbList({
  68. ...value,
  69. ...restProps,
  70. home: <FormattedMessage id="menu.home" defaultMessage="Home" />,
  71. })}
  72. className={styles.pageHeader}
  73. linkElement={Link}
  74. footer={renderFooter(restProps)}
  75. >
  76. <div className={styles.detail}>
  77. {logo && <div className={styles.logo}>{logo}</div>}
  78. <div className={styles.main}>
  79. <div className={styles.row}>
  80. {content && <div className={styles.content}>{content}</div>}
  81. {extraContent && <div className={styles.extraContent}>{extraContent}</div>}
  82. </div>
  83. </div>
  84. </div>
  85. </PageHeader>
  86. );
  87. }}
  88. </MenuContext.Consumer>
  89. )}
  90. {children ? (
  91. <div className={styles['children-content']}>
  92. <GridContent>{children}</GridContent>
  93. </div>
  94. ) : null}
  95. </div>
  96. );
  97. };
  98. export default connect(({ setting }) => ({
  99. contentWidth: setting.contentWidth,
  100. }))(PageHeaderWrapper);