From b8c980574e7868281624a244df93299e1aaa8596 Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期五, 21 三月 2025 10:09:40 +0800
Subject: [PATCH] fix:仓库和库区联动

---
 rsf-admin/src/page/basicInfo/loc/InitModal.jsx             |   16 ++---
 rsf-admin/src/page/basicInfo/loc/LocCreate.jsx             |    6 ++
 rsf-admin/src/page/basicInfo/loc/BatchModal.jsx            |   33 +++++++++-
 rsf-admin/src/page/warehouseAreas/WarehouseAreasCreate.jsx |    1 
 rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx          |    2 
 rsf-admin/src/page/warehouseAreas/WarehouseAreasEdit.jsx   |    1 
 rsf-admin/package.json                                     |    1 
 rsf-admin/src/page/basicInfo/loc/LocEdit.jsx               |    6 ++
 rsf-admin/pnpm-lock.yaml                                   |   12 ++++
 rsf-admin/.env                                             |    4 
 rsf-admin/src/page/basicInfo/matnr/PrintModal.jsx          |   50 ++++++++++++----
 11 files changed, 102 insertions(+), 30 deletions(-)

diff --git a/rsf-admin/.env b/rsf-admin/.env
index a8ce658..9669b2c 100644
--- a/rsf-admin/.env
+++ b/rsf-admin/.env
@@ -1,3 +1,3 @@
-VITE_BASE_IP=192.168.4.24
-# VITE_BASE_IP=47.76.147.249
+# VITE_BASE_IP=192.168.4.24
+VITE_BASE_IP=47.76.147.249
 VITE_BASE_PORT=8080
diff --git a/rsf-admin/package.json b/rsf-admin/package.json
index 18c05b2..3bf09ac 100644
--- a/rsf-admin/package.json
+++ b/rsf-admin/package.json
@@ -37,6 +37,7 @@
     "react-router": "^6.22.0",
     "react-router-dom": "^6.26.1",
     "react-syntax-highlighter": "^15.5.0",
+    "react-to-print": "^3.0.5",
     "three": "^0.155.0",
     "tweedle.js": "^2.1.0"
   },
diff --git a/rsf-admin/pnpm-lock.yaml b/rsf-admin/pnpm-lock.yaml
index c99442f..f66ce5c 100644
--- a/rsf-admin/pnpm-lock.yaml
+++ b/rsf-admin/pnpm-lock.yaml
@@ -89,6 +89,9 @@
       react-syntax-highlighter:
         specifier: ^15.5.0
         version: 15.6.1(react@18.3.1)
+      react-to-print:
+        specifier: ^3.0.5
+        version: 3.0.5(react@18.3.1)
       three:
         specifier: ^0.155.0
         version: 0.155.0
@@ -2244,6 +2247,11 @@
     resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==}
     peerDependencies:
       react: '>= 0.14.0'
+
+  react-to-print@3.0.5:
+    resolution: {integrity: sha512-Z15MwMOzYCHWi26CZeFNwflAg7Nr8uWD6FTj+EkfIOjYyjr0MXGbI0c7rF4Fgrbj3XG9hFndb1ourxpPz2RAiA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ~19
 
   react-transition-group@4.4.5:
     resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
@@ -4921,6 +4929,10 @@
       react: 18.3.1
       refractor: 3.6.0
 
+  react-to-print@3.0.5(react@18.3.1):
+    dependencies:
+      react: 18.3.1
+
   react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
       '@babel/runtime': 7.26.9
diff --git a/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx b/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx
index cee27c7..92b5fe3 100644
--- a/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/BatchModal.jsx
@@ -19,6 +19,7 @@
     useCreateController,
     useListContext,
     useRefresh,
+    SelectArrayInput
 } from 'react-admin';
 import {
     Dialog,
@@ -38,7 +39,8 @@
     TableCell,
     Tooltip,
     IconButton,
-    styled
+    styled,
+
 
 
 } from '@mui/material';
@@ -53,7 +55,6 @@
 import StatusSelectInput from "../../components/StatusSelectInput";
 
 
