From bd26cd9c33c3e097f15d47105ea969b4e10aa333 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 05 八月 2025 13:02:16 +0800
Subject: [PATCH] 新增库存调整弹框

---
 rsf-admin/src/page/orders/outStock/OutOrderModal.jsx          |   19 +-
 rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx  |  106 ++++++++--------
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx           |   24 ++--
 rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx |  204 ++++++++++++++++++---------------
 4 files changed, 187 insertions(+), 166 deletions(-)

diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index 47f94a0..0e759e7 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -50,6 +50,7 @@
 import ConfirmButton from '../../components/ConfirmButton';
 import ImportButton from "../../components/ImportButton";
 import DetailsIcon from '@mui/icons-material/Details';
+import OutStockWaveDialog from "./OutStockWaveDialog";
 import AddTaskIcon from '@mui/icons-material/AddTask';
 import PublicIcon from '@mui/icons-material/Public';
 import SelectMatnrModal from "./SelectMatnrModal";
@@ -59,7 +60,6 @@
 import OutStockPublic from "./OutStockPublic";
 import OutOrderModal from "./OutOrderModal";
 import request from '@/utils/request';
-import OutStockWaveDialog from "./OutStockWaveDialog";
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
   '& .css-1vooibu-MuiSvgIcon-root': {
@@ -113,20 +113,20 @@
 ]
 
 const OutOrderList = (props) => {
+
+  const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
+  const [createDialog, setCreateDialog] = useState(false);
+  const [manualDialog, setManualDialog] = useState(false);
+  const [drawerVal, setDrawerVal] = useState(false);
+  const [waveRule, setWaveRule] = useState(false);
+  const [selectIds, setSelectIds] = useState([]);
+  const [preview, setPreview] = useState(false);
+  const [modalType, setmodalType] = useState(0);
+  const [select, setSelect] = useState(0);
   const translate = useTranslate();
   const refresh = useRefresh();
   const notify = useNotify();
-
-  const [createDialog, setCreateDialog] = useState(false);
-  const [manualDialog, setManualDialog] = useState(false);
-  const [selectIds, setSelectIds] = useState([]);
-  const [preview, setPreview] = useState(false);
-  const [waveRule, setWaveRule] = useState(false);
-  const [drawerVal, setDrawerVal] = useState(false);
-  const [modalType, setmodalType] = useState(0);
-  const [select, setSelect] = useState(0);
   const billReload = useRef();
-  const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
 
   //鑾峰彇娉㈡瑙勫垯
   const closeDialog = async (value) => {
@@ -222,7 +222,7 @@
         drawerVal={drawerVal}
         setDrawerVal={setDrawerVal}
       >
-        <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal}  />
+        <OutStockPublic record={select} open={drawerVal} setOpen={setDrawerVal} />
       </PageEditDrawer>
     </Box >
   )
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
index 6bea1bd..d64d8a3 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -39,15 +39,17 @@
     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, margin, 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 DialogCloseButton from "../../components/DialogCloseButton";
 import EditableTextField from "../../components/EditableTextField";
+import CheckCircleIcon from '@mui/icons-material/CheckCircle';
+import { Grid, margin, Stack, width } from "@mui/system";
+import SaveIcon from '@mui/icons-material/Save';
 import OutOrderPreview from "./OutOrderPreview";
