forked from huge/frontEnd/hugeOA

Mr Ke
2020-05-29 227089fcb8f0facbc0d4456f876a75a747ee6af3
src/index.js
@@ -22,6 +22,7 @@
// oa路由映射
import OaRouteDom from './routeDom/oaRouteDom';
import UserRouteDom from './routeDom/userRouteDom';
import { oaMenus, userMenus } from './menu';
export const Context = React.createContext();
@@ -33,7 +34,7 @@
    super(props);
    this.state = {
      context: {
        role: 'oa',
        role: '',
        roleMenuList: [],
        setContext: this.setContext,
      },
@@ -42,27 +43,33 @@
  componentDidMount() {
    let pathname = history.location.pathname;
    console.log(history, pathname);
    let menusListByRole = window.localStorage.getItem('menusListByRole')
      ? JSON.parse(window.localStorage.getItem('menusListByRole'))
      : [];
    let role = Object.keys(menusListByRole).reduce((p, n) => {
      if (
        menusListByRole[n].menus
          .reduce((p, n) => {
            if (n.children) {
              return p.concat(n.children);
            } else {
              return p.concat(n);
            }
          }, [])
          .find(({ path }) => path == pathname)
      ) {
        return p.concat(n);
      } else {
        return p;
      }
    }, []);
    // let menuMap = { oa: { menus: oaMenus }, user: { menus: userMenus } };
    let role = Object.keys(menusListByRole)
      .reduce((p, n) => {
        if (
          menusListByRole[n].menus
            .reduce((p, n) => {
              if (n.children) {
                return p.concat(n.children);
              } else {
                return p.concat(n);
              }
            }, [])
            .find(({ path }) => path == pathname)
        ) {
          return p.concat(n);
        } else {
          return p;
        }
      }, [])
      .join('');
    console.log('role', role);
    this.setState({
      context: {
@@ -70,6 +77,18 @@
        role,
      },
    });
    if (!role && menusListByRole.length == 0) {
      history.push('/login');
    }
    if (!role && window.localStorage.getItem('role')) {
      this.setState({
        context: {
          ...this.state.context,
          role: window.localStorage.getItem('role'),
        },
      });
    }
  }
  setContext = (data) => {
@@ -80,6 +99,7 @@
        ...data,
      }, //更新context
    });
    window.localStorage.setItem('role', data.role || '');
  };
  render() {
@@ -106,9 +126,14 @@
                </Switch>
                <Layout>
                  <Content>
                    {context.role == 'oa' && <OaRouteDom />}
                    {context.role == 'user' && <UserRouteDom />}
                    <Route path="/login" component={Login} />
                    <Switch>
                      <Route
                        path="/login"
                        component={() => <Login setContext={this.setContext} />}
                      />
                      {context.role == 'oa' && <OaRouteDom />}
                      {context.role == 'user' && <UserRouteDom />}
                    </Switch>
                  </Content>
                </Layout>
              </Layout>