import React, { FC, useState, useEffect, useRef, Component } from 'react' import { useHistory, useLocation } from 'react-router-dom' import MenuView from '@/components/Menu' import classNames from 'classnames' import { Layout, BackTop } from 'antd' import { getKeyName, isAuthorized } from '@/assets/js/publicFunc' import Header from '@/components/Header' import TabPanes from '@/components/TabPanes' import { connect } from 'react-redux' import * as actions from '@/store/actions' import styles from './Home.module.less' const noNewTab = ['/login'] // 不需要新建 tab的页面 const noCheckAuth = ['/', '/403'] // 不需要检查权限的页面 // 检查权限 const checkAuth = (newPathname: string): boolean => { // 不需要检查权限的 // if (noCheckAuth.includes(newPathname)) { // return true // } // const { tabKey: currentKey } = getKeyName(newPathname) // return isAuthorized(currentKey) return true; } interface Props extends ReduxProps {} interface PanesItemProps { title: string; content: Component; key: string; closable: boolean; path: string; } const Home: FC = (props) => { const [tabActiveKey, setTabActiveKey] = useState('home') const [panesItem, setPanesItem] = useState({ title: '', content: null, key: '', closable: false, path: '' }) const pathRef: RefType = useRef('') const history = useHistory() const { pathname, search } = useLocation() const { storeData: { collapsed, userInfo }, setStoreData } = props const { token } = userInfo useEffect(() => { setStoreData('SET_COLLAPSED', document.body.clientWidth <= 1024) // 未登录 if (!token && pathname !== '/login') { history.replace({ pathname: '/login' }) return } const { tabKey, title, component: Content } = getKeyName(pathname) // 新tab已存在或不需要新建tab,return if (pathname === pathRef.current || noNewTab.includes(pathname)) { setTabActiveKey(tabKey) return } // 检查权限,比如直接从地址栏输入的,提示无权限 const isHasAuth = checkAuth(pathname) if (!isHasAuth) { const errorUrl = '/403' const { tabKey: errorKey, title: errorTitle, component: errorContent } = getKeyName(errorUrl) setPanesItem({ title: errorTitle, content: errorContent, key: errorKey, closable: true, path: errorUrl }) pathRef.current = errorUrl setTabActiveKey(errorKey) history.replace(errorUrl) return } // 记录新的路径,用于下次更新比较 const newPath = search ? pathname + search : pathname pathRef.current = newPath setPanesItem({ title, content: Content, key: tabKey, closable: tabKey !== 'home', path: newPath }) setTabActiveKey(tabKey) }, [history, pathname, search, setStoreData, token]) return ( e.preventDefault()} style={{ display: pathname.includes('/login') ? 'none' : 'flex' }} >
) } export default connect( (state) => state, actions )(Home)