From bfc43ca0e4683c1c0322a6cad5d5be2bc07decc3 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 24 七月 2025 15:00:44 +0800
Subject: [PATCH] 新增调拔单功能 盘点功能优化

---
 rsf-admin/src/page/orders/outStock/OutStockPublic.jsx |  178 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 111 insertions(+), 67 deletions(-)

diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
index 3a9f70b..0dc8ff5 100644
--- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
@@ -37,6 +37,7 @@
     Form,
     useRefresh,
     useRedirect,
+    useRecordSelection,
 } from 'react-admin';
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_TYPE } from '@/config/setting';
 import { styled } from '@mui/material/styles';
@@ -47,7 +48,6 @@
 import ConfirmButton from '../../components/ConfirmButton';
 import { Delete, Edit, Add } from '@mui/icons-material';
 import OutStockSiteDialog from "./OutStockSiteDialog";
-import { color } from "framer-motion";
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -58,22 +58,57 @@
     },
     '& .column-maktx': {
         width: 200
-    }
+    },
+
+    mt: '60px'
+    // '& .RaBulkActionsToolbar-toolbar': {
+    //     display: 'none'
+    // }
+
 }));
 
 const OutStockPublic = (props) => {
-    const { record, open, setOpen } = props;
+    const { record, open, setOpen, setManualDialog } = props;
     const notify = useNotify();
     const gridRef = useGridApiRef();
-    const [rows, setRows] = useState({});
+    const [rows, setRows] = useState([]);
+    const [fetchRows, setFetchRows] = useState([]);
     const translate = useTranslate();
+    const [rowSelectedIds, setRowSelectedIds] = useState([]);
+    const [selectedMatnr, setSelectedMatnr] = useState([]);
     const [selectedIds, setSelectedIds] = useState([]);
-    const [formData, setFormData] = useState({
-        orderId: record?.id,
-        waveId: DEFAULT_TYPE
-    });
+    const [formData, setFormData] = useState({ orderId: record?.id, waveId: DEFAULT_TYPE });
     const [dialog, setDialog] = useState(false);
     const [selectedValue, setSelectedValue] = useState({});
+
+    useEffect(() => {
+        if (selectedMatnr.length < 1) {
+            setRows(fetchRows)
+        } else {
+            const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode));
+            setRows(mas)
+        }
+    }, [selectedMatnr])
+
+
+    const ComfirmButton = () => {
+        const { data } = useListContext();
+        const [selectedIds, selectionModifiers] = useRecordSelection();
+
+        const handleRowClick = () => {
+            console.log(selectedIds);
+            
+            const ids = data.filter(item => selectedIds.includes(item.id)).map(item => item.id);
+            setRowSelectedIds(ids);
+            const mas = data.filter(item => selectedIds.includes(item.id)).map(item => item.matnrCode);
+            //璁剧疆搴撲綅淇℃伅绛涢�夋潯浠�
+            setSelectedMatnr(mas);
+        }
+
+        return (
+            <Button label="toolbar.confirm" size="medium" onClick={handleRowClick} />
+        )
+    };
 
     const handleClickOpen = () => {
         setDialog(true);
@@ -82,20 +117,28 @@
     const handleClose = (value) => {
         setDialog(false);
         setSelectedValue(value);
-        const newRows = rows.map(item => {
-            return {
-                ...item,
-                siteNo: value?.site
-            }
-        })
-        setRows(newRows);
+        if (selectedIds.length == 0) {
+            const newRows = rows.map(item => {
+                return {
+                    ...item,
+                    siteNo: value?.site
+                }
+            })
+            setRows(newRows);
+        } else {
+            const newRows = rows.map(item => {
+                return selectedIds.includes(item?.id) ? {
+                    ...item,
+                    siteNo: value?.site
+                } : item
+            })
+            setRows(newRows);
+        }
     };
 
     useEffect(() => {
-        if (open) {
-            getWaveRule()
-        }
-    }, [open, formData])
+        getWaveRule()
+    }, [open])
 
     const getWaveRule = async () => {
         if (formData.waveId == null && formData.waveId == undefined) {
@@ -103,7 +146,8 @@
         }
         const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData });
         if (code === 200) {
-            setRows(data)
+            // setRows(data)
+            setFetchRows(data)
         } else {
             notify(msg);
         }
@@ -149,22 +193,25 @@
                                 }}
                                 title={"menu.outStockItem"}
                                 empty={false}
-                                filter={{ asnId: record?.id, deleted: 0 }}
+                                filter={{ orderId: record?.id, deleted: 0 }}
                                 sort={{ field: "create_time", order: "desc" }}
                                 actions={false}
+                                pagination={false}
                                 perPage={DEFAULT_ITEM_PAGE_SIZE}
                             >
                                 <LinearProgress
                                     sx={{ height: "2px", position: 'absolute', top: 0, left: 0, right: 0, }}
                                 />
                                 <StyledDatagrid
+                                    storeKey={"outStockPublic"}
                                     preferenceKey='outStockItem'
-                                    bulkActionButtons={false}
-                                    rowClick={false}
-                                    omit={['id', 'splrName', 'qty', 'poCode', 'workQty']}
+                                    bulkActionButtons={<>
+                                        <ComfirmButton />
+                                    </>}
+                                    omit={['id', 'splrName', 'qty', 'poCode',]}
                                 >
                                     <NumberField source="id" />
