#
vincentlu
2025-12-15 e246aa751c6a8b36721e8acf70acc238188f49dc
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}
                                            />
                                        )}