QualityMng.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //水质管理
  2. import ChartModule from '@/components/ManagementPage/chartModule';
  3. // import SearchModule from '@/components/ManagementPage/searchModule';
  4. import PageContent from '@/components/PageContent';
  5. import PageTitle from '@/components/PageTitle';
  6. import {
  7. queryChartListByCode,
  8. queryProcessSection,
  9. querySectionCode,
  10. } from '@/services/OperationManagement';
  11. import { UnityAction } from '@/utils/utils';
  12. import { useParams, useRequest } from '@umijs/max';
  13. import { Empty, Spin, Table } from 'antd';
  14. import dayjs from 'dayjs';
  15. import { useEffect, useMemo, useRef, useState } from 'react';
  16. function Quality() {
  17. const { projectId } = useParams();
  18. const [currentCode, setCode] = useState(null);
  19. // const [processId, setProcessId] = useState(null);
  20. const timerRef = useRef({
  21. s_time: dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'),
  22. e_time: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  23. });
  24. const { data: codeList, run: queryCodeList } = useRequest(querySectionCode, {
  25. manual: true,
  26. onSuccess(res) {
  27. if (res && res.length > 0) {
  28. setCode(res[0]);
  29. }
  30. },
  31. });
  32. // 获取工艺段列表
  33. useRequest(queryProcessSection, {
  34. defaultParams: [projectId],
  35. onSuccess(res) {
  36. // setProcessId(res.data[0].id);
  37. queryCodeList(res[0].id, 2, projectId * 1);
  38. },
  39. });
  40. const mainRes = useRequest(
  41. () => {
  42. return queryChartListByCode(
  43. {
  44. project_id: Number(projectId),
  45. start_time: timerRef.current.s_time,
  46. end_time: timerRef.current.e_time,
  47. },
  48. // codeList?.map((item) => item.metric_code),
  49. [currentCode.metric_code],
  50. );
  51. },
  52. {
  53. manual: true,
  54. },
  55. );
  56. const column = useMemo(() => {
  57. if (!currentCode) return [];
  58. return [
  59. { title: '时间', dataIndex: 'time', width: '40%' },
  60. {
  61. title: currentCode.metric,
  62. dataIndex: currentCode.metric_code,
  63. },
  64. ];
  65. }, [currentCode]);
  66. //图表配置
  67. const chartProps = useMemo(() => {
  68. let xData = [],
  69. dataList = [];
  70. if (!mainRes.data || !currentCode) return;
  71. let yName = currentCode.metric;
  72. let data = [...mainRes.data].reverse();
  73. xData = data.map((item) => item.time);
  74. dataList.push({
  75. type: 0,
  76. name: currentCode.metric,
  77. data: data.map((item) => item[currentCode.metric_code]),
  78. });
  79. return {
  80. yName,
  81. xData,
  82. dataList,
  83. // typeList: codeList?.map((item) => item.metric),
  84. // currentType: currentCode.metric,
  85. };
  86. }, [mainRes.data, currentCode]);
  87. useEffect(() => {
  88. if (currentCode) {
  89. mainRes.run();
  90. }
  91. }, [currentCode]);
  92. const onChange = (name) => {
  93. const code = codeList.find((item) => item.metric == name);
  94. if (code) setCode(code);
  95. };
  96. return (
  97. <PageContent closeable={false}>
  98. <PageTitle onReturn={() => UnityAction.sendMsg('menuItem', '首页')}>
  99. 水质监测
  100. </PageTitle>
  101. <div className="card-box" style={{ padding: 20, marginTop: 26 }}>
  102. <div className="tabs" style={{ marginBottom: 20 }}>
  103. {codeList?.map((item) => (
  104. <div
  105. onClick={() => {
  106. setCode(item);
  107. }}
  108. className={`tabs-item ${item == currentCode ? 'active' : ''}`}
  109. >
  110. {item.metric}
  111. </div>
  112. ))}
  113. </div>
  114. <div className="section-title">
  115. <div className="section-line"></div>
  116. 数据曲线
  117. </div>
  118. <Spin spinning={mainRes.loading}>
  119. <div style={{ height: 500, marginTop: 20 }}>
  120. {mainRes?.data ? (
  121. <ChartModule {...chartProps} onChange={onChange} />
  122. ) : (
  123. <Empty />
  124. )}
  125. </div>
  126. </Spin>
  127. <div style={{ marginTop: 30 }}>
  128. <div className="section-title">
  129. <div className="section-line"></div>
  130. 数据列表
  131. </div>
  132. <Table
  133. columns={column}
  134. style={{ marginTop: 20 }}
  135. dataSource={mainRes?.data}
  136. />
  137. </div>
  138. </div>
  139. </PageContent>
  140. );
  141. }
  142. export default Quality;