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/page/agv/show/AgvShowDetail.jsx | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 204 insertions(+), 13 deletions(-) diff --git a/zy-acs-flow/src/page/agv/show/AgvShowDetail.jsx b/zy-acs-flow/src/page/agv/show/AgvShowDetail.jsx index 78eae42..6df36d8 100644 --- a/zy-acs-flow/src/page/agv/show/AgvShowDetail.jsx +++ b/zy-acs-flow/src/page/agv/show/AgvShowDetail.jsx @@ -5,33 +5,51 @@ TabbedShowLayout, useListContext, useRecordContext, - useShowContext, + useTranslate, + useResourceContext, } from 'react-admin'; import { Link as RouterLink, useLocation } from 'react-router-dom'; import { Box, Button, - Card, - CardContent, + Grid, Skeleton, Stack, Typography, Divider, } from '@mui/material'; import { formatDistance } from 'date-fns'; +import request from '@/utils/request'; +const ITEM_COL = 3; +const GRID_CONTAINER_MAX_WIDTH = '100%'; export const AgvShowDetail = (props) => { - const { agvId, ...rest } = props; - - const dataProvider = useDataProvider(); - const [data, setData] = useState(null); + const { agvId, setOnline } = props; + const [record, setRecord] = useState(null); + const resource = useResourceContext(); useEffect(() => { + const http = async (agvId) => { + if (agvId) { + const res = await request.get(resource + '/' + agvId); + const { code, msg, data } = res.data; + if (code === 200) { + setOnline(data.online); + setRecord(data); + } else { + setRecord(null); + } + } + } + const intervalId = setInterval(() => { + http(agvId); + }, 1000); + http(agvId); + return () => clearInterval(intervalId); + }, [agvId]); - }, []); - - if (!data) { + if (!record) { return ( <Stack mt={0.5}> {Array.from({ length: 5 }).map((_, index) => ( @@ -58,9 +76,182 @@ return ( <> - <Card> - - </Card> + <Box m={2}> + <AgvMainDetail record={record} /> + <Divider sx={{ mt: 2, mb: 2 }} /> + <AgvMoreDetail record={record} /> + <Divider sx={{ mt: 2, mb: 2 }} /> + <AgvModelDetail record={record} /> + </Box> </> ) +} + +const DetailTitle = ({ title, ...rest }) => { + const translate = useTranslate(); + return ( + <Typography + color="textSecondary" + variant="caption" + {...rest} + > + {translate(title)} + </Typography> + ) +} + +const DetailValue = ({ value, fontBold = false }) => { + return ( + <Typography + variant="body2" + color={fontBold ? 'textSecondary' : 'textPrimary'} + width='80%' + sx={{ + wordWrap: 'break-word', + whiteSpace: 'normal', + fontWeight: fontBold && 'bold', + }} + > + {value} + </Typography> + ) +} + + +const AgvMainDetail = ({ record }) => { + const translate = useTranslate(); + return ( + <Grid container spacing={1} sx={{ maxWidth: GRID_CONTAINER_MAX_WIDTH }}> + <Grid item xs={ITEM_COL}> + <DetailTitle title='common.field.status' /> + <DetailValue fontBold value={record.agvDetail.statusDesc} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.pos' /> + <DetailValue value={record.agvDetail.pos === 1 ? translate('common.enums.true') : translate('common.enums.false')} /> + </Grid > + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.code' /> + <DetailValue value={record.agvDetail.code$} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agv.ip' /> + <DetailValue value={record.ip} /> + </Grid> + </Grid> + ) +} + +const AgvMoreDetail = ({ record }) => { + const translate = useTranslate(); + return ( + <Grid container spacing={1} sx={{ maxWidth: GRID_CONTAINER_MAX_WIDTH }}> + + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.agvAngle' /> + <DetailValue value={record.agvDetail.agvAngle} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.gyroAngle' /> + <DetailValue value={record.agvDetail.gyroAngle} /> + </Grid> + + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.encoderAngle' /> + <DetailValue value={record.agvDetail.encoderAngle} /> + </Grid> + + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.high' /> + <DetailValue value={record.agvDetail.high} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.vol' /> + <DetailValue value={record.agvDetail.vol} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.soc' /> + <DetailValue value={record.agvDetail.soc} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.soh' /> + <DetailValue value={record.agvDetail.soh} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.tempe' /> + <DetailValue value={record.agvDetail.tempe} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.motorFail' /> + <DetailValue value={record.agvDetail.motorFail} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvDetail.workDistance' /> + <DetailValue value={record.agvDetail.workDistance} /> + </Grid> + </Grid > + ) +} +const AgvModelDetail = ({ record }) => { + const translate = useTranslate(); + return ( + <Grid container spacing={1} sx={{ maxWidth: GRID_CONTAINER_MAX_WIDTH }}> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.name' /> + <DetailValue fontBold value={record.agvModelData.name} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.length' /> + <DetailValue value={record.agvModelData.length} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.width' /> + <DetailValue value={record.agvModelData.width} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.height' /> + <DetailValue value={record.agvModelData.height} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.liftHeight' /> + <DetailValue value={record.agvModelData.liftHeight} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.diameter' /> + <DetailValue value={record.agvModelData.diameter} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.backpack' /> + <DetailValue value={record.agvModelData.backpack} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.lowBattery' /> + <DetailValue value={record.agvModelData.lowBattery} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.quaBattery' /> + <DetailValue value={record.agvModelData.quaBattery} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.travelSpeed' /> + <DetailValue value={record.agvModelData.travelSpeed} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.workDirection' /> + <DetailValue value={record.agvModelData.workDirection} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.allDirection' /> + <DetailValue value={record.agvModelData.allDirection === 1 ? translate('common.enums.true') : translate('common.enums.false')} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.protocol' /> + <DetailValue value={record.agvModelData.protocol} /> + </Grid> + <Grid item xs={ITEM_COL}> + <DetailTitle title='table.field.agvModel.mqttTopic' /> + <DetailValue value={record.agvModelData.mqttTopic} /> + </Grid> + </Grid> + ) } \ No newline at end of file -- Gitblit v1.9.1