From e246aa751c6a8b36721e8acf70acc238188f49dc Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 15 十二月 2025 11:12:25 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/areaSettings/index.jsx |   61 ++++++++++++++++++++++--------
 1 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/zy-acs-flow/src/map/areaSettings/index.jsx b/zy-acs-flow/src/map/areaSettings/index.jsx
index 11dd4a1..3871dfb 100644
--- a/zy-acs-flow/src/map/areaSettings/index.jsx
+++ b/zy-acs-flow/src/map/areaSettings/index.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, useMemo } from 'react';
 import { useTranslate } from "react-admin";
 import {
     Drawer,
@@ -19,6 +19,13 @@
 import AreaAdvancedTab from './AreaAdvancedTab';
 import { getAreaInfo } from '../http';
 
+const getAgvOptionId = (option) => {
+    if (typeof option === 'string') {
+        return option;
+    }
+    return option?.value ?? option?.id ?? option?.agvNo ?? option?.code ?? option?.name ?? '';
+};
+
 const AreaSettings = (props) => {
     const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH } = props;
     const theme = useTheme();
@@ -31,7 +38,7 @@
 
     const [activeTab, setActiveTab] = useState(0);
     const [areaName, setAreaName] = useState('');
-    const [agvList, setAgvList] = useState('');
+    const [selectedAgvs, setSelectedAgvs] = useState([]);
     const [barcodeList, setBarcodeList] = useState('');
     const [areaCode, setAreaCode] = useState('');
     const [maxQty, setMaxQty] = useState('');
@@ -48,29 +55,49 @@
     }
 
     useEffect(() => {
-        if (sprite?.data) {
-            console.log(sprite.data);
+        if (sprite?.data?.id) {
             fetchAreaInfo(sprite.data.id);
-
-            setAreaName(sprite.data.name || '');
-            setAreaCode(sprite.data.code || '');
-            setMaxQty(sprite.data.maxQty || '');
-            setSpeedLimit(sprite.data.speedLimit || '');
-            setShapeData(sprite.data.shape || '');
-            setPriority(sprite.data.priority || '');
-            setAgvList((sprite.data.agvs || []).join(', '));
-            setBarcodeList((sprite.data.barcodes || []).join('\n'));
         } else {
+            setCurAreaInfo(null);
             setAreaName('');
             setAreaCode('');
             setMaxQty('');
             setSpeedLimit('');
             setShapeData('');
             setPriority('');
-            setAgvList('');
+            setSelectedAgvs([]);
             setBarcodeList('');
         }
     }, [sprite]);
+
+    const agvOptions = useMemo(() => {
+        if (!curAreaInfo) {
+            return [];
+        }
+        return curAreaInfo.agvOptions || curAreaInfo.agvCandidates || curAreaInfo.agvList || [];
+    }, [curAreaInfo]);
+
+    useEffect(() => {
+        if (curAreaInfo) {
+            setAreaName(curAreaInfo.name || '');
+            setAreaCode(curAreaInfo.code || '');
+            setMaxQty(curAreaInfo.maxQty || '');
+            setSpeedLimit(curAreaInfo.speedLimit || '');
+            setShapeData(curAreaInfo.shape || '');
+            setPriority(curAreaInfo.priority || '');
+
+            const selected = curAreaInfo.selectedAgvs || curAreaInfo.agvs || [];
+            if (Array.isArray(selected) && Array.isArray(agvOptions) && agvOptions.length > 0) {
+                const optionMap = new Map(agvOptions.map(option => [getAgvOptionId(option), option]));
+                setSelectedAgvs(selected.map(item => optionMap.get(getAgvOptionId(item)) || item));
+            } else {
+                setSelectedAgvs(selected);
+            }
+
+            const barcodes = curAreaInfo.barcodes || curAreaInfo.barcodeList || [];
+            setBarcodeList(Array.isArray(barcodes) ? barcodes.join('\n') : (barcodes || ''));
+        }
+    }, [curAreaInfo, agvOptions]);
 
     const handleTabChange = (event, newValue) => {
         setActiveTab(newValue);
@@ -140,10 +167,10 @@
                                             <AreaBasicTab
                                                 areaName={areaName}
                                                 setAreaName={setAreaName}
-                                                agvList={agvList}
-                                                setAgvList={setAgvList}
+                                                agvOptions={agvOptions}
+                                                selectedAgvs={selectedAgvs}
+                                                setSelectedAgvs={setSelectedAgvs}
                                                 barcodeList={barcodeList}
-                                                setBarcodeList={setBarcodeList}
                                                 onSave={handleSaveBasic}
                                             />
                                         )}

--
Gitblit v1.9.1