index.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import { queryConditionSnapshot, queryEnergy } from '@/services/SmartOps';
  2. import { LoadingOutlined } from '@ant-design/icons';
  3. import { connect, history, useParams, useRequest } from '@umijs/max';
  4. import { useEffect } from 'react';
  5. import CircleScore from '../Smart/components/CircleScore';
  6. import styles from './index.less';
  7. const HomePage = (props) => {
  8. const { projectId } = useParams();
  9. const { data } = useRequest(queryConditionSnapshot, {
  10. defaultParams: [{ project_id: projectId }],
  11. });
  12. return (
  13. <div className={styles.content}>
  14. <LeftContent data={data} />
  15. <RightContent data={data} />
  16. </div>
  17. );
  18. };
  19. const LeftContent = (props) => {
  20. const { data } = props;
  21. return (
  22. <div className={styles.left}>
  23. <SmartWork data={data} />
  24. <WaterAmt data={data} />
  25. <WaterQuality data={data} />
  26. </div>
  27. );
  28. };
  29. const RightContent = (props) => {
  30. const { data } = props;
  31. return (
  32. <div className={styles.right}>
  33. <SelfInspection />
  34. <Electric data={data} />
  35. <Medicine />
  36. </div>
  37. );
  38. };
  39. // 水厂工况
  40. const SmartWork = (props) => {
  41. const { projectId } = useParams();
  42. const { data } = props;
  43. return (
  44. <Box
  45. title="水厂工况"
  46. onClick={() => history.push(`/smart/work/${projectId}`)}
  47. >
  48. <div className={styles.scoreBox}>
  49. <CircleScore>
  50. {data?.score}
  51. <div className={styles.grade}>{data?.grade}</div>
  52. </CircleScore>
  53. <div className={styles.scoreTitle}>
  54. 当前运行{data?.grade},可继续优化
  55. </div>
  56. <div className={styles.time}>{data?.clac_time}</div>
  57. </div>
  58. </Box>
  59. );
  60. };
  61. // 水量监测
  62. const WaterAmt = (props) => {
  63. const { data } = props;
  64. const { projectId } = useParams();
  65. return (
  66. <Box
  67. title="水量监测"
  68. onClick={() => history.push(`/home/water-amt-mng/${projectId}`)}
  69. >
  70. <ul>
  71. <li>
  72. <div className={styles.value}>{data?.fwa}</div>
  73. <div className={styles.name}>进水量</div>
  74. </li>
  75. <li>
  76. <div className={styles.value}>{data?.dwa}</div>
  77. <div className={styles.name}>产水量</div>
  78. </li>
  79. </ul>
  80. </Box>
  81. );
  82. };
  83. // 水质监测
  84. const WaterQuality = (props) => {
  85. const { data } = props;
  86. const { projectId } = useParams();
  87. return (
  88. <Box
  89. title="水质监测"
  90. onClick={() => history.push(`/home/water-quality-mng/${projectId}`)}
  91. >
  92. <ul>
  93. <li>
  94. <div className={styles.value}>{data?.dsan}</div>
  95. <div className={styles.name}>出水余氯</div>
  96. </li>
  97. <li>
  98. <div className={styles.value}>{data?.dtur}</div>
  99. <div className={styles.name}>出水浊度</div>
  100. </li>
  101. </ul>
  102. </Box>
  103. );
  104. };
  105. // 系统自检
  106. const SelfInspection = connect(({ eqSelfInspection, loading }) => ({
  107. autoReport: eqSelfInspection.autoReport,
  108. loading: loading.models['eqSelfInspection'],
  109. }))((props) => {
  110. const { autoReport, dispatch, loading } = props;
  111. const { projectId } = useParams();
  112. const renderStatus = () => {
  113. if (loading) return <LoadingOutlined />;
  114. if (autoReport.warningTotalNum) {
  115. return (
  116. <>
  117. 系统自检发现
  118. <span style={{ color: '#FE5850' }}>{autoReport.warningTotalNum}</span>
  119. 项异常
  120. </>
  121. );
  122. }
  123. return <span style={{ color: '#F5A623' }}>正常</span>;
  124. };
  125. useEffect(() => {
  126. dispatch({
  127. type: 'eqSelfInspection/getAutoPatrol',
  128. payload: {
  129. projectId,
  130. },
  131. });
  132. }, []);
  133. return (
  134. <Box
  135. title="系统自检"
  136. onClick={() =>
  137. history.push(`/self-inspection/detail/${projectId}/${autoReport?.Id}`)
  138. }
  139. >
  140. <div className={styles.insTag}>自检中</div>
  141. <div className={styles.insStatus}>{renderStatus()}</div>
  142. <div className={styles.time}>{autoReport.CreatedTime}</div>
  143. </Box>
  144. );
  145. });
  146. // 能耗监测
  147. const Electric = (props) => {
  148. const { data } = props;
  149. const { projectId } = useParams();
  150. return (
  151. <Box
  152. title="能耗监测"
  153. onClick={() => history.push(`/home/energy/${projectId}`)}
  154. >
  155. <ul>
  156. <li>
  157. <div className={styles.value}>{data?.elec}</div>
  158. <div className={styles.name}>用电量</div>
  159. </li>
  160. </ul>
  161. </Box>
  162. );
  163. };
  164. // 药耗监测
  165. const Medicine = () => {
  166. const { projectId } = useParams();
  167. const { data } = useRequest(queryEnergy, {
  168. defaultParams: [Number(projectId)],
  169. });
  170. return (
  171. <Box
  172. title="药耗监测"
  173. onClick={() => history.push(`/home/chem-cost/${projectId}`)}
  174. >
  175. <ul>
  176. <li>
  177. <div className={styles.value}>{data?.medicine}kg</div>
  178. <div className={styles.name}>总药耗</div>
  179. </li>
  180. </ul>
  181. </Box>
  182. );
  183. };
  184. const Box = ({ title, children, onClick }) => {
  185. return (
  186. <div className={styles.box} onClick={onClick}>
  187. <div className={styles.boxTitle}>{title}</div>
  188. {children}
  189. </div>
  190. );
  191. };
  192. export default HomePage;