From 7662f3bdce6bacb4c0dbdfda635ddc0f575046cd Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期一, 11 八月 2025 13:35:27 +0800 Subject: [PATCH] # --- rsf-admin/src/page/dashboard/NbCard.jsx | 107 +++++++++++++++++++++++++++++++++++ rsf-admin/src/page/dashboard/index.jsx | 27 +++++++-- 2 files changed, 128 insertions(+), 6 deletions(-) diff --git a/rsf-admin/src/page/dashboard/NbCard.jsx b/rsf-admin/src/page/dashboard/NbCard.jsx new file mode 100644 index 0000000..442af08 --- /dev/null +++ b/rsf-admin/src/page/dashboard/NbCard.jsx @@ -0,0 +1,107 @@ +import * as React from 'react'; +import { + Avatar, + Box, + Button, + List, + ListItem, + ListItemAvatar, + ListItemButton, + ListItemText, +} from '@mui/material'; +import CommentIcon from '@mui/icons-material/Comment'; +import { Link } from 'react-router-dom'; +import { + ReferenceField, + FunctionField, + useGetList, + useTranslate, + useIsDataLoaded, +} from 'react-admin'; +import CardWithIcon from '../components/CardWithIcon'; + +const NbCard = (props) => { + const { list, ...rest } = props; + const translate = useTranslate(); + const { + data: reviews, + total, + isPending, + } = useGetList('reviews', { + filter: { status: 'pending' }, + sort: { field: 'date', order: 'DESC' }, + pagination: { page: 1, perPage: 100 }, + }); + + const display = 'display'; + const newList = list.concat(list); + + return ( + <CardWithIcon + icon={CommentIcon} + title={translate('pos.dashboard.pending_reviews')} + subtitle={total} + {...rest} + > + <List sx={{ display }}> + {newList?.map((record) => ( + <ListItem key={record.id} disablePadding> + <ListItemButton + alignItems="flex-start" + component={Link} + to={`/reviews/${record.id}`} + > + {/* <ListItemAvatar> + <Avatar + sx={{ + // bgcolor: 'primary.main', + bgcolor: '#a2beeaff', + color: 'primary.contrastText', // 閬垮厤鐧藉瓧鐧藉簳 + // width: 40, + // height: 40, + // fontSize: 16, + }} + > + {record.id} + </Avatar> + </ListItemAvatar> */} + + <ListItemText + // primary={ + // <StarRatingField + // record={record} + // source="rating" + // /> + // } + primary={record.date + record.date} + secondary={record.total} + sx={{ + overflowY: 'hidden', + height: '3em', + display: '-webkit-box', + WebkitLineClamp: 2, + WebkitBoxOrient: 'vertical', + paddingRight: 0, + }} + /> + </ListItemButton> + </ListItem> + ))} + </List> + <Box flexGrow={1}> </Box> + <Button + sx={{ borderRadius: 0 }} + component={Link} + to="/reviews" + size="small" + color="primary" + > + <Box p={1} sx={{ color: 'primary.main' }}> + {translate('pos.dashboard.all_reviews')} + </Box> + </Button> + </CardWithIcon> + ); +}; + +export default NbCard; diff --git a/rsf-admin/src/page/dashboard/index.jsx b/rsf-admin/src/page/dashboard/index.jsx index 6dfbcbc..d8694e0 100644 --- a/rsf-admin/src/page/dashboard/index.jsx +++ b/rsf-admin/src/page/dashboard/index.jsx @@ -12,6 +12,7 @@ import { Box, Typography, LinearProgress, Stack } from '@mui/material'; import NbChart from "./NbChart"; import NbList from "./NbList"; +import NbCard from "./NbCard"; const styles = { flex: { display: 'flex' }, @@ -53,14 +54,14 @@ padding: '2rem 1rem', }} > - <WordEffect + {/* <WordEffect words={translate('page.welcome.index')} color={theme.palette.mode === 'light' ? '#666' : '#eeeeee'} /> <WordEffect words={translate('page.welcome.tech')} color={theme.palette.mode === 'light' ? '#666' : '#eeeeee'} - /> + /> */} </div> </> ) @@ -79,10 +80,10 @@ if (code === 200) { setStatistic(data); } else { - notify(msg, { type: 'error', messageArgs: { _: msg } }); + // notify(msg, { type: 'error', messageArgs: { _: msg } }); } }).catch((error) => { - notify(error.message, { type: 'error', messageArgs: { _: error.message } }); + // notify(error.message, { type: 'error', messageArgs: { _: error.message } }); console.error(error); }) }, []) @@ -146,16 +147,30 @@ </div> <div style={styles.rightCol}> <div style={styles.flex}> - <CardWithIcon + <NbCard icon={WifiIcon} title={translate('page.member.header.onlineMembers')} subtitle={`${statistic?.membersOnlineQua}`} + to={{ + pathname: '/task', + search: JSON.stringify({ + filter: JSON.stringify({ status: 1 }), + }), + }} + list={recentOrders} /> <Spacer /> - <CardWithIcon + <NbCard icon={SensorOccupiedIcon} title={translate('page.member.header.totalMembers')} subtitle={`${statistic?.membersTotalQua}`} + to={{ + pathname: '/task', + search: JSON.stringify({ + filter: JSON.stringify({ status: 1 }), + }), + }} + list={recentOrders} /> </div> </div> -- Gitblit v1.9.1