Info.js 2.82 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 13 14 15 16 17 18 19 20

const { Item } = Menu;

const menuMap = {
  base: '基本设置',
  safe: '安全设置',
  account: '账号绑定',
  message: '新消息通知',
};

@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(`/user-profile/userinfo/${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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
      <GridContent>
        <div className={styles.main}>
          <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}
                />
              ))}
              <Redirect exact from="/userinfo" to="/userinfo/base" />
              <Redirect to="/exception/404" />
            </Switch>
          </div>
陈帅's avatar
陈帅 committed
103
        </div>
jim's avatar
jim committed
104
      </GridContent>
陈帅's avatar
陈帅 committed
105 106 107
    );
  }
}