index.js 2.3 KB
Newer Older
vipcxj's avatar
vipcxj committed
1 2 3
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'dva';
4
import { withRouter4Compat as withRouter } from 'react-router-4-compat';
vipcxj's avatar
vipcxj committed
5
import { Layout } from 'antd';
6
import { provideHeight } from '../../components/hoc/size';
vipcxj's avatar
vipcxj committed
7 8 9
import SiderLogo from '../../components/layout/sider/SiderLogo';
import SiderMenu from '../../components/layout/sider/SiderMenu';
import HeaderPane from './header';
10
import { thisPush } from '../../services/route';
vipcxj's avatar
vipcxj committed
11 12 13
import styles from './index.less';

const { Sider, Header, Content, Footer } = Layout;
14
const ContentWithHeight = provideHeight(Content);
vipcxj's avatar
vipcxj committed
15 16 17 18 19 20 21 22 23 24 25 26

class Main extends React.Component {

  constructor(props, context) {
    super(props, context);
    this.onClick = this::this.onClick;
    this.onCollapse = this::this.onCollapse;
    this.state = {
      collapsed: false,
      mode: 'inline',
    };
  }
27 28 29
  componentDidMount() {
    this.props.dispatch({ type: 'main/fetchModules' });
  }
vipcxj's avatar
vipcxj committed
30 31
  onClick({ keyPath }) {
    const paths = keyPath.reverse().join('/');
32 33
    thisPush(this, `/main/${paths}`);
    // this.props.dispatch(routerRedux.push(fullPath(`/main/${paths}`)));
vipcxj's avatar
vipcxj committed
34 35 36 37 38 39 40 41
  }
  onCollapse(collapsed) {
    this.setState({
      collapsed,
      mode: collapsed ? 'vertical' : 'inline',
    });
  }
  render() {
42 43
    const { main, children } = this.props;
    const { menus } = main;
vipcxj's avatar
vipcxj committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
    const mode = this.state.mode;
    const menuProps = {
      mode,
      menus,
      onClick: this.onClick,
    };
    const { routes, params } = this.props;
    const headerProps = {
      routes,
      params,
      menus,
    };
    return (
      <Layout className={styles.layout}>
        <Sider collapsible collapsed={this.state.collapsed} onCollapse={this.onCollapse}>
          <SiderLogo />
          <SiderMenu {...menuProps} />
        </Sider>
        <Layout>
          <Header>
            <HeaderPane {...headerProps} />
          </Header>
66
          <ContentWithHeight>
vipcxj's avatar
vipcxj committed
67
            { children || null }
68
          </ContentWithHeight>
vipcxj's avatar
vipcxj committed
69 70 71 72 73 74 75 76 77 78 79
          <Footer>
            <span className={styles.company}>®上海铂蓝信息科技有限公司</span>
          </Footer>
        </Layout>
      </Layout>
    );
  }

}

Main.propTypes = {
vipcxj's avatar
vipcxj committed
80
  children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]),
vipcxj's avatar
vipcxj committed
81
  main: PropTypes.object,
vipcxj's avatar
vipcxj committed
82 83
};

84
export default connect(({ main }) => ({ main }))(withRouter(Main));