import ThresholdDetail from '@/components/ThresholdDetail'; import ThresholdModal from '@/components/ThresholdDetail/ThresholdModal'; import { changeRecordStatus, getDumuDetail } from '@/services/eqSelfInspection'; import { UnityAction } from '@/utils/utils'; import { connect, useRequest } from '@umijs/max'; import { Card, Col, DatePicker, Form, Input, Modal, Row, Select, Spin, Table, Tabs, message, } from 'antd'; import dayjs from 'dayjs'; import { useEffect, useMemo, useState } from 'react'; import ReactZmage from 'react-zmage'; import styles from './PatrolReportDetail.less'; function Detail(props) { const { data, userList, projectId, dispatch, loading = false } = props; const [select, setSelect] = useState(); const [dumuList, setDumuList] = useState([]); const sendMessageToUnity = (select, data) => { setSelect(select); // console.log(data); if (window.HightlightEquipment) { window.HightlightEquipment(data); } }; const getTextColor = (status) => { switch (status) { case '警告': return '#FFE26D'; case '异常': return '#FF8600'; case '正常': return '#60FE76'; default: return '#60FE76'; } }; const { run: detailRun } = useRequest(getDumuDetail, { manual: true, fetchKey: (id) => id, onSuccess: (data) => { var item = dumuList?.find((child) => child.id === data.id); if (item) { item.url = base64ToImageUrl(data.event_bg); } setDumuList([...dumuList]); }, }); const result = useMemo(() => { var resultArr = []; var tempResult = data?.PatrolResult; var tempArr = tempResult?.split(';'); if (tempArr?.length > 0) { tempArr?.forEach((item, index) => { var tempItem = item; var itemSplit = tempItem.split(':'); if (itemSplit?.length > 1) { var label = ''; var value = itemSplit[1]; if (index === 0) label = '设备自检'; else if (index === 1) label = '工艺自检'; else { label = '安全隐患'; value = data?.secureStatus === 0 ? '正常' : '异常'; } resultArr.push({ label, value, color: getTextColor(value), }); } }); } return resultArr; }, [data]); useEffect(() => { dispatch({ type: 'eqSelfInspection/fetchUserList', payload: { projectId, }, }); }, []); useEffect(() => { setDumuList(data?.dumuList); data?.dumuList?.map((item) => { detailRun(item.id); }); }, [data?.dumuList]); // useEffect(() => { // dispatch({ // type: 'eqSelfInspection/getPatrolRecordMandateInfo', // payload: { // extend_id: data.Id, // project_id: projectId, // mandate_type: 2 // }, // }); // }, [data]); return (
自检时间:{data?.CreatedTime} 自检路线:{data?.RouteInfo?.Name} 工艺段:{data?.RouteInfo?.GroupID} {result?.map((item) => { return (
{item?.label}:
{item?.value}
); })}
{/*
任务类型:
系统自检
任务负责人:
{userList.find(item => item.ID === mandateInfo?.ResponsiblePeople)?.CName || ''}
任务状态:
{getStatusText(mandateInfo?.Status)}
*/}
{/* 设备自检报告 */}
设备自检报告
} >
{/* 工艺自检报告"> */}
<>
工艺自检报告
异常({data?.FaultAnalysis?.length || 0})
{/* 安全隐患自检报告"> */}
<>
安全隐患自检报告
{/* 环境异常 */} 环境异常
} > {/* 安防检测异常 */} 安防检测异常 } /> {/* 电器检测异常 */} 电气检测异常 } > {/* 密闭空间检测异常 */} 密闭空间检测异常 } > {/* */}
); } export function DeviceTable(props) { const { onClickItem, data = {}, items, onErrorHandle, select, userList, type, } = props; const { ProjectId, Id } = data; const [loading, setLoading] = useState(false); const [visible, setVisible] = useState(false); const [errVisible, setErrVisible] = useState(false); const [currentItem, setCurrentItem] = useState({}); const isSensor = type == 'sensor'; const onClickThreshold = (record) => { setCurrentItem(record); setVisible(true); }; const onClickError = (record) => { setCurrentItem(record); setErrVisible(true); }; const handleError = async (values) => { setLoading(true); var res = await changeRecordStatus({ ...values, Id: currentItem.Id, DeviceCode: currentItem.DeviceCode, DeviceName: currentItem.DeviceName, RecordId: data.Id, RepairMan: values.RepairMan * 1, }); setLoading(false); if (res) { message.success('操作成功'); setErrVisible(false); } }; const columns = [ { title: '设备名称', width: '25%', dataIndex: 'DeviceName', }, { title: '巡检项', width: '20%', dataIndex: 'TemplateItem.Name', }, // { // title: '设备位号', // width: '16%', // dataIndex: 'DeviceCode', // }, { title: '设定值范围', width: '30%', render: (record) => ( onClickThreshold(record)} /> ), }, { title: '状态', width: '13%', dataIndex: 'Status', render: (Status) => { switch (Status) { case -1: case 0: return (
正常
); case 1: return (
异常
); case 2: return (
警告
); } }, }, ]; const handleClickItem = (data) => { if (!isSensor) { onClickItem(`DeviceTable-${data.Id}`, { type: data.Status, deviceCode: data.DeviceCode, }); } else { onClickItem(`DeviceTable-${data.Id}`, { // type: data.Status, deviceCode: data.DeviceCode, value: Number(data.Value || 0), threshold: data.JsonNumThreshold, }); UnityAction.sendMsg('SinglePowerEnvironFromWeb', JSON.stringify(data)); } }; useEffect(() => { console.log('温控', items); if (isSensor) UnityAction.sendMsg('PowerEnvironsFromWeb', JSON.stringify(items)); }, [items]); if (!isSensor) { columns.push({ title: '操作', width: '12%', render: (record) => record.Status == 1 && ( onClickError(record)}> 异常处理 ), }); } return (
{ return { onClick: () => { handleClickItem(data); }, }; }} locale={{ emptyText: , }} rowClassName={(record) => `DeviceTable-${record.Id}` == select ? styles.select : null } /> setVisible(false)} /> setErrVisible(false)} onOk={handleError} /> ); } function AalysisTable(props) { const { onClickItem, data = {}, select } = props; const { FaultAnalysis } = data; const columns = [ { title: '异常名称', width: '18%', dataIndex: 'device_name', }, // { // title: '位号', // width: '15%', // dataIndex: 'device_code', // }, { title: '可能原因', width: '30%', render: (record) => record.reason, }, { title: '解决方案', width: '52%', render: (record) => { if (record.fix_plan instanceof Array) { return (
{record.fix_plan.map((item) => (
{item.content}
))}
); } else { return record.fix_plan; } }, }, ]; return (
{ return { onClick: () => { onClickItem(`AalysisTable-${data.device_code}`, { deviceCode: data.device_code, }); }, // 点击行 }; }} locale={{ emptyText: , }} rowClassName={(record) => `AalysisTable-${record.device_code}` == select ? styles.select : null } /> ); } function ErrorHandleModal(props) { const { visible, onCancel, onOk, userList } = props; const [form] = Form.useForm(); const status = form.getFieldValue('Status'); const handleOk = () => { form.validateFields((error, values) => { if (error) return; onOk({ ...values, PlanTime: values?.PlanTime?.format('YYYY-MM-DD HH:mm:ss'), }); }); }; return (
{status == 1 && ( <> )}
); } export function WarningTable(props) { const { onClickItem, data = {}, onErrorHandle, select, userList, type, items, } = props; const { ProjectId, Id } = data; const [loading, setLoading] = useState(false); const [visible, setVisible] = useState(false); const [errVisible, setErrVisible] = useState(false); const [currentItem, setCurrentItem] = useState({}); const isSensor = type == 'sensor'; const onClickThreshold = (record) => { setCurrentItem(record); setVisible(true); }; const onClickError = (record) => { setCurrentItem(record); setErrVisible(true); }; const handleError = async (values) => { setLoading(true); var res = await changeRecordStatus({ ...values, Id: currentItem.Id, DeviceCode: currentItem.DeviceCode, DeviceName: currentItem.DeviceName, RecordId: data.Id, RepairMan: values.RepairMan * 1, }); setLoading(false); if (res) { message.success('操作成功'); setErrVisible(false); } }; const columns = [ { title: '设备名称', width: '25%', dataIndex: 'DeviceName', }, { title: '巡检项', width: '20%', dataIndex: 'TemplateItem.Name', }, // { // title: '设备位号', // width: '16%', // dataIndex: 'DeviceCode', // }, { title: '设定值范围', width: '30%', render: (record) => ( onClickThreshold(record)} /> ), }, { title: '状态', width: '13%', dataIndex: 'Status', render: (Status) => { switch (Status) { case -1: case 0: return (
正常
); case 1: return (
异常
); case 2: return (
警告
); } }, }, ]; const handleClickItem = (data) => { if (!isSensor) { onClickItem(`DeviceTable-${data.Id}`, { type: data.Status, deviceCode: data.DeviceCode, }); } else { onClickItem(`DeviceTable-${data.Id}`, { // type: data.Status, deviceCode: data.DeviceCode, value: Number(data.Value || 0), threshold: data.JsonNumThreshold, }); UnityAction.sendMsg('SinglePowerEnvironFromWeb', JSON.stringify(data)); } }; if (!isSensor) { columns.push({ title: '操作', width: '12%', render: (record) => record.Status == 1 && ( onClickError(record)}> 异常处理 ), }); } useEffect(() => { if (isSensor) UnityAction.sendMsg('PowerEnvironsFromWeb', JSON.stringify(items)); }, [items]); return (
{/*
当前列表总数 {Items?.length || 0}
*/}
{ return { onClick: () => { handleClickItem(data); }, }; }} locale={{ emptyText: , }} rowClassName={(record) => `DeviceTable-${record.Id}` == select ? styles.select : null } /> setVisible(false)} /> setErrVisible(false)} onOk={handleError} /> ); } function ReportCom(props) { const { sendMessageToUnity, select, waringData = [], allData = [], userList, type, title, data, } = props; const [activeKey, setActiveKey] = useState('1'); const handleTabsChange = (activeKey) => { setActiveKey(activeKey); }; return (
{title}
} onChange={handleTabsChange} > {activeKey == '1' && ( )} {activeKey == '2' && ( )} ); } function ReportDumCom(props) { const { data = [], title } = props; const columns = [ { title: '报警时间', dataIndex: 'event_time', render: (time) => dayjs(time).format('YYYY-MM-DD HH:mm:ss'), }, { title: '设备名称', dataIndex: 'device_name', }, { title: '报警类型', dataIndex: 'event_type', // render: type => alarmType[type], }, { title: '报警图片', render: (item) => ( ), }, ]; return (
<>
{title}
异常({data?.length || 0})
, }} /> ); } function base64ToImageUrl(base64String) { const byteCharacters = atob(base64String); const byteArrays = []; for (let i = 0; i < byteCharacters.length; i++) { byteArrays.push(byteCharacters.charCodeAt(i)); } const byteArray = new Uint8Array(byteArrays); const blob = new Blob([byteArray], { type: 'image/png' }); const imageUrl = URL.createObjectURL(blob); return imageUrl; } function Empty() { return (
{/* */}

自检正常

); } export default connect(({ eqSelfInspection }) => ({ userList: eqSelfInspection.userList, mandateInfo: eqSelfInspection.mandateInfo, }))(Detail);