Index.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React, { useState } from 'react';
  2. import { DatePicker, Button, Calendar, Progress, Modal } from 'antd';
  3. import { getData } from './utils';
  4. import moment from 'moment';
  5. import ReportTable from './components/ReportTable';
  6. const ReportSummary = () => {
  7. const [loading, setLoading] = useState(false);
  8. const [selectedDate, setSelectedDate] = useState(moment());
  9. const [progress, setProgress] = useState(0);
  10. const [statusText, setStatusText] = useState('');
  11. const [statusTextHistory, setStatusTextHistory] = useState([]);
  12. const [historyVisible, setHistoryVisible] = useState(false);
  13. const [data, setData] = useState(false);
  14. const handleDateChange = date => {
  15. setSelectedDate(date);
  16. };
  17. const handleQuery = async () => {
  18. if (!selectedDate) {
  19. return;
  20. }
  21. // 计算默认时间范围:上个月26号到这个月25号
  22. const startDate = selectedDate
  23. .clone()
  24. .subtract(1, 'month')
  25. .date(26)
  26. .startOf('day');
  27. const endDate = selectedDate
  28. .clone()
  29. .date(25)
  30. .endOf('day');
  31. setLoading(true);
  32. try {
  33. // 发起接口请求
  34. let data = await getData(startDate, endDate, onChangeStatus);
  35. setData(data);
  36. } catch (error) {
  37. console.error(error);
  38. onChangeStatus('请求接口失败');
  39. }
  40. setLoading(false);
  41. };
  42. const onChangeStatus = (text, isDone) => {
  43. let totalCalls = 300;
  44. let newProgress = 0;
  45. if (!isDone) {
  46. let current = progress + 1 / totalCalls;
  47. newProgress = current > 99 ? 99 : Number(current.toFixed(2));
  48. } else {
  49. newProgress = 100; // 直接到达100%
  50. }
  51. const currentTime = new Date().toLocaleTimeString();
  52. let statusText = `【${currentTime}】:${text}`;
  53. setProgress(newProgress);
  54. setStatusText(statusText);
  55. setStatusTextHistory(prevHistory => [statusText, ...prevHistory]);
  56. };
  57. const handleHistoryClick = () => {
  58. setHistoryVisible(true);
  59. };
  60. const handleHistoryCancel = () => {
  61. setHistoryVisible(false);
  62. };
  63. return (
  64. <div>
  65. <DatePicker
  66. allowClear={false}
  67. value={selectedDate}
  68. onChange={handleDateChange}
  69. picker="month"
  70. />
  71. <Button type="primary" loading={loading} onClick={handleQuery} style={{ marginLeft: 20 }}>
  72. 查询
  73. </Button>
  74. <div style={{ margin: '10px 0' }}>
  75. {/* <Progress percent={50} status="active" /> */}
  76. <div onClick={() => setHistoryVisible(true)}>{statusText}</div>
  77. </div>
  78. <ReportTable data={data} month={selectedDate.month() + 1} />
  79. <Modal title="历史记录" visible={historyVisible} onCancel={handleHistoryCancel} footer={null}>
  80. {statusTextHistory.map((item, index) => (
  81. <div key={index}>{item}</div>
  82. ))}
  83. </Modal>
  84. </div>
  85. );
  86. };
  87. export default ReportSummary;