|  |  | 
 |  |  | import { styled } from '@mui/material/styles'; | 
 |  |  | import { QRCodeSVG, QRCodeCanvas } from 'qrcode.react';  // 现在必须这样用 | 
 |  |  | import PrintOutlinedIcon from '@mui/icons-material/PrintOutlined'; | 
 |  |  | import { useReactToPrint } from "react-to-print"; | 
 |  |  |  | 
 |  |  | const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ | 
 |  |  |     '& .css-1vooibu-MuiSvgIcon-root': { | 
 |  |  | 
 |  |  | const OrderPrintPreview = (props) => { | 
 |  |  |     const { open, setOpen, record } = props; | 
 |  |  |     const notify = useNotify(); | 
 |  |  |     const invoiceRef = useRef(); | 
 |  |  |     const translate = useTranslate(); | 
 |  |  |     const [drawerVal, setDrawerVal] = useState(false); | 
 |  |  |     const [disabled, setDisabled] = useState(false) | 
 |  |  |     const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_order_type')) || []; | 
 |  |  |     const business = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; | 
 |  |  | 
 |  |  |         setOpen(false); | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     const printOrders = useReactToPrint({ | 
 |  |  |         content: () => { | 
 |  |  |             return invoiceRef.current | 
 |  |  |         }, | 
 |  |  |         documentTitle: `订单:${record?.code}`, | 
 |  |  |         pageStyle: ` | 
 |  |  |         @page { | 
 |  |  |             size: A4 landscape;  // 关键设置:A4横向 | 
 |  |  |             margin: 10mm; | 
 |  |  |         } | 
 |  |  |         @media print { | 
 |  |  |              html, body { | 
 |  |  |                 width: 297mm;     // A4横向宽度 | 
 |  |  |                 height: 210mm;    // A4横向高度 | 
 |  |  |             } | 
 |  |  |         }`, | 
 |  |  |         onAfterPrint: () => alert('已发送至打印机!') | 
 |  |  |     }) | 
 |  |  |     // @page { | 
 |  |  |     //     // size: A4; | 
 |  |  |     // } | 
 |  |  |     // @media print { | 
 |  |  |     //     // body { | 
 |  |  |     //     // -webkit-print-color-adjust: exact; | 
 |  |  |     //     // } | 
 |  |  |  | 
 |  |  |     return ( | 
 |  |  |         <> | 
 |  |  |             <Dialog | 
 |  |  |                 open={open} | 
 |  |  |                 onClose={handleClose} | 
 |  |  |                 aria-labelledby="form-dialog-title" | 
 |  |  |                 aria-hidden | 
 |  |  |                 fullWidth | 
 |  |  |                 disableRestoreFocus | 
 |  |  |                 maxWidth="xl"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
 |  |  |             > | 
 |  |  |                 <DialogTitle id="form-dialog-title" sx={{ | 
 |  |  |                     position: 'sticky', | 
 |  |  |                     top: 0, | 
 |  |  |                     textAlign: 'center', | 
 |  |  |                     backgroundColor: 'background.paper', | 
 |  |  |                     zIndex: 1000 | 
 |  |  |                 }}> | 
 |  |  |                     {translate('menu.asnOrder')} | 
 |  |  |                     <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> | 
 |  |  |                         <DialogCloseButton onClose={handleClose} /> | 
 |  |  |                     </Box> | 
 |  |  |                 </DialogTitle> | 
 |  |  |                 <DialogContent sx={{ mt: 2 }}> | 
 |  |  |                     <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}> | 
 |  |  |                         <Form defaultValues={record}> | 
 |  |  |                             <Grid container spacing={2} sx={{ justifyContent: 'space-between', }}> | 
 |  |  |                                 <Grid item md={2}> | 
 |  |  |                                     <Box sx={{ display: 'flex', justifyContent: 'center' }}> | 
 |  |  |                                         <Typography>单据类型:</Typography> | 
 |  |  |                                         <Typography>{record?.type$}</Typography> | 
 |  |  |                                     </Box> | 
 |  |  |                                     <Box sx={{ display: 'flex', justifyContent: 'center', padding: 1 }}></Box> | 
 |  |  |                                     <Box sx={{ display: 'flex', justifyContent: 'center' }}> | 
 |  |  |                                         <Typography>业务类型:</Typography> | 
 |  |  |                                         <Typography>{record?.wkType$}</Typography> | 
 |  |  |                                     </Box> | 
 |  |  |                                 </Grid> | 
 |  |  |                                 <Grid item md={2}> | 
 |  |  |                                     <QRCodeSVG value={record?.code} /> | 
 |  |  |                                     <Typography>{record.code}</Typography> | 
 |  |  |                                 </Grid> | 
 |  |  |                                 {/* <Grid item md={2}> | 
 |  |  |                                     <TextInput source="code" label={"table.field.asnOrder.code"} /> | 
 |  |  |                                 </Grid> */} | 
 |  |  |                             </Grid> | 
 |  |  |                         </Form> | 
 |  |  |                         <List | 
 |  |  |                             resource="asnOrderItem" | 
 |  |  |                             sx={{ | 
 |  |  |                                 flexGrow: 1, | 
 |  |  |                                 transition: (theme) => | 
 |  |  |                                     theme.transitions.create(['all'], { | 
 |  |  |                                         duration: theme.transitions.duration.enteringScreen, | 
 |  |  |                                     }), | 
 |  |  |                                 marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, | 
 |  |  |                             }} | 
 |  |  |                             title={"menu.asnOrderItem"} | 
 |  |  |                             empty={false} | 
 |  |  |                             filter={{ asnId: record?.id }} | 
 |  |  |                             sort={{ field: "create_time", order: "desc" }} | 
 |  |  |                             actions={( | 
 |  |  |                                 <></> | 
 |  |  |                             )} | 
 |  |  |                             perPage={DEFAULT_ITEM_PAGE_SIZE} | 
 |  |  |                         > | 
 |  |  |                             <DynamicFields /> | 
 |  |  |                         </List> | 
 |  |  |                     </Box> | 
 |  |  |                 </DialogContent> | 
 |  |  |                 <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> | 
 |  |  |                     <Toolbar sx={{ width: '100%', justifyContent: 'end' }}  > | 
 |  |  |                         <Button disabled={disabled} variant="contained" startIcon={<PrintOutlinedIcon />} label={'toolbar.print'}> | 
 |  |  |                         </Button> | 
 |  |  |                     </Toolbar> | 
 |  |  |                 </DialogActions> | 
 |  |  |             </Dialog> | 
 |  |  |         </> | 
 |  |  |         <Dialog | 
 |  |  |             className="orderPrintPerview" | 
 |  |  |             // ref={invoiceRef} | 
 |  |  |             open={open} | 
 |  |  |             onClose={handleClose} | 
 |  |  |             aria-labelledby="form-dialog-title" | 
 |  |  |             aria-hidden | 
 |  |  |             fullWidth | 
 |  |  |             disableRestoreFocus | 
 |  |  |             maxWidth="xl"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
 |  |  |         > | 
 |  |  |             <DialogTitle id="form-dialog-title" sx={{ | 
 |  |  |                 position: 'sticky', | 
 |  |  |                 top: 0, | 
 |  |  |                 textAlign: 'center', | 
 |  |  |                 backgroundColor: 'background.paper', | 
 |  |  |                 zIndex: 1000 | 
 |  |  |             }}> | 
 |  |  |                 {translate('menu.asnOrder')} | 
 |  |  |                 <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> | 
 |  |  |                     <DialogCloseButton onClose={handleClose} /> | 
 |  |  |                 </Box> | 
 |  |  |             </DialogTitle> | 
 |  |  |             <DialogContent sx={{ mt: 2 }}> | 
 |  |  |                 <OrderPreview ref={invoiceRef} record={record} /> | 
 |  |  |             </DialogContent> | 
 |  |  |             <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> | 
 |  |  |                 <Toolbar sx={{ width: '100%', justifyContent: 'end' }}  > | 
 |  |  |                     <Button disabled={disabled} variant="contained" startIcon={<PrintOutlinedIcon />} label={'toolbar.print'} onClick={printOrders}></Button> | 
 |  |  |                 </Toolbar> | 
 |  |  |             </DialogActions> | 
 |  |  |         </Dialog> | 
 |  |  |     ) | 
 |  |  | } | 
 |  |  |  | 
 |  |  | export default OrderPrintPreview; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | const OrderPreview = React.forwardRef(({ record }, ref) => ( | 
 |  |  |     <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }} ref={ref}> | 
 |  |  |         <Form defaultValues={record}> | 
 |  |  |             <Grid container spacing={2} sx={{ justifyContent: 'space-between', }}> | 
 |  |  |                 <Grid item md={2}> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'start' }}> | 
 |  |  |                         <Typography>ASN单:</Typography> | 
 |  |  |                         <Typography>{record?.code}</Typography> | 
 |  |  |                     </Box> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'start' }}> | 
 |  |  |                         <Typography>PO单:</Typography> | 
 |  |  |                         <Typography>{record?.poCode}</Typography> | 
 |  |  |                     </Box> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'start' }}> | 
 |  |  |                         <Typography>单据类型:</Typography> | 
 |  |  |                         <Typography>{record?.type$}</Typography> | 
 |  |  |                     </Box> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'center', padding: 1 }}></Box> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'start' }}> | 
 |  |  |                         <Typography>业务类型:</Typography> | 
 |  |  |                         <Typography>{record?.wkType$}</Typography> | 
 |  |  |                     </Box> | 
 |  |  |                     <Box sx={{ display: 'flex', justifyContent: 'center', padding: 1 }}></Box> | 
 |  |  |                 </Grid> | 
 |  |  |                 <Grid item md={2}> | 
 |  |  |                     <QRCodeSVG value={record?.code} /> | 
 |  |  |                     <Typography>{record.code}</Typography> | 
 |  |  |                 </Grid> | 
 |  |  |             </Grid> | 
 |  |  |         </Form> | 
 |  |  |         <List | 
 |  |  |             resource="asnOrderItem" | 
 |  |  |             title={"menu.asnOrderItem"} | 
 |  |  |             empty={false} | 
 |  |  |             filter={{ asnId: record?.id }} | 
 |  |  |             sort={{ field: "create_time", order: "desc" }} | 
 |  |  |             actions={( | 
 |  |  |                 <></> | 
 |  |  |             )} | 
 |  |  |             perPage={DEFAULT_ITEM_PAGE_SIZE} | 
 |  |  |         > | 
 |  |  |             <DynamicFields /> | 
 |  |  |         </List> | 
 |  |  |     </Box> | 
 |  |  | )); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | const DynamicFields = (props) => { | 
 |  |  |     const translate = useTranslate(); | 
 |  |  | 
 |  |  |         const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); | 
 |  |  |         if (code == 200) { | 
 |  |  |             const arr = [ | 
 |  |  |                 <NumberField source="id" />, | 
 |  |  |                 <NumberField source="asnId" label="table.field.asnOrderItem.asnId" />, | 
 |  |  |                 <TextField source="asnCode" label="table.field.asnOrderItem.asnCode" />, | 
 |  |  |                 <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />, | 
 |  |  | 
 |  |  |                 <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" />, | 
 |  |  |                 <NumberField source="anfme" label="table.field.asnOrderItem.anfme" />, | 
 |  |  |                 <NumberField source="qty" label="table.field.asnOrderItem.qty" />, | 
 |  |  |                 <TextField source="splrName" label="table.field.asnOrderItem.splrName" />, | 
 |  |  |                 <NumberField source="purQty" label="table.field.asnOrderItem.purQty" />, | 
 |  |  |                 // <TextField source="splrName" label="table.field.asnOrderItem.splrName" />, | 
 |  |  |                 <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />, | 
 |  |  |                 <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />, | 
 |  |  |                 // <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />, | 
 |  |  |                 <TextField source="packName" label="table.field.asnOrderItem.packName" />, | 
 |  |  |             ] | 
 |  |  |             const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) | 
 |  |  | 
 |  |  |                     preferenceKey='asnOrderItem' | 
 |  |  |                     bulkActionButtons={false} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'asnId', 'poDetlId', 'poDetlCode', 'matnrId', 'purQty', 'purUnit', 'qrcode', 'trackCode']} | 
 |  |  |                     omit={['id', 'asnId', 'poDetlId', 'platItemId', 'poDetlCode', 'matnrId', 'purQty', 'splrName', 'purUnit', 'qrcode', 'packName', 'trackCode']} | 
 |  |  |                 > | 
 |  |  |                     {columns.map((column) => column)} | 
 |  |  |                 </StyledDatagrid>} |