From 8b093ec56bd4e5e721bf48ca497efc819691b2bc Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 15 十二月 2025 16:21:05 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx | 89 +++++++++++++++++++++++++++++++++++---------
1 files changed, 70 insertions(+), 19 deletions(-)
diff --git a/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
index 639edc0..d6d6463 100644
--- a/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
+++ b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
@@ -1,17 +1,44 @@
import React from 'react';
-import { Stack, TextField, Button, Typography, Box } from '@mui/material';
+import {
+ Stack,
+ TextField,
+ Button,
+ Typography,
+ Box,
+ Autocomplete,
+ Checkbox,
+} from '@mui/material';
+import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
+import CheckBoxIcon from '@mui/icons-material/CheckBox';
import { useTranslate } from 'react-admin';
const AreaBasicTab = ({
- areaName,
- setAreaName,
+ name,
+ setName,
+ agvOptions,
agvList,
setAgvList,
- barcodeList,
- setBarcodeList,
+ codeListText,
onSave,
+ disableSave,
}) => {
const translate = useTranslate();
+ const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
+ const checkedIcon = <CheckBoxIcon fontSize="small" />;
+
+ const getOptionLabel = (option) => {
+ if (typeof option === 'string') {
+ return option;
+ }
+ return option?.label ?? option?.name ?? option?.agvNo ?? option?.value ?? option?.id ?? '';
+ };
+
+ const getOptionId = (option) => {
+ if (typeof option === 'string') {
+ return option;
+ }
+ return option?.value ?? option?.id ?? option?.agvNo ?? option?.code ?? option?.name ?? '';
+ };
return (
<Stack spacing={2}>
@@ -19,25 +46,43 @@
<TextField
label={translate('page.map.area.name', { _: '鍚嶇О' })}
fullWidth
- value={areaName}
- onChange={(e) => setAreaName(e.target.value)}
+ value={name}
+ onChange={(e) => setName(e.target.value)}
/>
- <Button variant="contained" onClick={onSave}>
- {translate('common.action.save', { _: '淇濆瓨' })}
- </Button>
</Stack>
<Box>
<Typography variant="subtitle2" gutterBottom>
{translate('page.map.area.agv', { _: '娣诲姞AGV灏忚溅' })}
</Typography>
- <TextField
- placeholder={translate('page.map.area.agv.placeholder', { _: '鐢ㄩ�楀彿鍒嗛殧锛歛gv01, agv02' })}
- fullWidth
- multiline
- minRows={3}
- value={agvList}
- onChange={(e) => setAgvList(e.target.value)}
+ <Autocomplete
+ multiple
+ disableCloseOnSelect
+ options={agvOptions || []}
+ value={agvList || []}
+ getOptionLabel={getOptionLabel}
+ isOptionEqualToValue={(option, value) => getOptionId(option) === getOptionId(value)}
+ onChange={(event, newValue) => {
+ setAgvList(newValue);
+ }}
+ renderOption={(props, option, { selected }) => (
+ <li {...props}>
+ <Checkbox
+ icon={icon}
+ checkedIcon={checkedIcon}
+ style={{ marginRight: 8 }}
+ checked={selected}
+ />
+ {getOptionLabel(option)}
+ </li>
+ )}
+ renderInput={(params) => (
+ <TextField
+ {...params}
+ placeholder={translate('page.map.area.agv.placeholder', { _: '閫夋嫨AGV' })}
+ />
+ )}
+ ListboxProps={{ sx: { maxHeight: 280 } }}
/>
</Box>
@@ -51,10 +96,16 @@
multiline
minRows={6}
maxRows={10}
- value={barcodeList}
- onChange={(e) => setBarcodeList(e.target.value)}
+ value={codeListText}
+ InputProps={{ readOnly: true }}
/>
</Box>
+
+ <Box display="flex" justifyContent="flex-start">
+ <Button variant="contained" onClick={onSave} disabled={disableSave}>
+ {translate('common.action.save', { _: '淇濆瓨' })}
+ </Button>
+ </Box>
</Stack>
);
};
--
Gitblit v1.9.1