Files
vf_react/src/views/Pages/Users/Reports.js
zdl 2207a680b5 refactor(icons): 迁移其他 views 目录图标到 lucide-react
- views/Center, views/Community, views/DataBrowser 等
- views/EventDetail, views/LimitAnalyse, views/StockOverview
- views/TradingSimulation, views/Pages, views/Authentication
- views/Profile, views/Settings
- 处理 Tag/TagIcon 命名冲突
- 涉及 52 个组件文件

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-25 13:00:41 +08:00

474 lines
16 KiB
JavaScript
Executable File

/*!
=========================================================
* Argon Dashboard Chakra PRO - v1.0.0
=========================================================
* Product Page: https://www.creative-tim.com/product/argon-dashboard-chakra-pro
* Copyright 2022 Creative Tim (https://www.creative-tim.com/)
* Designed and Coded by Simmmple & Creative Tim
=========================================================
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
// Chakra imports
import {
Button,
Flex,
Grid,
Icon,
Menu,
MenuButton,
MenuItem,
MenuList,
Progress,
Stack,
Table,
Tbody,
Text,
Th,
Thead,
Tr,
useColorModeValue,
useColorMode,
useDisclosure,
} from "@chakra-ui/react";
import bgCardReports from "assets/img/background-card-reports.png";
// Custom components
import Card from "components/Card/Card";
import CardBody from "components/Card/CardBody";
import CardHeader from "components/Card/CardHeader";
import IconBox from "components/Icons/IconBox";
import { CartIcon, RocketIcon } from "components/Icons/Icons";
import TablesReportsRow from "components/Tables/TablesReportsRow";
import React from "react";
import { ThumbsUp, User, MoreHorizontal } from "lucide-react";
import { tablesReportsData } from "variables/general";
function Reports() {
const textColor = useColorModeValue("gray.700", "white");
const secondaryColor = useColorModeValue("gray.400", "white");
const iconColor = useColorModeValue("blue.900", "blue.500");
const bgProgress = useColorModeValue("gray.200", "navy.900");
const borderColor = useColorModeValue("gray.200", "gray.600");
const {
isOpen: isOpen1,
onOpen: onOpen1,
onClose: onClose1,
} = useDisclosure();
const {
isOpen: isOpen2,
onOpen: onOpen2,
onClose: onClose2,
} = useDisclosure();
const {
isOpen: isOpen3,
onOpen: onOpen3,
onClose: onClose3,
} = useDisclosure();
const {
isOpen: isOpen4,
onOpen: onOpen4,
onClose: onClose4,
} = useDisclosure();
const { colorMode } = useColorMode();
return (
<Flex direction="column" pt={{ base: "150px", lg: "75px" }}>
<Grid templateColumns={{ md: "repeat(2, 1fr)" }} gap="24px" mb="24px">
<Grid
templateColumns={{ md: "repeat(2, 1fr)" }}
templateRows={{ md: "repeat(2, 1fr)" }}
gap="24px"
>
<Card
bgImage={
colorMode === "light"
? bgCardReports
: "linear-gradient(180deg, #3182CE 0%, #63B3ED 100%)"
}
minH="168px"
>
<CardBody h="100%">
<Flex
direction="column"
justify="space-between"
w="100%"
h="100%"
>
<Flex justify="space-between" w="100%">
<IconBox bg="#fff" w="50px" h="50px">
<Icon as={User} w="25px" h="25px" color="blue.900" />
</IconBox>
<Menu isOpen={isOpen1} onClose={onClose1}>
<MenuButton onClick={onOpen1} alignSelf="flex-start">
<Icon
as={MoreHorizontal}
color={iconColor}
w="20px"
h="20px"
/>
</MenuButton>
<MenuList>
<MenuItem>Action</MenuItem>
<MenuItem>Another action</MenuItem>
<MenuItem>Something else here</MenuItem>
</MenuList>
</Menu>
</Flex>
<Flex justify="space-between" w="100%">
<Flex direction="column">
<Text color="#fff" fontWeight="bold" fontSize="md">
1600
</Text>
<Text
color={secondaryColor}
fontWeight="normal"
fontSize="sm"
>
Users Active
</Text>
</Flex>
<Text
color="#fff"
fontWeight="bold"
fontSize="md"
alignSelf="flex-end"
>
+55%
</Text>
</Flex>
</Flex>
</CardBody>
</Card>
<Card
bgImage={
colorMode === "light"
? bgCardReports
: "linear-gradient(180deg, #3182CE 0%, #63B3ED 100%)"
}
minH="168px"
>
<CardBody h="100%">
<Flex
direction="column"
justify="space-between"
w="100%"
h="100%"
>
<Flex justify="space-between" w="100%">
<IconBox bg="#fff" w="50px" h="50px">
<Icon as={RocketIcon} w="25px" h="25px" color="blue.900" />
</IconBox>
<Menu isOpen={isOpen2} onClose={onClose2}>
<MenuButton onClick={onOpen2} alignSelf="flex-start">
<Icon
as={MoreHorizontal}
color={iconColor}
w="20px"
h="20px"
/>
</MenuButton>
<MenuList>
<MenuItem>Action</MenuItem>
<MenuItem>Another action</MenuItem>
<MenuItem>Something else here</MenuItem>
</MenuList>
</Menu>
</Flex>
<Flex justify="space-between" w="100%">
<Flex direction="column">
<Text color="#fff" fontWeight="bold" fontSize="md">
357
</Text>
<Text
color={secondaryColor}
fontWeight="normal"
fontSize="sm"
>
Click Events
</Text>
</Flex>
<Text
color="#fff"
fontWeight="bold"
fontSize="md"
alignSelf="flex-end"
>
+124%
</Text>
</Flex>
</Flex>
</CardBody>
</Card>
<Card
bgImage={
colorMode === "light"
? bgCardReports
: "linear-gradient(180deg, #3182CE 0%, #63B3ED 100%)"
}
minH="168px"
>
<CardBody h="100%">
<Flex
direction="column"
justify="space-between"
w="100%"
h="100%"
>
<Flex justify="space-between" w="100%">
<IconBox bg="#fff" w="50px" h="50px">
<Icon as={CartIcon} w="25px" h="25px" color="blue.900" />
</IconBox>
<Menu isOpen={isOpen3} onClose={onClose3}>
<MenuButton onClick={onOpen3} alignSelf="flex-start">
<Icon
as={MoreHorizontal}
color={iconColor}
w="20px"
h="20px"
/>
</MenuButton>
<MenuList>
<MenuItem>Action</MenuItem>
<MenuItem>Another action</MenuItem>
<MenuItem>Something else here</MenuItem>
</MenuList>
</Menu>
</Flex>
<Flex justify="space-between" w="100%">
<Flex direction="column">
<Text color="#fff" fontWeight="bold" fontSize="md">
2340
</Text>
<Text
color={secondaryColor}
fontWeight="normal"
fontSize="sm"
>
Purchases
</Text>
</Flex>
<Text
color="#fff"
fontWeight="bold"
fontSize="md"
alignSelf="flex-end"
>
+14%
</Text>
</Flex>
</Flex>
</CardBody>
</Card>
<Card
bgImage={
colorMode === "light"
? bgCardReports
: "linear-gradient(180deg, #3182CE 0%, #63B3ED 100%)"
}
bgPosition="cover"
minH="168px"
>
<CardBody h="100%">
<Flex
direction="column"
justify="space-between"
w="100%"
h="100%"
>
<Flex justify="space-between" w="100%">
<IconBox bg="#fff" w="50px" h="50px">
<Icon as={ThumbsUp} w="25px" h="25px" color="blue.900" />
</IconBox>
<Menu isOpen={isOpen4} onClose={onClose4}>
<MenuButton onClick={onOpen4} alignSelf="flex-start">
<Icon
as={MoreHorizontal}
color={iconColor}
w="20px"
h="20px"
/>
</MenuButton>
<MenuList>
<MenuItem>Action</MenuItem>
<MenuItem>Another action</MenuItem>
<MenuItem>Something else here</MenuItem>
</MenuList>
</Menu>
</Flex>
<Flex justify="space-between" w="100%">
<Flex direction="column">
<Text color="#fff" fontWeight="bold" fontSize="md">
940
</Text>
<Text
color={secondaryColor}
fontWeight="normal"
fontSize="sm"
>
Likes
</Text>
</Flex>
<Text
color="#fff"
fontWeight="bold"
fontSize="md"
alignSelf="flex-end"
>
+90%
</Text>
</Flex>
</Flex>
</CardBody>
</Card>
</Grid>
<Card>
<CardHeader mb="24px">
<Text fontSize="lg" color={textColor} fontWeight="bold">
Reviews
</Text>
</CardHeader>
<CardBody>
<Flex direction="column" w="100%">
<Stack direction="column" spacing="28px" w="100%" mb="40px">
<Flex direction="column">
<Flex justify="space-between" mb="8px">
<Text fontSize="md" color="gray.400" fontWeight="500">
Positive Reviews
</Text>
<Text fontSize="md" color="gray.400" fontWeight="500">
80%
</Text>
</Flex>
<Progress
colorScheme="blue"
size="xs"
bg={bgProgress}
value={80}
borderRadius="15px"
></Progress>
</Flex>
<Flex direction="column">
<Flex justify="space-between" mb="8px">
<Text fontSize="md" color="gray.400" fontWeight="500">
Neutral Reviews
</Text>
<Text fontSize="md" color="gray.400" fontWeight="500">
17%
</Text>
</Flex>
<Progress
bg={bgProgress}
colorScheme="gray"
size="xs"
value={17}
borderRadius="15px"
></Progress>
</Flex>
<Flex direction="column">
<Flex justify="space-between" mb="8px">
<Text fontSize="md" color="gray.400" fontWeight="500">
Negative Reviews
</Text>
<Text fontSize="md" color="gray.400" fontWeight="500">
3%
</Text>
</Flex>
<Progress
bg={bgProgress}
colorScheme="red"
size="xs"
value={3}
borderRadius="15px"
></Progress>
</Flex>
</Stack>
<Flex
justify="space-between"
w="100%"
direction={{ sm: "column", lg: "row" }}
>
<Text
color="gray.500"
fontSize="md"
maxW={{ lg: "65%" }}
mb={{ sm: "16px", lg: "0px" }}
>
More than{" "}
<Text as="span" color={textColor} fontWeight="bold">
1,500,000 developers
</Text>{" "}
used Creative Tim's products and over{" "}
<Text as="span" color={textColor} fontWeight="bold">
700,000 projects
</Text>{" "}
were created.
</Text>
<Button variant="dark" p="12px 24px" alignSelf="flex-end">
VIEW ALL REVIEWS
</Button>
</Flex>
</Flex>
</CardBody>
</Card>
</Grid>
<Card overflowX={{ sm: "scroll", lg: "hidden" }}>
<CardBody>
<Table variant="simple" color={textColor}>
<Thead>
<Tr my=".8rem" ps="0px" color="gray.400">
<Th ps="0px" color="gray.400" borderColor={borderColor}>
Name
</Th>
<Th color="gray.400" borderColor={borderColor}>
Function
</Th>
<Th color="gray.400" borderColor={borderColor}>
Review
</Th>
<Th color="gray.400" borderColor={borderColor}>
Email
</Th>
<Th color="gray.400" borderColor={borderColor}>
Employed
</Th>
<Th color="gray.400" borderColor={borderColor}>
Id
</Th>
</Tr>
</Thead>
<Tbody pb="0px">
{tablesReportsData.map((row, index, arr) => {
return (
<TablesReportsRow
name={row.name}
image={row.image}
email={row.email}
domain={row.domain}
review={row.review}
employed={row.employed}
id={row.id}
isLast={index === arr.length - 1 ? true : false}
key={index}
/>
);
})}
</Tbody>
</Table>
</CardBody>
</Card>
</Flex>
);
}
export default Reports;