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