import React, { useState, useRef, useEffect, useMemo } from "react";
|
import {
|
CreateBase,
|
useTranslate,
|
TextInput,
|
NumberInput,
|
BooleanInput,
|
DateInput,
|
SaveButton,
|
SelectInput,
|
ReferenceInput,
|
ReferenceArrayInput,
|
AutocompleteInput,
|
Toolbar,
|
required,
|
useDataProvider,
|
useNotify,
|
Form,
|
useCreateController,
|
useListContext,
|
useRefresh,
|
} from 'react-admin';
|
import {
|
Dialog,
|
DialogActions,
|
DialogContent,
|
DialogTitle,
|
Grid,
|
TextField,
|
Box,
|
Button,
|
Radio,
|
RadioGroup,
|
FormControlLabel,
|
FormControl,
|
FormLabel,
|
TableRow,
|
TableCell,
|
Tooltip,
|
IconButton,
|
styled
|
|
|
} from '@mui/material';
|
import DialogCloseButton from "@/page/components/DialogCloseButton";
|
import DictionarySelect from "@/page/components/DictionarySelect";
|
import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
|
import SaveIcon from '@mui/icons-material/Save';
|
import request from '@/utils/request';
|
import { Add, Edit, Delete } from '@mui/icons-material';
|
import _ from 'lodash';
|
import { DataGrid } from '@mui/x-data-grid';
|
import StatusSelectInput from "@/page/components/StatusSelectInput";
|
|
import { useReactToPrint } from "react-to-print";
|
import jsbarcode from 'jsbarcode'
|
import { el } from "date-fns/locale";
|
|
const PrintModal = ({ open, setOpen, rows }) => {
|
const refresh = useRefresh();
|
const translate = useTranslate();
|
const notify = useNotify();
|
const contentRef = useRef(null);
|
const reactToPrintFn = useReactToPrint({ contentRef });
|
|
const handleClose = (event, reason) => {
|
if (reason !== "backdropClick") {
|
setOpen(false);
|
}
|
};
|
|
const [value, setValue] = useState('temp1');
|
|
const handleChange = (event) => {
|
setValue(event.target.value);
|
};
|
|
const handlePrint = () => {
|
// handleClose()
|
reactToPrintFn()
|
};
|
|
return (
|
<Dialog open={open} maxWidth="sm" fullWidth>
|
<DialogCloseButton onClose={handleClose} />
|
<DialogTitle>{translate('toolbar.print')}</DialogTitle>
|
<DialogContent >
|
<FormControl >
|
<RadioGroup
|
row
|
aria-labelledby="demo-controlled-radio-buttons-group"
|
name="controlled-radio-buttons-group"
|
value={value}
|
onChange={handleChange}
|
size="small"
|
sx={{ justifyContent: 'center' }}
|
>
|
<FormControlLabel value="temp1" control={<Radio />} label="模板1" size="small" />
|
</RadioGroup>
|
</FormControl>
|
|
<Box>
|
<div style={{ textAlign: 'center', display: 'flex', justifyContent: 'center' }}>
|
<table
|
className="contain"
|
style={{
|
overflow: 'hidden',
|
fontSize: 'small',
|
tableLayout: 'fixed',
|
width: '280px',
|
borderCollapse: 'collapse', // 合并边框
|
border: '1px solid black' // 设置表格整体边框
|
}}
|
>
|
<tbody>
|
<tr style={{ height: '74px' }}>
|
<td
|
align="center"
|
colSpan={3}
|
style={{ border: '1px solid black' }} // 设置单元格边框
|
>
|
商品编码
|
</td>
|
<td
|
align="center"
|
className="barcode"
|
colSpan={9}
|
style={{ border: '1px solid black' }}
|
>
|
<img className="template-code" src={'/img/barcode.jpeg'} style={{ width: '90%' }} alt="Barcode" />
|
<div style={{ letterSpacing: '2px', marginTop: '1px', textAlign: 'center' }}>
|
<span>{'xxxxxx'}</span>
|
</div>
|
</td>
|
</tr>
|
<tr style={{ height: '74px' }}>
|
<td
|
align="center"
|
colSpan={3}
|
style={{ border: '1px solid black' }}
|
>
|
商品
|
</td>
|
<td
|
align="center"
|
colSpan={5}
|
style={{
|
overflow: 'hidden',
|
whiteSpace: 'nowrap',
|
textOverflow: 'ellipsis',
|
border: '1px solid black'
|
}}
|
>
|
{'xxxxxxxx'}
|
</td>
|
<td
|
align="center"
|
colSpan={2}
|
style={{ border: '1px solid black' }}
|
>
|
备注
|
</td>
|
<td
|
align="center"
|
colSpan={2}
|
style={{ border: '1px solid black' }}
|
>
|
{'xx'}
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
<style>{`
|
@media print {
|
.print-content {
|
display: block!important;
|
}
|
}`} </style>
|
<div ref={contentRef} className="print-content" style={{ textAlign: 'center', display: 'none' }}>
|
<PrintTemp key={'bb'} rows={rows} />
|
</div>
|
</Box>
|
</DialogContent>
|
<DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
|
<Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
|
<Button onClick={handlePrint} variant="contained" startIcon={<SaveIcon />}>
|
{translate('toolbar.confirm')}
|
</Button>
|
</Box>
|
</DialogActions>
|
</Dialog >
|
);
|
}
|
|
export default PrintModal;
|
|
const PrintTemp = ({ rows }) => {
|
const notify = useNotify();
|
const [data, setData] = useState([]);
|
const http = async () => {
|
const res = await request.post(`/asnOrderItem/many/${rows?.join()}`);
|
if (res?.data?.code === 200) {
|
let val = res.data.data.map((el => {
|
return {
|
barcode: '/img/barcode.jpeg',
|
code: el.trackCode,
|
name: el.maktx,
|
memo: el.memo || ''
|
}
|
}))
|
setData(val)
|
setTimeout(() => {
|
val.forEach((el) => {
|
jsbarcode(`#barcode${el.code}`, el.code, { height: 30 });
|
});
|
}, 10);
|
|
} else {
|
notify(res.data.msg);
|
}
|
}
|
|
useEffect(() => {
|
if (rows?.length > 0) {
|
http();
|
}
|
|
}, [rows]);
|
|
|
return (
|
<>
|
{data.map((item, index) => (
|
<table
|
key={index}
|
className="contain"
|
style={{
|
overflow: 'hidden',
|
fontSize: 'small',
|
tableLayout: 'fixed',
|
width: '520px',
|
borderCollapse: 'collapse',
|
borderSpacing: 0,
|
margin: '0 auto',
|
marginTop: '10px',
|
}}
|
>
|
<tbody>
|
<tr style={{ height: '74px' }}>
|
<td align="center" colSpan={3} style={{ border: '1px solid black' }} >
|
商品编码
|
</td>
|
<td
|
align="center"
|
className="barcode"
|
colSpan={9}
|
style={{ border: '1px solid black' }}
|
>
|
<img id={"barcode" + item.code} style={{ width: '70%', verticalAlign: 'middle' }} />
|
{/* <img className="template-code" src={item.barcode} style={{ width: '90%', verticalAlign: 'middle' }} alt="Barcode" /> */}
|
{/* <div style={{ letterSpacing: '2px', marginTop: '1px', textAlign: 'center' }}>
|
<span>{item.code}</span>
|
</div> */}
|
</td>
|
</tr>
|
<tr style={{ height: '74px' }}>
|
<td
|
align="center"
|
colSpan={3}
|
style={{ border: '1px solid black' }}
|
>
|
商品
|
</td>
|
<td
|
align="center"
|
colSpan={5}
|
style={{
|
overflow: 'hidden',
|
whiteSpace: 'nowrap',
|
textOverflow: 'ellipsis',
|
border: '1px solid black'
|
}}
|
>
|
{item.name}
|
</td>
|
<td
|
align="center"
|
colSpan={2}
|
style={{ border: '1px solid black' }}
|
>
|
备注
|
</td>
|
<td
|
align="center"
|
colSpan={2}
|
style={{ border: '1px solid black' }}
|
>
|
{item.memo}
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
))}
|
|
</>
|
)
|
}
|