+import { styled } from '@mui/material/styles';
+import request from '@/utils/request';
+
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -93,16 +95,17 @@
 
 const OutOrderModal = (props) => {
     const { open, setOpen, preview, setPreview, record } = props;
-    const translate = useTranslate();
+    const [drawerVal, setDrawerVal] = useState(false);
     const [params, setParams] = useState({});
     const [select, setSelect] = useState([]);
-    const [drawerVal, setDrawerVal] = useState(false);
+    const translate = useTranslate();
     const refresh = useRefresh();
     const handleClose = (event, reason) => {
         if (reason !== "backdropClick") {
             setOpen(false);
         }
     };
+
     const CustomFilter = () => {
         const { filterValues, setFilters, refetch } = useListContext();
         const [formValues, setFormValues] = useState(filterValues);
diff --git a/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx b/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx
index d8b8919..daf0441 100644
--- a/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx
+++ b/rsf-admin/src/page/stockManage/locRevise/LocReviseCreate.jsx
@@ -342,20 +342,20 @@
     const notify = useNotify();
     const [columns, setColumns] = useState([
         {
-            field: 'maktx',
-            headerName: translate('table.field.outStockItem.maktx'),
-            width: 250,
+            field: 'code',
+            headerName: translate('table.field.locItem.locCode'),
+            width: 100,
             editable: false,
         },
         {
-            field: 'matnrCode',
-            headerName: translate('table.field.outStockItem.matnrCode'),
+            field: 'areaId',
+            headerName: translate('table.field.loc.areaId'),
             width: 130,
             editable: false,
         },
         {
-            field: 'anfme',
-            headerName: translate('table.field.outStockItem.anfme'),
+            field: 'type',
+            headerName: translate('table.field.loc.type'),
             type: 'number',
             minWidth: 100,
             flex: 1,
@@ -363,8 +363,8 @@
             valueFormatter: (val) => val < 0 ? 0 : val,
         },
         {
-            field: 'splrCode',
-            headerName: translate('table.field.outStockItem.splrCode'),
+            field: 'warehouseId',
+            headerName: translate('table.field.loc.warehouseId'),
             minWidth: 100,
             flex: 1,
             editable: true,
@@ -373,8 +373,8 @@
             ),
         },
         {
-            field: 'splrName',
-            headerName: translate('table.field.outStockItem.splrName') + "*",
+            field: 'useStatus',
+            headerName: translate('table.field.loc.useStatus') + "*",
             minWidth: 100,
             flex: 1,
             editable: true,
@@ -383,18 +383,32 @@
             ),
         },
         {
-            field: 'batch',
-            headerName: translate('table.field.outStockItem.splrBatch'),
+            field: 'channel',
+            headerName: translate('table.field.loc.channel'),
             minWidth: 100,
             flex: 1,
             editable: true,
         },
         {
-            field: 'stockUnit',
-            headerName: translate('table.field.outStockItem.stockUnit'),
+            field: 'row',
+            headerName: translate('table.field.loc.row'),
             minWidth: 100,
             flex: 1,
-            editable: true,
+            editable: false,
+        },
+        {
+            field: 'col',
+            headerName: translate('table.field.loc.col'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'lev',
+            headerName: translate('table.field.loc.lev'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
         },
     ])
 
@@ -414,49 +428,39 @@
 
     let cdata = useRef([]);
 
-    useEffect(() => {
-        if (extendColumns == undefined || extendColumns.length < 1) {
-            getDynamicFields();
-        }
-    }, []);
+    // useEffect(() => {
+    //     if (extendColumns == undefined || extendColumns.length < 1) {
+    //         getDynamicFields();
+    //     }
+    // }, []);
 
     useEffect(() => {
         cdata.current = tabelData
     }, [tabelData]);
 
 
-    const getDynamicFields = async () => {
-        const {
-            data: { code, data, msg },
-        } = await request.get("/fields/enable/list");
-        if (code === 200) {
-            const cols = data.map(el => ({
-                field: el.fields,
-                headerName: el.fieldsAlise,
-                minWidth: 100,
-                flex: 1,
-                editable: false
-            }))
-            setColumns([...columns, ...cols, action])
-            setExtendColumns(cols);
-        } else {
-            notify(msg);
-        }
-    }
-
+    // const getDynamicFields = async () => {
+    //     const {
+    //         data: { code, data, msg },
+    //     } = await request.get("/fields/enable/list");
+    //     if (code === 200) {
+    //         const cols = data.map(el => ({
+    //             field: el.fields,
+    //             headerName: el.fieldsAlise,
+    //             minWidth: 100,
+    //             flex: 1,
+    //             editable: false
+    //         }))
+    //         setColumns([...columns, ...cols, action])
+    //         setExtendColumns(cols);
+    //     } else {
+    //         notify(msg);
+    //     }
+    // }
 
     const handleDelete = (row) => {
         const newData = _.filter(cdata.current, (item) => item.matnrId !== row.matnrId);
         setTableData(newData);
-    };
-
-
-    const processRowUpdate = (newRow, oldRow) => {
-        const rows = tabelData.map((r) =>
-            r.matnrId === newRow.matnrId ? { ...newRow } : r
-        )
-        setTableData(rows)
-        return newRow;
     };
 
     const handleSelectionChange = (ids) => {
@@ -464,11 +468,7 @@
     };
 
     tableRef.current = useGridApiRef();
-
     const tableIds = tabelData.map(map => map.id);
-    // setSelectedRows(tableIds);
-    // // console.log(selectedRows);
-
 
     return (
         <Box>
diff --git a/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx b/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx
index 1d66d19..d9b25a2 100644
--- a/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx
+++ b/rsf-admin/src/page/stockManage/locRevise/SelectLocsRevise.jsx
@@ -16,19 +16,13 @@
 } from '@mui/material';
 
 import { EDIT_MODE, DEFAULT_START_PAGE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_PAGE_SIZE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
+import { useTranslate, useNotify, useRefresh, DatagridConfigurable} from 'react-admin';
 import DialogCloseButton from "../../components/DialogCloseButton";
-import {
-    useTranslate, useNotify, useRefresh, List, FilterButton, NumberField,
-    DateField, ReferenceInput, AutocompleteInput, TextInput, DatagridConfigurable,
-    BooleanField, SearchInput,
-} from 'react-admin';
 import TreeSelectInput from "@/page/components/TreeSelectInput";
 import { Add, Edit, Delete, Save } from '@mui/icons-material';
 import SaveIcon from '@mui/icons-material/Save';
 import { DataGrid } from '@mui/x-data-grid';
 import request from '@/utils/request';
-
-
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -44,14 +38,8 @@
     },
 }));
 
