From 1bc33546a044cbc84dd9595c19dbcd9a4e309fc9 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期六, 10 一月 2026 14:06:10 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx |  127 ++++++++++++++++++++++++++----------------
 1 files changed, 79 insertions(+), 48 deletions(-)

diff --git a/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
index 2af650d..c024488 100644
--- a/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
+++ b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
@@ -8,6 +8,7 @@
     Autocomplete,
     Checkbox,
     Chip,
+    Paper,
 } from '@mui/material';
 import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
 import CheckBoxIcon from '@mui/icons-material/CheckBox';
@@ -22,62 +23,67 @@
     codeList,
     onSave,
     disableSave,
+    onDelete,
+    canDelete = false,
 }) => {
     const translate = useTranslate();
     const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
     const checkedIcon = <CheckBoxIcon fontSize="small" />;
 
-    const getOptionLabel = (option) => {
-        if (option == null) {
+    const normalizeAgvId = (agv) => {
+        if (agv == null) {
             return '';
         }
-        if (typeof option === 'string' || typeof option === 'number') {
-            return String(option);
+        if (typeof agv === 'object') {
+            return String(agv.uuid ?? '');
         }
-        const label =
-            option?.label ??
-            option?.uuid ??
-            option?.name ??
-            option?.agvNo ??
-            option?.value ??
-            option?.id ??
-            '';
-        return label != null ? String(label) : '';
+        return String(agv);
     };
 
     const getOptionId = (option) => {
-        if (option == null) {
-            return '';
+        return normalizeAgvId(option)
+    };
+
+    const getOptionLabel = (option) => {
+        return option?.uuid ?? '';
+    };
+
+    const handleSaveClick = () => {
+        if (disableSave) {
+            return;
         }
-        if (typeof option === 'string' || typeof option === 'number') {
-            return String(option);
+        const confirmMsg = translate('page.map.area.confirm.save');
+        if (window.confirm(confirmMsg)) {
+            onSave?.();
         }
-        const identifier =
-            option?.value ??
-            option?.id ??
-            option?.uuid ??
-            option?.agvNo ??
-            option?.code ??
-            option?.name ??
-            '';
-        return identifier != null ? String(identifier) : '';
+    };
+
+    const handleDeleteClick = () => {
+        if (!canDelete) {
+            return;
+        }
+        const confirmMsg = translate('page.map.area.confirm.delete');
+        if (window.confirm(confirmMsg)) {
+            onDelete?.();
+        }
     };
 
     return (
-        <Stack spacing={2}>
+        <Stack spacing={3} sx={{ mt: 1 }}>
             <Stack direction="row" spacing={1} alignItems="center">
                 <TextField
-                    label={translate('page.map.area.name', { _: '鍚嶇О' })}
+                    label={translate('page.map.area.form.name')}
                     size="small"
                     fullWidth
+                    variant="outlined"
                     value={name}
                     onChange={(e) => setName(e.target.value)}
                 />
             </Stack>
 
-            <Box>
+            <Box >
                 <Typography variant="subtitle2" gutterBottom>
-                    {translate('page.map.area.agv', { _: '娣诲姞AGV灏忚溅' })}
+                    {translate('page.map.area.form.agv')}
                 </Typography>
                 <Autocomplete
                     multiple
@@ -85,7 +91,9 @@
                     options={agvOptions || []}
                     value={agvList || []}
                     getOptionLabel={getOptionLabel}
-                    isOptionEqualToValue={(option, value) => getOptionId(option) === getOptionId(value)}
+                    isOptionEqualToValue={(option, value) => {
+                        return getOptionId(option) === getOptionId(value);
+                    }}
                     onChange={(event, newValue) => {
                         setAgvList(newValue);
                     }}
@@ -93,10 +101,10 @@
                         value.map((option, index) => (
                             <Chip
                                 {...getTagProps({ index })}
-                                key={getOptionId(option)}
-                                label={getOptionLabel(option)}
+                                key={getOptionId(option) || index}
+                                label={normalizeAgvId(option)}
                                 size="small"
-                                sx={{ mr: 0.5 }}
+                                sx={{ mr: 0.5, fontWeight: 'bold' }}
                             />
                         ))
                     }
@@ -116,6 +124,7 @@
                                     fontSize: 13,
                                     display: 'flex',
                                     alignItems: 'center',
+                                    height: 30,
                                     ...(optionProps.style || {}),
                                 }}
                             >
@@ -133,7 +142,8 @@
                         <TextField
                             {...params}
                             size="small"
-                            placeholder={translate('page.map.area.agv.placeholder', { _: '閫夋嫨AGV' })}
+                            variant="outlined"
+                            placeholder={translate('page.map.area.form.agvPlaceholder')}
                         />
                     )}
                 />
@@ -141,22 +151,43 @@
 
             <Box>
                 <Typography variant="subtitle2" gutterBottom>
-                    {translate('page.map.area.barcodes', { _: '鍖哄煙鍐呮潯鐮侀泦鍚�' })}
+                    {translate('page.map.area.form.codes', { count: codeList.length })}
                 </Typography>
-                <TextField
-                    placeholder={translate('page.map.area.barcodes.placeholder', { _: '姣忚涓�涓潯鐮�' })}
-                    fullWidth
-                    multiline
-                    minRows={6}
-                    maxRows={10}
-                    value={(codeList || []).join('\n')}
-                    InputProps={{ readOnly: true }}
-                />
+                <Paper
+                    variant="outlined"
+                    sx={{
+                        minHeight: 220,
+                        maxHeight: 320,
+                        overflowY: 'auto',
+                        p: 1,
+                        display: 'flex',
+                        flexWrap: 'wrap',
+                        gap: 0.75,
+                    }}
+                >
+                    {(codeList || []).length > 0 ? (
+                        codeList.map((code) => (
+                            <Chip
+                                key={code}
+                                label={code}
+                                size="small"
+                                sx={{ fontFamily: 'monospace', fontSize: 12 }}
+                            />
+                        ))
+                    ) : (
+                        <Typography variant="body2" color="text.secondary">
+                            {translate('page.map.area.form.codesEmpty')}
+                        </Typography>
+                    )}
+                </Paper>
             </Box>
 
-            <Box display="flex" justifyContent="flex-start">
-                <Button variant="contained" onClick={onSave} disabled={disableSave}>
-                    {translate('common.action.save', { _: '淇濆瓨' })}
+            <Box display="flex" justifyContent="space-between" alignItems="center">
+                <Button variant="contained" onClick={handleSaveClick} disabled={disableSave}>
+                    {translate('ra.action.save')}
+                </Button>
+                <Button variant="text" color="error" onClick={handleDeleteClick} disabled={!canDelete}>
+                    {translate('ra.action.delete')}
                 </Button>
             </Box>
         </Stack>

--
Gitblit v1.9.1