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