From d0628b492a779097b0569c2e29fde5ba91632b42 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 11 十月 2024 15:59:33 +0800 Subject: [PATCH] # --- zy-acs-flow/src/map/settings/CopyDrawer.jsx | 192 +++++++++++++++++++++++++++++++++++------------ 1 files changed, 143 insertions(+), 49 deletions(-) diff --git a/zy-acs-flow/src/map/settings/CopyDrawer.jsx b/zy-acs-flow/src/map/settings/CopyDrawer.jsx index d7561b9..41a495c 100644 --- a/zy-acs-flow/src/map/settings/CopyDrawer.jsx +++ b/zy-acs-flow/src/map/settings/CopyDrawer.jsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react'; -import { useForm, Controller } from 'react-hook-form'; +import { useForm, useWatch, Controller } from 'react-hook-form'; import { Box, Grid, @@ -15,7 +15,11 @@ Divider, Drawer, IconButton, - LinearProgress, + Switch, + FormControlLabel, + FormLabel, + ToggleButtonGroup, + ToggleButton, } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import { useTranslate } from 'react-admin'; @@ -26,28 +30,64 @@ } 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 CopyDrawer = (props) => { const { open, onCancel, sprite, value, width = PAGE_DRAWER_WIDTH, handleOnCopy } = props; const notify = useNotification(); const translate = useTranslate(); const deviceType = sprite?.data?.type; + const incrementOptions = incrementOptionsMap[deviceType] const { control, handleSubmit, reset, watch, setValue, formState: { errors } } = useForm({ defaultValues: { - // copyDirect: value?.copyDirect || '', - // copyCount: value?.copyCount || '', - gap: value?.gap || 0.0, + copyDirect: value?.copyDirect || '', + copyCount: value?.copyCount || '', + gap: 0.0, + autoIncrement: false, + incrementMode: 'ascending', }, }); - useEffect(() => { - if (value && Object.keys(value).length > 0) { - setValue('copyDirect', value.copyDirect); - setValue('copyCount', value.copyCount); - } - }, [value, setValue]) + const autoIncrement = useWatch({ control, name: 'autoIncrement' }); + const incrementValue = useWatch({ control, name: 'incrementValue' }); - // if (!value || !sprite) return <LinearProgress />; + useEffect(() => { + if (autoIncrement && incrementOptions && incrementOptions.length > 0) { + if (!incrementValue) { + setValue('incrementValue', incrementOptions[0].value); + } + } else { + setValue('incrementValue', undefined); + } + }, [autoIncrement, incrementOptions, setValue]); + + useEffect(() => { + if (sprite && value && Object.keys(value).length > 0) { + reset({ + copyDirect: value.copyDirect || '', + copyCount: value.copyCount || '', + gap: 0.0, + autoIncrement: false, + incrementMode: 'ascending', + incrementValue: undefined, + }); + } + }, [sprite, value, reset, incrementOptions, setValue]); const handleClose = () => { onCancel(); @@ -56,7 +96,6 @@ const onFormSubmit = (data) => { if (data) { console.log(data); - } if (handleOnCopy) { handleOnCopy(data); @@ -88,19 +127,7 @@ <Box p={3}> <Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}> <Grid container spacing={1.4}> - <Grid item xs={6}> - <Typography variant="body1"> - {translate('page.map.settings.map.copy.direction')}: {value?.copyDirect} - </Typography> - </Grid> - <Grid item xs={6}> - <Typography variant="body1"> - {translate('page.map.settings.map.copy.count')}: {value?.copyCount} - </Typography> - </Grid> - - {/* <Grid item xs={6}> <Controller name="copyDirect" control={control} @@ -131,7 +158,7 @@ /> )} /> - </Grid> */} + </Grid> <Grid item xs={12}> <Controller @@ -144,37 +171,104 @@ type="number" sx={{ width: '50%' }} fullWidth - onChange={(e) => { - const value = parseFloat(e.target.value).toFixed(1); - field.onChange(value); + inputProps={{ + min: 0, + step: 1, }} /> )} /> </Grid> - {deviceType === DEVICE_TYPE.SHELF && ( - <> - </> - )} - - {deviceType === DEVICE_TYPE.CHARGE && ( - <> - </> - )} - - {deviceType === DEVICE_TYPE.STATION && ( - <> - </> - )} - - {deviceType === DEVICE_TYPE.POINT && ( - <> - </> - )} - + <Grid item xs={12} mt={2} mb={1}> + <Divider /> + </Grid> <Grid item xs={12}> + <Controller + name="autoIncrement" + control={control} + 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')} + /> + )} + /> + </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) => { + 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) => { + 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> -- Gitblit v1.9.1