From 1ed4b56aee1e01d9cdeca3766c687c0ebfe45965 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 15 十二月 2025 10:27:29 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/areaSettings/AreaAdvancedTab.jsx |   78 +++++++
 /dev/null                                            |  376 ----------------------------------
 zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx    |   62 +++++
 zy-acs-flow/src/map/areaSettings/index.jsx           |  100 +++++++--
 4 files changed, 218 insertions(+), 398 deletions(-)

diff --git a/zy-acs-flow/src/map/areaSettings/AreaAdvancedTab.jsx b/zy-acs-flow/src/map/areaSettings/AreaAdvancedTab.jsx
new file mode 100644
index 0000000..cbb8f51
--- /dev/null
+++ b/zy-acs-flow/src/map/areaSettings/AreaAdvancedTab.jsx
@@ -0,0 +1,78 @@
+import React from 'react';
+import { Box, Grid, TextField, Button } from '@mui/material';
+import { useTranslate } from 'react-admin';
+
+const AreaAdvancedTab = ({
+    areaCode,
+    setAreaCode,
+    maxQty,
+    setMaxQty,
+    speedLimit,
+    setSpeedLimit,
+    shapeData,
+    setShapeData,
+    priority,
+    setPriority,
+    onSave,
+}) => {
+    const translate = useTranslate();
+
+    return (
+        <Box component="form" onSubmit={(e) => { e.preventDefault(); onSave(); }}>
+            <Grid container spacing={2}>
+                <Grid item xs={12}>
+                    <TextField
+                        label={translate('page.map.area.code', { _: '鍖哄煙缂栫爜' })}
+                        fullWidth
+                        value={areaCode}
+                        onChange={(e) => setAreaCode(e.target.value)}
+                    />
+                </Grid>
+                <Grid item xs={6}>
+                    <TextField
+                        label={translate('page.map.area.maxQty', { _: '鏈�澶ф暟閲�' })}
+                        fullWidth
+                        type="number"
+                        value={maxQty}
+                        onChange={(e) => setMaxQty(e.target.value)}
+                    />
+                </Grid>
+                <Grid item xs={6}>
+                    <TextField
+                        label={translate('page.map.area.speedLimit', { _: '閫熷害闄愬埗' })}
+                        fullWidth
+                        type="number"
+                        value={speedLimit}
+                        onChange={(e) => setSpeedLimit(e.target.value)}
+                    />
+                </Grid>
+                <Grid item xs={12}>
+                    <TextField
+                        label={translate('page.map.area.shape', { _: '褰㈢姸鏁版嵁' })}
+                        fullWidth
+                        multiline
+                        minRows={3}
+                        value={shapeData}
+                        onChange={(e) => setShapeData(e.target.value)}
+                    />
+                </Grid>
+                <Grid item xs={12}>
+                    <TextField
+                        label={translate('page.map.area.priority', { _: '浼樺厛绾�' })}
+                        fullWidth
+                        type="number"
+                        value={priority}
+                        onChange={(e) => setPriority(e.target.value)}
+                    />
+                </Grid>
+                <Grid item xs={12}>
+                    <Button variant="contained" type="submit">
+                        {translate('common.action.save', { _: '淇濆瓨' })}
+                    </Button>
+                </Grid>
+            </Grid>
+        </Box>
+    );
+};
+
+export default AreaAdvancedTab;
diff --git a/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
new file mode 100644
index 0000000..639edc0
--- /dev/null
+++ b/zy-acs-flow/src/map/areaSettings/AreaBasicTab.jsx
@@ -0,0 +1,62 @@
+import React from 'react';
+import { Stack, TextField, Button, Typography, Box } from '@mui/material';
+import { useTranslate } from 'react-admin';
+
+const AreaBasicTab = ({
+    areaName,
+    setAreaName,
+    agvList,
+    setAgvList,
+    barcodeList,
+    setBarcodeList,
+    onSave,
+}) => {
+    const translate = useTranslate();
+
+    return (
+        <Stack spacing={2}>
+            <Stack direction="row" spacing={1} alignItems="center">
+                <TextField
+                    label={translate('page.map.area.name', { _: '鍚嶇О' })}
+                    fullWidth
+                    value={areaName}
+                    onChange={(e) => setAreaName(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)}
+                />
+            </Box>
+
+            <Box>
+                <Typography variant="subtitle2" gutterBottom>
+                    {translate('page.map.area.barcodes', { _: '鍖哄煙鍐呮潯鐮侀泦鍚�' })}
+                </Typography>
+                <TextField
+                    placeholder={translate('page.map.area.barcodes.placeholder', { _: '姣忚涓�涓潯鐮�' })}
+                    fullWidth
+                    multiline
+                    minRows={6}
+                    maxRows={10}
+                    value={barcodeList}
+                    onChange={(e) => setBarcodeList(e.target.value)}
+                />
+            </Box>
+        </Stack>
+    );
+};
+
+export default AreaBasicTab;
diff --git a/zy-acs-flow/src/map/areaSettings/ConfigSettings.jsx b/zy-acs-flow/src/map/areaSettings/ConfigSettings.jsx
deleted file mode 100644
index 2ac2917..0000000
--- a/zy-acs-flow/src/map/areaSettings/ConfigSettings.jsx
+++ /dev/null
@@ -1,178 +0,0 @@
-import React, { useEffect } from 'react';
-import { useForm, Controller } from 'react-hook-form';
-import {
-    Box,
-    Grid,
-    Typography,
-    TextField,
-    Slider,
-    Button,
-    Select,
-    MenuItem,
-    InputLabel,
-    FormControl,
-    Stack,
-    Divider,
-} from '@mui/material';
-import { useTranslate } from 'react-admin';
-import * as Tool from '../tool';
-import ConfirmButton from '../../page/components/ConfirmButton';
-import {
-    DEVICE_TYPE,
-} from '../constants';
-import { useNotification } from '../Notification';
-
-const ConfigSettings = (props) => {
-    const { sprite, onSubmit } = props;
-    const notify = useNotification();
-    const translate = useTranslate();
-
-    const { control, handleSubmit, reset, watch, setValue, formState: { errors } } = useForm({
-        defaultValues: { ...sprite?.data },
-    });
-
-    useEffect(() => {
-        if (sprite?.data) {
-            reset({
-                ...sprite.data
-            });
-        }
-    }, [sprite, reset]);
-
-    const deviceType = sprite?.data?.type;
-
-    const rowValue = watch('row');
-    const bayValue = watch('bay');
-
-    useEffect(() => {
-        if (deviceType === DEVICE_TYPE.SHELF) {
-            if (rowValue != null && bayValue != null && rowValue !== '' && bayValue !== '') {
-                setValue('no', `${rowValue}-${bayValue}`);
-            } else {
-                setValue('no', '');
-            }
-        }
-    }, [
-        setValue,
-        deviceType,
-        rowValue,
-        bayValue,
-    ]);
-
-    const onFormSubmit = (data) => {
-        if (sprite?.data) {
-            Object.keys(data).forEach((key) => {
-                sprite.data[key] = data[key];
-            });
-        }
-        if (onSubmit) {
-            onSubmit(data);
-        }
-        notify.info(translate('common.response.success'));
-    };
-
-    return (
-        <>
-            <Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}>
-                <Grid container spacing={1.4}>
-
-                    {deviceType === DEVICE_TYPE.SHELF && (
-                        <>
-                            <Grid item xs={6}>
-                                <Controller
-                                    name="row"
-                                    control={control}
-                                    render={({ field }) => (
-                                        <TextField
-                                            {...field}
-                                            label={translate('page.map.settings.config.shelf.row')}
-                                            type="number"
-                                            value={field.value ?? ''}
-                                            fullWidth
-                                            onChange={(e) => {
-                                                field.onChange(e.target.value === '' ? '' : Number(e.target.value));
-                                            }}
-                                        />
-                                    )}
-                                />
-                            </Grid>
-                            <Grid item xs={6}>
-                                <Controller
-                                    name="bay"
-                                    control={control}
-                                    render={({ field }) => (
-                                        <TextField
-                                            {...field}
-                                            label={translate('page.map.settings.config.shelf.bay')}
-                                            type="number"
-                                            value={field.value ?? ''}
-                                            fullWidth
-                                            onChange={(e) => {
-                                                field.onChange(e.target.value === '' ? '' : Number(e.target.value));
-                                            }}
-                                        />
-                                    )}
-                                />
-                            </Grid>
-                        </>
-                    )}
-
-                    {deviceType === DEVICE_TYPE.CHARGE && (
-                        <>
-                        </>
-                    )}
-
-                    {deviceType === DEVICE_TYPE.STATION && (
-                        <>
-                        </>
-                    )}
-
-                    {deviceType === DEVICE_TYPE.POINT && (
-                        <>
-                        </>
-                    )}
-
-                    <Grid item xs={12}>
-                        <Divider />
-                    </Grid>
-
-                    <Grid item xs={6}>
-                        <Controller
-                            name="no"
-                            control={control}
-                            rules={{
-                                required: translate('ra.validation.required')    // warn msg
-                            }}
-                            render={({ field }) => {
-                                return (
-                                    <TextField
-                                        {...field}
-                                        label={translate('page.map.settings.config.base.no')}
-                                        type="text"
-                                        value={field.value ?? ''}
-                                        error={!!errors.no} // show red warn
-                                        helperText={errors.no ? errors.no.message : null}   // show warn msg
-                                        fullWidth
-                                        onChange={(e) => {
-                                            field.onChange(e);
-                                        }}
-                                    />
-                                )
-                            }}
-                        />
-                    </Grid>
-
-                    <Grid item xs={12} mt={2}>
-                        <Stack direction="row" spacing={2}>
-                            <Button variant="contained" color="primary" type="submit">
-                                {translate('ra.action.confirm')}
-                            </Button>
-                        </Stack>
-                    </Grid>
-                </Grid>
-            </Box>
-        </>
-    );
-};
-
-export default ConfigSettings;
diff --git a/zy-acs-flow/src/map/areaSettings/CopyDrawer.jsx b/zy-acs-flow/src/map/areaSettings/CopyDrawer.jsx
deleted file mode 100644
index 19fc976..0000000
--- a/zy-acs-flow/src/map/areaSettings/CopyDrawer.jsx
+++ /dev/null
@@ -1,412 +0,0 @@
-import React, { useEffect } from 'react';
-import { useForm, useWatch, Controller } from 'react-hook-form';
-import {
-    Box,
-    Grid,
-    Typography,
-    TextField,
-    Card,
-    CardContent,
-    Button,
-    Select,
-    MenuItem,
-    useTheme,
-    FormControl,
-    Stack,
-    Divider,
-    Drawer,
-    IconButton,
-    Switch,
-    FormControlLabel,
-    FormLabel,
-    ToggleButtonGroup,
-    ToggleButton,
-} from '@mui/material';
-import CloseIcon from '@mui/icons-material/Close';
-import { useTranslate } from 'react-admin';
-import * as Tool from '../tool';
-import { PAGE_DRAWER_WIDTH } from '@/config/setting';
-import {
-    DEVICE_TYPE,
-} from '../constants';
-import { useNotification } from '../Notification';
-
-const incrementOptionsMap = {
-    [DEVICE_TYPE.SHELF]: [
-        { value: 'row', label: 'page.map.settings.config.shelf.row' },
-        { value: 'bay', label: 'page.map.settings.config.shelf.bay' },
-    ],
-    [DEVICE_TYPE.CHARGE]: [
-        { value: 'no', label: 'page.map.settings.config.base.no' },
-    ],
-    [DEVICE_TYPE.STATION]: [
-        { value: 'no', label: 'page.map.settings.config.base.no' },
-    ],
-    [DEVICE_TYPE.POINT]: [
-        { value: 'no', label: 'page.map.settings.config.base.no' },
-    ],
-};
-
-
-const validateIncrement = (value, deviceType, sprite, translate) => {
-    if (!value) {
-        return true;
-    }
-    switch (deviceType) {
-        case DEVICE_TYPE.SHELF:
-            if (!sprite?.data?.row || !sprite?.data?.bay) {
-                return translate('page.map.settings.map.copy.valid.shelf');
-            }
-            break;
-        default:
-            if (!sprite?.data?.no) {
-                return translate('page.map.settings.map.copy.valid.common');
-            }
-            break;
-    }
-    return true;
-};
-
-const getDefaultFormValues = (value = {}) => ({
-    copyDirect: value.copyDirect || '',
-    copyCount: value.copyCount || '',
-    gap: 0.0,
-    autoIncrement: false,
-    incrementMode: 'ascending',
-    incrementValue: undefined,
-});
-
-const CopyDrawer = (props) => {
-    const {
-        open,
-        onCancel,
-        sprite,
-        value,
-        width = PAGE_DRAWER_WIDTH,
-        handleOnCopy,
-        setLastCopiedSprites,
-        setSpriteSettings,
-    } = props;
-    const notify = useNotification();
-    const translate = useTranslate();
-    const theme = useTheme();
-    const themeMode = theme.palette.mode;
-
-    const deviceType = sprite?.data?.type;
-    const incrementOptions = incrementOptionsMap[deviceType]
-
-    const { control, handleSubmit, reset, watch, setValue, formState: { errors } } = useForm({
-        defaultValues: getDefaultFormValues(value),
-    });
-
-    const autoIncrement = useWatch({ control, name: 'autoIncrement' });
-    const incrementValue = useWatch({ control, name: 'incrementValue' });
-
-    useEffect(() => {
-        if (sprite && value && Object.keys(value).length > 0) {
-            reset(getDefaultFormValues(value));
-        }
-    }, [sprite, value, reset, incrementOptions, setValue]);
-
-    useEffect(() => {
-        if (autoIncrement && incrementOptions && incrementOptions.length > 0) {
-            if (!incrementValue) {
-                setValue('incrementValue', incrementOptions[0].value);
-            }
-        } else {
-            setValue('incrementValue', undefined);
-        }
-    }, [autoIncrement, incrementOptions, setValue]);
-
-    const handleClose = () => {
-        onCancel();
-    }
-
-    const onFormSubmit = (data) => {
-        if (!sprite || !data || Object.keys(data).length === 0) {
-            return;
-        }
-
-        const { copyCount, copyDirect, gap, autoIncrement, incrementMode, incrementValue } = data;
-        const copiedSprites = [];
-
-        const adjustPosition = (sprite, direction, gap, index) => {
-            const factor = index + 1;
-            switch (direction) {
-                case 'left':
-                    sprite.position.x -= factor * (gap + sprite.width);
-                    break;
-                case 'right':
-                    sprite.position.x += factor * (gap + sprite.width);
-                    break;
-                case 'up':
-                    sprite.position.y -= factor * (gap + sprite.height);
-                    break;
-                case 'down':
-                    sprite.position.y += factor * (gap + sprite.height);
-                    break;
-                default:
-                    break;
-            }
-        };
-
-        const incrementSpriteData = (copiedSprite, index) => {
-            const incrementAmount = incrementMode === 'descending' ? -(index + 1) : index + 1;
-            switch (deviceType) {
-                case DEVICE_TYPE.SHELF:
-                    if (incrementValue === 'row') {
-                        copiedSprite.data.row = sprite.data.row + incrementAmount;
-                    }
-                    if (incrementValue === 'bay') {
-                        copiedSprite.data.bay = sprite.data.bay + incrementAmount;
-                    }
-                    if (copiedSprite.data.row && copiedSprite.data.bay) {
-                        copiedSprite.data.no = `${copiedSprite.data.row}-${copiedSprite.data.bay}`;
-                    }
-                    break;
-                default:
-                    if (incrementValue === 'no') {
-                        copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, incrementAmount);
-                    }
-                    break;
-            }
-        };
-
-        for (let i = 0; i < copyCount; i++) {
-            const copiedSprite = Tool.copySprite(sprite);
-
-            adjustPosition(copiedSprite, copyDirect, gap, i);
-
-            // auto-increment-value
-            if (autoIncrement && deviceType) {
-                incrementSpriteData(copiedSprite, i);
-            }
-
-            Tool.getMapContainer().addChild(copiedSprite);
-            Tool.beSettings(copiedSprite, setSpriteSettings);
-            copiedSprites.push(copiedSprite);
-        }
-
-        setLastCopiedSprites(copiedSprites);
-        onCancel();
-        handleOnCopy?.(data);
-        notify.info(translate('common.response.success'));
-    };
-
-    return (
-        <>
-            <Drawer
-                variant="persistent"
-                open={open}
-                anchor="right"
-                onClose={handleClose}
-                sx={{ zIndex: 100, opacity: 1 }}
-            >
-                {(open) && (
-                    <Box pt={12} width={{ xs: '100vW', sm: width }} height={'calc(100vh - 200px);'} mt={{ xs: 2, sm: 1 }} sx={{
-                    }}>
-                        <Stack direction="row" p={2}>
-                            <Typography variant="h6" flex="1">
-                                {translate('page.map.settings.map.copy.title')}
-                            </Typography>
-                            <IconButton onClick={handleClose} size="small">
-                                <CloseIcon />
-                            </IconButton>
-                        </Stack>
-
-                        <Box p={3}>
-                            <Card sx={{
-                                p: 2,
-                                transition: '0.3s',
-                                boxShadow: themeMode === 'light'
-                                    ? '0px 2px 8px rgba(0, 0, 0, 0.1)'
-                                    : '0px 2px 2px rgba(255, 255, 255, 0.1)',
-                                '&:hover': {
-                                    boxShadow: themeMode === 'light'
-                                        ? '0px 4px 16px rgba(0, 0, 0, 0.2)'
-                                        : '0px 4px 8px rgba(255, 255, 255, 0.2)',
-                                },
-                                borderRadius: '8px',
-                            }}>
-                                <CardContent>
-                                    <Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}>
-                                        <Grid container spacing={1.4}>
-                                            <Grid item xs={6}>
-                                                <Controller
-                                                    name="copyDirect"
-                                                    control={control}
-                                                    render={({ field }) => (
-                                                        <TextField
-                                                            {...field}
-                                                            label={translate('page.map.settings.map.copy.direction')}
-                                                            InputProps={{
-                                                                readOnly: true,
-                                                            }}
-                                                            fullWidth
-                                                        />
-                                                    )}
-                                                />
-                                            </Grid>
-                                            <Grid item xs={6}>
-                                                <Controller
-                                                    name="copyCount"
-                                                    control={control}
-                                                    render={({ field }) => (
-                                                        <TextField
-                                                            {...field}
-                                                            label={translate('page.map.settings.map.copy.count')}
-                                                            InputProps={{
-                                                                readOnly: true,
-                                                            }}
-                                                            fullWidth
-                                                        />
-                                                    )}
-                                                />
-                                            </Grid>
-
-                                            <Grid item xs={12}>
-                                                <Controller
-                                                    name="gap"
-                                                    control={control}
-                                                    render={({ field }) => (
-                                                        <TextField
-                                                            {...field}
-                                                            label={translate('page.map.settings.map.copy.field.gap')}
-                                                            type="number"
-                                                            sx={{ width: '50%' }}
-                                                            fullWidth
-                                                            inputProps={{
-                                                                // min: 0,
-                                                                step: 1,
-                                                            }}
-                                                            onChange={(e) => {
-                                                                field.onChange(e.target.value === '' ? '' : Number(e.target.value));
-                                                            }}
-                                                        />
-                                                    )}
-                                                />
-                                            </Grid>
-
-                                            <Grid item xs={12} mt={2} mb={1}>
-                                                <Divider />
-                                            </Grid>
-
-                                            <Grid item xs={12}>
-                                                <Controller
-                                                    name="autoIncrement"
-                                                    control={control}
-                                                    rules={{ validate: (value) => validateIncrement(value, deviceType, sprite, translate) }}
-                                                    render={({ field }) => (
-                                                        <FormControlLabel
-                                                            control={
-                                                                <Switch
-                                                                    {...field}
-                                                                    checked={field.value || false}
-                                                                    onChange={(e) => field.onChange(e.target.checked)}
-                                                                />
-                                                            }
-                                                            label={translate('page.map.settings.map.copy.field.autoIncrement')}
-                                                        />
-                                                    )}
-                                                />
-                                                {errors.autoIncrement && (
-                                                    <Typography color="error">
-                                                        {errors.autoIncrement.message}
-                                                    </Typography>
-                                                )}
-                                            </Grid>
-
-                                            {(!!incrementOptions?.length && autoIncrement) && (
-                                                <Grid item xs={12}>
-                                                    <FormControl fullWidth>
-                                                        <FormLabel sx={{ mb: 1 }}>
-                                                            {translate('page.map.settings.map.copy.field.incrementValue')}
-                                                        </FormLabel>
-                                                        <Controller
-                                                            name='incrementValue'
-                                                            control={control}
-                                                            render={({ field }) => (
-                                                                <ToggleButtonGroup
-                                                                    {...field}
-                                                                    value={field.value}
-                                                                    exclusive
-                                                                    onChange={(event, value) => {
-                                                                        if (value !== null) {
-                                                                            field.onChange(value);
-                                                                        }
-                                                                    }}
-                                                                    fullWidth
-                                                                >
-                                                                    {incrementOptions.map((option, idx) => (
-                                                                        <ToggleButton key={idx} value={option.value}>
-                                                                            {translate(option.label)}
-                                                                        </ToggleButton>
-                                                                    ))}
-                                                                </ToggleButtonGroup>
-                                                            )}
-                                                        />
-                                                    </FormControl>
-                                                </Grid>
-                                            )}
-
-                                            {autoIncrement && (
-                                                <Grid item xs={12}>
-                                                    <FormControl fullWidth>
-                                                        <FormLabel sx={{
-                                                            mb: 1
-                                                        }}>
-                                                            {translate('page.map.settings.map.copy.field.incrementMode')}
-                                                        </FormLabel>
-                                                        <Controller
-                                                            name="incrementMode"
-                                                            control={control}
-                                                            render={({ field }) => (
-                                                                <ToggleButtonGroup
-                                                                    {...field}
-                                                                    value={field.value}
-                                                                    exclusive
-                                                                    onChange={(event, value) => {
-                                                                        if (value !== null) {
-                                                                            field.onChange(value);
-                                                                        }
-                                                                    }}
-                                                                    fullWidth
-                                                                >
-                                                                    <ToggleButton value="ascending">
-                                                                        {translate('page.map.settings.map.copy.field.ascend')}
-                                                                    </ToggleButton>
-                                                                    <ToggleButton value="descending">
-                                                                        {translate('page.map.settings.map.copy.field.descend')}
-                                                                    </ToggleButton>
-                                                                </ToggleButtonGroup>
-                                                            )}
-                                                        />
-                                                    </FormControl>
-                                                </Grid>
-                                            )}
-
-                                            <Grid item xs={12} mt={2}>
-                                                <Divider />
-                                            </Grid>
-
-                                            <Grid item xs={12} mt={2}>
-                                                <Stack direction="row" spacing={2}>
-                                                    <Button variant="contained" color="primary" type="submit">
-                                                        {translate('ra.action.confirm')}
-                                                    </Button>
-                                                </Stack>
-                                            </Grid>
-
-                                        </Grid>
-                                    </Box>
-                                </CardContent>
-                            </Card>
-                        </Box>
-                    </Box>
-                )}
-            </Drawer>
-        </>
-    )
-}
-
-export default CopyDrawer;
\ No newline at end of file
diff --git a/zy-acs-flow/src/map/areaSettings/MapSettings.jsx b/zy-acs-flow/src/map/areaSettings/MapSettings.jsx
deleted file mode 100644
index 6bc16c2..0000000
--- a/zy-acs-flow/src/map/areaSettings/MapSettings.jsx
+++ /dev/null
@@ -1,376 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import { useForm, Controller } from 'react-hook-form';
-import {
-    Box,
-    Grid,
-    Typography,
-    TextField,
-    Slider,
-    Button,
-    Select,
-    MenuItem,
-    InputLabel,
-    FormControl,
-    Stack,
-    Divider,
-} from '@mui/material';
-import MuiInput from '@mui/material/Input';
-import { useTranslate } from 'react-admin';
-import * as Tool from '../tool';
-import ConfirmButton from '../../page/components/ConfirmButton';
-import CopyDrawer from './CopyDrawer';
-
-const MapSettings = (props) => {
-    const { sprite, setSpriteSettings, onSubmit, width, lastCopiedSprites, setLastCopiedSprites } = props;
-    const translate = useTranslate();
-    const [copyVisible, setCopyVisible] = useState(false);
-
-    const { control, handleSubmit, reset, watch } = useForm({
-        defaultValues: {
-            x: sprite?.position?.x || 0,
-            y: sprite?.position?.y || 0,
-            scaleX: sprite?.scale?.x || 1,
-            scaleY: sprite?.scale?.y || 1,
-            rotation: (sprite?.rotation * 180) / Math.PI || 0,
-            copyDirection: 'right',
-            copyCount: 1,
-        },
-    });
-
-    const watchAllFields = watch();
-
-    useEffect(() => {
-        if (sprite) {
-            setCopyVisible(false);
-            reset({
-                x: sprite?.position.x,
-                y: sprite?.position.y,
-                scaleX: sprite?.scale.x,
-                scaleY: sprite?.scale.y,
-                rotation: (sprite?.rotation * 180) / Math.PI,
-            });
-        }
-    }, [sprite, reset]);
-
-    const updateSprite = (data) => {
-        if (sprite) {
-            sprite.position.x = data.x;
-            sprite.position.y = data.y;
-            sprite.scale.x = data.scaleX;
-            sprite.scale.y = data.scaleY;
-            sprite.rotation = (data.rotation * Math.PI) / 180;
-        }
-    };
-
-    const onFormSubmit = (data) => {
-        updateSprite(data);
-        if (onSubmit) {
-            onSubmit(data);
-        }
-    };
-
-    return (
-        <>
-            <Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}>
-                <Grid container spacing={1.4}>
-                    {/* position */}
-                    <Grid item xs={12}>
-                        <Typography variant="inherit">
-                            {translate('page.map.settings.map.base.position')}
-                        </Typography>
-                    </Grid>
-                    <Grid item xs={6} pt={0} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="x"
-                            control={control}
-                            render={({ field }) => (
-                                <TextField
-                                    {...field}
-                                    label="X"
-                                    type="number"
-                                    fullWidth
-                                    onChange={(e) => {
-                                        const value = parseFloat(e.target.value);
-                                        field.onChange(e);
-                                        if (!isNaN(value)) {
-                                            updateSprite({ ...watchAllFields, x: value });
-                                        }
-                                    }}
-                                />
-                            )}
-                        />
-                    </Grid>
-                    <Grid item xs={6} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="y"
-                            control={control}
-                            render={({ field }) => (
-                                <TextField
-                                    {...field}
-                                    label="Y"
-                                    type="number"
-                                    fullWidth
-                                    onChange={(e) => {
-                                        const value = parseFloat(e.target.value);
-                                        field.onChange(e);
-                                        if (!isNaN(value)) {
-                                            updateSprite({ ...watchAllFields, y: value });
-                                        }
-                                    }}
-                                />
-                            )}
-                        />
-                    </Grid>
-
-                    {/* scale */}
-                    <Grid item xs={12}>
-                        <Typography variant="inherit">
-                            {translate('page.map.settings.map.base.scale')}
-                        </Typography>
-                    </Grid>
-                    <Grid item xs={6} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="scaleX"
-                            control={control}
-                            render={({ field }) => (
-                                <TextField
-                                    {...field}
-                                    label="X"
-                                    type="number"
-                                    fullWidth
-                                    inputProps={{ step: 0.1, min: 0.1, max: 10 }}
-                                    onChange={(e) => {
-                                        const value = parseFloat(e.target.value);
-                                        field.onChange(e);
-                                        if (!isNaN(value)) {
-                                            updateSprite({ ...watchAllFields, scaleX: value });
-                                        }
-                                    }}
-                                />
-                            )}
-                        />
-                    </Grid>
-                    <Grid item xs={6} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="scaleY"
-                            control={control}
-                            render={({ field }) => (
-                                <TextField
-                                    {...field}
-                                    label="Y"
-                                    type="number"
-                                    fullWidth
-                                    inputProps={{ step: 0.1, min: 0.1, max: 10 }}
-                                    onChange={(e) => {
-                                        const value = parseFloat(e.target.value);
-                                        field.onChange(e);
-                                        if (!isNaN(value)) {
-                                            updateSprite({ ...watchAllFields, scaleY: value });
-                                        }
-                                    }}
-                                />
-                            )}
-                        />
-                    </Grid>
-
-                    {/* rotation */}
-                    <Grid item xs={12}>
-                        <Typography variant="inherit">
-                            {translate('page.map.settings.map.base.rotation')}
-                        </Typography>
-                    </Grid>
-                    <Grid item xs={12}>
-                        <Box display="flex" alignItems="center">
-                            <Box flex={1} mr={3}>
-                                <Controller
-                                    name="rotation"
-                                    control={control}
-                                    render={({ field }) => (
-                                        <Slider
-                                            {...field}
-                                            // size="small"
-                                            min={0}
-                                            max={360}
-                                            step={1}
-                                            valueLabelDisplay="auto"
-                                            valueLabelFormat={(value) => `${value}掳`}
-                                            onChange={(e, value) => {
-                                                field.onChange(value);
-                                                updateSprite({ ...watchAllFields, rotation: value });
-                                            }}
-                                        />
-                                    )}
-                                />
-                            </Box>
-                            <Box >
-                                <Controller
-                                    name="rotation"
-                                    control={control}
-                                    render={({ field }) => (
-                                        <MuiInput
-                                            {...field}
-                                            size="small"
-                                            value={field.value}
-                                            onChange={(e) => {
-                                                const value = e.target.value === '' ? 0 : Number(e.target.value);
-                                                if (!isNaN(value)) {
-                                                    field.onChange(value);
-                                                    updateSprite({ ...watchAllFields, rotation: value });
-                                                }
-                                            }}
-                                            onBlur={() => {
-                                                if (field.value < 0) {
-                                                    field.onChange(0);
-                                                } else if (field.value > 360) {
-                                                    field.onChange(360);
-                                                }
-                                            }}
-                                            inputProps={{
-                                                step: 1,
-                                                min: 0,
-                                                max: 360,
-                                                type: 'number',
-                                                'aria-labelledby': 'input-slider',
-                                            }}
-                                        />
-                                    )}
-                                />
-                            </Box>
-                        </Box>
-                    </Grid>
-
-                    <Grid item xs={12}>
-                        <Divider />
-                    </Grid>
-
-                    {/* copy */}
-                    <Grid item xs={12}>
-                        <Typography variant="inherit">
-                            {translate('page.map.settings.map.copy.title')}
-                        </Typography>
-                    </Grid>
-                    <Grid item xs={6} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="copyDirection"
-                            control={control}
-                            render={({ field }) => (
-                                <FormControl fullWidth>
-                                    <InputLabel>
-                                        {translate('page.map.settings.map.copy.direction')}
-                                    </InputLabel>
-                                    <Select
-                                        {...field}
-                                        label={translate('page.map.settings.map.copy.direction')}
-                                    >
-                                        <MenuItem value="left">
-                                            {translate('page.map.settings.map.copy.left')}
-                                        </MenuItem>
-                                        <MenuItem value="right">
-                                            {translate('page.map.settings.map.copy.right')}
-                                        </MenuItem>
-                                        <MenuItem value="up">
-                                            {translate('page.map.settings.map.copy.up')}
-                                        </MenuItem>
-                                        <MenuItem value="down">
-                                            {translate('page.map.settings.map.copy.down')}
-                                        </MenuItem>
-                                    </Select>
-                                </FormControl>
-                            )}
-                        />
-                    </Grid>
-                    <Grid item xs={6} sx={{
-                        paddingTop: '8px !important',
-                    }}>
-                        <Controller
-                            name="copyCount"
-                            control={control}
-                            render={({ field }) => (
-                                <TextField
-                                    {...field}
-                                    label={translate('page.map.settings.map.copy.count')}
-                                    type="number"
-                                    fullWidth
-                                    inputProps={{ min: 1 }}
-                                />
-                            )}
-                        />
-                    </Grid>
-                    <Grid item xs={12}>
-                        <Stack direction="row" spacing={2}>
-                            <Button variant="contained" color="primary" onClick={() => {
-                                setCopyVisible(true);
-                            }}>
-                                {translate('page.map.settings.map.copy.execute')}
-                            </Button>
-                            <Button variant="text" color="primary" onClick={() => {
-                                if (lastCopiedSprites && lastCopiedSprites.length > 0) {
-                                    lastCopiedSprites.forEach(copiedSprite => {
-                                        Tool.getMapContainer().removeChild(copiedSprite);
-                                    })
-                                    setLastCopiedSprites([]);
-                                }
-                            }}>
-                                {translate('page.map.settings.map.copy.reverse')}
-                            </Button>
-                        </Stack>
-                    </Grid>
-
-                    <Grid item xs={12}>
-                        <Divider />
-                    </Grid>
-
-                    {/* more */}
-                    <Grid item xs={12}>
-                        <Typography variant="inherit">
-                            {translate('page.map.settings.map.more.title')}
-                        </Typography>
-                    </Grid>
-                    <Grid item xs={12}>
-                        <Stack direction="row" spacing={2}>
-                            <Button variant="outlined" color="error" onClick={() => {
-                                Tool.getMapContainer().removeChild(sprite);
-                                setSpriteSettings(null);
-                                Tool.removeSelectedEffect();
-                                reset();
-                            }}>
-                                {translate('ra.action.delete')}
-                            </Button>
-                            {/* <ConfirmButton /> */}
-                        </Stack>
-                    </Grid>
-                </Grid>
-            </Box >
-
-            <CopyDrawer
-                open={copyVisible}
-                onCancel={() => {
-                    setCopyVisible(false);
-                }}
-                width={width}
-                sprite={sprite}
-                value={{
-                    copyDirect: watch('copyDirection'),
-                    copyCount: watch('copyCount'),
-                }}
-                handleOnCopy={() => {
-
-                }}
-                setLastCopiedSprites={setLastCopiedSprites}
-                setSpriteSettings={setSpriteSettings}
-            />
-        </>
-    );
-};
-
-export default MapSettings;
diff --git a/zy-acs-flow/src/map/areaSettings/index.jsx b/zy-acs-flow/src/map/areaSettings/index.jsx
index 39b0fd1..db2f207 100644
--- a/zy-acs-flow/src/map/areaSettings/index.jsx
+++ b/zy-acs-flow/src/map/areaSettings/index.jsx
@@ -1,27 +1,75 @@
-import React, { useState, useRef, useEffect } from 'react';
+import React, { useState, useEffect } from 'react';
 import { useTranslate } from "react-admin";