-
 const InitModal = ({ open, setOpen }) => {
     const refresh = useRefresh();
     const translate = useTranslate();
@@ -62,6 +63,7 @@
     const notify = useNotify();
 
     const [formData, setFormData] = useState({
+        "warehouseId": null,
         "areaId": null,
         "type": null,
         'status': null
@@ -80,8 +82,10 @@
 
     const reset = () => {
         setFormData({
+            "warehouseId": null,
             "areaId": null,
             "type": null,
+            "typeIds": null,
             'status': null
         })
     }
@@ -95,6 +99,7 @@
             ...prevData,
             [name]: value
         }));
+        refresh()
     };
 
     const removeEmptyKeys = (obj) => {
@@ -132,8 +137,25 @@
                         <Grid container spacing={2}>
                             <Grid item xs={4}>
                                 <ReferenceInput
+                                    source="warehouseId"
+                                    reference="warehouse"
+                                >
+                                    <AutocompleteInput
+                                        label="table.field.loc.warehouseId"
+                                        optionText="name"
+                                        onChange={(value) => handleChange(value, 'warehouseId')}
+                                        value={formData.warehouseId}
+                                        filterToQuery={(val) => ({ name: val })}
+                                    />
+                                </ReferenceInput>
+
+                            </Grid>
+
+                            <Grid item xs={4}>
+                                <ReferenceInput
                                     source="areaId"
                                     reference="warehouseAreas"
+                                    filter={{ warehouseId: formData.warehouseId }}
                                 >
                                     <AutocompleteInput
                                         label="table.field.loc.areaId"
@@ -147,14 +169,17 @@
                             </Grid>
 
                             <Grid item xs={4}>
-                                <DictionarySelect
+                                {/* <DictionarySelect
                                     label={translate("table.field.loc.type")}
                                     name="type"
                                     value={formData.type}
                                     onChange={(e) => handleChange(e.target.value, 'type')}
                                     size="small"
                                     dictTypeCode="sys_loc_type"
-                                />
+                                /> */}
+                                <ReferenceArrayInput source="typeIds" reference="locType" >
+                                    <SelectArrayInput label="table.field.loc.type" onChange={(e) => handleChange(e.target.value, 'typeIds')} />
+                                </ReferenceArrayInput>
                             </Grid>
 
                             <Grid item xs={4}>
diff --git a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
index 80c6a2b..eab60e8 100644
--- a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
@@ -19,6 +19,7 @@
     useCreateController,
     useListContext,
     useRefresh,
+    SelectArrayInput
 } from 'react-admin';
 import {
     Dialog,
@@ -70,7 +71,8 @@
         "startBay": undefined,
         "startLev": undefined,
         "startRow": undefined,
-        "type": ""
+        "type": "",
+        "typeIds": undefined,
     });
 
     const handleClose = (event, reason) => {
@@ -138,15 +140,9 @@
                             </Grid>
 
                             <Grid item xs={4}>
-                                <DictionarySelect
-                                    label={translate("table.field.loc.type")}
-                                    name="type"
-                                    value={formData.type}
-                                    onChange={(e) => handleChange(e.target.value, 'type')}
-                                    size="small"
-                                    validate={[required()]}
-                                    dictTypeCode="sys_loc_type"
-                                />
+                                <ReferenceArrayInput source="typeIds" reference="locType" >
+                                    <SelectArrayInput label="table.field.loc.type" onChange={(e) => handleChange(e.target.value, 'typeIds')} />
+                                </ReferenceArrayInput>
                             </Grid>
 
                             <Grid item xs={4}>
diff --git a/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
index 00e9108..9b368c1 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
@@ -54,7 +54,11 @@
         notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
     };
 
+    const [warehouseId, setWrehouseId] = useState();
 