-
-
 const SelectLocsRevise = (props) => {
     const { open, setOpen, data, setData } = props;
-    const translate = useTranslate();
-    const refresh = useRefresh();
-    const notify = useNotify();
-
     const handleClose = (event, reason) => {
         if (reason !== "backdropClick") {
             setOpen(false);
@@ -59,25 +47,28 @@
     };
 
     const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_stock_revise_type')) || [];
-    const [formData, setFormData] = useState({});
-    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 [formData, setFormData] = useState({ useStatus: 'F', code: null });
+    const [selectedRows, setSelectedRows] = useState([]);
     const [isLoading, setIsLoading] = useState(false);
+    const [tableData, setTableData] = useState([]);
+    const [rowCount, setRowCount] = useState(0);
+    const translate = useTranslate();
+    const refresh = useRefresh();
+    const notify = useNotify();
+
     const handleChange = (e) => {
         const { name, value } = e.target;
         setFormData(() => ({
+            ...formData,
             [name]: value
         }));
     };
 
     const reset = () => {
         setFormData({
-            name: '',
             code: '',
-            groupId: 0
+            useStatus: 'F',
         })
     }
 
@@ -85,17 +76,18 @@
         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 dynamicFields = dyFields.reduce((acc, item) => {
-                acc[item.fields] = el['extendFields']?.[item.fields] || '';
-                return acc;
-            }, {});
             return {
-                matnrId: el.id,
-                maktx: el.name,
-                matnrCode: el.code,
-                stockUnit: el.stockUnit || '',
-                purUnit: el.purchaseUnit || '',
-                ...dynamicFields
+                id: el.id,
+                code: el.code,
+                areaId: el.areaId,
+                barcode: el.barcode || '',
+                channel: el.channel || '',
+                col: el.col,
+                lev: el.lev,
+                row: el.row,
+                type: el.type,
+                useStatus: el.useStatus,
+                warehouseId: el.warehouseId,
             }
         }))
         setData([...data, ...value]);
@@ -103,13 +95,9 @@
         reset();
     };
 
