From d40c85778470a7e8341f0fae023c41dec981f384 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 13 五月 2025 20:41:25 +0800
Subject: [PATCH] 新增PO单生成收货单功能
---
rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 213 insertions(+), 0 deletions(-)
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx
new file mode 100644
index 0000000..5b99a52
--- /dev/null
+++ b/rsf-admin/src/page/orders/asnOrder/AsnCreateByPoModal.jsx
@@ -0,0 +1,213 @@
+import { Dialog, DialogActions, DialogContent, DialogTitle, Box } from "@mui/material";
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+ List,
+ DatagridConfigurable,
+ SearchInput,
+ TopToolbar,
+ Button,
+ SelectColumnsButton,
+ EditButton,
+ FilterButton,
+ CreateButton,
+ ExportButton,
+ BulkDeleteButton,
+ WrapperField,
+ Toolbar,
+ useRecordContext,
+ useTranslate,
+ useNotify,
+ useListContext,
+ FunctionField,
+ TextField,
+ NumberField,
+ DateField,
+ BooleanField,
+ ReferenceField,
+ TextInput,
+ DateTimeInput,
+ DateInput,
+ SelectInput,
+ NumberInput,
+ ReferenceInput,
+ ReferenceArrayInput,
+ AutocompleteInput,
+ DeleteButton,
+ Form,
+ SaveButton,
+ useRefresh,
+ useGetList,
+} from 'react-admin';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import { styled } from '@mui/material/styles';
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import { Grid, Stack, width } from "@mui/system";
+import request from '@/utils/request';
+import SaveIcon from '@mui/icons-material/Save';
+import CheckCircleIcon from '@mui/icons-material/CheckCircle';
+import POItemModal from "./POItemModal";
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+ '& .css-1vooibu-MuiSvgIcon-root': {
+ height: '.9em'
+ },
+ '& .RaDatagrid-row': {
+ cursor: 'auto'
+ },
+ '& .status': {
+ width: 90
+ },
+}));
+
+const AsnCreateByPoModal = (props) => {
+ const { open, setOpen, record } = props;
+ const translate = useTranslate();
+ const [params, setParams] = useState({});
+ const [item, setItem] = useState({});
+ const [poItemDialog, setPoItemDialog] = useState(false);
+ const [drawerVal, setDrawerVal] = useState(false);
+ const refresh = useRefresh();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ }
+ };
+ // const CustomFilter = () => {
+ // const { filterValues, setFilters, refetch } = useListContext('deliveryItem');
+ // const [formValues, setFormValues] = useState(filterValues);
+ // const handleChange = (event) => {
+ // if (event.target == undefined || event.target == null) { return }
+ // setFormValues(formValues => ({
+ // ...formValues,
+ // [event.target.name]: event.target.value
+ // }));
+ // };
+
+ // const handleSubmit = (event) => {
+ // setParams(formValues)
+ // };
+
+ // return (
+ // <Box sx={{ width: '100%', margin: 1, marginBottom: 8, "& .MuiDialogActions-root": { padding: 0 } }}>
+ // <Form>
+ // <Grid container rowSpacing={2} columnSpacing={2} sx={{ padding: 2 }}>
+ // <Stack>
+ // <TextInput
+ // source="condition"
+ // label="common.action.search"
+ // resettable
+ // defaultValue={params?.condition}
+ // onChange={handleChange} />
+ // </Stack>
+ // </Grid>
+ // <DialogActions>
+ // <Toolbar sx={{ width: '100%', justifyContent: 'end' }} >
+ // <SaveButton onClick={handleSubmit} label={"toolbar.query"} />
+ // </Toolbar>
+ // </DialogActions>
+ // </Form>
+ // </Box>
+ // );
+ // };
+ return (
+ <Box>
+ <Dialog
+ open={open}
+ onClose={handleClose}
+ aria-labelledby="form-dialog-title"
+ aria-hidden
+ fullWidth
+ disableRestoreFocus
+ maxWidth="lg"
+ >
+ <DialogTitle id="form-dialog-title" sx={{
+ position: 'sticky',
+ top: 0,
+ backgroundColor: 'background.paper',
+ zIndex: 1000
+ }}>
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+ <DialogCloseButton onClose={handleClose} />
+ </Box>
+ </DialogTitle>
+ <Grid container rowSpacing={2} columnSpacing={2}>
+ <DialogContent>
+ <Grid item sx={24}>
+ <List
+ storeKey="selectPurchase"
+ resource="purchase/filters"
+ sx={{
+ flexGrow: 1,
+ marginTop: 8,
+ height: 500,
+ transition: (theme) =>
+ theme.transitions.create(['all'], {
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginRight: 0,
+ }}
+ // filters={<CustomFilter />}
+ queryOptions={{ meta: { ...params } }}
+ empty={false}
+ sort={{ field: "create_time", order: "desc" }}
+ actions={false}
+ perPage={DEFAULT_PAGE_SIZE}
+ >
+ <StyledDatagrid
+ preferenceKey='selectPurchase'
+ bulkActionButtons={
+ <>
+ <ConfirmSelectButton
+ setOpen={setOpen}
+ setPoItemDialog={setPoItemDialog}
+ setItem={setItem}
+ mutationMode="pessimistic" />
+ </>
+ }
+ rowClick={false}
+ expand={false}
+ expandSingle={true}
+ omit={['id', 'createTime', 'createBy', 'channel', 'platCode', 'memo', 'channel', 'startTime', 'workQty', 'endTime']}
+ >
+ <NumberField source="id" />
+ <TextField source="code" label="table.field.purchase.code" />
+ <TextField source="type$" label="table.field.purchase.type" />
+ <TextField source="wkType$" label="table.field.purchase.wkType" />
+ <TextField source="source" label="table.field.purchase.source" />
+ <NumberField source="anfme" label="table.field.purchase.anfme" />
+ <NumberField source="qty" label="table.field.purchase.qty" />
+ <TextField source="channel" label="table.field.purchase.channel" />
+ <TextField source="platCode" label="table.field.purchase.platCode" />
+ <DateField source="preArr" label="table.field.purchase.preArr" showTime />
+ <DateField source="startTime" label="table.field.purchase.startTime" showTime />
+ <DateField source="endTime" label="table.field.purchase.endTime" showTime />
+ <TextField source="project" label="table.field.purchase.project" />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
+ </StyledDatagrid>
+ </List>
+ </Grid>
+ </DialogContent>
+ </Grid>
+ </Dialog >
+ <POItemModal open={poItemDialog} setOpen={setPoItemDialog} record={item} />
+ </Box>
+ )
+}
+
+export default AsnCreateByPoModal;
+
+
+const ConfirmSelectButton = ({ setOpen, setPoItemDialog, setItem }) => {
+ const { selectedIds, onUnselectItems } = useListContext();
+ const confirmSelect = async (event) => {
+ setItem(selectedIds[0])
+ onUnselectItems();
+ setPoItemDialog(true)
+ setOpen(false);
+ }
+
+ return (
+ <Button label={"toolbar.confirm"} variant="contained" color="primary" size="medium" startIcon={<SaveIcon />} onClick={confirmSelect} />
+ )
+}
--
Gitblit v1.9.1