-import { Drawer, Box, Typography, Tabs, Tab, IconButton, Stack, useTheme, Card, CardContent, Divider } from '@mui/material';
+import {
+    Drawer,
+    Box,
+    Typography,
+    Tabs,
+    Tab,
+    IconButton,
+    Stack,
+    useTheme,
+    Card,
+    CardContent,
+    Divider,
+} from '@mui/material';
 import CloseIcon from '@mui/icons-material/Close';
 import { PAGE_DRAWER_WIDTH } from '@/config/setting';
-import MapSettings from './MapSettings';
-import ConfigSettings from './ConfigSettings';
+import AreaBasicTab from './AreaBasicTab';
+import AreaAdvancedTab from './AreaAdvancedTab';
 
 const AreaSettings = (props) => {
-    const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH, title, setSpriteSettings } = props;
+    const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH } = props;
     const theme = useTheme();
     const themeMode = theme.palette.mode;
     const translate = useTranslate();
-
-    const [lastCopiedSprites, setLastCopiedSprites] = useState([]);
 
     const handleClose = () => {
         onCancel();
     }
 
     const [activeTab, setActiveTab] = useState(0);
+    const [areaName, setAreaName] = useState('');
+    const [agvList, setAgvList] = useState('');
+    const [barcodeList, setBarcodeList] = useState('');
+    const [areaCode, setAreaCode] = useState('');
+    const [maxQty, setMaxQty] = useState('');
+    const [speedLimit, setSpeedLimit] = useState('');
+    const [shapeData, setShapeData] = useState('');
+    const [priority, setPriority] = useState('');
+
+    useEffect(() => {
+        if (sprite?.data) {
+            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 {
+            setAreaName('');
+            setAreaCode('');
+            setMaxQty('');
+            setSpeedLimit('');
+            setShapeData('');
+            setPriority('');
+            setAgvList('');
+            setBarcodeList('');
+        }
+    }, [sprite]);
 
     const handleTabChange = (event, newValue) => {
         setActiveTab(newValue);
+    };
+
+    const handleSaveBasic = () => {
+        // placeholder for save logic
+    };
+
+    const handleSaveAdvanced = () => {
+        // placeholder for save logic
     };
 
     return (
@@ -69,29 +117,37 @@
                                         variant="fullWidth"
                                         sx={{ mb: 0 }}
                                     >
-                                        <Tab label={translate('page.map.settings.map.title')} />
-                                        <Tab label={translate('page.map.settings.config.title')} />
+                                        <Tab label={translate('page.map.area.basic', { _: '鍩虹' })} />
+                                        <Tab label={translate('page.map.area.advanced', { _: '楂樼骇' })} />
                                     </Tabs>
 
                                     <Divider />
 
                                     <Box p={3}>
                                         {activeTab === 0 && (
-                                            <MapSettings
-                                                sprite={sprite}
-                                                setSpriteSettings={setSpriteSettings}
-                                                onSubmit={() => {
-                                                }}
-                                                width={width}
-                                                lastCopiedSprites={lastCopiedSprites}
-                                                setLastCopiedSprites={setLastCopiedSprites}
+                                            <AreaBasicTab
+                                                areaName={areaName}
+                                                setAreaName={setAreaName}
+                                                agvList={agvList}
+                                                setAgvList={setAgvList}
+                                                barcodeList={barcodeList}
+                                                setBarcodeList={setBarcodeList}
+                                                onSave={handleSaveBasic}
                                             />
                                         )}
                                         {activeTab === 1 && (
-                                            <ConfigSettings
-                                                sprite={sprite}
-                                                onSubmit={() => {
-                                                }}
+                                            <AreaAdvancedTab
+                                                areaCode={areaCode}
+                                                setAreaCode={setAreaCode}
+                                                maxQty={maxQty}
+                                                setMaxQty={setMaxQty}
+                                                speedLimit={speedLimit}
+                                                setSpeedLimit={setSpeedLimit}
+                                                shapeData={shapeData}
+                                                setShapeData={setShapeData}
+                                                priority={priority}
+                                                setPriority={setPriority}
+                                                onSave={handleSaveAdvanced}
                                             />
                                         )}
                                     </Box>
@@ -105,4 +161,4 @@
     )
 }
 
-export default AreaSettings;
\ No newline at end of file
+export default AreaSettings;

--
Gitblit v1.9.1