From 3c190ac12e00e0f3435984c5d57351d136530c09 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 15 三月 2024 15:51:26 +0800
Subject: [PATCH] #

---
 zy-asrs-flow/src/pages/map/header/search.jsx |  134 +++++++++++++++++++++++++++-----------------
 1 files changed, 83 insertions(+), 51 deletions(-)

diff --git a/zy-asrs-flow/src/pages/map/header/search.jsx b/zy-asrs-flow/src/pages/map/header/search.jsx
index b7546a7..d59615c 100644
--- a/zy-asrs-flow/src/pages/map/header/search.jsx
+++ b/zy-asrs-flow/src/pages/map/header/search.jsx
@@ -1,71 +1,103 @@
 import React, { useState, useRef, useEffect } from 'react';
-import { Layout, Button, Flex, Row, Col, FloatButton, Select, Spin, AutoComplete } from 'antd';
-import { FormattedMessage, useIntl, useModel } from '@umijs/max';
-import {
-    CloseOutlined
-} from '@ant-design/icons';
+import { Select, AutoComplete } from 'antd';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import { CloseOutlined } from '@ant-design/icons';
 import * as Utils from '../utils'
 
 const renderTitle = (title, uuid) => (
     <>
-        <span
-            style={{
-                fontWeight: 'bold'
-            }}
-        >
-            {title}
-        </span>
-        <span
-            style={{
-                float: 'right',
-                opacity: .3
-            }}
-        >
-            {uuid}
-        </span>
+        <span style={{ fontWeight: 'bold' }} >{title}</span>
+        <span style={{ float: 'right', opacity: .3 }} >{uuid}</span>
     </>
 );
+
+const sensorTypeSelectOptionsFn = (intl) => {
+    let options = [];
+    Object.entries(Utils.SENSOR_TYPE).forEach(([key, value]) => {
+        switch (key) {
+            case Utils.SENSOR_TYPE.SHELF:
+                options.push({
+                    value: value,
+                    label:
+                        (
+                            <>
+                                <span style={{ fontWeight: 'bold' }} >{intl.formatMessage({ id: 'map.sensor.type.shelf', defaultMessage: '璐ф灦' })}</span>
+                            </>
+                        )
+                })
+                break;
+            case Utils.SENSOR_TYPE.AGV:
+                options.push({
+                    value: value,
+                    label:
+                        (
+                            <>
+                                <span style={{ fontWeight: 'bold' }} >{intl.formatMessage({ id: 'map.sensor.type.agv', defaultMessage: '鏃犱汉灏忚溅' })}</span>
+                            </>
+                        )
+                })
+                break;
+            default:
+                break;
+        }
+
+    })
+    return options;
+}
+
+function getAllSensorList(curSensorType) {
+    let sensorListAll = [];
+    Utils.getMapContainer().children.forEach(child => {
+        if (child?.data?.type === curSensorType && child?.data?.no) {
+            sensorListAll.push({
+                value: child.data.no,
+                label: renderTitle(child.data.no, child.data.uuid)
+            })
+        }
+    });
+    return sensorListAll;
+}
 
 const MapSearch = (props) => {
     const intl = useIntl();
     const { curSprite: curSensor, setCurSPrite: setCurSensor } = props;
 
-    const sensorTypeSelectOptions = Utils.sensorTypeSelectOptions(intl);
-
+    const sensorTypeSelectOptions = sensorTypeSelectOptionsFn(intl);
     const [curSensorType, setCurSensorType] = React.useState(sensorTypeSelectOptions?.[0]?.value);
+
     const [sensorList, setSensorList] = React.useState([]);
-    const [curSensorUuid, setCurSensorUuid] = React.useState(null);
+    const [filterSensorList, setFilterSensorList] = React.useState([]);
     const [curSensorLabel, setCurSensorLabel] = React.useState(null);
 
-    useEffect(() => {
-        // setSensorList([]);
-        // setCurSensorUuid(null);
-        // setCurSensorLabel(null);
-        // setCurSensor(null);
-    }, [props]);
+    // useEffect(() => {
+    //     const intervalID = setInterval(() => {
+    //         if (!curSensorLabel) {
+    //             let sensorListAll = getAllSensorList(curSensorType);
+    //             setSensorList(sensorListAll);
+    //             setFilterSensorList(sensorListAll);
+    //         }
+    //     }, 1000)
 
+    //     return () => clearInterval(intervalID);
+    // }, [props]);
+
+    // first select
     React.useEffect(() => {
-        if (!Utils.getMapContainer()) {
-            return
-        }
-        setSensorList([]);
-        switch (curSensorType) {
-            case Utils.SENSOR_TYPE.SHELF:
-                Utils.getMapContainer().children.forEach(child => {
-                    if (child?.data?.type === Utils.SENSOR_TYPE.SHELF && child?.data?.no) {
-                        setSensorList(prevArr => [...prevArr, {
-                            value: child.data.no,
-                            label: renderTitle(child.data.no, child.data.uuid)
-                        }]);
-                    }
-                })
-                break;
-            case Utils.SENSOR_TYPE.AGV:
-                break;
-            default:
-                break;
-        }
+        if (!Utils.getMapContainer()) { return; }
+        let sensorListAll = getAllSensorList(curSensorType);
+        setSensorList(sensorListAll);
+        setFilterSensorList(sensorListAll);
+        setCurSensorLabel(null);
     }, [curSensorType])
+
+    // second select
+    React.useEffect(() => {
+        if (!Utils.getMapContainer()) { return; }
+        if ((curSensorLabel !== null || curSensorLabel != undefined)
+            && sensorList && sensorList.length > 0) {
+            setFilterSensorList(sensorList.filter(item => item.value.includes(curSensorLabel)));
+        }
+    }, [curSensorLabel])
 
     return (
         <>
@@ -92,10 +124,10 @@
                     clearIcon: <CloseOutlined />
                 }}
                 popupMatchSelectWidth={500}
-                options={sensorList}
+                options={filterSensorList}
                 value={curSensorLabel}
                 onSelect={(value, option) => {
-                    const uuid = option.label?.props?.children?.[1].props.children
+                    const uuid = option.label?.props?.children?.[1].props.children;
                     setCurSensor(Utils.findSpriteByUuid(uuid));
                 }}
                 onChange={setCurSensorLabel}

--
Gitblit v1.9.1