From c5bee307ac9ab10b524bbccce2fde3190723f467 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 09 五月 2025 19:06:09 +0800
Subject: [PATCH] no message

---
 rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 223 insertions(+), 0 deletions(-)

diff --git a/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx b/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx
new file mode 100644
index 0000000..8f6db2f
--- /dev/null
+++ b/rsf-admin/src/page/orders/asnOrder/OrderPrintPreview.jsx
@@ -0,0 +1,223 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    Edit,
+    SimpleForm,
+    useTranslate,
+    TextInput,
+    DateInput,
+    SelectInput,
+    AutocompleteInput,
+    SaveButton,
+    Toolbar,
+    TopToolbar,
+    Button,
+    List,
+    useRefresh,
+    NumberField,
+    ReferenceField,
+    TextField,
+    DateField,
+    Form,
+    required,
+    DatagridConfigurable,
+    useListContext,
+    useNotify,
+    DeleteButton,
+    ImageField,
+    InPlaceEditor,
+} from 'react-admin';
+import { useWatch, useFormContext } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress, } from '@mui/material';
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import DictSelect from "../../components/DictSelect";
+import SaveIcon from '@mui/icons-material/Save';
+import request from '@/utils/request';
+import { styled } from '@mui/material/styles';
+import { QRCodeSVG, QRCodeCanvas } from 'qrcode.react';  // 鐜板湪蹇呴』杩欐牱鐢�
+import PrintOutlinedIcon from '@mui/icons-material/PrintOutlined';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 220
+    },
+    '& .wkType': {
+        width: 110
+    },
+    '& .status': {
+        width: 90
+    },
+}));
+
+const OrderPrintPreview = (props) => {
+    const { open, setOpen, record } = props;
+    const notify = useNotify();
+    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')) || [];
+
+    const handleClose = (event, reason) => {
+        setOpen(false);
+    };
+
+    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>
+        </>
+    )
+}
+
+export default OrderPrintPreview;
+
+const DynamicFields = (props) => {
+    const translate = useTranslate();
+    const notify = useNotify();
+    const [columns, setColumns] = useState([]);
+    const { isLoading } = useListContext();
+    const refresh = useRefresh();
+    useEffect(() => {
+        getDynamicFields();
+    }, []);
+
+    const getDynamicFields = async () => {
+        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="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />,
+                <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />,
+                <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />,
+                <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />,
+                <TextField source="maktx" label="table.field.asnOrderItem.maktx" />,
+                <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" />,
+                <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />,
+                <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} />)
+            const lastArr = [
+                <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
+                    <TextField source="nickname" />
+                </ReferenceField>,
+            ]
+            setColumns([...arr, ...fields, ...lastArr]);
+        } else {
+            notify(msg);
+        }
+    }
+
+    return (
+        <Box sx={{ position: 'relative', minHeight: "60vh", }}>
+            {isLoading && (
+                <LinearProgress
+                    sx={{
+                        height: "2px",
+                        position: 'absolute',
+                        top: 0,
+                        left: 0,
+                        right: 0,
+                    }}
+                />
+            )}
+            {columns.length > 0 &&
+                <StyledDatagrid
+                    preferenceKey='asnOrderItem'
+                    bulkActionButtons={false}
+                    rowClick={(id, resource, record) => false}
+                    omit={['id', 'asnId', 'poDetlId', 'poDetlCode', 'matnrId', 'purQty', 'purUnit', 'qrcode', 'trackCode']}
+                >
+                    {columns.map((column) => column)}
+                </StyledDatagrid>}
+        </Box>
+    )
+}

--
Gitblit v1.9.1