import React, {Component} from 'react'; import {Layout, Menu, Icon, Select} from 'antd'; import {NavRouter} from '../router/navRouter'; import './basicLayout.scss'; import ContentLayout from "./component/contentLayout"; import {ROUTE_PRE_FIX} from "../common/constant"; import { observer, inject } from 'mobx-react'; import JFUser from "./component/JFUser/JFUser"; import LanChange from "./component/LanChange/LanChange" const {SubMenu} = Menu; const {Header, Sider} = Layout; @inject('appStore') @observer class BasicLayout extends Component { rootKeys = NavRouter.map(({ key }) => key); constructor(props) { super(props); this.state = { openKeys: [], selectedKeys: [], }; }; componentWillReceiveProps(nextProps) { if (nextProps.location.pathname !== this.props.location.pathname) { this.changeMenuStatus(); } }; componentDidMount() { // this.props.setAppState({permission: permission()}); this.changeMenuStatus(); this.props.appStore.init(); }; //根据当前path改变menu状态 changeMenuStatus = () => { let curPath = this.props.history.location.pathname.substring(this.props.history.location.pathname.indexOf('tsp') - 1); let curMenu = curPath.split('/').slice(2); let keys = this.getCurrentSelectedKeys(curMenu) || []; this.setState({ selectedKeys: keys, openKeys: keys }); }; /** * * @param keys * @return [k1,k2] */ getCurrentSelectedKeys(keys) { let recursive = (nav,key) => { for(let i = 0; i < nav.length; i++) { if(nav[i].key === key){ return nav[i]; }else { if( Array.isArray(nav[i].routes) ) { let r = recursive(nav[i].routes,key); if(r) { return r; } } } } }; for(let i=keys.length-1; i >= 0; i--) { let r = recursive(NavRouter,keys[i]); if(r) { if(r.hidden) { continue; }else { return keys.slice(0,i+1); } }else { console.error('请检查路由的key值') } } } /* * p 该用户拥有的权限 * rp 路由信息显示所需要的权限 * */ isShow(p, rp) { // 路由信息无权限限制 if (!rp || !rp.length) { return true; } // 权限比对 for (let i = 0; i < rp.length; i++) { if (p.indexOf(rp[i]) === -1) { return false; } } return true; } onToggle = (openKeys) => { const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1); if (this.rootKeys.indexOf(latestOpenKey) === -1) { this.setState({ openKeys }); } else { this.setState({ openKeys: latestOpenKey ? [latestOpenKey] : [], }); } }; gotoUrl = item => { const {history, location, lan} = this.props; if (location.pathname === item.path) { return; } else { history.push(`/${lan}/${ ROUTE_PRE_FIX }`+ item.path); } }; menuMap = (RouterTree, callback) => { let {permission} = this.props; let isArrFun = value => value && Array.isArray(value); let routesIsArr = value => value && value.routes && Array.isArray(value.routes) && value.routes.length > 0; let repeatRouter = (Arr) => { if (isArrFun(Arr)) { return Arr.map(ArrItem => { if (routesIsArr(ArrItem)) { return ( !ArrItem.hidden && this.isShow(permission, ArrItem.permission) && {ArrItem.icon ? : null} {ArrItem.name} } > {repeatRouter(ArrItem.routes)} ); } return ( !ArrItem.hidden && this.isShow(permission, ArrItem.permission) && callback(ArrItem)}> {ArrItem.icon ? : null} {ArrItem.name} ); }); } }; return repeatRouter(RouterTree); }; render() { let {lan, appStore} = this.props; let {selectedKeys} = this.state; return (
管理控制台
{/* */}
{ appStore.layoutLoading ?
loading
: ( appStore.siteList.length !== 0 && ( { this.menuMap(NavRouter, this.gotoUrl) } {/* this.setState({ collapsed:!this.state.collapsed })}/>*/} ) ) }
); } } export default function WrapperBasicLayout(props) { return ( ); }