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 | 160 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 140 insertions(+), 20 deletions(-) diff --git a/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx b/zy-acs-flow/src/page/agv/show/AgvShowTask.jsx index b77cd65..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,30 +14,129 @@ 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 }) => { +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 (agvId) => { - const res = await request.post('task/page', { agvId: agvId }); + const http = async () => { + 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(agvId); - } - }, [agvId]); + if (agvId) { http() } + }, [agvId, currCount]); if (!records) { return ( @@ -63,24 +162,45 @@ </Stack> ); } - + const now = Date.now(); return ( <> {records.length > 0 ? ( - records.map(record => { - return ( - <Typography> - {record.seqNum} - </Typography> - ) - }) + <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 /> )} </> ) -} \ No newline at end of file +} -- Gitblit v1.9.1