Light.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { queryLightList } from '@/services/controller';
  2. import { UnityAction } from '@/utils/utils';
  3. import { useParams, useRequest } from '@umijs/max';
  4. import { Spin } from 'antd';
  5. import { useEffect, useState } from 'react';
  6. import styles from '../index.less';
  7. const Work = (props) => {
  8. const { projectId } = useParams();
  9. const [select, setSelect] = useState();
  10. const { data, loading } = useRequest(queryLightList, {
  11. defaultParams: [projectId],
  12. onSuccess(res) {
  13. UnityAction.sendMsg('lightData', JSON.stringify(res.list));
  14. },
  15. });
  16. const getIconStatus = (status) => {
  17. if (status == 1) return '';
  18. if (status == 2) return styles.offline;
  19. if (status == 3) return styles.error;
  20. };
  21. const onHandleSelect = (item) => {
  22. setSelect(item.id);
  23. UnityAction.sendMsg('lightItem', String(item.id));
  24. };
  25. useEffect(() => {
  26. UnityAction.addEventListener('lightItem', (id) => {
  27. setSelect(id);
  28. });
  29. return () => UnityAction.off('lightItem');
  30. }, []);
  31. return (
  32. <div>
  33. <div className={styles.top}>
  34. <div className={styles.left}>
  35. <img
  36. className={styles.img}
  37. src={require('@/assets/air-conditioner.png')}
  38. />
  39. <div>
  40. <div className="value-number">{data?.pagination?.total}</div>
  41. 照明数量
  42. </div>
  43. </div>
  44. <div className={styles.right}>
  45. <div className={styles.row}>
  46. <i className={styles.icon}></i> 在线:{data?.online_count}
  47. </div>
  48. <div className={styles.row}>
  49. <i className={`${styles.icon} ${styles.offline}`}></i> 离线:
  50. {data?.offline_count}
  51. </div>
  52. </div>
  53. </div>
  54. <Spin spinning={loading}>
  55. <div className={styles.listContent}>
  56. {data?.list?.map((item) => (
  57. <div
  58. key={item.id}
  59. onClick={() => onHandleSelect(item)}
  60. className={`card-box ${styles.item} ${
  61. select == item.id ? 'card-select' : ''
  62. }`}
  63. >
  64. <i className={`${styles.icon} ${getIconStatus(item.status)}`}></i>{' '}
  65. {item.name}
  66. </div>
  67. ))}
  68. </div>
  69. </Spin>
  70. </div>
  71. );
  72. };
  73. export default Work;