Commit f495636f authored by 陈龙's avatar 陈龙

feat: 变更设备报警的实现方式

parent 60c22585
import { request } from '@wisdom-utils/utils'; import {request} from '@wisdom-utils/utils';
import * as constants from '../../constants'; import * as constants from '../../constants';
const MonitorDevice = '/PandaMonitor/Monitor/Device'; const MonitorDevice = '/PandaMonitor/Monitor/Device';
const API = { const API = {
GET_ALARM_LIST_REAL_TIME: `${MonitorDevice}/GetAlarmListRealTime`, GET_ALARM_LIST_REAL_TIME: `${MonitorDevice}/GetAlarmListRealTime`,
GET_DEVICE_QUOTA_LIST: `${MonitorDevice}/GetQuotaList`, // GET_DEVICE_QUOTA_LIST: `${MonitorDevice}/GetQuotaList`, //
GET_EQUIPMENT_INFO: `${MonitorDevice}/GetEquipmentInfo`, // 获取设备树
}; };
const monitorServices = { const monitorServices = {
GetAlarmListRealTime: { GetAlarmListRealTime: {
url: API.GET_ALARM_LIST_REAL_TIME, // 获取 数据维护日志 url: API.GET_ALARM_LIST_REAL_TIME, // 获取 数据维护日志
method: constants.REQUEST_METHOD_POST, method: constants.REQUEST_METHOD_POST,
type: constants.REQUEST_HTTP, type: constants.REQUEST_HTTP,
}, },
GetDeviceQuotaList: { GetDeviceQuotaList: {
url: API.GET_DEVICE_QUOTA_LIST, url: API.GET_DEVICE_QUOTA_LIST,
method: constants.REQUEST_METHOD_GET, method: constants.REQUEST_METHOD_GET,
type: constants.REQUEST_HTTP, type: constants.REQUEST_HTTP,
}, },
getEquipmentInfo: {
url: API.GET_EQUIPMENT_INFO,
method: constants.REQUEST_METHOD_POST,
type: constants.REQUEST_HTTP,
},
}; };
export default monitorServices; export default monitorServices;
import React, { useState, useEffect, useRef } from 'react'; import React, {useState, useEffect, useRef} from 'react';
import styles from './index.less'; import styles from './index.less';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Tag, Tooltip, Modal } from 'antd'; import {Tag, Tooltip, Modal} from 'antd';
import { EnvironmentOutlined } from '@ant-design/icons'; import {EnvironmentOutlined} from '@ant-design/icons';
import { monitorService } from './api'; import {monitorService} from './api';
import moment from 'moment'; import moment from 'moment';
import classnames from 'classnames'; import classnames from 'classnames';
import { switchTimeToPeriod } from './utils'; import {switchTimeToPeriod} from './utils';
import NormChart from './NormChart/NormChart'; import NormChart from './NormChart/NormChart';
import { Swiper, SwiperSlide } from 'swiper/react'; import {Swiper, SwiperSlide} from 'swiper/react';
import 'swiper/swiper.min.css'; import 'swiper/swiper.min.css';
import 'swiper/components/pagination/pagination.min.css'; import 'swiper/components/pagination/pagination.min.css';
import 'swiper/components/navigation/navigation.min.css'; import 'swiper/components/navigation/navigation.min.css';
import SwiperCore, { Autoplay, Pagination, Navigation } from 'swiper/core'; import SwiperCore, {Autoplay, Pagination, Navigation} from 'swiper/core';
SwiperCore.use([Autoplay, Pagination, Navigation]); SwiperCore.use([Autoplay, Pagination, Navigation]);
/* /*
...@@ -21,132 +21,141 @@ SwiperCore.use([Autoplay, Pagination, Navigation]); ...@@ -21,132 +21,141 @@ SwiperCore.use([Autoplay, Pagination, Navigation]);
* 3. 初始化进入时,取截止到当前时间为止的所有的实时报警数据。 * 3. 初始化进入时,取截止到当前时间为止的所有的实时报警数据。
* 4. 播放结束后,重新获取实时报警数据进行第二轮的播放。 * 4. 播放结束后,重新获取实时报警数据进行第二轮的播放。
* */ * */
const InfoItem = ({ info }) => { const InfoItem = ({info}) => {
const returnClassName = (type, key) => { const returnClassName = (type, key) => {
let _className = ''; let _className = '';
if (type === '普通') { if (type === '普通') {
_className = 'normal'; _className = 'normal';
} else if (type === '紧急') { } else if (type === '紧急') {
_className = 'warning'; _className = 'warning';
} }
return `${_className}${key}`; return `${_className}${key}`;
}; };
const { alertLevel, startTime, stationName, alertMsg, deviceAddress } = info; const {alertLevel, startTime, stationName, alertMsg, deviceAddress} = info;
return ( return (
<div className={styles[returnClassName(alertLevel, 'Wrapper')]}> <div className={styles[returnClassName(alertLevel, 'Wrapper')]}>
<Tag className={styles[returnClassName(alertLevel, 'Tag')]}>{alertLevel}</Tag> <Tag className={styles[returnClassName(alertLevel, 'Tag')]}>{alertLevel}</Tag>
<span className={classnames(styles.time, styles.fontSize13)}>{startTime}</span> <span className={classnames(styles.time, styles.fontSize13)}>{startTime}</span>
<Tooltip title={deviceAddress} placement={'topLeft'}> <Tooltip title={deviceAddress} placement={'topLeft'}>
<span className={styles.location}> <span className={styles.location}>
<EnvironmentOutlined <EnvironmentOutlined
style={{ fontSize: 12, color: '#666666', marginRight: 5, verticalAlign: 'middle' }} style={{fontSize: 12, color: '#666666', marginRight: 5, verticalAlign: 'middle'}}
/> />
{deviceAddress} {deviceAddress}
</span> </span>
</Tooltip> </Tooltip>
<Tooltip title={alertMsg} placement={'topLeft'}> <Tooltip title={alertMsg} placement={'topLeft'}>
<span className={styles[returnClassName(alertLevel, 'Content')]}>{alertMsg}</span> <span className={styles[returnClassName(alertLevel, 'Content')]}>{alertMsg}</span>
</Tooltip> </Tooltip>
<div className={styles.periodWrapper}> <div className={styles.periodWrapper}>
<span className={styles.period}>{switchTimeToPeriod(startTime)}</span> <span className={styles.period}>{switchTimeToPeriod(startTime)}</span>
</div> </div>
</div> </div>
); );
}; };
const AlarmScrollAssembly = (props) => { const AlarmScrollAssembly = (props) => {
const [modalVisible, setModalVisible] = useState(false); const [modalVisible, setModalVisible] = useState(false);
const [currentInfo, setCurrentInfo] = useState({}); const [currentInfo, setCurrentInfo] = useState({});
const constanceRef = useRef({ const constanceRef = useRef({
level: '1,2', level: '1,2',
type: '直接取值,取变化量,取变化率,取是否', type: '直接取值,取变化量,取变化率,取是否',
userID: window.globalConfig.userInfo.OID, userID: window.globalConfig.userInfo.OID,
userAccess: true, userAccess: true,
});
const [realTimeDataList, setRealTimeDataList] = useState(null);
const getRealTimeData = (pagination) => {
return monitorService.GetAlarmListRealTime({
deviceType: props.deviceType,
...constanceRef.current,
pageIndex: pagination.pageIndex,
pageSize: pagination.pageSize,
dateFrom: moment().subtract(1, 'days').format('YYYY-MM-DD 00:00:00'),
dateTo: moment().format('YYYY-MM-DD 23:59:59'),
}); });
}; const [realTimeDataList, setRealTimeDataList] = useState(null);
const getData = async () => { const getDeviceNumber = () => {
let firstRequest = await getRealTimeData({ pageSize: 1, pageIndex: 1 }); return monitorService.getEquipmentInfo({
let secondRequest = await getRealTimeData({ deviceTypes: props.deviceType,
pageIndex: 1, pageIndex: 1,
pageSize: firstRequest.data.totalCount, pageSize: 1,
}); ...constanceRef.current,
setRealTimeDataList(secondRequest.data.list); })
}; };
useEffect(() => { const getRealTimeData = (pagination) => {
getData(); return monitorService.GetAlarmListRealTime({
}, []); deviceType: props.deviceType,
return ( ...constanceRef.current,
<div className={styles.alarScrollAssembly} id={'alarmListDiv'}> pageIndex: pagination.pageIndex,
{/*{realTimeDataList && realTimeDataList.length ? <Swiper*/} pageSize: pagination.pageSize,
{realTimeDataList && realTimeDataList.length ? ( userAccess: props.userAccess === void 0 ? true : props.userAccess,
<Swiper /* dateFrom: moment().subtract(1, 'days').format('YYYY-MM-DD 00:00:00'),
// spaceBetween={50} dateTo: moment().format('YYYY-MM-DD 23:59:59'),*/
slidesPerView={1} });
modules={[Pagination]} };
pagination={{ const getData = async () => {
type: 'fraction', let firstRequest = await getDeviceNumber();
formatFractionCurrent: (num) => `第${num}条`, let secondRequest = await getRealTimeData({
formatFractionTotal: (num) => `共${num}条`, pageIndex: 1,
}} pageSize: firstRequest.data.totalCount,
navigation });
autoplay={{ setRealTimeDataList(secondRequest.data.list);
delay: 3000, };
disableOnInteraction: false, useEffect(() => {
}} getData();
loop }, []);
direction="vertical" return (
onSlideChange={(e) => { <div className={styles.alarScrollAssembly} id={'alarmListDiv'}>
if (e.activeIndex === realTimeDataList.length - 1) getData(); {/*{realTimeDataList && realTimeDataList.length ? <Swiper*/}
}} {realTimeDataList && realTimeDataList.length ? (
> <Swiper
{realTimeDataList.map((item, index) => { // spaceBetween={50}
return ( slidesPerView={1}
<SwiperSlide modules={[Pagination]}
key={index} pagination={{
virtualIndex={index} type: 'fraction',
onClick={() => { formatFractionCurrent: (num) => `第${num}条`,
setCurrentInfo(item); formatFractionTotal: (num) => `共${num}条`,
setModalVisible(true); }}
}} navigation
> autoplay={{
<InfoItem key={index} info={item} /> delay: 3000,
</SwiperSlide> disableOnInteraction: false,
); }}
})} loop
</Swiper> direction="vertical"
) : ( onSlideChange={(e) => {
'' if (e.activeIndex === realTimeDataList.length - 1) getData();
)} }}
{modalVisible && ( >
<Modal {realTimeDataList.map((item, index) => {
visible={modalVisible} return (
onCancel={() => setModalVisible(false)} <SwiperSlide
width={'80%'} key={index}
destroyOnClose virtualIndex={index}
> onClick={() => {
<NormChart setCurrentInfo(item);
info={currentInfo} setModalVisible(true);
deviceType={currentInfo.deviceType} }}
deviceCode={currentInfo.stationCode} >
/> <InfoItem key={index} info={item}/>
</Modal> </SwiperSlide>
)} );
</div> })}
); </Swiper>
) : (
''
)}
{modalVisible && (
<Modal
visible={modalVisible}
onCancel={() => setModalVisible(false)}
width={'80%'}
destroyOnClose
>
<NormChart
info={currentInfo}
deviceType={currentInfo.deviceType}
deviceCode={currentInfo.stationCode}
/>
</Modal>
)}
</div>
);
}; };
AlarmScrollAssembly.defaultProps = { AlarmScrollAssembly.defaultProps = {
deviceType: '二供泵房,二供机组', deviceType: '二供泵房,二供机组',
}; };
AlarmScrollAssembly.propTypes = { AlarmScrollAssembly.propTypes = {
deviceType: PropTypes.string, deviceType: PropTypes.string,
}; };
export default AlarmScrollAssembly; export default AlarmScrollAssembly;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment