import React, { useState, useMemo, useEffect } from 'react'; import { connect } from 'dva'; import { withRouter } from 'dva/router'; import { Dropdown, Icon, Menu, message, Button, Modal } from 'antd'; import { HeaderSearch as OPTSearch, PictureThumb } from '@woowalker/feui'; import ModifyPassword from '../components/MainPage/ModifyPassword'; import FoUserInfoShow from '../components/MainPage/FoUserInfoShow'; import FeedbackQuestion from '../components/MainPage/FeedbackQuestion'; import GuideCanvas from '../components/MainPage/GuideCanvas'; import IconFont from '../utils/iconFont'; import { initFilter, requestFullScreenMethod, exitFullScreen, isFullscreenElement } from '../utils/common'; import config from '../config'; import './header.less'; import Option from './Option'; import FullScreenPage from './FullScreen'; // 投屏 const DataV = (props) => { const navTo = () => { const { OrgId, Tenant, baseConfig } = props.login; const preUrl = baseConfig.SCREEN_URL || config.dataVUrl; const queryStr = `OrgId=${OrgId}&Tenant=${Tenant}`; const url = `${preUrl.indexOf('?') !== -1 ? preUrl : preUrl + '?'}${queryStr}`; window.open(url, '_blank'); }; return ( {/* */} ); }; const HeaderDataV = connect(({ login }) => ({ login }))(DataV); // 搜索 const Search = (props) => { const [autoCompleteData, setAutoCompleteData] = useState([]); const leafMenus = useMemo(() => { const menuForms = []; const menuDatas = []; function traverseChild(item) { if (!item.Menu.Nav_MenuForm || item.ChildMenus?.length) { item.ChildMenus.forEach((x) => { traverseChild(x); }); } else if (item.Menu.Nav_MenuForm) { menuForms.push({ MenuName: item.Menu.NAME, ...item.Menu.Nav_MenuForm, }); menuDatas.push(item); } } const menus = props.login.loginInfo.Menus || []; menus.forEach((item) => { traverseChild(item); }); return { menuForms, menuDatas }; }, [props.login.loginInfo?.Menus]); /** * 搜索菜单 * @param {*} e */ const handleSearchMenu = (e) => { if (!e || e === '') { setAutoCompleteData([]); return; } const validResult = []; leafMenus.menuForms.forEach((item) => { if ( item.CODE.toLowerCase().indexOf(e.toLowerCase()) >= 0 || item.NAME.toLowerCase().indexOf(e.toLowerCase()) >= 0 || item.MenuName.toLowerCase().indexOf(e.toLowerCase()) >= 0 ) { validResult.push(item); } }); setAutoCompleteData(validResult); }; /** * 选中菜单 * @param {*} e */ const handleSelectMenu = (e) => { const menu = leafMenus.menuDatas.find((item) => item.Menu.Nav_MenuForm.ID === e); props.dispatch({ type: 'app/updateActivatedMenu', payload: { currActivatedTab: menu.Node.ID, currActivatedMenu: menu.Node, }, }); props.history.push({ pathname: `/main/${menu.Node.ID}` }); }; if (window.navigator.userAgent.indexOf('Windows') < 1) { return ; } else { return ; } //return ( // // //) }; const HeaderSearch = withRouter(connect(({ login }) => ({ login }))(Search)); // 个人中心 const User = (props) => { const [visible, setVisible] = useState(false); /** * 注销登录 */ const handleLogout = () => { const { OrgId, userId } = props.login; const logJson = initFilter(OrgId, userId, '', 0, 1, 0); props.dispatch({ type: 'app/addLoginOut', payload: logJson, }); localStorage.removeItem('accessToken'); localStorage.removeItem('currentMineTypeName'); props.history.push({ pathname: '/login' }); }; /** * 锁屏 */ const handleLockScreen = () => { localStorage.removeItem('accessToken'); props.dispatch({ type: 'login/save', payload: { screenLocked: true, }, }); }; /** * 菜单选中 * @param {*} evt */ const handleUserMenuClick = (evt) => { switch (evt.key) { case 'user-menu-logout': handleLogout(); break; case 'user-menu-lockscreen': handleLockScreen(); break; case 'user-menu-cacheclean': window.localStorage.clear(); message.success('清除成功,即将重新加载页面', 2, () => { setTimeout(() => window.location.reload(true), 500); }); break; default: break; } setVisible(false); }; const { loginInfo = {} } = props.login; return ( 当前登录:{loginInfo.User?.NAME} 我的资料 修改密码 {/* 问题反馈 */} {/* 屏幕锁定 */} 清除缓存 版本号:{config.version} 退出登录 } > ); }; const HeaderUser = withRouter(connect(({ login }) => ({ login }))(User)); // 2023-10-08 生产单元 const MineType = (props) => { const [visible, setVisible] = useState(false); let currUserMineType = localStorage.getItem('MineType'); if (currUserMineType == null || currUserMineType == undefined) { localStorage.setItem('MineType', '30'); localStorage.setItem('currentMineTypeName', '露天矿'); } else { if (localStorage.getItem('currentMineTypeName') == null) { if (currUserMineType.indexOf(30) > -1) { localStorage.setItem('currentMineType', 30); localStorage.setItem('currentMineTypeName', '露天矿'); } else if (currUserMineType.indexOf(20) > -1) { localStorage.setItem('currentMineType', 20); localStorage.setItem('currentMineTypeName', '尾矿库'); } else if (currUserMineType.indexOf(10) > -1) { localStorage.setItem('currentMineType', 10); localStorage.setItem('currentMineTypeName', '选矿厂'); } else if (currUserMineType.indexOf(40) > -1) { localStorage.setItem('currentMineType', 40); localStorage.setItem('currentMineTypeName', '地下矿'); } else if (currUserMineType.indexOf(31) > -1) { localStorage.setItem('currentMineType', 31); localStorage.setItem('currentMineTypeName', '职能口'); } else if (currUserMineType.indexOf(32) > -1) { localStorage.setItem('currentMineType', 32); localStorage.setItem('currentMineTypeName', '非金属'); } } else { let currentMineType = localStorage.getItem('currentMineType'); if (currUserMineType.indexOf(currentMineType) > -1) { if (currentMineType == 30) { localStorage.setItem('currentMineTypeName', '露天矿'); } else if (currUserMineType == 20) { localStorage.setItem('currentMineTypeName', '尾矿库'); } else if (currUserMineType == 10) { localStorage.setItem('currentMineTypeName', '选矿厂'); } else if (currUserMineType == 40) { localStorage.setItem('currentMineTypeName', '地下矿'); } else if (currUserMineType == 31) { localStorage.setItem('currentMineTypeName', '职能口'); } else if (currUserMineType == 32) { localStorage.setItem('currentMineTypeName', '非金属'); } } else { if (currUserMineType.indexOf(30) > -1) { localStorage.setItem('currentMineTypeName', '露天矿'); } else if (currUserMineType.indexOf(20) > -1) { localStorage.setItem('currentMineTypeName', '尾矿库'); } else if (currUserMineType.indexOf(10) > -1) { localStorage.setItem('currentMineTypeName', '选矿厂'); } else if (currUserMineType.indexOf(40) > -1) { localStorage.setItem('currentMineTypeName', '地下矿'); } else if (currUserMineType.indexOf(31) > -1) { localStorage.setItem('currentMineTypeName', '职能口'); } else if (currUserMineType.indexOf(32) > -1) { localStorage.setItem('currentMineTypeName', '非金属'); } } } } let currUserMineTypeArray = []; if (currUserMineType.indexOf('30') > -1) { currUserMineTypeArray.push({ key: '30', label: '露天矿' }); } if (currUserMineType.indexOf('10') > -1) { currUserMineTypeArray.push({ key: '10', label: '选矿厂' }); } if (currUserMineType.indexOf('20') > -1) { currUserMineTypeArray.push({ key: '20', label: '尾矿库' }); } if (currUserMineType.indexOf('40') > -1) { currUserMineTypeArray.push({ key: '40', label: '地下矿' }); } if (currUserMineType.indexOf('31') > -1) { currUserMineTypeArray.push({ key: '31', label: '职能口' }); } if (currUserMineType.indexOf('32') > -1) { currUserMineTypeArray.push({ key: '32', label: '非金属' }); } const MineTypeMenu = () => { return ( {currUserMineTypeArray.map((item) => ( {item.label} ))} ); }; /** * 生产单元切换 * @param {*} evt */ const handleMineTypeClick = (evt) => { localStorage.setItem('currentMineType', evt.key); localStorage.setItem('currentMineTypeName', evt.item.props.children); setVisible(false); window.location.reload(); }; if (window.navigator.userAgent.indexOf('Windows') < 1) { return
; } else { return ( 生产单元:{localStorage.getItem('currentMineTypeName')} ); } }; const HeaderMineType = withRouter(connect(({ login }) => ({ login }))(MineType)); const GuideCodePage = (props) => { const [showCanvas, setshowCanvas] = useState(false); const currVans = (val) => { setshowCanvas(true); }; /** * 生产单元切换 * @param {*} evt */ if (window.navigator.userAgent.indexOf('Windows') < 1) { return
; } else { return (
{ currVans(); }} style={{ margin: '0px 36px', display: 'flex', alignItems: 'center' }} >
{ setshowCanvas(false); }} onCancel={() => { setshowCanvas(false); }} footer={null} >
); } }; const GuideCode = withRouter(connect(({ login }) => ({ login }))(GuideCodePage)); const NavOpton = (props) => { const [showModal, setshowModal] = useState(false); const getChildCount = (val) => { setshowModal(val); }; if (window.navigator.userAgent.indexOf('Windows') < 1) { return
; } else { return (
{ setshowModal(true); }} > {/* */}
{ setshowModal(false); }} onCancel={() => { setshowModal(false); }} className="headerModal" >
); } }; const FullScreenOpton = (props) => { const [showModal, setshowModal] = useState(false); const getChildCount = (val) => { setshowModal(val); }; const [fullScreen, setFullScreen] = useState(false); const [originResizeFunc, setOriginResizeFunc] = useState(); const escFunction = () => { let isFull = !!( document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.webkitFullScreen || document.msFullScreen ); if (isFull) { // / } else { // requestFullScreenMethod(document.body); setshowModal(false); } }; useEffect(() => { // 监听退出全屏事件 --- chrome 用 esc 退出全屏并不会触发 keyup 事件 document.addEventListener('webkitfullscreenchange', escFunction); /* Chrome, Safari and Opera */ document.addEventListener('mozfullscreenchange', escFunction); /* Firefox */ document.addEventListener('fullscreenchange', escFunction); /* Standard syntax */ document.addEventListener('msfullscreenchange', escFunction); /* IE / Edge */ return () => { //销毁时清除监听 document.removeEventListener('webkitfullscreenchange', escFunction); document.removeEventListener('mozfullscreenchange', escFunction); document.removeEventListener('fullscreenchange', escFunction); document.removeEventListener('MSFullscreenChange', escFunction); }; }, []); if (window.navigator.userAgent.indexOf('Windows') < 1) { return
; } else { return (
{ setshowModal(true); requestFullScreenMethod(document.body); // 进入全屏 }} > {/* */}
{ setshowModal(false); }} onCancel={() => { setshowModal(false); }} className="fullScreen" >
); } }; const FullScreen = withRouter(connect(({ login }) => ({ login }))(FullScreenOpton)); const HeaderNav = withRouter(connect(({ login }) => ({ login }))(NavOpton)); function Header(props) { const { baseConfig = {} } = props.login; const thumbCode = baseConfig.Nav_PictureLogo ? baseConfig.Nav_PictureLogo.CODE : ''; let isMobile = false; if (window.navigator.userAgent.indexOf('Windows') < 1) { isMobile = true; } return (
{isMobile ? ( ) : ( 矿山安全生产信息化平台 {baseConfig.SYS_NAME}{' '} )}
{!props.matchLogin ? (
{/* */} {/* */} {/* {window.location.host == "121.41.2.71:8001" ? : ""} */} {/* style={{"color":"#f3eded"}} */} {props.login.user.NAME}({props.login.user.CODE})
) : null}
); } export default connect(({ login }) => ({ login }))(Header);