sliderData.tsx 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. import React, { useEffect, useState } from 'react';
  2. import * as datav from '@jiaminghi/data-view-react';
  3. import styles from './sliderData.less';
  4. import { connect } from '@@/plugin-dva/exports';
  5. // import { JSONPath } from 'jsonpath-plus';
  6. interface propsData {
  7. data: any;
  8. MQTTMessage: any;
  9. }
  10. /**
  11. * 底部轮播
  12. * @constructor
  13. */
  14. const SliderData: React.FC<propsData> = (props) => {
  15. // const { data, MQTTMessage } = props;
  16. const { data } = props;
  17. const [voltage, setVoltage] = useState({ ua: 0 });
  18. const [current, setCurrent] = useState({ ia: 0 });
  19. const [activePower, setActivePower] = useState({ active_power: 0 });
  20. const [controlData, setControlData] = useState({
  21. power: data.power ? data.power : 0,
  22. mode: data.mode,
  23. set_temp: data.set_temp,
  24. temperature: data.temperature,
  25. humidity: data.humidity,
  26. air_quality: data.air_quality,
  27. co2: data.co2,
  28. });
  29. // 回头删掉
  30. useEffect(() => {
  31. setCurrent({ ia: 0 });
  32. setVoltage({ ua: 0 });
  33. setActivePower({ active_power: 0 });
  34. setControlData({
  35. power: data.power ? data.power : 0,
  36. mode: data.mode,
  37. set_temp: data.set_temp,
  38. temperature: data.temperature,
  39. humidity: data.humidity,
  40. air_quality: data.air_quality,
  41. co2: data.co2,
  42. });
  43. }, []);
  44. // useEffect(() => {
  45. // // 电
  46. // if (
  47. // MQTTMessage.message?.DeviceCode === 'DT645-4G' &&
  48. // MQTTMessage.message?.SubDeviceId !== '' &&
  49. // data.electric_id !== '' &&
  50. // MQTTMessage.message?.SubDeviceId === data.electric_id
  51. // ) {
  52. // // 电压
  53. // if (Object.keys(MQTTMessage.message.Data)[0] === 'voltage') {
  54. // setVoltage({ ua: JSONPath({ json: MQTTMessage.message.Data, path: '$.voltage.ua' })[0] });
  55. // }
  56. // // 电流
  57. // if (Object.keys(MQTTMessage.message.Data)[0] === 'current') {
  58. // setCurrent({ ia: JSONPath({ json: MQTTMessage.message.Data, path: '$.current.ia' })[0] });
  59. // }
  60. // // 用电量
  61. // if (Object.keys(MQTTMessage.message.Data)[0] === 'power') {
  62. // setActivePower({
  63. // active_power: JSONPath({
  64. // json: MQTTMessage.message.Data,
  65. // path: '$.power.active_power',
  66. // })[0],
  67. // });
  68. // }
  69. // }
  70. //
  71. // //温湿度等
  72. // if (
  73. // MQTTMessage.message?.DeviceCode === data.device_id &&
  74. // MQTTMessage.message?.SubDeviceId === ''
  75. // ) {
  76. // setControlData({
  77. // power: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.power' })[0],
  78. // mode: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.mode' })[0],
  79. // set_temp: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.set_temp' })[0],
  80. // temperature: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.temperature' })[0],
  81. // humidity: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.humidity' })[0],
  82. // air_quality: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.air_quality' })[0],
  83. // co2: JSONPath({ json: MQTTMessage.message.Data, path: '$.status.co2' })[0],
  84. // });
  85. // }
  86. // }, [MQTTMessage.message?.DeviceCode && MQTTMessage.message?.SubDeviceId]);
  87. const handleCo2Grade = (co2: number) => {
  88. if (co2 >= 0 && co2 < 800) {
  89. return '#90c456';
  90. }
  91. if (co2 >= 800 && co2 < 1600) {
  92. return '#eceb3b';
  93. }
  94. if (co2 >= 1600) {
  95. return '#e4151b';
  96. }
  97. return '';
  98. };
  99. const handlePm25Grade = (pm25: number) => {
  100. if (pm25 >= 0 && pm25 <= 50) {
  101. return '#90c456';
  102. }
  103. if (pm25 > 50 && pm25 < 150) {
  104. return '#eceb3b';
  105. }
  106. if (pm25 >= 150) {
  107. return '#e4151b';
  108. }
  109. return '';
  110. };
  111. return (
  112. <div>
  113. <datav.BorderBox12
  114. className={styles.decoration_bottom_border}
  115. style={{ width: '550px', height: '280px' }}
  116. >
  117. <div className={styles.home_detail}>
  118. <div className={styles.detail_left}>
  119. <div className={styles.detail_left_left}>
  120. <div className={styles.decoration_on} />
  121. <div className={styles.home_name}>{data?.home_name ? data?.home_name : '我的家'}</div>
  122. </div>
  123. <div className={styles.detail_left_right}>
  124. <table className={styles.detail_item}>
  125. <tbody>
  126. <tr>
  127. <td className={styles.detail_item_title}>管理员</td>
  128. <td className={styles.detail_item_value}>{data?.admin}</td>
  129. </tr>
  130. <tr>
  131. <td className={styles.detail_item_title}>是否在线</td>
  132. <td
  133. className={styles.detail_item_value}
  134. // style={{ color: `${data?.is_online ? '#90c456' : '#e4151b'}` }}
  135. style={{ color: '#90c456' }}
  136. >
  137. {/*{data?.is_online ? '在线' : '离线'}*/}
  138. 在线
  139. </td>
  140. </tr>
  141. <tr>
  142. <td className={styles.detail_item_title}>运行状态</td>
  143. <td className={styles.detail_item_value} style={{ color: '#ffb026' }}>
  144. {{ 0: '关', 1: '开' }[controlData.power]}
  145. </td>
  146. </tr>
  147. <tr>
  148. <td className={styles.detail_item_title}>模式</td>
  149. <td className={styles.detail_item_value}>
  150. {{ 0: '制冷', 1: '制热', 2: '除湿', 3: '送风', 4: '加湿' }[controlData?.mode]}
  151. </td>
  152. </tr>
  153. </tbody>
  154. </table>
  155. </div>
  156. </div>
  157. <div className={styles.detail_right}>
  158. <div className={styles.detail_right_top}>
  159. <div className={styles.detail_right_top_content}>
  160. <div className={styles.content_title}>设定温度</div>
  161. <div className={styles.content_value}>{controlData?.set_temp}°C</div>
  162. </div>
  163. <div className={styles.detail_right_top_content}>
  164. <div className={styles.content_title}>室内温度</div>
  165. <div className={styles.content_value}>{controlData?.temperature}°C</div>
  166. </div>
  167. <div className={styles.detail_right_top_content}>
  168. <div className={styles.content_title}>湿度</div>
  169. <div className={styles.content_value}>{controlData?.humidity}%rh</div>
  170. </div>
  171. <div className={styles.detail_right_top_content}>
  172. <div className={styles.content_title}>PM25</div>
  173. <div
  174. className={styles.content_value}
  175. style={{ color: handlePm25Grade(controlData?.air_quality) }}
  176. >
  177. {controlData?.air_quality}μg/m³
  178. </div>
  179. </div>
  180. <div className={styles.detail_right_top_content}>
  181. <div className={styles.content_title}>CO2</div>
  182. <div
  183. className={styles.content_value}
  184. style={{ color: handleCo2Grade(controlData?.co2) }}
  185. >
  186. {controlData?.co2}
  187. </div>
  188. </div>
  189. <div className={styles.detail_right_top_content}>
  190. <div className={styles.content_title}>用电量</div>
  191. <div className={styles.content_value}>{activePower?.active_power}kwh</div>
  192. </div>
  193. <div className={styles.detail_right_top_content}>
  194. <div className={styles.content_title}>电压</div>
  195. <div className={styles.content_value}>{voltage?.ua}V</div>
  196. </div>
  197. <div className={styles.detail_right_top_content}>
  198. <div className={styles.content_title}>电流</div>
  199. <div className={styles.content_value}>{current?.ia}A</div>
  200. </div>
  201. </div>
  202. </div>
  203. </div>
  204. </datav.BorderBox12>
  205. </div>
  206. );
  207. };
  208. export default connect(({ MQTTMessage }: any) => ({
  209. MQTTMessage,
  210. }))(SliderData);