| import { useTranslate, useAuthProvider, Title, useNotify } from 'react-admin'; | 
| import { Box, Typography, LinearProgress, Stack, Grid } from '@mui/material'; | 
| import React, { useState, useRef, useEffect, useMemo } from "react"; | 
| import SensorOccupiedIcon from '@mui/icons-material/SensorOccupied'; | 
| import CardWithIcon from '../components/CardWithIcon'; | 
| import CommentIcon from '@mui/icons-material/Comment'; | 
| import WifiIcon from '@mui/icons-material/Wifi'; | 
| import { useTheme } from '@mui/material/styles'; | 
| import { useNavigate } from 'react-router-dom'; | 
| import { getSystemDicts } from '@/api/auth' | 
| import { WordEffect } from './WordEffect'; | 
| import request from '@/utils/request'; | 
| import Welcome from "./Welcome"; | 
| import NbChart from "./NbChart"; | 
| import NbList from "./NbList"; | 
| import NbCard from "./NbCard"; | 
| import NbPie from './NbPie'; | 
|   | 
| const styles = { | 
|     flex: { display: 'flex' }, | 
|     flexColumn: { display: 'flex', flexDirection: 'column' }, | 
|     leftCol: { flex: 1, }, | 
|     rightCol: { flex: 1, }, | 
|     singleCol: { marginTop: '1em', marginBottom: '1em' }, | 
| }; | 
|   | 
| const Dashboard = () => { | 
|     const authProvider = useAuthProvider(); | 
|     const navigate = useNavigate(); | 
|     const theme = useTheme(); | 
|     const translate = useTranslate(); | 
|   | 
|     useEffect(() => { | 
|         authProvider.checkAuth().catch(() => { | 
|             navigate('/login'); | 
|         }) | 
|         getSystemDicts().then((data) => { | 
|             localStorage.setItem("sys_dicts", JSON.stringify(data)); | 
|         }) | 
|     }, [authProvider, navigate]); | 
|   | 
|     return ( | 
|         <> | 
|             <Title title={"menu.dashboard"} /> | 
|             <Welcome /> | 
|             <DashboardSummaryView /> | 
|             <div | 
|                 style={{ | 
|                     boxSizing: 'border-box', | 
|                     display: 'flex', | 
|                     width: '100%', | 
|                     height: '100%', | 
|                     flexDirection: 'column', | 
|                     justifyContent: 'flex-start', | 
|                     alignItems: 'flex-start', | 
|                     padding: '2rem 1rem', | 
|                 }} | 
|             > | 
|                 {/* <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> | 
|         </> | 
|     ) | 
| } | 
|   | 
| const DashboardSummaryView = () => { | 
|     const translate = useTranslate(); | 
|     const notify = useNotify(); | 
|     const [statistic, setStatistic] = useState({}); | 
|     const [stock, setStock] = useState([]); | 
|     const [deadStock, setDeadStock] = useState([]); | 
|     const [locUsage, setLocUsages] = useState([]); | 
|     const [tasks, setTasks] = useState([]); | 
|     const [total, setTotal] = useState(0); | 
|   | 
|   | 
|     useEffect(() => { | 
|         getDashBoardHeader() | 
|         getRecentTrands() | 
|         getRecentStocks() | 
|         getRecentUsage() | 
|         getExcingTasks() | 
|   | 
|     }, []) | 
|   | 
|     const getDashBoardHeader = async () => { | 
|         await request.post('/asnOrder/dashbord/header').then(res => { | 
|             const { code, msg, data } = res?.data; | 
|             console.log(code); | 
|              | 
|             if (code === 200) { | 
|                 setStatistic(data); | 
|             } else { | 
|                 notify(msg, { type: 'error', messageArgs: { _: msg } }); | 
|             } | 
|         }).catch((error) => { | 
|             notify(error.message, { type: 'error', messageArgs: { _: error.message } }); | 
|         }) | 
|     } | 
|   | 
|     const getRecentStocks = async () => { | 
|         await request.post('/locItem/page', { current: 1, pageSize: 10, orderBy: 'create_time asc' }).then(res => { | 
|             const { code, msg, data } = res?.data; | 
|             if (code === 200) { | 
|                 setDeadStock(data?.records); | 
|             } else { | 
|                 notify(msg, { type: 'error', messageArgs: { _: msg } }); | 
|             } | 
|         }).catch((error) => { | 
|             notify(error.message, { type: 'error', messageArgs: { _: error.message } }); | 
|         }) | 
|     } | 
|   | 
|     const getExcingTasks = async () => { | 
|         await request.post('/task/page', { current: 1, pageSize: 100, orderBy: 'sort desc' }).then(res => { | 
|             const { code, msg, data } = res?.data; | 
|             if (code === 200) { | 
|                 setTasks(data?.records) | 
|                 setTotal(data?.total) | 
|             } else { | 
|                 notify(msg, { type: 'error', messageArgs: { _: msg } }); | 
|             } | 
|         }).catch((error) => { | 
|             notify(error.message, { type: 'error', messageArgs: { _: error.message } }); | 
|         }) | 
|     } | 
|   | 
|     const getRecentUsage = () => { | 
|         request.post("/loc/pie/list").then(res => { | 
|             const { code, msg, data } = res?.data; | 
|             if (code === 200) { | 
|                 setLocUsages(data?.data) | 
|             } else { | 
|                 notify(msg, { type: 'error', messageArgs: { _: msg } }); | 
|             } | 
|         }).catch((error) => { | 
|             notify(error.message, { type: 'error', messageArgs: { _: error.message } }); | 
|         }) | 
|     } | 
|   | 
|     /** | 
|      * 获取库近一个月出入库信息 | 
|      */ | 
|     const getRecentTrands = async () => { | 
|         await request.post('/asnOrder/stock/trand').then(res => { | 
|             const { code, msg, data } = res.data?.data; | 
|             if (code === 200) { | 
|                 setStock(data) | 
|             } else { | 
|                 notify(msg, { type: 'error', messageArgs: { _: msg } }); | 
|             } | 
|         }).catch((error) => { | 
|             notify(error.message, { type: 'error', messageArgs: { _: error.message } }); | 
|         }) | 
|     } | 
|   | 
|     return ( | 
|         <> | 
|             <Grid container md={12} item> | 
|                 <Grid item md={8}> | 
|                     <Box sx={{ display: "flex" }}> | 
|                         <CardWithIcon | 
|                             icon={WifiIcon} | 
|                             subtitle={translate('page.dashboard.header.inStockQty')} | 
|                             title={`${statistic?.inAnf}`} | 
|                             type={"in"} | 
|                             statistic={statistic} | 
|                         /> | 
|                         <Spacer /> | 
|                         <CardWithIcon | 
|                             icon={SensorOccupiedIcon} | 
|                             subtitle={translate('page.dashboard.header.outStockQty')} | 
|                             title={`${statistic?.outAnf}`} | 
|                             type={"out"} | 
|                             statistic={statistic} | 
|                         /> | 
|                     </Box> | 
|                     <Spacer /> | 
|                     <Box> | 
|                         <NbChart orders={stock} /> | 
|                     </Box> | 
|                     <Spacer /> | 
|                     <Box sx={{ display: 'flex', justifyContent: 'space-between' }}> | 
|                         <NbList deadStock={deadStock} /> | 
|                         <NbPie locUsage={locUsage} /> | 
|                     </Box> | 
|                     <Spacer /> | 
|                 </Grid> | 
|                 <Grid item md={4}> | 
|                     <Box sx={{ display: 'flex' }}> | 
|                         <Spacer /> | 
|                         <NbCard | 
|                             icon={CommentIcon} | 
|                             subtitle={translate('page.dashboard.header.taskWorkQty')} | 
|                             title={`${statistic?.taskQty}`} | 
|                             total={total} | 
|                             to={{ | 
|                                 pathname: '/task', | 
|                                 search: JSON.stringify({ | 
|                                     filter: JSON.stringify({ status: 1 }), | 
|                                 }), | 
|                             }} | 
|                             tasks={tasks} | 
|                         /> | 
|                     </Box> | 
|                 </Grid> | 
|             </Grid> | 
|         </> | 
|     ) | 
| } | 
|   | 
| const Spacer = () => <span style={{ width: '1em' }} />; | 
|   | 
| export default Dashboard; |