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;