import { Layout, Dropdown, Menu, Modal, Input, Form, Space, Button } from 'antd'; import { withRouter } from 'react-router' import { useState, useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import MyMessage from "../MyMessage"; import { panesNow } from '@reducers/tabPanes.js'; import { getTimeDetail,getCookie,setCookie } from '@utils/index'; import logo from '@images/logo.png'; import msg from '@images/msg.png'; import me from '@images/me.png'; import down from '@images/down.png'; import './index.less' import { message } from "antd/lib/index"; import { add, active } from '@reducers/tabPanes' import { setSys, setUser} from '@reducers/userInfo.js'; import apiObj from '@api/index'; const { post, api, xPost } = apiObj; const propTypes = { } const defaultProps = {}; const { Header } = Layout; function AHeader({ history, hideName }) { const dispatch = useDispatch();//当前选中的菜单 const { panes } = useSelector(state => { return state.tabPanes; }); const [form] = Form.useForm(); const [dateTime, setDateTime] = useState(''); const [visible, setVisible] = useState(false); //const [socket,setSocket] = useState(null); const [unReadNum,setUnReadNum] = useState(0); const { user, sysName } = useSelector((state) => { return state.userInfo; }); //退出 function loginOut() { localStorage.removeItem("token"); setCookie(); /*localStorage.removeItem("systemId"); localStorage.removeItem("hospitalId");*/ dispatch(panesNow([])); history.push('/login'); } //获取未读消息数量 function getNotNoticeCount(){ xPost(api.getNotNoticeCount).then((res) => { if (res.data.code === 200) { const data = res.data.data||{}; let count = data.count; count = count>99?'99+':count; setUnReadNum(count) initWebsocket(count); //dispatch(setUnReadNum(count)); } else { //message.warning(res.data.msg || '请求失败'); } }) } //未读消息页面显示并带入未读筛选条件 function showMyMsgPage(){ const item = panes.find((it) => it.key === 'ZNTZ-WDTZ'); if (item) { //已存在当前tab,则定位即可不增加 dispatch(active({idName:'ZNTZ-WDTZ',isUnRead:true})); return; } dispatch( add({ title: '我的通知', content: , key: 'ZNTZ-WDTZ&我的通知',isUnRead:true}) ) } async function initWebsocket(num){ const mqtt = require('mqtt'); const client = mqtt.connect('ws://192.168.2.237:15675/ws'); //const userInfo = await getUserHos(); //const userdata = userInfo.data.data; //handleUserInfo(userdata); const hisId = getCookie("hospitalId"); //setSocket(client) client.on('connect', function () { client.subscribe(hisId+"-"+user.id, function (err) { if (!err) { console.log(hisId+"-"+user.id+"订阅成功") } }) }) client.on('message', function (topic, message) { let n = num>unReadNum?num:unReadNum; setUnReadNum(+n+1) console.log('收到消息+1:',message.toString()) }) } function handleUserInfo(data){ const { userInfo, software } = data; const sysId = getCookie("systemId"); const hisId = getCookie("hospitalId"); const sys = software.find((it) => { return +it.id === +sysId }); dispatch(setUser(userInfo)); sys && dispatch(setSys({ sysId, sysName: sys.name, hisId })); } //获取组织列表 function getUserHos() { return new Promise((resolve)=>{ xPost(api.getUserHospitals).then((res)=>{ resolve(res); }); }); } //修改密码 function changePsd() { setVisible(true) } //时间 let interVal; function countTime() { interVal = setInterval(() => { setDateTime(getTimeDetail()) }, 1000); } function cancel() { setVisible(false) form.resetFields(); } const onFinish = values => { const params = values post(api.midifyPassword, params).then((res) => { if (res.data.code === 200) { message.success('修改成功'); } }) } useEffect(() => { countTime(); getNotNoticeCount(); //initWebsocket(); /*if (!user.name) { //刷新操作时重新获取数据 //getOrgList(); }*/ return function clearUp() { clearInterval(interVal) } }, []); const menu = ( 修改密码 退出 ); return (
{hideName ? '' : <>| {sysName}}
{dateTime} |
未读消息 {unReadNum?{unReadNum}:''}
e.preventDefault()}> 用户头像 {user.name}
{visible ?
({ validator(_, value) { const passwordReg = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[#@*&.]).*$/; if (!value || getFieldValue('password') === value) { return Promise.reject(new Error('新密码不能于原密码相同')); } if (!passwordReg.test(value)) { return Promise.reject(new Error('密码必须同时包含大写字母、小写字母和数字')); } if (value.length < 8 || value.length > 12) { return Promise.reject(new Error('密码长度8-12位')); } }, }), ]} > ({ validator(_, value) { if (!value || getFieldValue('modifyPassword') === value) { return Promise.resolve(); } return Promise.reject(new Error('两次密码不一致,请确认密码')); }, }), ]} >
: ''}
) } AHeader.propTypes = propTypes; AHeader.defaultProps = defaultProps; export default withRouter(AHeader);