import React, { PureComponent } from 'react'; import { Layout, message } from 'antd'; import Animate from 'rc-animate'; import { connect } from 'dva'; import { routerRedux } from 'dva/router'; import GlobalHeader from '../components/GlobalHeader/index'; import TopNavHeader from '../components/TopNavHeader/index'; import styles from './Header.less'; import Authorized from '../utils/Authorized'; const { Header } = Layout; class HeaderView extends PureComponent { state = { visible: true, }; componentDidMount() { document.addEventListener('scroll', this.handScroll, { passive: true }); } componentWillUnmount() { document.removeEventListener('scroll', this.handScroll); } getHeadWidth = () => { const { isMobile, collapsed, setting } = this.props; const { fixedHeader, layout } = setting; if (isMobile || !fixedHeader || layout === 'topmenu') { return '100%'; } return collapsed ? 'calc(100% - 80px)' : 'calc(100% - 256px)'; }; handleNoticeClear = type => { message.success(`清空了${type}`); const { dispatch } = this.props; dispatch({ type: 'global/clearNotices', payload: type, }); }; handleMenuClick = ({ key }) => { const { dispatch } = this.props; if (key === 'userCenter') { dispatch(routerRedux.push('/account/center')); return; } if (key === 'triggerError') { dispatch(routerRedux.push('/exception/trigger')); return; } if (key === 'userinfo') { dispatch(routerRedux.push('/account/settings/base')); return; } if (key === 'logout') { dispatch({ type: 'login/logout', }); } }; handleNoticeVisibleChange = visible => { if (visible) { const { dispatch } = this.props; dispatch({ type: 'global/fetchNotices', }); } }; handScroll = e => { const { autoHideHeader } = this.props; const { visible } = this.state; if (!autoHideHeader) { return; } const scrollTop = document.body.scrollTop + document.documentElement.scrollTop; if (!this.ticking) { requestAnimationFrame(() => { if (this.oldScrollTop > scrollTop) { this.setState({ visible: true, }); this.scrollTop = scrollTop; return; } if (scrollTop > 400 && visible) { this.setState({ visible: false, }); } if (scrollTop < 400 && !visible) { this.setState({ visible: true, }); } this.oldScrollTop = scrollTop; this.ticking = false; return; }); } this.ticking = false; }; render() { const { isMobile, handleMenuCollapse, setting } = this.props; const { silderTheme, layout, fixedHeader } = setting; const { visible } = this.state; const isTop = layout === 'topmenu'; const HeaderDom = visible ? (
{isTop && !isMobile ? ( ) : ( )}
) : null; return ( {HeaderDom} ); } } export default connect(({ user, global, setting, loading }) => ({ currentUser: user.currentUser, collapsed: global.collapsed, fetchingNotices: loading.effects['global/fetchNotices'], notices: global.notices, setting, }))(HeaderView);