-                                    <TextField source="asnCode" label="table.field.outStockItem.asnCode" />
+                                    <TextField source="asnCode" label="table.field.outStockItem.orderCode" />
                                     <TextField source="poCode" label="table.field.outStockItem.poCode" />
                                     <TextField source="matnrCode" label="table.field.outStockItem.matnrCode" />
                                     <TextField source="maktx" label="table.field.outStockItem.maktx" />
@@ -178,13 +225,14 @@
                         </Card>
                     </Grid>
                     <Grid item xl={6.3} gap={2}>
-                        <Card>
-                            <Box sx={{ height: 500, width: '100%' }}>
+                        <Card sx={{ minHeight: 1050, height: 'calc(100% - 10px)', width: '100%' }}>
+                            <Box>
                                 <PreviewTable
                                     rows={rows}
                                     gridRef={gridRef}
                                     setRows={setRows}
                                     record={record}
+                                    formData={formData}
                                     selectedIds={selectedIds}
                                     setDialog={setDialog}
                                     setSelectedIds={setSelectedIds}
@@ -209,11 +257,17 @@
     );
 }
 
-const PreviewTable = ({ rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog }) => {
+const PreviewTable = ({ rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog, formData }) => {
     gridRef.current = useGridApiRef();
     const translate = useTranslate();
 
-    const columns = [
+    useEffect(() => {
+        if (selectedIds.length > 0) {
+            console.log(selectedIds);
+        }
+    }, [selectedIds])
+
+    const baseColumns = [
         // { field: 'id', headerName: 'ID', width: 40 },
         { field: 'locCode', headerName: '搴撲綅', width: 110 },
         { field: 'barcode', headerName: '瀹瑰櫒', width: 120 },
@@ -240,20 +294,23 @@
                 <OutStockSite {...params} />
             ),
         },
-        {
-            field: 'actions',
-            type: 'actions',
-            headerName: '鎿嶄綔',
-            with: 120,
-            getActions: (params) => [
-                <GridActionsCellItem
-                    icon={<Delete />}
-                    label="Delete"
-                    onClick={() => handleDelete(params.row, rows, setRows)}
-                />,
-            ]
-        },
     ]
+
+    const optAction = {
+        field: 'actions',
+        type: 'actions',
+        headerName: translate('common.field.opt'),
+        with: 120,
+        getActions: (params) => [
+            <GridActionsCellItem
+                icon={<Delete />}
+                label="Delete"
+                onClick={() => handleDelete(params.row, rows, setRows)}
+            />,
+        ]
+    }
+
+    const columns = (formData.waveId == 15 || formData.waveId == 16) ? [...baseColumns] : [...baseColumns, optAction];
 
     /**
      * 鍒犻櫎浜嬩欢
@@ -270,15 +327,12 @@
         const { value } = props;
         return (
             value > 0 ?
-                <Box
-                    sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}
-                >
+                <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
                     <span>{value}</span>
-                </Box> :
-                <Box
-                    sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}
-                >
-                    <span style={{color: 'red'}}>{translate('common.edit.title.insuffInventory')}</span>
+                </Box>
+                :
+                <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
+                    <span style={{ color: 'red' }}>{translate('common.edit.title.insuffInventory')}</span>
                 </Box>
         );
     });
@@ -289,9 +343,7 @@
             return null;
         }
         return (
-            <Box
-                sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}
-            >
+            <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
                 <span>{value}</span>
             </Box>
         );
@@ -301,9 +353,8 @@
         const selectSiteNo = () => {
             setDialog(true)
         }
-
         return (
-            selectedIds.length > 0 ? <Box sx={{
+            <Box sx={{
                 p: 1,
                 display: 'flex',
                 justifyContent: 'flex-end',
@@ -315,7 +366,7 @@
                     label="toolbar.modiftySite"
                     size="medium"
                     sx={{ mr: 1 }} />
-            </Box> : <></>
+            </Box>
         );
     }
 
@@ -371,27 +422,21 @@
 
     return (
         <DataGrid
+            storeKey={"locItemPreview"}
             rows={rows}
             columns={columns}
             slots={{ toolbar: CustomToolBar }}
             apiRef={gridRef}
-            initialState={{
-                pagination: {
-                    paginationModel: {
-                        pageSize: 15,
-                    },
-                },
-            }}
             checkboxSelection
             disableRowSelectionOnClick
-            pageSizeOptions={[15, 25, 35, 45]}
+            hideFooterPagination={true}  // 闅愯棌鍒嗛〉鎺т欢
+            hideFooter={false}
             onRowSelectionModelChange={(ids) => {
                 setSelectedIds(ids)
             }}
         />
     )
 }
-
 
 
 //鎻愪氦鎸夐挳
@@ -411,11 +456,10 @@
     }
     return (
         <ConfirmButton
-            label="toolbar.confirm"
+            label="toolbar.allComfirm"
             variant="contained"
             size="medium"
             onConfirm={submit}
-            startIcon={<ConfirmationNumberOutlinedIcon />}
         />
     )
 }

--
Gitblit v1.9.1