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/mission/MissionShow.jsx | 245 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 242 insertions(+), 3 deletions(-) diff --git a/zy-acs-flow/src/page/mission/MissionShow.jsx b/zy-acs-flow/src/page/mission/MissionShow.jsx index 203abbd..4ccffc4 100644 --- a/zy-acs-flow/src/page/mission/MissionShow.jsx +++ b/zy-acs-flow/src/page/mission/MissionShow.jsx @@ -1,12 +1,251 @@ +import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; +import { + useTranslate, + EditButton, + ReferenceArrayField, + ReferenceField, + ReferenceManyField, + ShowBase, + useDataProvider, + useNotify, + useRecordContext, + useRedirect, + useRefresh, + useUpdate, +} from 'react-admin'; +import { + Box, + Button, + Chip, + Dialog, + DialogContent, + Divider, + Stack, + Typography, + Avatar, + useTheme, +} from '@mui/material'; +import DialogCloseButton from "../components/DialogCloseButton"; +import { blueGrey, blue } from '@mui/material/colors'; +import MoveToInboxIcon from '@mui/icons-material/MoveToInbox'; +import { format } from 'date-fns'; +import { TaskList } from "./TaskList"; +import { ActionsIterator } from "../action/ActionsIterator"; +import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'; -const MissionShow = () => { +const MissionShow = ({ open, id }) => { + const redirect = useRedirect(); + const handleClose = () => { + redirect('list', 'mission'); + }; + + return ( + <Dialog + open={open} + onClose={handleClose} + fullWidth + maxWidth="md" + sx={{ + '& .MuiDialog-container': { + alignItems: 'flex-start', + }, + }} + > + <DialogContent sx={{ padding: 0 }}> + {!!id ? ( + <ShowBase id={id}> + <MissionShowContent handleClose={handleClose} /> + </ShowBase> + ) : null} + </DialogContent> + </Dialog> + ) +} + +const MissionShowContent = ({ handleClose }) => { + const theme = useTheme(); + const record = useRecordContext(); + const translate = useTranslate(); + if (!record) return null; return ( <> - show + <DialogCloseButton + onClose={handleClose} + top={12} + /> + <Stack gap={1}> + <Box display="flex" p={2}> + <Box flex="1"> + <Stack + direction="row" + justifyContent="space-between" + mb={4} + > + <Stack direction="row" alignItems="center" gap={2}> + <Avatar + sx={{ + width: 30, + height: 30, + bgcolor: theme.palette.primary.main, + }} + > + {record.agv} + </Avatar> + <Typography variant="h5"> + {record.groupNo} + </Typography> + </Stack> + <Stack + gap={1} + direction="row" + pr={6} + > + <ResendButton record={record} /> + </Stack> + </Stack> + + <Box display="flex" m={2}> + <Box display="flex" mr={5} flexDirection="column"> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.mission.lastSendDate')} + </Typography> + <Stack + direction="row" + alignItems="center" + gap={1} + > + <Typography variant="body2"> + {format(record.sendTime, 'yyyy-MM-dd HH:mm:ss') || '-'} + </Typography> + </Stack> + </Box> + + <Box display="flex" mr={5} flexDirection="column"> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.bus.busNo')} + </Typography> + <Typography variant="body2"> + {record.busNo || '-'} + </Typography> + </Box> + + <Box display="flex" mr={5} flexDirection="column"> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.segment.posType')} + </Typography> + <Typography variant="body2"> + {translate(`page.mission.enums.posType.${record.posType}`)} + </Typography> + </Box> + + <Box display="flex" mr={5} flexDirection="column"> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.mission.actionCount')} + </Typography> + <Typography variant="body2"> + {record.actionCount || 'unknown'} + </Typography> + </Box> + </Box> + + {!!record.taskIds?.length && ( + <Box m={2}> + <Box + display="flex" + mr={5} + flexDirection="column" + minHeight={48} + > + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.mission.task')} + </Typography> + <ReferenceArrayField + source="contact_ids" + reference="contacts_summary" + > + <TaskList taskIds={record.taskIds} /> + </ReferenceArrayField> + </Box> + </Box> + )} + + {!!record.codeList?.length && ( + <Box m={2} sx={{ whiteSpace: 'pre-line' }}> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.mission.runPath')} + </Typography> + <Typography variant="body2" sx={{ whiteSpace: 'normal', overflow: 'hidden', display: 'flex', flexWrap: 'wrap' }}> + [ {record.codeList.map((code, index) => ( + <span key={index} style={{ + color: record.currCode === code ? theme.palette.primary.main : 'inherit', + }}> + {code}{index < record.codeList.length - 1 && ','} + </span> + ))} ] + </Typography> + </Box> + )} + + <Box m={2}> + <Typography + color="textSecondary" + variant="caption" + > + {translate('table.field.mission.actions')} + </Typography> + <Divider /> + <ActionsIterator actionIds={record.actionIds} /> + </Box> + </Box> + </Box> + </Stack> </> ) -} +}; + +const ResendButton = ({ record }) => { + const dataProvider = useDataProvider(); + const redirect = useRedirect(); + const notify = useNotify(); + const refresh = useRefresh(); + const translate = useTranslate(); + + const handleClick = () => { + redirect(`/mission/${record.id}/resend`, undefined, undefined, undefined, { + _scrollToTop: false, + }); + }; + + return ( + <Button + onClick={handleClick} + // startIcon={<MoveToInboxIcon />} + endIcon={<ArrowForwardIosIcon />} + size="small" + > + {translate('common.action.resend')} + </Button> + ); +}; export default MissionShow; \ No newline at end of file -- Gitblit v1.9.1