import SystemConst from '@/utils/const'; import Token from '@/utils/token'; import { downloadObject } from '@/utils/util'; import { Col, Input, Modal, Row } from 'antd'; import { EventSourcePolyfill } from 'event-source-polyfill'; import { useEffect, useState } from 'react'; import { DeviceInstance } from '@/pages/device/Instance/typings'; interface Props { list: Partial[]; data: Partial; close: () => void; } const Publish = (props: Props) => { const [count, setCount] = useState(0); const [countErr, setCountErr] = useState(0); const [flag, setFlag] = useState(true); const [errMessage, setErrMessage] = useState([]); const getData = () => { let dt = 0; let et = 0; const errMessages: any[] = []; const _terms = { deviceId: (props.list || []).map((item) => item.id), // params: { name: props.data.name, targetId: props.data.targetId, targetType: props.data.targetType, category: props.data.category, metadata: encodeURIComponent(props.data?.metadata || ''), // } }; const url = new URLSearchParams(); Object.keys(_terms).forEach((key) => { if (Array.isArray(_terms[key]) && _terms[key].length) { _terms[key].map((item: string) => { url.append(key, item); }); } else { url.append(key, _terms[key]); } }); const source = new EventSourcePolyfill( `/${ SystemConst.API_BASE }/edge/operations/entity-template-save/invoke/_batch?:X_Access_Token=${Token.get()}&${url.toString()}`, ); source.onmessage = (e: any) => { const res = JSON.parse(e.data); if (res.successful) { dt += 1; setCount(dt); } else { et += 1; setCountErr(et); setFlag(false); if (errMessages.length <= 5) { errMessages.push({ ...res }); setErrMessage([...errMessages]); } } }; source.onerror = () => { source.close(); }; source.onopen = () => {}; }; useEffect(() => { getData(); }, []); return (
成功: {count}
失败: {countErr} {errMessage.length > 0 && ( { downloadObject(errMessage || '', '下发失败原因'); }} > 下载 )}
下发设备数量: {props.list?.length || 0} 已下发数量: {countErr + count}
{!flag && (
)}
); }; export default Publish;