-    const filters = [
-        <SearchInput source="condition" alwaysOn />,
-    ]
-
     const getData = async () => {
         setIsLoading(true)
-        const res = await request.post(`/locItem/page`, {
+        const res = await request.post(`/loc/page`, {
             ...formData,
             current: page?.page,
             pageSize: page?.pageSize,
@@ -193,14 +181,14 @@
                             <Grid item md={4}>
                                 <TextField
                                     label={translate('table.field.locItem.locCode')}
-                                    name="locCode"
-                                    value={formData.name}
+                                    name="code"
+                                    value={formData.code}
                                     onChange={handleChange}
                                     size="small"
                                 />
                             </Grid>
                             <Grid item md={2} sx={{ margin: 'auto' }}>
-                                <Button variant="contained" onClick={handleSearch}>鎼滅储</Button>
+                                <Button variant="contained" onClick={handleSearch}>{translate("toolbar.query")}</Button>
                             </Grid>
                         </Grid>
                     </Box>
@@ -208,12 +196,10 @@
                         <AsnWareModalTable
                             tableData={tableData}
                             setTableData={setTableData}
-                            dyFields={dyFields}
                             page={page}
                             rowCount={rowCount}
                             setPage={setPage}
                             isLoading={isLoading}
-                            setDyFields={setDyFields}
                             selectedRows={selectedRows}
                             setSelectedRows={setSelectedRows}
                         />
@@ -233,69 +219,101 @@
 
 export default SelectLocsRevise;
 
-const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
+const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows }) => {
     const translate = useTranslate();
     const notify = useNotify();
 
     const [columns, setColumns] = useState([
-        // { field: 'id', headerName: 'ID', width: 100 },
-        { field: 'locCode', headerName: translate('table.field.locItem.locCode'), width: 150 },
-        { field: 'matnrCode', headerName: translate('table.field.locItem.matnrCode'), width: 200 },
-        { field: 'maktx', headerName: translate('table.field.locItem.maktx'), width: 300 },
-        { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 },
-        { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 },
-        { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
+        {
+            field: 'code',
+            headerName: translate('table.field.locItem.locCode'),
+            width: 110,
+            editable: false,
+        },
+        {
+            field: 'warehouseId$',
+            headerName: translate('table.field.loc.warehouseId'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'areaId$',
+            headerName: translate('table.field.loc.areaId'),
+            width: 130,
+            editable: false,
+        },
+        {
+            field: 'typeIds$',
+            headerName: translate('table.field.loc.type'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'barcode',
+            headerName: translate('table.field.loc.barcode'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'useStatus$',
+            headerName: translate('table.field.loc.useStatus') + "*",
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'channel',
+            headerName: translate('table.field.loc.channel'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'row',
+            headerName: translate('table.field.loc.row'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'col',
+            headerName: translate('table.field.loc.col'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        {
+            field: 'lev',
+            headerName: translate('table.field.loc.lev'),
+            minWidth: 100,
+            flex: 1,
+            editable: false,
+        },
+        // {
+        //     field: 'action',
+        //     headerName: '鎿嶄綔',
+        //     width: 140,
+        //     lockPosition: 'left',
+        //     renderCell: (params) => (
+        //         <Tooltip title="Delete">
+        //             <IconButton onClick={() => handleDelete(params.row)}>
+        //                 <Delete />
+        //             </IconButton>
+        //             <IconButton onClick={() => handleDelete(params.row)}>
+        //                 <Save />
+        //             </IconButton>
+        //         </Tooltip>
+        //     ),
+        // }
     ])
-
-    const action = {
-        field: 'action',
-        headerName: '鎿嶄綔',
-        width: 140,
-        lockPosition: 'left',
-        renderCell: (params) => (
-            <Tooltip title="Delete">
-                <IconButton onClick={() => handleDelete(params.row)}>
-                    <Delete />
-                </IconButton>
-                <IconButton onClick={() => handleDelete(params.row)}>
-                    <Save />
-                </IconButton>
-            </Tooltip>
-        ),
-    }
 
 
     const handleSelectionChange = (ids) => {
         setSelectedRows(ids)
     };
-
-    useEffect(() => {
-        if (dyFields.length < 1) {
-            getDynamicFields();
-        }
-    }, []);
-
-    const getDynamicFields = async () => {
-        const {
-            data: { code, data, msg },
-        } = await request.get("/fields/enable/list");
-        if (code === 200) {
-            const cols = data.map(el => ({
-                field: el.fields,
-                headerName: el.fieldsAlise,
-                minWidth: 100,
-                flex: 1,
-                editable: el.unique,
-                valueGetter: (value, row) => {
-                    return row.extendFields?.[el.fields] || '';
-                },
-            }))
-            setDyFields(data)
-            setColumns([...columns, ...cols, action])
-        } else {
-            notify(msg);
-        }
-    }
 
     return (
         <div style={{ width: '100%' }}>

--
Gitblit v1.9.1