| | |
| | | VITE_BASE_IP=127.0.0.1 |
| | | VITE_BASE_IP=192.168.4.151 |
| | | # VITE_BASE_IP=47.76.147.249 |
| | | VITE_BASE_PORT=8080 |
| | |
| | | </Box>} |
| | | </Box> : <Box> |
| | | <Typography sx={{ display: 'flex', padding: '1em' }}> |
| | | {' 12234'} |
| | | { title } |
| | | </Typography> |
| | | </Box>} |
| | | </Box> |
| | |
| | | Box, |
| | | Button, |
| | | List, |
| | | Grid, |
| | | ListItem, |
| | | Typography, |
| | | ListItemAvatar, |
| | | ListItemButton, |
| | | ListItemText, |
| | | } from '@mui/material'; |
| | | import CommentIcon from '@mui/icons-material/Comment'; |
| | | import CardWithIcon from '../components/CardWithIcon'; |
| | | import { Link } from 'react-router-dom'; |
| | | import { |
| | | ReferenceField, |
| | |
| | | useTranslate, |
| | | useIsDataLoaded, |
| | | } from 'react-admin'; |
| | | import CardWithIcon from '../components/CardWithIcon'; |
| | | |
| | | const NbCard = (props) => { |
| | | const { list, ...rest } = props; |
| | | const { tasks, total, ...rset } = 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 ( |
| | | <> |
| | |
| | | icon={CommentIcon} |
| | | title={translate('page.dashboard.pending_reviews')} |
| | | subtitle={total} |
| | | {...rest} |
| | | {...rset} |
| | | > |
| | | <List sx={{ display }}> |
| | | {newList?.map((record) => ( |
| | | {tasks?.map((record) => ( |
| | | <ListItem key={record.id} disablePadding> |
| | | <ListItemButton |
| | | alignItems="flex-start" |
| | | component={Link} |
| | | to={`/task/${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, |
| | | }} |
| | | /> |
| | | <Grid container item md={12}> |
| | | <Box sx={{ display: 'flex' }}> |
| | | <Box sx={{ display: 'flex', padding: '1em' }}> |
| | | <Typography color="textSecondary">{translate("table.field.task.taskCode")}:</Typography> |
| | | <Typography color="textSecondary">{record?.taskCode}</Typography> |
| | | </Box> |
| | | </Box> |
| | | <Box sx={{ display: 'flex' }}> |
| | | <Box sx={{ display: 'flex', padding: '1em' }}> |
| | | <Typography color="textSecondary">{translate("table.field.task.taskType")}:</Typography> |
| | | <Typography color="textSecondary" maxWidth="200" overflow="hidden">{record?.taskType$}</Typography> |
| | | </Box> |
| | | </Box> |
| | | <Box sx={{ display: 'flex' }}> |
| | | <Box sx={{ display: 'flex', padding: '1em' }}> |
| | | <Typography color="textSecondary">{translate("table.field.task.taskStatus")}:</Typography> |
| | | <Typography color="textSecondary">{record?.taskStatus$}</Typography> |
| | | </Box> |
| | | </Box> |
| | | <Box sx={{ display: 'flex' }}> |
| | | <Box sx={{ display: 'flex', padding: '1em' }}> |
| | | <Typography color="textSecondary">{translate("table.field.task.startTime")}:</Typography> |
| | | <Typography color="textSecondary">{record?.createTime}</Typography> |
| | | </Box> |
| | | </Box> |
| | | </Grid> |
| | | </ListItemButton> |
| | | <Spacer /> |
| | | </ListItem> |
| | | ))} |
| | | </List> |
| | | <Box flexGrow={1}> </Box> |
| | | <Button |
| | | {/* <Button |
| | | sx={{ borderRadius: 0 }} |
| | | component={Link} |
| | | to="/task" |
| | |
| | | <Box p={1} sx={{ color: 'primary.main' }}> |
| | | {translate('pos.dashboard.all_reviews')} |
| | | </Box> |
| | | </Button> |
| | | </Button> */} |
| | | </CardWithIcon> |
| | | </> |
| | | ); |
| | | }; |
| | | |
| | | const Spacer = () => <span style={{ width: '1em', }} />; |
| | | |
| | | |
| | | export default NbCard; |
| | |
| | | |
| | | return ( |
| | | <ListItem disablePadding> |
| | | <ListItemButton component={Link} to={`/orders/${order.id}`}> |
| | | {/* component={Link} to={`/locItem/${order.id}`} */} |
| | | <ListItemButton > |
| | | {/* <ListItemAvatar> |
| | | {isPending ? ( |
| | | <Avatar /> |
| | |
| | | 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'; |
| | |
| | | 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?.data; |
| | | const { code, msg, data } = res?.data; |
| | | if (code === 200) { |
| | | setStatistic(data); |
| | | } else { |
| | |
| | | }) |
| | | } |
| | | |
| | | 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; |
| | | console.log(data); |
| | | console.log(code); |
| | | if (code === 200) { |
| | | setLocUsages(data?.data) |
| | | } else { |
| | |
| | | <Box sx={{ display: 'flex' }}> |
| | | <Spacer /> |
| | | <NbCard |
| | | icon={SensorOccupiedIcon} |
| | | icon={CommentIcon} |
| | | subtitle={translate('page.dashboard.header.taskWorkQty')} |
| | | title={`${statistic?.membersTotalQua}`} |
| | | title={`${statistic?.taskQty}`} |
| | | total={total} |
| | | to={{ |
| | | pathname: '/task', |
| | | search: JSON.stringify({ |
| | | filter: JSON.stringify({ status: 1 }), |
| | | }), |
| | | }} |
| | | list={deadStock} |
| | | tasks={tasks} |
| | | /> |
| | | </Box> |
| | | </Grid> |