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 { 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); if (window.HightlightEquipment) { window.HightlightEquipment(data); } }; const getTextColor = (status) => { switch (status) { case '警告': return '#FFE26D'; case '异常': return '#FE5850'; case '正常': return '#12CEB3'; default: return '#12CEB3'; } }; 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]); return ( 自检时间:{data?.CreatedTime} 自检路线:{data?.RouteInfo?.Name} 工艺段:{data?.RouteInfo?.GroupID} {result?.map((item) => { return ( {item?.label}: {item?.value} ); })} {/* 设备自检报告 */} 设备自检报告 } > {/* 工艺自检报告"> */} 异常({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 ( , }} /> 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 ( , }} /> ); } 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 ( 已派遣 已通过 option.props.children.indexOf(input) >= 0 } style={{ width: '100%' }} > {userList?.map((item) => ( {item.CName} ))} {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 ( , }} /> 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} {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);
自检正常