zhang
2025-05-20 1313906bb1eb983d3beece810035e7fc28d6a92f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import React, { useState, useRef, useEffect } from 'react';
import { useTranslate } from "react-admin";
import { Drawer, Box, Typography, Card, CardContent, IconButton, Stack, useTheme } from '@mui/material';
import CloseIcon from '@mui/icons-material/Close';
import { PAGE_DRAWER_WIDTH } from '@/config/setting';
import {
    DEVICE_TYPE,
} from '../constants';
import JsonShow from '../JsonShow';
import ShelfInsight from './shelf';
import AgvInsight from './agv';
import PointInsight from './point';
 
const Insight = (props) => {
    const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH } = props;
    const theme = useTheme();
    const themeMode = theme.palette.mode;
    const translate = useTranslate();
    const [title, setTitle] = useState(null);
 
    const deviceType = sprite?.data?.type;
 
    const handleClose = () => {
        onCancel();
    }
 
    useEffect(() => {
    }, [sprite])
 
    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 - 100px);'} mt={{ xs: 2, sm: 1 }} sx={{
                    }}>
                        <Stack direction="row" p={2} pt={3}>
                            <Typography variant="h6" flex="1">
                                {title || ''}
                            </Typography>
                            <IconButton onClick={handleClose} size="small">
                                <CloseIcon />
                            </IconButton>
                        </Stack>
                        <Box p={2} pt={0} height='100%'>
                            <Card sx={{
                                height: '100%',
                                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 sx={{ height: '100%' }}>
                                    <DeviceContent
                                        deviceType={deviceType}
                                        sprite={sprite}
                                        setTitle={setTitle}
                                    />
                                </CardContent>
                            </Card>
                        </Box>
                    </Box>
                )}
            </Drawer>
        </>
    )
}
 
const DeviceContent = ({ deviceType, sprite, setTitle }) => {
    switch (deviceType) {
        case DEVICE_TYPE.SHELF:
            return (
                <ShelfInsight
                    sprite={sprite}
                    setTitle={setTitle}
                />
            )
        case DEVICE_TYPE.AGV:
            return (
                <AgvInsight
                    sprite={sprite}
                    setTitle={setTitle}
                />
            )
        case DEVICE_TYPE.POINT:
            return (
                <PointInsight
                    sprite={sprite}
                    setTitle={setTitle}
                />
            )
        default:
            return (
                <JsonShow
                    data={sprite?.data}
                    height={550}
                />
            )
    }
}
 
export default Insight;