#
luxiaotao1123
2024-10-11 54d940c0bfabe90700d0bcc9e72dc93bc8bafaad
zy-acs-flow/src/map/settings/MapSettings.jsx
@@ -15,15 +15,12 @@
    Divider,
} from '@mui/material';
import MuiInput from '@mui/material/Input';
import { styled } from '@mui/material/styles';
import { useTranslate } from 'react-admin';
const Input = styled(MuiInput)`
  width: 42px;
`;
import * as Tool from '../tool';
import ConfirmButton from '../../page/components/ConfirmButton';
const MapSettings = (props) => {
    const { sprite, onSubmit } = props;
    const { sprite, setSpriteSettings, onSubmit } = props;
    const translate = useTranslate();
    const { control, handleSubmit, reset, watch } = useForm({
@@ -35,11 +32,9 @@
            rotation: (sprite?.rotation * 180) / Math.PI || 0,
            copyDirection: 'right',
            copyCount: 1,
            // 其他默认值...
        },
    });
    // 监听所有字段的变化
    const watchAllFields = watch();
    useEffect(() => {
@@ -50,12 +45,10 @@
                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;
@@ -63,11 +56,9 @@
            sprite.scale.x = data.scaleX;
            sprite.scale.y = data.scaleY;
            sprite.rotation = (data.rotation * Math.PI) / 180;
            // 更新其他属性...
        }
    };
    // 处理表单提交
    const onFormSubmit = (data) => {
        updateSprite(data);
        if (onSubmit) {
@@ -75,19 +66,10 @@
        }
    };
    // 旋转滑块的刻度
    const rotationMarks = [
        { value: 0, label: '0°' },
        { value: 90, label: '90°' },
        { value: 180, label: '180°' },
        { value: 270, label: '270°' },
        { value: 360, label: '360°' },
    ];
    return (
        <Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}>
            <Grid container spacing={2}>
                {/* 位置 */}
            <Grid container spacing={1.4}>
                {/* position */}
                <Grid item xs={12}>
                    <Typography variant="inherit">
                        {translate('page.map.settings.map.base.position')}
@@ -95,7 +77,6 @@
                </Grid>
                <Grid item xs={6} pt={0} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="x"
@@ -119,7 +100,6 @@
                </Grid>
                <Grid item xs={6} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="y"
@@ -142,7 +122,7 @@
                    />
                </Grid>
                {/* 缩放 */}
                {/* scale */}
                <Grid item xs={12}>
                    <Typography variant="inherit">
                        {translate('page.map.settings.map.base.scale')}
@@ -150,7 +130,6 @@
                </Grid>
                <Grid item xs={6} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="scaleX"
@@ -175,7 +154,6 @@
                </Grid>
                <Grid item xs={6} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="scaleY"
@@ -199,7 +177,7 @@
                    />
                </Grid>
                {/* 旋转 */}
                {/* rotation */}
                <Grid item xs={12}>
                    <Typography variant="inherit">
                        {translate('page.map.settings.map.base.rotation')}
@@ -207,14 +185,14 @@
                </Grid>
                <Grid item xs={12}>
                    <Box display="flex" alignItems="center">
                        <Box flex={1} mr={2}>
                        <Box flex={1} mr={3}>
                            <Controller
                                name="rotation"
                                control={control}
                                render={({ field }) => (
                                    <Slider
                                        {...field}
                                        size="small"
                                        // size="small"
                                        min={0}
                                        max={360}
                                        step={1}
@@ -228,23 +206,35 @@
                                )}
                            />
                        </Box>
                        <Box width={80}>
                        <Box >
                            <Controller
                                name="rotation"
                                control={control}
                                render={({ field }) => (
                                    <TextField
                                    <MuiInput
                                        {...field}
                                        label=""
                                        type="number"
                                        fullWidth
                                        inputProps={{ min: 0, max: 360 }}
                                        size="small"
                                        value={field.value}
                                        onChange={(e) => {
                                            const value = parseFloat(e.target.value);
                                            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',
                                        }}
                                    />
                                )}
@@ -252,11 +242,12 @@
                        </Box>
                    </Box>
                </Grid>
                <Grid item xs={12}>
                    <Divider />
                </Grid>
                {/* 复制 */}
                {/* copy */}
                <Grid item xs={12}>
                    <Typography variant="inherit">
                        {translate('page.map.settings.map.copy.title')}
@@ -264,7 +255,6 @@
                </Grid>
                <Grid item xs={6} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="copyDirection"
@@ -297,7 +287,6 @@
                </Grid>
                <Grid item xs={6} sx={{
                    paddingTop: '8px !important',
                    paddingLeft: '8px !important',
                }}>
                    <Controller
                        name="copyCount"
@@ -313,18 +302,40 @@
                        )}
                    />
                </Grid>
                {/* 提交按钮 */}
                <Grid item xs={12}>
                    <Stack direction="row" spacing={2}>
                        <Button type="submit" variant="contained" color="primary">
                            {translate('ra.action.confirm')}
                        <Button variant="contained" color="primary">
                            {translate('page.map.settings.map.copy.execute')}
                        </Button>
                        <Button variant="outlined" color="secondary" onClick={() => reset()}>
                            {translate('common.action.reset')}
                        <Button variant="text" color="primary">
                            {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>
    );