From e56277542f60f386a109b1b072a1dbda390588fd Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 11 二月 2026 15:54:29 +0800
Subject: [PATCH] EXISTS 保持一致

---
 rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx |   95 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 73 insertions(+), 22 deletions(-)

diff --git a/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx b/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
index 37a571f..e3d652a 100644
--- a/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
@@ -10,9 +10,14 @@
     Box,
     Button,
     Paper,
-    styled
+    styled,
+    Select,
+    MenuItem,
+    FormControl,
+    InputLabel
 } from '@mui/material';
 import DialogCloseButton from "../../components/DialogCloseButton";
+import { EDIT_MODE, DEFAULT_START_PAGE, DEFAULT_PAGE_SIZE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
 import { useTranslate, useNotify, useRefresh } from 'react-admin';
 import request from '@/utils/request';
 import { DataGrid } from '@mui/x-data-grid';
@@ -31,65 +36,77 @@
         }
     };
 
-    const [formData, setFormData] = useState({});
+    const [formData, setFormData] = useState({ locUseStatus: 'F' });
     const [tableData, setTableData] = useState([]);
     const [dyFields, setDyFields] = useState([]);
     const [selectedRows, setSelectedRows] = useState([]);
-
+    const [page, setPage] = useState({ page: DEFAULT_START_PAGE, pageSize: DEFAULT_PAGE_SIZE });
+    const [rowCount, setRowCount] = useState(0);
+    const [isLoading, setIsLoading] = useState(false);
     const handleChange = (e) => {
         const { name, value } = e.target;
-        setFormData(() => ({
+        setFormData((prev) => ({
+            ...prev,
             [name]: value
         }));
     };
 
     const reset = () => {
         setFormData({
-            name: '',
-            code: '',
-            groupId: 0
+            name: null,
+            code: null,
+            groupId: null,
+            locUseStatus: 'F'
         })
     }
 
     const handleSubmit = () => {
-        const hasarr = data.map(el => +el.matnrId)
-        const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id)));
-        const value = selectedData.map((el => {
+        const hasarr = data.map(el => +el.matnrId);
+        const selectedData = selectedRows
+            .filter((item) => !hasarr.includes(item))
+            .map((id) => tableData.find((row) => row.id === id))
+            .filter(Boolean);
+        const deduped = [...new Map(selectedData.map((s) => [s.id, s])).values()];
+        const value = deduped.map((el, i) => {
             const dynamicFields = dyFields.reduce((acc, item) => {
                 acc[item.fields] = el['extendFields']?.[item.fields] || '';
                 return acc;
             }, {});
             return {
+                _rowKey: `new_${Date.now()}_${i}`,
                 matnrId: el.id,
                 maktx: el.name,
                 matnrCode: el.code,
                 stockUnit: el.stockUnit || '',
                 purUnit: el.purchaseUnit || '',
                 ...dynamicFields
-            }
-        }))
+            };
+        });
         setData([...data, ...value]);
         setOpen(false);
         reset();
     };
 
     const getData = async () => {
-        const res = await request.post(`/matnr/page`, {
+        setIsLoading(true);
+        const res = await request.post(`/outStock/matnr/page`, {
             ...formData,
-            current: 1,
-            pageSize: 100,
+            current: page?.page,
+            pageSize: page?.pageSize,
             orderBy: "create_time desc"
         });
         if (res?.data?.code === 200) {
-            setTableData(res.data.data.records);
+            setTableData(res.data.data.records || []);
+            setRowCount(res.data?.data?.total ?? 0);
         } else {
-            notify(res.data.msg);
+            notify(res.data?.msg || '鏌ヨ澶辫触');
         }
+        setIsLoading(false);
     };
 
     useEffect(() => {
         getData();
-    }, [open]);
+    }, [open, page]);
 
     const handleSearch = () => {
         getData()
@@ -136,7 +153,7 @@
                                 size="small"
                             />
                         </Grid>
-                        <Grid item md={4}>
+                        <Grid item md={3}>
                             <TreeSelectInput
                                 label="table.field.matnr.groupId"
                                 value={formData.groupId}
@@ -145,6 +162,24 @@
                                 name="groupId"
                                 onChange={handleChange}
                             />
+                        </Grid>
+                        <Grid item md={3}>
+                            <FormControl size="small" fullWidth variant="filled">
+                                <InputLabel>{translate('table.field.loc.useStatus')}</InputLabel>
+                                <Select
+                                    name="locUseStatus"
+                                    value={formData.locUseStatus ?? ''}
+                                    onChange={handleChange}
+                                    label={translate('table.field.loc.useStatus')}
+                                >
+                                    <MenuItem value="">鍏ㄩ儴</MenuItem>
+                                    {(JSON.parse(localStorage.getItem('sys_dicts')) || [])
+                                        .filter((d) => d.dictTypeCode === 'sys_loc_use_stas')
+                                        .map((d) => (
+                                            <MenuItem key={d.value} value={d.value}>{d.label}</MenuItem>
+                                        ))}
+                                </Select>
+                            </FormControl>
                         </Grid>
                     </Grid>
                 </Box>
@@ -158,6 +193,10 @@
                         tableData={tableData}
                         setTableData={setTableData}
                         dyFields={dyFields}
+                        page={page}
+                        rowCount={rowCount}
+                        setPage={setPage}
+                        isLoading={isLoading}
                         setDyFields={setDyFields}
                         selectedRows={selectedRows}
                         setSelectedRows={setSelectedRows}
@@ -177,12 +216,11 @@
 
 export default MatnrInfoModal;
 
-const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
+const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
     const translate = useTranslate();
     const notify = useNotify();
 
     const [columns, setColumns] = useState([
-        // { field: 'id', headerName: 'ID', width: 100 },
         { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 },
         { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 },
         { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
@@ -194,13 +232,15 @@
         { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
         { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 },
         { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 },
+        { field: 'stockQty', headerName: translate('table.field.matnr.stockQty') || '搴撳瓨鏁伴噺', width: 110, type: 'number', valueFormatter: (v) => (v != null ? Number(v) : 0) },
+        { field: 'locUseStatus$', headerName: translate('table.field.loc.useStatus'), width: 120 },
+        { field: 'locCodes$', headerName: translate('table.field.loc.locCode'), width: 180, flex: 1 },
         { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
     ])
 
 
     const handleSelectionChange = (ids) => {
         setSelectedRows(ids)
-
     };
 
     useEffect(() => {
@@ -241,6 +281,17 @@
                 disableColumnMenu={true}
                 disableColumnSorting
                 disableMultipleColumnsSorting
+                rowCount={rowCount}
+                paginationMode="server"
+                paginationModel={page}
+                onPaginationModelChange={setPage}
+                loading={isLoading}
+                slotProps={{
+                    loadingOverlay: {
+                        variant: 'linear-progress',
+                        noRowsVariant: 'linear-progress',
+                    },
+                }}
             />
         </div>
     );

--
Gitblit v1.9.1