DESKTOP-LMJ82IJ\Eno
2025-04-13 d6775a4b96a6a3ded3be9d3f2044ba3f91c070a1
rsf-admin/src/page/purchase/PurchasePanel.jsx
@@ -1,122 +1,181 @@
import React, { useState, useRef, useEffect, useMemo } from "react";
import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material';
import { Box, Card, CardContent, Grid, Typography, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
import {
    useTranslate,
    useRecordContext,
    useNotify
} from 'react-admin';
import PanelTypography from "../components/PanelTypography";
import * as Common from '@/utils/common'
import { styled } from "@mui/material/styles";
import request from '@/utils/request';
const PurchasePanel = () => {
    const record = useRecordContext();
    if (!record) return null;
    const translate = useTranslate();
    return (
        <>
            <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}>
                <CardContent>
                    <Grid container spacing={2}>
                        <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}>
                            <Typography variant="h6" gutterBottom align="left" sx={{
                                maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' },
                                whiteSpace: 'nowrap',
                                overflow: 'hidden',
                                textOverflow: 'ellipsis',
                            }}>
                                {Common.camelToPascalWithSpaces(translate('table.field.purchase.id'))}: {record.id}
                            </Typography>
                            {/*  inherit, primary, secondary, textPrimary, textSecondary, error */}
                            <Typography variant="h6" gutterBottom align="right" >
                                ID: {record.id}
                            </Typography>
                        </Grid>
                    </Grid>
                    <Grid container spacing={2}>
                        <Grid item xs={12} container alignContent="flex-end">
                            <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}>
                                {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo}
                            </Typography>
                        </Grid>
                    </Grid>
                    <Box height={20}>&nbsp;</Box>
                    <Grid container spacing={2}>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.code"
                                property={record.code}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.type"
                                property={record.type}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.source"
                                property={record.source}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.preArr"
                                property={record.preArr$}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.anfme"
                                property={record.anfme}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.qty"
                                property={record.qty}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.workQty"
                                property={record.workQty}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.channel"
                                property={record.channel}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.platCode"
                                property={record.platCode}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.startTime"
                                property={record.startTime$}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.endTime"
                                property={record.endTime$}
                            />
                        </Grid>
                        <Grid item xs={6}>
                            <PanelTypography
                                title="table.field.purchase.project"
                                property={record.project}
                            />
                        </Grid>
    const notify = useNotify();
    const [rows, setRows] = useState([]);
    const poId = record.id;
                    </Grid>
                </CardContent>
            </Card >
        </>
    useEffect(() => {
        http();
    }, [poId]);
    const http = async () => {
        const res = await request.post('/purchaseItem/page', { purchaseId: poId });
        if (res?.data?.code === 200) {
            setRows(res.data.data.records)
        } else {
            notify(res.data.msg);
        }
    }
    const StyledTable = styled(TableRow)(({ theme }) => ({
        "& .MuiButtonBase-root.": {
            padding: "0px 0px",
        },
    }));
    const StyledTableRow = styled(TableRow)(({ theme }) => ({
        "& .MuiButtonBase-root.": {
            padding: "0px 0px",
        },
    }));
    const StyledTableCell = styled(TableCell)(({ theme }) => ({
        "& .MuiButtonBase-root": {
            padding: "0px 0px",
        },
        overflow: "hidden",
        textOverflow: "ellipsis",
        whiteSpace: "nowrap",
        maxWidth: 600,
    }));
    const columns = [
        {
            id: 'purchaseId',
            label: 'table.field.purchaseItem.purchaseId',
            minWidth: 100
        },
        {
            id: 'platItemId',
            label: 'table.field.purchaseItem.platItemId',
            minWidth: 100
        },
        {
            id: 'matnrCode',
            label: 'table.field.purchaseItem.matnrCode',
            minWidth: 100
        },
        {
            id: 'matnrName',
            label: 'table.field.purchaseItem.matnrName',
            minWidth: 100
        },
        {
            id: 'unit',
            label: 'table.field.purchaseItem.unit',
            minWidth: 100
        },
        {
            id: 'anfme',
            label: 'table.field.purchaseItem.anfme',
            minWidth: 100
        },
        {
            id: 'qty',
            label: 'table.field.purchaseItem.qty',
            minWidth: 100
        },
        {
            id: 'nromQty',
            label: 'table.field.purchaseItem.nromQty',
            minWidth: 100
        },
        {
            id: 'asnQty',
            label: 'table.field.purchaseItem.asnQty',
            minWidth: 100
        },
        {
            id: 'printQty',
            label: 'table.field.purchaseItem.printQty',
            minWidth: 100
        },
        {
            id: 'splrName',
            label: 'table.field.purchaseItem.splrName',
            minWidth: 100
        },
        {
            id: 'splrCode',
            label: 'table.field.purchaseItem.splrCode',
            minWidth: 100
        },
        {
            id: 'splrBatch',
            label: 'table.field.purchaseItem.splrBatch',
            minWidth: 100
        },
        {
            id: 'statusBool',
            label: 'common.field.status',
            minWidth: 100,
            formatter: (value) => value ? 'Yes' : 'No'
        },
        {
            id: 'memo',
            label: 'common.field.memo',
            minWidth: 100
        }
    ];
    return (
        <Box sx={{
            position: 'relative',
            padding: '5px 10px'
        }}>
            <TableContainer component={Paper} >
                <Table size="small" >
                    <TableHead>
                        <StyledTableRow key={'head'}>
                            {columns.map((column, idx) => {
                                const value = column.label;
                                return (
                                    <>
                                        <StyledTableCell
                                            key={column.id}
                                            align={column.align || "left"}
                                        // style={{ paddingLeft: idx === 0 && (depth * 16 + 16) }}
                                        >
                                            {column.format ? column.format(value) : translate(value)}
                                        </StyledTableCell>
                                    </>
                                );
                            })}
                        </StyledTableRow>
                    </TableHead>
                    <TableBody>
                        {rows.map((row) => (
                            <StyledTableRow key={row.id || Math.random()}>
                                {columns.map((column) => (
                                    <StyledTableCell key={column.id} >
                                        {row[column.id]}
                                    </StyledTableCell>
                                ))}
                            </StyledTableRow>
                        ))}
                    </TableBody>
                </Table>
            </TableContainer>
        </Box>
    );
};