index.tsx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. import React, { useState, useEffect } from 'react';
  2. import { FormattedMessage } from 'umi';
  3. import PageHeader from '@/components/PageHeader';
  4. import Map from '@/components/map';
  5. import SearchInput from '@/components/SearchInput';
  6. import TopNavigator from './components/topNavigator';
  7. import ChartModal from './components/chartModal';
  8. import { equipImageMap } from '@/config/image.js';
  9. import { Input } from 'antd';
  10. import Icon from '@/tenants-ui/Icon';
  11. import styles from './index.less';
  12. import mapstyles from '@/assets/css/map.less';
  13. export type navigatorItem = {
  14. name: string;
  15. id: string;
  16. src: any;
  17. unit?: string;
  18. num?: number;
  19. color: string;
  20. colorStr: string;
  21. opacity?: number;
  22. indicator?: number[];
  23. [key: string]: any;
  24. };
  25. const Environment: React.FC = () => {
  26. const { envir_temperature, envir_wet, envir_co2, envir_pm25, envir_jiaquan } = equipImageMap;
  27. const [searchText, setSearchText] = useState<string>();
  28. const [showChart, setShowChart] = useState(false);
  29. const [navigatorList] = useState<navigatorItem[]>([
  30. {
  31. name: '温度',
  32. id: 'Tdb',
  33. src: envir_temperature,
  34. unit: '℃',
  35. num: 24.3,
  36. color: '#E5574F',
  37. colorStr: '229,87,79,',
  38. opacity: 0.2,
  39. indicator: [18, 21, 24, 27, 30],
  40. },
  41. {
  42. name: '湿度',
  43. id: 'RH',
  44. src: envir_wet,
  45. unit: '%',
  46. num: 70,
  47. color: '#9FB7CD',
  48. colorStr: '159,183,205,',
  49. opacity: 0.2,
  50. indicator: [25, 35, 45, 55, 65],
  51. },
  52. {
  53. name: 'CO₂',
  54. id: 'CO2',
  55. src: envir_co2,
  56. unit: 'ppm',
  57. num: 600,
  58. color: '#00DC23',
  59. colorStr: '0,220,35,',
  60. opacity: 0.2,
  61. indicator: [500, 700, 1000, 2000, 3000],
  62. },
  63. {
  64. name: 'PM2.5',
  65. id: 'PM2d5',
  66. src: envir_pm25,
  67. unit: 'ug/m³',
  68. num: 33,
  69. color: '#E89E32',
  70. colorStr: '232,158,50,',
  71. opacity: 0.2,
  72. indicator: [15, 25, 35, 75, 90],
  73. },
  74. {
  75. name: '甲醛',
  76. id: 'HCHO',
  77. src: envir_jiaquan,
  78. unit: 'mg/m³',
  79. num: 50,
  80. color: '#140050',
  81. colorStr: '20,0,80,',
  82. opacity: 0.25,
  83. indicator: [0.02, 0.05, 0.1, 0.15], //指标梯度
  84. },
  85. ]);
  86. const [selNav, setSelNav] = useState<navigatorItem>(navigatorList[0]);
  87. const navigatorChange = (item: navigatorItem) => {
  88. if (item.id == 'Tdb') {
  89. }
  90. setSelNav(item);
  91. };
  92. // const specialRoomClick = () => {
  93. // console.log('showChart');
  94. // setShowChart(true);
  95. // };
  96. //根据指标的值 得到不同的透明度等级 第一级0.2 第二级0.4 依次往后
  97. const getColorOpacity = (value: number): number => {
  98. var indicator: number[] = selNav.indicator || []; //指标梯度
  99. var number = indicator.length;
  100. var res = 1;
  101. for (var i = 0; i < number; i++) {
  102. if (value >= indicator[i] && value < indicator[i + 1]) {
  103. res = i + 1;
  104. break;
  105. }
  106. }
  107. return res;
  108. };
  109. return (
  110. <>
  111. <PageHeader
  112. title={<FormattedMessage id="menu.environment" />}
  113. action={
  114. <SearchInput
  115. onSearch={(s) => {
  116. setSearchText(s);
  117. }}
  118. />
  119. // <Input.Search
  120. // size="large"
  121. // allowClear
  122. // style={{ width: '230px' }}
  123. // placeholder={'搜索空间'}
  124. // onSearch={(s) => {
  125. // setSearchText(s);
  126. // }}
  127. // />
  128. }
  129. />
  130. <TopNavigator
  131. navigatorList={navigatorList}
  132. type={'enviroment'}
  133. navigatorChange={navigatorChange}
  134. ></TopNavigator>
  135. <div className={styles.maptop}>
  136. <div className={styles.right}>
  137. {(selNav.indicator || []).map((item, index) => {
  138. return (
  139. <div className={styles.indicatorBox} key={index + 'indicator'}>
  140. <div className={styles.text}>{item}</div>
  141. <div
  142. className={styles.color}
  143. style={{
  144. backgroundColor:
  145. 'rgba(' + selNav.colorStr + (selNav.opacity as number) * (index + 1) + ')',
  146. }}
  147. ></div>
  148. </div>
  149. );
  150. })}
  151. </div>
  152. </div>
  153. <Map
  154. type={'enviroment'}
  155. searchText={searchText}
  156. render={(item: API.MapInfo, index: number) => {
  157. return (
  158. <div
  159. key={index + 'house'}
  160. className={mapstyles.house}
  161. style={{
  162. left: item.left,
  163. top: item.top,
  164. width: item.width,
  165. height: item.height,
  166. backgroundColor:
  167. 'rgba(' +
  168. selNav.colorStr +
  169. (selNav.opacity as number) * getColorOpacity(item[selNav.id]) +
  170. ')',
  171. }}
  172. >
  173. <div className={mapstyles.content}>
  174. <Icon className="" type={item.roomFuncType} style={{ fontSize: 20 }}></Icon>
  175. <div className={mapstyles.name}>{item.localName}</div>
  176. </div>
  177. </div>
  178. );
  179. }}
  180. ></Map>
  181. {/* {mapList.map(function (item, index) {
  182. return (
  183. <div
  184. key={index + 'house'}
  185. className={mapstyles.house}
  186. style={{
  187. left: item.left,
  188. top: item.top,
  189. width: item.width,
  190. height: item.height,
  191. backgroundColor:
  192. 'rgba(' +
  193. selNav.colorStr +
  194. (selNav.opacity as number) * getColorOpacity(item.value) +
  195. ')',
  196. }}
  197. >
  198. <div className={mapstyles.content}>
  199. <Icon className="" type={item.type} style={{ fontSize: 20 }}></Icon>
  200. <div className={mapstyles.name}>{item.name}</div>
  201. </div>
  202. </div>
  203. );
  204. })} */}
  205. {showChart && (
  206. <ChartModal
  207. onClose={() => {
  208. setShowChart(false);
  209. }}
  210. ></ChartModal>
  211. )}
  212. </>
  213. );
  214. };
  215. export default Environment;