acquisitionTracer.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { useState, useEffect } from 'react';
  2. import { useSelector } from 'react-redux';
  3. import { Progress, Modal, Button } from 'antd';
  4. import { RootState } from '../../../states/store';
  5. const AcquisitionTracer: React.FC = () => {
  6. const acquisitionState = useSelector(
  7. (state: RootState) => state.generatorMonitor.acquisitionState
  8. );
  9. const errorMessage = useSelector(
  10. (state: RootState) => state.generatorMonitor.errorMessage
  11. );
  12. const [isModalOpen, setIsModalOpen] = useState(false);
  13. useEffect(() => {
  14. if (acquisitionState === 1 || acquisitionState === 3) {
  15. setIsModalOpen(true);
  16. } else {
  17. setIsModalOpen(false);
  18. }
  19. }, [acquisitionState]);
  20. const renderProgressBar = () => {
  21. switch (acquisitionState) {
  22. case 1:
  23. return <Progress percent={50} status="active" />;
  24. case 2:
  25. return <Progress percent={100} status="success" />;
  26. case 3:
  27. return (
  28. <div>
  29. <Progress percent={100} status="exception" />
  30. <p style={{ marginTop: 10 }}>{errorMessage || '采集失败,请检查设备或重试。'}</p>
  31. </div>
  32. );
  33. default:
  34. return null;
  35. }
  36. };
  37. return (
  38. <Modal
  39. title="Acquisition Tracer"
  40. open={isModalOpen}
  41. footer={acquisitionState === 3 ? [<Button key="ok" onClick={() => setIsModalOpen(false)}>确定</Button>] : null}
  42. centered
  43. style={{ top: 20 }}
  44. >
  45. <div>{renderProgressBar()}</div>
  46. </Modal>
  47. );
  48. };
  49. export default AcquisitionTracer;