Info.js 2.99 KB
Newer Older
jim's avatar
jim committed
1
import React, { Component } from 'react';
陈帅's avatar
陈帅 committed
2 3 4 5
import { connect } from 'dva';
import { Route, routerRedux, Switch, Redirect } from 'dva/router';
import { Menu } from 'antd';
import styles from './Info.less';
jim's avatar
jim committed
6 7
import { getRoutes } from '../../../utils/utils';
import GridContent from '../../../layouts/GridContent';
陈帅's avatar
陈帅 committed
8 9 10 11 12

const { Item } = Menu;

const menuMap = {
  base: '基本设置',
ddcat1115's avatar
ddcat1115 committed
13 14 15
  security: '安全设置',
  binding: '账号绑定',
  notification: '新消息通知',
陈帅's avatar
陈帅 committed
16 17 18 19 20
};

@connect(({ user }) => ({
  currentUser: user.currentUser,
}))
jim's avatar
jim committed
21
export default class Info extends Component {
陈帅's avatar
陈帅 committed
22 23 24 25 26 27 28
  constructor(props) {
    super(props);
    const { match, location } = props;
    let key = location.pathname.replace(`${match.path}/`, '');
    key = menuMap[key] ? key : 'base';
    this.state = {
      selectKey: key,
jim's avatar
jim committed
29
      mode: 'inline',
陈帅's avatar
陈帅 committed
30 31
    };
  }
jim's avatar
jim committed
32 33 34 35 36 37 38
  componentDidMount() {
    window.addEventListener('resize', this.resize);
    this.resize();
  }
  componentWillUnmount() {
    window.removeEventListener('resize', this.resize);
  }
陈帅's avatar
陈帅 committed
39
  getmenu = () => {
jim's avatar
jim committed
40 41 42
    return Object.keys(menuMap).map(item => (
      <Item key={item}>{menuMap[item]}</Item>
    ));
陈帅's avatar
陈帅 committed
43 44 45 46 47
  };
  getRightTitle = () => {
    return menuMap[this.state.selectKey];
  };
  selectKey = ({ key }) => {
ddcat1115's avatar
ddcat1115 committed
48
    this.props.dispatch(routerRedux.push(`/account/settings/${key}`));
陈帅's avatar
陈帅 committed
49 50 51 52
    this.setState({
      selectKey: key,
    });
  };
jim's avatar
jim committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
  resize = () => {
    if (!this.main) {
      return;
    }
    let mode = 'inline';
    const { offsetWidth } = this.main;
    if (this.main.offsetWidth < 641 && offsetWidth > 400) {
      mode = 'horizontal';
    }
    if (window.innerWidth < 768 && offsetWidth > 400) {
      mode = 'horizontal';
    }
    this.setState({
      mode,
    });
  };
陈帅's avatar
陈帅 committed
69 70 71 72 73 74
  render() {
    const { match, routerData, currentUser } = this.props;
    if (!currentUser.userid) {
      return '';
    }
    return (
jim's avatar
jim committed
75
      <GridContent>
jim's avatar
jim committed
76 77 78 79 80 81
        <div
          className={styles.main}
          ref={(ref) => {
            this.main = ref;
          }}
        >
jim's avatar
jim committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
          <div className={styles.leftmenu}>
            <Menu
              mode={this.state.mode}
              selectedKeys={[this.state.selectKey]}
              onClick={this.selectKey}
            >
              {this.getmenu()}
            </Menu>
          </div>
          <div className={styles.right}>
            <div className={styles.title}>{this.getRightTitle()}</div>
            <Switch>
              {getRoutes(match.path, routerData).map(item => (
                <Route
                  key={item.key}
                  path={item.path}
                  render={props => (
                    <item.component {...props} currentUser={currentUser} />
                  )}
                  exact={item.exact}
                />
              ))}
ddcat1115's avatar
ddcat1115 committed
104 105 106 107 108
              <Redirect
                exact
                from="/account/settings"
                to="/account/settings/base"
              />
jim's avatar
jim committed
109 110 111
              <Redirect to="/exception/404" />
            </Switch>
          </div>
陈帅's avatar
陈帅 committed
112
        </div>
jim's avatar
jim committed
113
      </GridContent>
陈帅's avatar
陈帅 committed
114 115 116
    );
  }
}