From 3fa7cdec6ce44f07a0dc7e1910511ead606990f3 Mon Sep 17 00:00:00 2001 From: zhang <zc857179121@qq.com> Date: 星期四, 11 九月 2025 08:19:53 +0800 Subject: [PATCH] 1 --- zy-acs-flow/src/page/agv/show/AgvShowTask.jsx | 178 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 136 insertions(+), 42 deletions(-) diff --git a/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx b/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx index 391fc0c..c5474b4 100644 --- a/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx +++ b/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx @@ -1,6 +1,6 @@ import React, { useState, useRef, useEffect, useMemo } from "react"; import { - ShowBase, + useTranslate, TabbedShowLayout, useShowContext, } from 'react-admin'; @@ -14,27 +14,128 @@ Avatar, Skeleton, Divider, + List, + ListItem, + ListItemAvatar, + ListItemText, + ListItemSecondaryAction, } from '@mui/material'; import { formatDistance } from 'date-fns'; import request from '@/utils/request'; +import { useTheme } from '@mui/material/styles'; +import { getTaskStsColor } from '@/utils/color-util'; +import ListEmptyTip from "../../components/ListEmptyTip"; -export const AgvShowTask = ({ agvId, pageSize = 20 }) => { +const TaskItem = ({ record, now }) => { + const translate = useTranslate(); + const theme = useTheme(); + + return ( + <> + <ListItem button> + <Stack direction="row" spacing={1} alignItems="center" width="100%"> + <ListItemAvatar> + <Avatar + alt={record.seqNum} + variant="rounded" + sx={{ + '& img': { objectFit: 'contain' }, + fontSize: '0.9rem', + width: 40, + height: 25, + bgcolor: getTaskStsColor(record.taskSts$), + }} + > + {record.seqNum} + </Avatar> + </ListItemAvatar> + <ListItemText + primary={<> + <Stack direction={'row'}> + <Typography + variant="body1" + color="textSecondary" + component="span" + sx={{ fontWeight: '600' }} + > + {record.taskType$} + </Typography> + <Typography + variant="caption" + color="textSecondary" + component="span" + > + - {record.taskTypeEl} + </Typography> + </Stack> + + </>} + secondary={ + <> + <Typography + variant="body2" + color="textSecondary" + component="span" + sx={{ fontWeight: 'bold' }} + > + {record.taskSts$} + </Typography> + </> + } + /> + <ListItemText + variant="body2" + color="textSecondary" + primary={<> + <Typography + variant="body2" + color="textPrimary" + component="span" + > + {record.oriLoc$ || ''}{record.oriSta$ || ''} - {record.destLoc$ || ''}{record.destSta$ || ''} + </Typography> + </>} + secondary={`code: ${record.destCode$ || ''}`} + /> + <ListItemSecondaryAction> + <Typography + variant="body2" + color="textSecondary" + component="span" + > + last update {' '} + {formatDistance(record.createTime, now)} ago{' '} + </Typography> + </ListItemSecondaryAction> + </Stack> + </ListItem> + </> + ) +} + +export const AgvShowTask = ({ agvId, pageSize = 10 }) => { const [currCount, setCurrCount] = useState(pageSize); const [records, setRecords] = useState(null); const [total, setTotal] = useState(0); + const translate = useTranslate(); useEffect(() => { const http = async () => { - const res = await request.post('task/page', { agvId: agvId, pageSize: currCount }); + const res = await request.post('task/page', { + agvId: agvId, + pageSize: currCount, + orderBy: 'create_time desc', + }); const { code, msg, data } = res.data; if (code === 200) { setTotal(data.total); setRecords(data.records); } else { + setTotal(0); setRecords(null); } } - if (agvId) { http(); } + if (agvId) { http() } }, [agvId, currCount]); if (!records) { @@ -61,52 +162,45 @@ </Stack> ); } + const now = Date.now(); return ( <> {records.length > 0 ? ( - <Box> - {records.map(record => { - return ( - <TaskItem - key={record.id} - record={record} - /> - ) - })} - {currCount < total && ( - <Button - onClick={() => - setCurrCount( - currCount => - currCount + pageSize - ) - } - fullWidth - > - Load more activity - </Button> - )} + <Box > + <List> + {records.map(record => { + return ( + <React.Fragment key={record.id}> + <TaskItem + key={record.id} + record={record} + now={now} + /> + <Divider /> + </React.Fragment> + ) + })} + {currCount < total && ( + <Button + onClick={() => + setCurrCount( + currCount => + currCount + pageSize + ) + } + fullWidth + sx={{ mt: 1 }} + > + {translate('common.action.loadMore')} + </Button> + )} + </List> </Box> ) : ( - <Typography> - no data found - </Typography> + <ListEmptyTip /> )} </> ) } - -const TaskItem = ({ record }) => { - - return ( - <> - <Typography - - > - {record.seqNum} - </Typography> - </> - ) -} \ No newline at end of file -- Gitblit v1.9.1