WaterQualityAnalysis.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import ChartModule from '@/components/ManagementPage/chartModule';
  2. import {
  3. queryChartListByCode,
  4. queryProcessSection,
  5. querySectionCode,
  6. } from '@/services/OperationManagement';
  7. import { useParams, useRequest } from '@umijs/max';
  8. import { Button, DatePicker, Empty, Table } from 'antd';
  9. import dayjs from 'dayjs';
  10. import { useEffect, useMemo, useState } from 'react';
  11. import SubTitle from '../../components/SubTitle';
  12. import styles from './WaterQuailtyAnalysis.less';
  13. const { RangePicker } = DatePicker;
  14. const WaterQualityAnalysis = () => {
  15. const { projectId } = useParams();
  16. const defaultTime = {
  17. s_time: dayjs().subtract(1, 'week').format('YYYY-MM-DD 00:00:00'),
  18. e_time: dayjs().format('YYYY-MM-DD 23:59:59'),
  19. };
  20. const [processId, setProcessId] = useState(null);
  21. const [currentCode, setCode] = useState(null);
  22. const { data: codeList, run: getCode } = useRequest(querySectionCode, {
  23. manual: true,
  24. onSuccess(data) {
  25. if (data) {
  26. setCode(data[0]);
  27. }
  28. },
  29. formatResult(res) {
  30. return res.data;
  31. },
  32. });
  33. useRequest(queryProcessSection, {
  34. defaultParams: [projectId],
  35. onSuccess(data) {
  36. setProcessId(data[0].id);
  37. },
  38. formatResult(res) {
  39. return res.data;
  40. },
  41. });
  42. const { data: mainData, run } = useRequest(
  43. (date) => {
  44. const temp = codeList?.slice(0, 3);
  45. console.log(date);
  46. return queryChartListByCode(
  47. {
  48. project_id: Number(projectId),
  49. start_time: date?.s_time || defaultTime.s_time,
  50. end_time: date?.e_time || defaultTime.e_time,
  51. },
  52. [...temp?.map((item) => item.metric_code), 'permeate', 'feed'],
  53. false,
  54. );
  55. },
  56. {
  57. manual: true,
  58. onSuccess: (data) => {
  59. console.log(data);
  60. },
  61. },
  62. );
  63. useEffect(() => {
  64. if (processId !== null) {
  65. getCode(processId, 2, projectId);
  66. }
  67. }, [processId]);
  68. useEffect(() => {
  69. if (codeList) {
  70. run();
  71. }
  72. }, [codeList]);
  73. const chartProps = useMemo(() => {
  74. const dataList = [];
  75. if (!mainData || !currentCode) {
  76. return;
  77. }
  78. const yName = currentCode.metric;
  79. const reversedData = [...mainData].reverse();
  80. const xData = reversedData.map((item) => item.time);
  81. dataList.push({
  82. type: 0,
  83. name: '出水水量',
  84. data: reversedData.map((item) => item.permeate),
  85. });
  86. dataList.push({
  87. type: 1,
  88. name: '进水水量',
  89. data: reversedData.map((item) => item.feed),
  90. });
  91. dataList.push({
  92. type: 2,
  93. name: currentCode.metric,
  94. data: reversedData.map((item) => item[currentCode.metric_code]),
  95. });
  96. return {
  97. yName,
  98. xData,
  99. dataList,
  100. typeList: codeList?.map((item) => item.metric).slice(0, 3),
  101. currentType: currentCode.metric,
  102. };
  103. }, [mainData]);
  104. const column = useMemo(() => {
  105. const col = { title: '时间', dataIndex: 'time', width: '250px' };
  106. let other = codeList?.map((item) => {
  107. return {
  108. title: item.metric,
  109. dataIndex: item.metric_code,
  110. width: '200px',
  111. };
  112. });
  113. other = other?.slice(0, 3);
  114. return other && other.length > 0 ? [col, ...other] : [];
  115. }, [codeList]);
  116. const handleTimeRangeChange = (range) => {
  117. if (range?.length === 2) {
  118. run({
  119. s_time: dayjs(range[0]).format('YYYY-MM-DD 00:00:00'),
  120. e_time: dayjs(range[1]).format('YYYY-MM-DD HH:mm:ss'),
  121. });
  122. } else {
  123. run(defaultTime);
  124. }
  125. };
  126. const handleTimeBTNClick = (unit) => {
  127. run({
  128. s_time: dayjs().subtract(1, unit).format('YYYY-MM-DD 00:00:00'),
  129. e_time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  130. });
  131. };
  132. return (
  133. <div className="card-box" style={{ padding: '0.2rem' }}>
  134. <div>
  135. <div className={styles.timeBtn} style={{}}>
  136. <SubTitle title="全厂概览" />
  137. <RangePicker onChange={handleTimeRangeChange} />
  138. <Button
  139. type="primary"
  140. shape="round"
  141. onClick={() => {
  142. handleTimeBTNClick('day');
  143. }}
  144. >
  145. 近一天
  146. </Button>
  147. <Button
  148. type="primary"
  149. shape="round"
  150. onClick={() => {
  151. handleTimeBTNClick('week');
  152. }}
  153. >
  154. 近一周
  155. </Button>
  156. <Button
  157. type="primary"
  158. shape="round"
  159. onClick={() => {
  160. handleTimeBTNClick('month');
  161. }}
  162. >
  163. 近一个月
  164. </Button>
  165. </div>
  166. </div>
  167. <div>
  168. <SubTitle title={'数据曲线'} fontSize="0.26rem" />
  169. <div style={{ height: '4rem' }}>
  170. {mainData ? (
  171. <ChartModule {...chartProps} onChange={onChange} />
  172. ) : (
  173. <Empty />
  174. )}
  175. </div>
  176. </div>
  177. <div>
  178. <SubTitle title={'数据列表'} fontSize="0.26rem" />
  179. <Table columns={column} dataSource={mainData} />
  180. </div>
  181. </div>
  182. );
  183. };
  184. export default WaterQualityAnalysis;