import React, { PureComponent,Fragment } from 'react'; import { formatMessage } from 'umi/locale'; import { Layout, message } from 'antd'; import Animate from 'rc-animate'; import { connect } from 'dva'; import router from 'umi/router'; import GlobalHeader from '@/components/GlobalHeader'; import TopNavHeader from '@/components/TopNavHeader'; import styles from './Header.less'; import SldModal from "@/components/SldModal/SldModal"; import { failTip , sucTip , loginOut } from '@/utils/utils'; const { Header } = Layout; class HeaderView extends PureComponent { state = { modalVisible: false, submiting: false, visible: true, addData: [{ type : 'input' , label : '旧密码' , input_type : 'password' , name : 'oldPassword' , placeholder : '请输入旧密码' , initialValue : '' , rules : [{ required : true , message : '请输入旧密码' , }] , },{ type : 'input' , label : '新密码' , input_type : 'password' , name : 'newPassword' , placeholder : '请输入新密码' , initialValue : '' , rules : [{ required : true , message : '请输入新密码' , }] , },{ type : 'input' , label : '新密码确认' , input_type : 'password' , name : 'newPasswordCfm' , placeholder : '请再次输入新密码' , initialValue : '' , rules : [{ required : true , message : '请再次输入新密码' , }] , }, ], }; static getDerivedStateFromProps(props, state) { if (!props.autoHideHeader && !state.visible) { return { visible: true, }; } return null; } 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%)' : 'calc(100%)'; }; handleNoticeClear = type => { message.success( `${formatMessage({ id: 'component.noticeIcon.cleared' })} ${formatMessage({ id: `component.globalHeader.${type}`, })}` ); const { dispatch } = this.props; dispatch({ type: 'global/clearNotices', payload: type, }); }; handleMenuClick = ({ key }) => { const { dispatch } = this.props; if (key === 'userCenter') { router.push('/account/center'); return; } if (key === 'triggerError') { router.push('/exception/trigger'); return; } //修改密码 if (key === 'userinfo') { this.setState({modalVisible:true}); return; } if (key === 'logout') { loginOut(); } }; handleNoticeVisibleChange = visible => { if (visible) { const { dispatch } = this.props; dispatch({ type: 'global/fetchNotices', }); } }; handScroll = () => { const { autoHideHeader } = this.props; const { visible } = this.state; if (!autoHideHeader) { return; } const scrollTop = document.body.scrollTop + document.documentElement.scrollTop; if (!this.ticking) { this.ticking = true; requestAnimationFrame(() => { if (this.oldScrollTop > scrollTop) { this.setState({ visible: true, }); } else if (scrollTop > 300 && visible) { this.setState({ visible: false, }); } else if (scrollTop < 300 && !visible) { this.setState({ visible: true, }); } this.oldScrollTop = scrollTop; this.ticking = false; }); } }; sldHandleConfirm = (val) => { this.setState({submiting: true}); const { dispatch } = this.props; if(val.newPassword != val.newPasswordCfm ){ failTip('两次密码不一致,请重新输入'); this.setState({submiting: false}); return false; } dispatch({ type: 'global/change_manager_pwd', payload:val, callback: (res) => { if(res.state==200){ sucTip(res.msg); this.setState({modalVisible: false}) //跳到登录界面 router.replace('/user/login'); }else{ failTip(res.msg); } this.setState({submiting: false}); } }); } sldHandleCancle = () => { this.setState({modalVisible:false}); } render() { const { isMobile, handleMenuCollapse, setting} = this.props; const { navTheme, layout, fixedHeader } = setting; const { visible,addData,submiting,modalVisible } = this.state; const isTop = layout === 'topmenu'; const width = this.getHeadWidth(); const HeaderDom = visible ? (
{isTop && !isMobile ? ( ) : ( )}
) : null; const formItemLayoutModal = { labelCol: { span: 6, }, wrapperCol: { span: 14, }, }; return ( {HeaderDom} {/*修改密码对话框-start*/} this.sldHandleConfirm(val)} sldHandleCancle={this.sldHandleCancle} formItemLayoutModal={formItemLayoutModal} content={addData} /> {/*修改密码对话框-end*/} ); } } export default connect(({ user, global, setting, loading }) => ({ currentUser: user.currentUser, collapsed: global.collapsed, fetchingNotices: loading.effects['global/fetchNotices'], notices: global.notices, setting, }))(HeaderView);