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