index.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { PureComponent } from 'react';
  2. import { Tabs, Skeleton } from 'antd';
  3. import classNames from 'classnames';
  4. import styles from './index.less';
  5. import BreadcrumbView from './breadcrumb';
  6. const { TabPane } = Tabs;
  7. export default class PageHeader extends PureComponent {
  8. onChange = key => {
  9. const { onTabChange } = this.props;
  10. if (onTabChange) {
  11. onTabChange(key);
  12. }
  13. };
  14. render() {
  15. const {
  16. title = '',
  17. logo,
  18. action,
  19. content,
  20. extraContent,
  21. tabList,
  22. className,
  23. tabActiveKey,
  24. tabDefaultActiveKey,
  25. tabBarExtraContent,
  26. loading = false,
  27. wide = false,
  28. hiddenBreadcrumb = false,
  29. } = this.props;
  30. const clsString = classNames(styles.pageHeader, className);
  31. const activeKeyProps = {};
  32. if (tabDefaultActiveKey !== undefined) {
  33. activeKeyProps.defaultActiveKey = tabDefaultActiveKey;
  34. }
  35. if (tabActiveKey !== undefined) {
  36. activeKeyProps.activeKey = tabActiveKey;
  37. }
  38. return (
  39. <div className={clsString}>
  40. <div className={wide ? styles.wide : ''}>
  41. <Skeleton
  42. loading={loading}
  43. title={false}
  44. active
  45. paragraph={{ rows: 3 }}
  46. avatar={{ size: 'large', shape: 'circle' }}
  47. >
  48. {hiddenBreadcrumb ? null : <BreadcrumbView {...this.props} />}
  49. <div className={styles.detail}>
  50. {logo && <div className={styles.logo}>{logo}</div>}
  51. <div className={styles.main}>
  52. <div className={styles.row}>
  53. <h1 className={styles.title}>{title}</h1>
  54. {action && <div className={styles.action}>{action}</div>}
  55. </div>
  56. <div className={styles.row}>
  57. {content && <div className={styles.content}>{content}</div>}
  58. {extraContent && <div className={styles.extraContent}>{extraContent}</div>}
  59. </div>
  60. </div>
  61. </div>
  62. {tabList && tabList.length ? (
  63. <Tabs
  64. className={styles.tabs}
  65. {...activeKeyProps}
  66. onChange={this.onChange}
  67. tabBarExtraContent={tabBarExtraContent}
  68. >
  69. {tabList.map(item => (
  70. <TabPane tab={item.tab} key={item.key} />
  71. ))}
  72. </Tabs>
  73. ) : null}
  74. </Skeleton>
  75. </div>
  76. </div>
  77. );
  78. }
  79. }