import * as React from 'react'; import { Layout, Dropdown, Menu, Icon, Avatar } from 'antd'; import './BasicLayout.less'; import { connect } from '../util/inject'; import loginModel, { LoginState } from '../commonModels/login'; import menuModel, { MenuState } from '../commonModels/menu'; import 'moment/locale/zh-cn'; import classnames from 'classnames'; import settingModel from '../commonModels/setting'; import { createGetClassName } from '../util/util'; import BasicComponent from '../components/BasicComponent'; import Debounce from 'lodash-decorators/debounce'; const getClassName = createGetClassName('basic-layout'); const Header = Layout.Header; export interface HeaderMenuItem { render: React.ReactNode; onClick?: () => void; } export type HeaderMenuItems = {[key: string]: HeaderMenuItem}; export type RightMenuItems = HeaderMenuItems; export interface BaiscHeaderExOwnProps { headerMenuItems: HeaderMenuItems; rightMenuItems: RightMenuItems; } export interface BaiscHeaderExProps extends BaiscHeaderExOwnProps { login: LoginState; menu: MenuState; } export class BaiscHeaderEx extends BasicComponent { handleClickMenu = (e) => { switch (e.key) { case 'logout': if (this.props.login.loading) { return; } this.props.dispatch(loginModel.actions.api.logout({ })); break; case 'setting': this.props.dispatch(settingModel.actions.simple.toogleVisible({ visible: true, })); break; default: break; } const eKey = this.props.headerMenuItems[e.key]; if (eKey && eKey.onClick) { eKey.onClick(); } } @Debounce(600) triggerResizeEvent() { // eslint-disable-line const event = document.createEvent('HTMLEvents'); event.initEvent('resize', true, false); window.dispatchEvent(event); } toggle = () => { this.props.dispatch(menuModel.actions.simple.toogleCollapsed({ collapsed: !this.props.menu.collapsed, })); this.triggerResizeEvent(); } render() { const headerMenuItems = Object.keys(this.props.headerMenuItems); const customMenuItems = headerMenuItems.map(key => { return this.props.headerMenuItems[key].render; }); const menu = ( {customMenuItems} {/** 设置 退出登录*/} ); const headerClass = classnames( getClassName('header'), this.props.menu.previewHeaderTheme || this.props.menu.headerTheme.value, ); const customRightMenuItems = Object.keys(this.props.rightMenuItems).map(key => { return this.props.rightMenuItems[key].render; }); return (
{this.props.menu.name} {customRightMenuItems}
); } } export default connect({ menu: 'menu', login: 'login', })(BaiscHeaderEx);