import ModuleTitle from '@/components/ManagementPage/moduleTitle'; import TabsContent from '@/components/TabsContent'; import ThresholdDetail from '@/components/ThresholdDetail'; import { UnityAction } from '@/utils/utils'; import { Collapse, Empty, Spin, Table, Tabs } from 'antd'; import { useEffect, useMemo, useState } from 'react'; import styles from './VideoAnalysis.less'; const { TabPane } = Tabs; const { Panel } = Collapse; const TYPE = { video: 1, fill: 2, water: 3, }; function VideoAnalysis(props) { const { videoNum, data, videoData = {}, loading } = props; const [tab, setTab] = useState('1'); const allCount = Object.values(videoData).reduce( (total, item) => total + (item?.length || 0), 0, ); const [prevKey, setPrevKey] = useState(); const [selectedName, setSelectedName] = useState(''); const errorData = useMemo(() => { const list1 = videoData.dumu_list?.map((item) => { return { ...item, type_name: '视频报警', type: TYPE.video }; }) || []; const list2 = videoData.environment_list ?.filter((item) => item.status) .map((item) => { return { ...item, type_name: '环境检测', type: TYPE.fill }; }) || []; // const list3 = // videoData.fluid_level_list // ?.filter((item) => item.status) // .map((item) => { // return { ...item, type_name: '液位监测', type: TYPE.water }; // }) || []; return [...list1, ...list2]; }, [videoData]); useEffect(() => { UnityAction.on('SynCam', selectedItem); UnityAction.on('SynDev', selectedItem); return () => { UnityAction.off('SynDev', selectedItem); UnityAction.off('SynCam', selectedItem); }; }, [videoData]); //滚动到相应位置 const selectedItem = (e) => { setSelectedName(e); const dom = document.querySelector(`div[data-name="${e}"]`); if (dom) { let v = document.getElementById('videoContent'); v.scrollTop = dom.offsetTop; } }; const onTabChange = (tab) => { setTab(tab); setSelectedName(''); UnityAction.sendMsg('SensorAnalysisType', tab); }; return (
), }, { label: `全部(${allCount})`, key: '2', children: ( ), }, ]} onChange={onTabChange} />
); } function AnalysisContent({ errorData, selectedName, setSelectedName }) { const [prevKey, setPrevKey] = useState(); const handleImgClick = (item) => { localStorage.setItem('preview', item.path); UnityAction.sendMsg('SensorPic'); }; const handleCollapse = (item) => { const key = item.type == TYPE.video ? item.device_name : item.device_code; const name = item.type == TYPE.video ? 'SynCam' : 'SynDev'; // 清除unity发送过来的选中设备 setSelectedName(''); if (item.key === prevKey) return; setPrevKey(item.key); UnityAction.sendMsg(name, key); }; const renderContent = (key, item) => { let content = ''; switch (key) { case 1: content = ( <>
画面报警:
{item.event_type} handleImgClick(item)} />
); break; case 2: content = ( <>
参数:{item.patrol_name}
阈值范围:
状态: {item?.status <= 0 ? ( 正常 ) : item.status == 1 ? ( 异常 ) : ( 警告 )}
); break; case 3: content = ( <>
原液位:{item.origin_value}
差值:{item.value}
阈值范围:
状态: {item?.status <= 0 ? ( 正常 ) : item.status == 1 ? ( 异常 ) : ( 警告 )}
); break; } return content; }; const getClassName = (item) => { const device = item.type == TYPE.video ? item.device_name : item.device_code; if (selectedName && selectedName == device) { return styles.tableSelect; } else if (prevKey == item.key) { return styles.tableSelect; } return styles.table; }; return (
{errorData?.length > 0 ? ( errorData.map((item) => (
handleCollapse(item)} > (
{item.type_name}
)} >
{renderContent(item.type, item)}
)) ) : ( )}
); } function AllContent({ videoData = {}, selectedName, setSelectedName }) { const { environment_list = [], // fluid_level_list = [], dumu_list = [], } = videoData; // const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [selectKey, setSelectKey] = useState([]); const columns1 = [ { title: '设备名称', render: (record) => (
{record.device_name}({record.device_code})
), }, { title: '参数', dataIndex: 'patrol_name', key: 'patrol_name', }, { title: '设定值范围', render: (record) => ( ), }, { title: '状态', dataIndex: 'status', render: (status) => { switch (status) { case -1: case 0: return (
正常
); case 1: return (
异常
); case 2: return (
警告
); } }, }, ]; const columns2 = [ { title: '设备名称', render: (record) => (
{record.device_name}({record.device_code})
), }, { title: '液位数', dataIndex: 'origin_value', key: 'origin_value', }, { title: '差值', dataIndex: 'value', key: 'value', }, { title: '设定值范围', render: (record) => ( onClickThreshold(record)} /> ), }, { title: '状态', dataIndex: 'status', render: (status) => { switch (status) { case -1: case 0: return (
正常
); case 1: return (
异常
); case 2: return (
警告
); } }, }, ]; const columns3 = [ { title: '名称', render: (record) => (
{record.device_name}({record.device_code})
), }, { title: '描述', dataIndex: 'event_type', key: 'event_type', }, { title: '图片', render: (item) => ( handleImgClick(item)} /> ), }, ]; const onSelectRow = (item, type) => { const key = type == TYPE.video ? item.device_name : item.device_code; const name = type == TYPE.video ? 'SynCam' : 'SynDev'; setSelectedName(''); if (selectKey === item.key) return; setSelectKey(item.key); UnityAction.sendMsg(name, key); }; const handleImgClick = (item) => { localStorage.setItem('preview', item.path); UnityAction.sendMsg('SensorPic'); }; const setRowClassName = (item) => { const device = item.type == TYPE.video ? item.device_name : item.device_code; if (selectedName && selectedName == device) { return styles.tableSelect; } else if (selectKey == item.key) { return styles.tableSelect; } return ''; }; return (
({ onClick: () => onSelectRow(record, TYPE.fill), })} pagination={false} scroll={{ y: 400 }} /> {/*
({ onClick: () => onSelectRow(record, TYPE.water), })} pagination={false} scroll={{ y: 400 }} /> */}
({ onClick: () => onSelectRow(record, TYPE.video), })} rowKey="id" pagination={false} scroll={{ y: 400 }} /> ); } export default VideoAnalysis;