tsg-web/src/components/DashboardLayout/index.tsx

186 lines
5.3 KiB
TypeScript
Raw Normal View History

2024-09-20 15:02:50 +08:00
import {Alert, Layout, message, Modal} from 'antd';
import React, { Suspense, useEffect, useMemo, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Outlet, useNavigate } from 'react-router';
import { useLocation } from 'react-router-dom';
import { findMenu } from '../../models/auth/menu';
import { Dispatch, RootState } from '../../models/store';
import HeaderUser from './HeaderUser';
import SiderMenu from './SiderMenu';
import './style.less';
import TopMenu from './TopMenu';
import { currentBreadcrumbs } from '../../models/auth/_';
import {page} from '../../service/warn';
import { qryBasicWatershedDetailApi } from "../../service/preplan";
import moment from "moment"
import { httppost2 } from '../../utils/request';
import apiurl from '../../service/apiurl';
const { Header, Content, Sider } = Layout;
const meunObj:any = {
'home':'基本情况',
'fxzb':'防汛准备',
'sxfd':'思想发动',
'fxkhgzh':'防汛抗旱工作会',
'fbzrh':'防办主任会',
'fxpxb':'防汛培训班',
'fxtj':'防汛图件',
'zzjg':'组织机构',
'zq':'政区',
'gc':'工程',
'gczx':'工程整修',
'ytygc':'已投运工程',
'zjgc':'在建工程',
'hdqz':'河道清障',
'yaxb':'预案修编',
'zqya':'政区预案',
'ytygcya':'已投运工程预案',
'zjgcya':'在建工程预案',
'hsddya':'洪水调度方案',
'qxdw':'抢险队伍',
'qxwl':'抢险物料',
'jczw':'检测站网',
'yqz':'雨情站',
'sqz':'水情站',
'zbb':'值班表',
'txl':'通讯录',
'ysgzq':'雨水工灾情',
'ssyq':'实时雨情',
'sssq':'实时水情',
'ssgq':'实时工情',
'yxqk':'运行情况',
'gcxq':'工程险情',
'dbaq':'大坝安全监测数据',
'sszq':'实时灾情',
'fxdd':'防汛调度',
'dqxsfx':'当前形势分析',
'tqyb':'天气预报',
'hsyb':'洪水预报',
'skhs':'水库洪水',
'hdhs':'河道洪水',
'ddjc':'调度决策',
'yjxy':'应急响应',
'ddzl':'调度指令',
'videoSurveillance':'视频监控',
'fxdp':'防汛大屏',
}
const DashboardLayout: React.FC = () => {
const getLayerVisible = (s:any) => s.map.layerVisible;
const layerVisible = useSelector(getLayerVisible);
const location = useLocation();
const navigate = useNavigate();
const pathname = location.pathname;
const dispatch = useDispatch<Dispatch>();
const myUser = localStorage.getItem('userName')
const token = localStorage.getItem('access_token');
const menu = useSelector((state: RootState) => state.auth.menu);
const roleObj = useSelector((state: any) => state.auth.roleObj);
useEffect(()=>{
if (!myUser || !token) {
navigate('/login')
}else{
dispatch.auth.loadMenu();
document.title = "小玉潭水库综合管理系统";
}
},[])
useEffect(()=>{
if(JSON.stringify(roleObj)!=='{}'){
const obj = roleObj[pathname]
dispatch.auth.setRole(obj)
}
},[pathname,roleObj])
const [refresh, setRefresh] = useState(false);
const handleRefresh = (event:any) => {
event.preventDefault();
// 设置refresh状态为true
setRefresh(true);
};
// 这个方法是统计菜单点击情况的
// useEffect(()=>{
// (async()=>{
// const list = location.pathname.split('/')
// let menu1:any = meunObj?.[list[2]]
// let menu2:any = meunObj?.[list[3]]
// let menu3:any = meunObj?.[list[4]]
// if(menu1==='基本情况'){
// menu2 = '基本情况'
// }
// if(menu1==='视频监控'){
// menu2 = '视频监控'
// }
// if(menu1==='防汛大屏'){
// menu2 = '防汛大屏'
// }
// const res = await httppost2(apiurl.setMenu,{
// createId:localStorage.getItem('userId'),
// loginType:0,
// menu1:menu1,
// menu2:menu2,
// menu3:menu3
// })
// })()
// },[location.pathname])
const menuIndexes = useMemo(() => findMenu(menu, pathname), [menu, pathname]);
const menuUrl = ['/mgr/home', '/mgr/forecast', '/mgr/earlyWarning', '/mgr/preview', '/mgr/plan','/mgr/videoSurveillance'];
return (
<Layout className="app-root">
<Header className="app-header clearFloat">
{/*<Avatar size={24} className="app-icon" />*/}
{/*<span className="app-title">{TITLE}{SUBTITLE}</span>*/}
<span className="app-title lf">
<img src={`${process.env.PUBLIC_URL}/assets/shuili.png`} alt=""/>
<span></span>
</span>
<div className="topMenu lf">
<TopMenu menu={menu} menuIndexes={menuIndexes} />
</div>
<div className="rf">
<HeaderUser user={null} />
</div>
</Header>
{/* 信息管理左栏*/}
<Layout className="app-root" >
{
!menuUrl.includes(pathname)?
<Sider className="app-sider" width={'280px'} >
{/* 左侧样式 */}
<SiderMenu menu={menu} menuIndexes={menuIndexes} />
</Sider>
:null
}
<Content className="app-content" >
<div className='content-root'>
<Suspense fallback={null}>
{
menu.length>0?<Outlet />:null
}
</Suspense>
</div>
</Content>
</Layout>
</Layout>
)
};
export default DashboardLayout