+    const warehouseChange = (val) => {
+        setWrehouseId(val)
+    }
 
 
     return (
@@ -98,6 +102,7 @@
                                             label="table.field.loc.warehouseId"
                                             optionText="name"
                                             validate={[required()]}
+                                            onChange={warehouseChange}
                                             filterToQuery={(val) => ({ name: val })}
                                         />
                                     </ReferenceInput>
@@ -106,6 +111,7 @@
                                     <ReferenceInput
                                         source="areaId"
                                         reference="warehouseAreas"
+                                        filter={{ warehouseId }}
                                     >
                                         <AutocompleteInput
                                             label="table.field.loc.areaId"
diff --git a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
index 1505a82..89ad805 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
@@ -46,7 +46,11 @@
 const LocEdit = () => {
     const translate = useTranslate();
     const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_loc_type')) || [];
+    const [warehouseId, setWrehouseId] = useState();
 
+    const warehouseChange = (val) => {
+        setWrehouseId(val)
+    }
 
     return (
         <Edit
@@ -78,6 +82,7 @@
                                         label="table.field.loc.warehouseId"
                                         optionText="name"
                                         validate={[required()]}
+                                        onChange={warehouseChange}
                                         filterToQuery={(val) => ({ name: val })}
                                     />
                                 </ReferenceInput>
@@ -86,6 +91,7 @@
                                 <ReferenceInput
                                     source="areaId"
                                     reference="warehouseAreas"
+                                    filter={{ warehouseId }}
                                 >
                                     <AutocompleteInput
                                         label="table.field.loc.areaId"
diff --git a/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx
index 9a461af..25a484e 100644
--- a/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx
@@ -52,8 +52,6 @@
 import { DataGrid } from '@mui/x-data-grid';
 import StatusSelectInput from "../../components/StatusSelectInput";
 
-
-
 const InitModal = ({ open, setOpen }) => {
     const refresh = useRefresh();
     const translate = useTranslate();
diff --git a/rsf-admin/src/page/basicInfo/matnr/PrintModal.jsx b/rsf-admin/src/page/basicInfo/matnr/PrintModal.jsx
index 46c4d0d..7de55f8 100644
--- a/rsf-admin/src/page/basicInfo/matnr/PrintModal.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/PrintModal.jsx
@@ -29,11 +29,11 @@
     TextField,
     Box,
     Button,
-    Paper,
-    TableContainer,
-    Table,
-    TableHead,
-    TableBody,
+    Radio,
+    RadioGroup,
+    FormControlLabel,
+    FormControl,
+    FormLabel,
     TableRow,
     TableCell,
     Tooltip,
@@ -52,15 +52,14 @@
 import { DataGrid } from '@mui/x-data-grid';
 import StatusSelectInput from "../../components/StatusSelectInput";
 
-
+import { useReactToPrint } from "react-to-print";
 
 const InitModal = ({ open, setOpen }) => {
     const refresh = useRefresh();
     const translate = useTranslate();
-
-
     const notify = useNotify();
-
+    const contentRef = useRef(null);
+    const reactToPrintFn = useReactToPrint({ contentRef });
 
     const handleClose = (event, reason) => {
         if (reason !== "backdropClick") {
@@ -68,16 +67,43 @@
         }
     };
 
+    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 sx={{ mt: 2 }}>
-                1
+            <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 ref={contentRef}>11</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={handleClose} variant="contained" startIcon={<SaveIcon />}>
+                    <Button onClick={handlePrint} variant="contained" startIcon={<SaveIcon />}>
                         {translate('toolbar.confirm')}
                     </Button>
                 </Box>
diff --git a/rsf-admin/src/page/warehouseAreas/WarehouseAreasCreate.jsx b/rsf-admin/src/page/warehouseAreas/WarehouseAreasCreate.jsx
index ab4847f..ea0d05f 100644
--- a/rsf-admin/src/page/warehouseAreas/WarehouseAreasCreate.jsx
+++ b/rsf-admin/src/page/warehouseAreas/WarehouseAreasCreate.jsx
@@ -124,6 +124,7 @@
                     <AutocompleteInput
                       label="table.field.warehouseAreas.wareId"
                       optionText="name"
+                      validate={[required()]}
                       filterToQuery={(val) => ({ name: val })}
                     />
                   </ReferenceInput>
diff --git a/rsf-admin/src/page/warehouseAreas/WarehouseAreasEdit.jsx b/rsf-admin/src/page/warehouseAreas/WarehouseAreasEdit.jsx
index fcf1745..e197ebd 100644
--- a/rsf-admin/src/page/warehouseAreas/WarehouseAreasEdit.jsx
+++ b/rsf-admin/src/page/warehouseAreas/WarehouseAreasEdit.jsx
@@ -96,6 +96,7 @@
                                 <AutocompleteInput
                                     label="table.field.warehouseAreas.wareId"
                                     optionText="name"
+                                    validate={[required()]}
                                     filterToQuery={(val) => ({ name: val })}
                                 />
                             </ReferenceInput>

--
Gitblit v1.9.1