Device.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import PageContent from '@/components/PageContent';
  2. import PageTitle from '@/components/PageTitle';
  3. import { queryDevice, queryScanDuration } from '@/services/controller';
  4. import { UnityAction } from '@/utils/utils';
  5. import { useParams, useRequest } from '@umijs/max';
  6. import { useCallback, useEffect } from 'react';
  7. import styles from './index.less';
  8. let timer;
  9. function Hardware() {
  10. const { projectId } = useParams();
  11. const { data, run, loading } = useRequest(queryDevice, {
  12. manual: true,
  13. onSuccess(data) {
  14. UnityAction.sendMsg('devLocate', JSON.stringify(data.list));
  15. },
  16. });
  17. const { data: draw } = useRequest(queryScanDuration, {
  18. defaultParams: [projectId],
  19. formatResult(res) {
  20. return res.data.draw;
  21. },
  22. });
  23. const getDeviceIconClassName = useCallback((status) => {
  24. let statusClassName = '';
  25. if (status == 2) {
  26. statusClassName = styles.error;
  27. } else if (status == 3) {
  28. statusClassName = styles.offline;
  29. }
  30. return `${styles.icon} ${statusClassName}`;
  31. });
  32. const onHandleClick = (item) => {
  33. UnityAction.sendMsg('SingleDevLocate', JSON.stringify([item]));
  34. };
  35. useEffect(() => {
  36. if (!draw) return;
  37. run(projectId);
  38. timer = setInterval(() => {
  39. run(projectId);
  40. }, draw);
  41. return () => clearInterval(timer);
  42. }, [draw]);
  43. return (
  44. <PageContent closeable={false}>
  45. <PageTitle onReturn={() => UnityAction.sendMsg('menuItem', '智能管控')}>
  46. 设备定位
  47. </PageTitle>
  48. {/* <Spin spinning={loading}> */}
  49. {data?.list?.map((item) => (
  50. <div
  51. key={item.id}
  52. className={`card-box ${styles.itemLong}`}
  53. style={{ justifyContent: 'space-between' }}
  54. onClick={() => onHandleClick(item)}
  55. >
  56. <div>
  57. <i
  58. className={getDeviceIconClassName(item.mobile_device_status)}
  59. ></i>
  60. {item.mobile_device_name}
  61. </div>
  62. <div onClick={() => onHandleClick(item)}>定位</div>
  63. </div>
  64. ))}
  65. {/* </Spin> */}
  66. </PageContent>
  67. );
  68. }
  69. export default Hardware;