This commit is contained in:
yunkexin 2025-11-18 17:08:35 +08:00
parent 16c251d177
commit 33de5ca8f6
2 changed files with 159 additions and 218 deletions

View File

@ -1,70 +1,62 @@
// 核心库
import React, { Component } from "react";
import { connect } from "dva";
import { withRouter } from "dva/router";
import QRCode from "qrcode";
import config from "../../config";
import React, { Component } from 'react';
import { connect } from 'dva';
import { withRouter } from 'dva/router';
import QRCode from 'qrcode';
import config from '../../config';
class GuideCanvas extends Component {
constructor(props) {
super(props);
this.state = {
visible: "none",
company: "XLK",
visible: 'none',
company: 'XLK',
};
}
componentDidMount() {
QRCode.toCanvas(
config.guideSeverHost,
{ errorCorrectionLevel: "L", width: 140 },
function (err, canvas) {
QRCode.toCanvas(config.guideSeverHost, { errorCorrectionLevel: 'L', width: 140 }, function (err, canvas) {
if (err) throw err;
let container = document.getElementById("canvas1");
let container = document.getElementById('canvas1');
if (container) {
try {
container.appendChild(canvas);
} catch (e) { }
} catch (e) {}
}
}
);
QRCode.toCanvas(
config.guideH5Host,
{ errorCorrectionLevel: "L", width: 140 },
function (err, canvas) {
});
QRCode.toCanvas(config.guideH5Host, { errorCorrectionLevel: 'L', width: 140 }, function (err, canvas) {
if (err) throw err;
let container1 = document.getElementById("canvas2");
let container1 = document.getElementById('canvas2');
if (container1) {
try {
container1.appendChild(canvas);
} catch (e) { }
} catch (e) {}
}
}
);
});
QRCode.toCanvas(
config.h5Web + "#/pages/index/index?OrgId=" + this.props.login.OrgId,
{ errorCorrectionLevel: "L", width: 140 },
config.h5Web + '#/pages/index/index?OrgId=' + this.props.login.OrgId,
{ errorCorrectionLevel: 'L', width: 140 },
function (err, canvas) {
if (err) throw err;
let container1 = document.getElementById("canvas3");
let container1 = document.getElementById('canvas3');
if (container1) {
try {
container1.appendChild(canvas);
} catch (e) { }
} catch (e) {}
}
}
);
// 二维码平台
QRCode.toCanvas(
config.h5Web+'?OrgId='+this.props.login.OrgId ,
{ errorCorrectionLevel: "L", width: 140 },
config.h5Web + '?OrgId=' + this.props.login.OrgId,
{ errorCorrectionLevel: 'L', width: 140 },
function (err, canvas) {
if (err) throw err;
let container = document.getElementById("canvas5");
let container = document.getElementById('canvas5');
if (container) {
try {
container.appendChild(canvas);
} catch (e) { }
} catch (e) {}
}
}
);
@ -73,8 +65,8 @@ class GuideCanvas extends Component {
render() {
return (
<React.Fragment>
<div style={{ display: "flex", flexDirection: "row", margin: "20px" }}>
<div
<div style={{ display: 'flex', flexDirection: 'row', margin: '20px' }}>
{/* <div
style={{
display: "none",
flexDirection: "column",
@ -84,12 +76,12 @@ class GuideCanvas extends Component {
>
<div id="canvas1" ></div>
<b>APP下载</b>
</div>
</div> */}
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
}}
>
<div id="canvas2"></div>
@ -98,16 +90,16 @@ class GuideCanvas extends Component {
<div
style={{
display: 'flex',
flexDirection: "column",
alignItems: "center",
marginLeft: "30px",
flexDirection: 'column',
alignItems: 'center',
marginLeft: '30px',
}}
>
<div id="canvas3"></div>
<b>新员工注册</b>
</div>
<div
{/* <div
style={{
display: 'none',
flexDirection: "column",
@ -117,7 +109,7 @@ class GuideCanvas extends Component {
>
<div id="canvas5"></div>
<b>二维码平台</b>
</div>
</div> */}
</div>
</React.Fragment>
);

View File

@ -1,23 +1,18 @@
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";
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) => {
@ -25,10 +20,8 @@ const DataV = (props) => {
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");
const url = `${preUrl.indexOf('?') !== -1 ? preUrl : preUrl + '?'}${queryStr}`;
window.open(url, '_blank');
};
return (
<span title="投屏" onClick={navTo} className="header__right-datav">
@ -72,7 +65,7 @@ const Search = (props) => {
* @param {*} e
*/
const handleSearchMenu = (e) => {
if (!e || e === "") {
if (!e || e === '') {
setAutoCompleteData([]);
return;
}
@ -94,11 +87,9 @@ const Search = (props) => {
* @param {*} e
*/
const handleSelectMenu = (e) => {
const menu = leafMenus.menuDatas.find(
(item) => item.Menu.Nav_MenuForm.ID === e
);
const menu = leafMenus.menuDatas.find((item) => item.Menu.Nav_MenuForm.ID === e);
props.dispatch({
type: "app/updateActivatedMenu",
type: 'app/updateActivatedMenu',
payload: {
currActivatedTab: menu.Node.ID,
currActivatedMenu: menu.Node,
@ -107,16 +98,10 @@ const Search = (props) => {
props.history.push({ pathname: `/main/${menu.Node.ID}` });
};
if (window.navigator.userAgent.indexOf("Windows") < 1) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
return <span></span>;
} else {
return (
<OPTSearch
dataSource={autoCompleteData}
onChange={handleSearchMenu}
onSelect={handleSelectMenu}
/>
);
return <OPTSearch dataSource={autoCompleteData} onChange={handleSearchMenu} onSelect={handleSelectMenu} />;
}
//return (
//
@ -138,23 +123,23 @@ const User = (props) => {
*/
const handleLogout = () => {
const { OrgId, userId } = props.login;
const logJson = initFilter(OrgId, userId, "", 0, 1, 0);
const logJson = initFilter(OrgId, userId, '', 0, 1, 0);
props.dispatch({
type: "app/addLoginOut",
type: 'app/addLoginOut',
payload: logJson,
});
localStorage.removeItem("accessToken");
localStorage.removeItem("currentMineTypeName");
props.history.push({ pathname: "/login" });
localStorage.removeItem('accessToken');
localStorage.removeItem('currentMineTypeName');
props.history.push({ pathname: '/login' });
};
/**
* 锁屏
*/
const handleLockScreen = () => {
localStorage.removeItem("accessToken");
localStorage.removeItem('accessToken');
props.dispatch({
type: "login/save",
type: 'login/save',
payload: {
screenLocked: true,
},
@ -167,15 +152,15 @@ const User = (props) => {
*/
const handleUserMenuClick = (evt) => {
switch (evt.key) {
case "user-menu-logout":
case 'user-menu-logout':
handleLogout();
break;
case "user-menu-lockscreen":
case 'user-menu-lockscreen':
handleLockScreen();
break;
case "user-menu-cacheclean":
case 'user-menu-cacheclean':
window.localStorage.clear();
message.success("清除成功,即将重新加载页面", 2, () => {
message.success('清除成功,即将重新加载页面', 2, () => {
setTimeout(() => window.location.reload(true), 500);
});
break;
@ -192,9 +177,7 @@ const User = (props) => {
onVisibleChange={setVisible}
overlay={
<Menu onClick={handleUserMenuClick}>
<Menu.Item key="user-menu-userinfo">
当前登录{loginInfo.User?.NAME}
</Menu.Item>
<Menu.Item key="user-menu-userinfo">当前登录{loginInfo.User?.NAME}</Menu.Item>
<Menu.Item key="user-menu-UserInfoShow">
<FoUserInfoShow>我的资料</FoUserInfoShow>
</Menu.Item>
@ -219,87 +202,83 @@ const HeaderUser = withRouter(connect(({ login }) => ({ login }))(User));
// 2023-10-08 生产单元
const MineType = (props) => {
const [visible, setVisible] = useState(false);
let currUserMineType = localStorage.getItem("MineType");
let currUserMineType = localStorage.getItem('MineType');
if (currUserMineType == null || currUserMineType == undefined) {
localStorage.setItem("MineType", "30");
localStorage.setItem("currentMineTypeName", "露天矿");
localStorage.setItem('MineType', '30');
localStorage.setItem('currentMineTypeName', '露天矿');
} else {
if (localStorage.getItem("currentMineTypeName") == null) {
if (localStorage.getItem('currentMineTypeName') == null) {
if (currUserMineType.indexOf(30) > -1) {
localStorage.setItem("currentMineType", 30);
localStorage.setItem("currentMineTypeName", "露天矿");
localStorage.setItem('currentMineType', 30);
localStorage.setItem('currentMineTypeName', '露天矿');
} else if (currUserMineType.indexOf(20) > -1) {
localStorage.setItem("currentMineType", 20);
localStorage.setItem("currentMineTypeName", "尾矿库");
localStorage.setItem('currentMineType', 20);
localStorage.setItem('currentMineTypeName', '尾矿库');
} else if (currUserMineType.indexOf(10) > -1) {
localStorage.setItem("currentMineType", 10);
localStorage.setItem("currentMineTypeName", "选矿厂");
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", "非金属");
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");
let currentMineType = localStorage.getItem('currentMineType');
if (currUserMineType.indexOf(currentMineType) > -1) {
if (currentMineType == 30) {
localStorage.setItem("currentMineTypeName", "露天矿");
localStorage.setItem('currentMineTypeName', '露天矿');
} else if (currUserMineType == 20) {
localStorage.setItem("currentMineTypeName", "尾矿库");
localStorage.setItem('currentMineTypeName', '尾矿库');
} else if (currUserMineType == 10) {
localStorage.setItem("currentMineTypeName", "选矿厂");
localStorage.setItem('currentMineTypeName', '选矿厂');
} else if (currUserMineType == 40) {
localStorage.setItem("currentMineTypeName", "地下矿");
}else if (currUserMineType == 31) {
localStorage.setItem("currentMineTypeName", "职能口");
}else if (currUserMineType == 32) {
localStorage.setItem("currentMineTypeName", "非金属");
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", "露天矿");
localStorage.setItem('currentMineTypeName', '露天矿');
} else if (currUserMineType.indexOf(20) > -1) {
localStorage.setItem("currentMineTypeName", "尾矿库");
localStorage.setItem('currentMineTypeName', '尾矿库');
} else if (currUserMineType.indexOf(10) > -1) {
localStorage.setItem("currentMineTypeName", "选矿厂");
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", "非金属");
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('30') > -1) {
currUserMineTypeArray.push({ key: '30', label: '露天矿' });
}
if (currUserMineType.indexOf("10") > -1) {
currUserMineTypeArray.push({ key: "10", label: "选矿厂" });
if (currUserMineType.indexOf('10') > -1) {
currUserMineTypeArray.push({ key: '10', label: '选矿厂' });
}
if (currUserMineType.indexOf("20") > -1) {
currUserMineTypeArray.push({ key: "20", label: "尾矿库" });
if (currUserMineType.indexOf('20') > -1) {
currUserMineTypeArray.push({ key: '20', label: '尾矿库' });
}
if (currUserMineType.indexOf("40") > -1) {
currUserMineTypeArray.push({ key: "40", label: "地下矿" });
if (currUserMineType.indexOf('40') > -1) {
currUserMineTypeArray.push({ key: '40', label: '地下矿' });
}
if (currUserMineType.indexOf("31") > -1) {
currUserMineTypeArray.push({ key: "31", label: "职能口" });
if (currUserMineType.indexOf('31') > -1) {
currUserMineTypeArray.push({ key: '31', label: '职能口' });
}
if (currUserMineType.indexOf("32") > -1) {
currUserMineTypeArray.push({ key: "32", label: "非金属" });
if (currUserMineType.indexOf('32') > -1) {
currUserMineTypeArray.push({ key: '32', label: '非金属' });
}
const MineTypeMenu = () => {
return (
@ -315,30 +294,24 @@ const MineType = (props) => {
* @param {*} evt
*/
const handleMineTypeClick = (evt) => {
localStorage.setItem("currentMineType", evt.key);
localStorage.setItem("currentMineTypeName", evt.item.props.children);
localStorage.setItem('currentMineType', evt.key);
localStorage.setItem('currentMineTypeName', evt.item.props.children);
setVisible(false);
window.location.reload();
};
if (window.navigator.userAgent.indexOf("Windows") < 1) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
return <div></div>;
} else {
return (
<Dropdown
visible={visible}
onVisibleChange={setVisible}
overlay={MineTypeMenu}
>
<a style={{ color: "#000000A6", marginLeft: "20px" }}>
<b>生产单元{localStorage.getItem("currentMineTypeName")}</b>
<Dropdown visible={visible} onVisibleChange={setVisible} overlay={MineTypeMenu}>
<a style={{ color: '#000000A6', marginLeft: '20px' }}>
<b>生产单元{localStorage.getItem('currentMineTypeName')}</b>
</a>
</Dropdown>
);
}
};
const HeaderMineType = withRouter(
connect(({ login }) => ({ login }))(MineType)
);
const HeaderMineType = withRouter(connect(({ login }) => ({ login }))(MineType));
const GuideCodePage = (props) => {
const [showCanvas, setshowCanvas] = useState(false);
const currVans = (val) => {
@ -349,7 +322,7 @@ const GuideCodePage = (props) => {
* @param {*} evt
*/
if (window.navigator.userAgent.indexOf("Windows") < 1) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
return <div></div>;
} else {
return (
@ -358,14 +331,14 @@ const GuideCodePage = (props) => {
onClick={() => {
currVans();
}}
style={{ margin: "0px 36px", display: "flex", alignItems: "center" }}
style={{ margin: '0px 36px', display: 'flex', alignItems: 'center' }}
>
<Icon type="qrcode" className="header__right-icon" />
</div>
<Modal
title=""
visible={showCanvas}
width="750px"
width="450px"
centered={true}
onOk={() => {
setshowCanvas(false);
@ -381,15 +354,13 @@ const GuideCodePage = (props) => {
);
}
};
const GuideCode = withRouter(
connect(({ login }) => ({ login }))(GuideCodePage)
);
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) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
return <div></div>;
} else {
return (
@ -401,10 +372,7 @@ const NavOpton = (props) => {
}}
>
{/* <Icon type='bars' className='header__right-icon'></Icon> */}
<IconFont
type="icon-line-108"
style={{ fontSize: "22px", color: "#333333", cursor: "pointer" }}
></IconFont>
<IconFont type="icon-line-108" style={{ fontSize: '22px', color: '#333333', cursor: 'pointer' }}></IconFont>
</div>
<Modal
title="功能导航"
@ -442,36 +410,27 @@ const FullScreenOpton = (props) => {
);
if (isFull) {
// /
}else{
} 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 */
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);
document.removeEventListener('webkitfullscreenchange', escFunction);
document.removeEventListener('mozfullscreenchange', escFunction);
document.removeEventListener('fullscreenchange', escFunction);
document.removeEventListener('MSFullscreenChange', escFunction);
};
}, []);
if (window.navigator.userAgent.indexOf("Windows") < 1) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
return <div></div>;
} else {
return (
@ -483,7 +442,7 @@ const FullScreenOpton = (props) => {
requestFullScreenMethod(document.body); // 进入全屏
}}
>
<Icon type='alert' className='header__right-icon'></Icon>
<Icon type="alert" className="header__right-icon"></Icon>
{/* <IconFont
type="icon-line-108"
style={{ fontSize: "22px", color: "#333333", cursor: "pointer" }}
@ -509,45 +468,35 @@ const FullScreenOpton = (props) => {
}
};
const FullScreen = withRouter(
connect(({ login }) => ({ login }))(FullScreenOpton)
);
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
: "";
const thumbCode = baseConfig.Nav_PictureLogo ? baseConfig.Nav_PictureLogo.CODE : '';
let isMobile = false;
if (window.navigator.userAgent.indexOf("Windows") < 1) {
if (window.navigator.userAgent.indexOf('Windows') < 1) {
isMobile = true;
}
return (
<div className={`header ${props.matchLogin ? "login" : ""}`}>
<div className={`header ${props.matchLogin ? 'login' : ''}`}>
<div className="header__left">
<PictureThumb
thumbCodes={thumbCode ? [thumbCode] : []}
thumbConfigs={[{ target: thumbCode }]}
defaultThumb={require("../assets/layout/headerno-logo-new.png")}
defaultThumb={require('../assets/layout/headerno-logo-new.png')}
className="header__left-logo"
/>
{isMobile ? (
<span className="header__left-slogan-mobile"> </span>
) : (
<span
className={`${
props.matchLogin
? "header__left-sloganLogin"
: "header__left-slogan"
}`}
>
<span className={`${props.matchLogin ? 'header__left-sloganLogin' : 'header__left-slogan'}`}>
矿山安全生产信息化平台
<span style={{ color: "#c99d03" }}></span>
{baseConfig.SYS_NAME}{" "}
<span style={{ color: '#c99d03' }}></span>
{baseConfig.SYS_NAME}{' '}
</span>
)}
</div>