index.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import SystemConst from '@/utils/const';
  2. import Token from '@/utils/token';
  3. import { downloadObject } from '@/utils/util';
  4. import { Col, Input, Modal, Row } from 'antd';
  5. import { EventSourcePolyfill } from 'event-source-polyfill';
  6. import { useEffect, useState } from 'react';
  7. interface Props {
  8. data: any;
  9. close: () => void;
  10. }
  11. const Publish = (props: Props) => {
  12. const activeAPI = `/${SystemConst.API_BASE}/media/gb28181-cascade/${
  13. props.data.id
  14. }/bindings/publish?:X_Access_Token=${Token.get()}`;
  15. const [count, setCount] = useState<number>(0);
  16. const [countErr, setCountErr] = useState<number>(0);
  17. const [flag, setFlag] = useState<boolean>(true);
  18. const [errMessage, setErrMessage] = useState<any[]>([]);
  19. const getData = () => {
  20. let dt = 0;
  21. let et = 0;
  22. const errMessages: any[] = [];
  23. const source = new EventSourcePolyfill(activeAPI);
  24. source.onmessage = (e: any) => {
  25. const res = JSON.parse(e.data);
  26. if (res.successful) {
  27. dt += 1;
  28. setCount(dt);
  29. } else {
  30. et += 1;
  31. setCountErr(et);
  32. setFlag(false);
  33. errMessages.push({ ...res });
  34. setErrMessage([...errMessages]);
  35. }
  36. };
  37. source.onerror = () => {
  38. source.close();
  39. };
  40. source.onopen = () => {};
  41. };
  42. useEffect(() => {
  43. getData();
  44. }, []);
  45. return (
  46. <Modal
  47. title={'推送'}
  48. maskClosable={false}
  49. visible
  50. onCancel={props.close}
  51. onOk={props.close}
  52. width={900}
  53. >
  54. <Row gutter={24} style={{ marginBottom: 20 }}>
  55. <Col span={8}>
  56. <div>成功: {count}</div>
  57. <div>
  58. 失败: {countErr}
  59. {errMessage.length > 0 && (
  60. <a
  61. style={{ marginLeft: 20 }}
  62. onClick={() => {
  63. downloadObject(errMessage || '', props.data.name + '-推送失败');
  64. }}
  65. >
  66. 下载
  67. </a>
  68. )}
  69. </div>
  70. </Col>
  71. <Col span={8}>推送通道数量: {props.data?.count || 0}</Col>
  72. <Col span={8}>已推送通道数量: {countErr + count}</Col>
  73. </Row>
  74. {!flag && (
  75. <div>
  76. <Input.TextArea rows={10} value={JSON.stringify(errMessage)} />
  77. </div>
  78. )}
  79. </Modal>
  80. );
  81. };
  82. export default Publish;