From 7f70cb15d035f0c233b9e62b9e43aa985317c908 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 04 十一月 2024 10:22:45 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/insight/index.jsx |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 101 insertions(+), 3 deletions(-)

diff --git a/zy-acs-flow/src/map/insight/index.jsx b/zy-acs-flow/src/map/insight/index.jsx
index 479dd9f..3bc802c 100644
--- a/zy-acs-flow/src/map/insight/index.jsx
+++ b/zy-acs-flow/src/map/insight/index.jsx
@@ -1,15 +1,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 } = 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;
\ No newline at end of file

--
Gitblit v1.9.1