From 7a33c97d5741a5d8813035ccde1fa801ec30a179 Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期二, 25 三月 2025 13:51:43 +0800
Subject: [PATCH] fix:input disabled不能更新bug

---
 rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx   |   36 ++++++
 rsf-admin/src/page/warehouseAreas/BatchModal.jsx           |  149 +++++++++++++++++++++++++++++
 rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx |    8 
 rsf-admin/src/page/asnOrder/AsnWareModal.jsx               |   10 ++
 rsf-admin/src/page/system/role/AssignPermissions.jsx       |   28 ++++-
 rsf-admin/src/page/basicInfo/loc/LocList.jsx               |   28 +++++
 6 files changed, 244 insertions(+), 15 deletions(-)

diff --git a/rsf-admin/src/page/asnOrder/AsnWareModal.jsx b/rsf-admin/src/page/asnOrder/AsnWareModal.jsx
index 41750a4..52e92f7 100644
--- a/rsf-admin/src/page/asnOrder/AsnWareModal.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnWareModal.jsx
@@ -128,6 +128,16 @@
                                 size="small"
                             />
                         </Grid>
+                        <Grid item xs={4}>
+                            <TextField
+                                label={translate('table.field.matnr.groupId')}
+                                name="groupId"
+                                value={formData.groupId}
+                                onChange={handleChange}
+                                variant="outlined"
+                                size="small"
+                            />
+                        </Grid>
                     </Grid>
                 </Box>
                 <Box sx={{ mt: 2 }}>
diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
index 449dc0f..0d2f8e5 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -33,7 +33,7 @@
     DeleteButton,
     useRefresh,
     Button,
-    useList
+    useList,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
@@ -79,8 +79,30 @@
 const filters = [
     <SearchInput source="condition" alwaysOn />,
 
-    <TextInput source="warehouseId$" label="table.field.loc.warehouseId" />,
-    <TextInput source="areaId$" label="table.field.loc.areaId" />,
+    <ReferenceInput
+        source="warehouseId"
+        label="table.field.loc.warehouseId"
+        reference="warehouse"
+        alwaysOn
+    >
+        <AutocompleteInput
+            label="table.field.loc.warehouseId"
+            optionText="name"
+            filterToQuery={(val) => ({ name: val })}
+        />
+    </ReferenceInput>,
+    <ReferenceInput
+        source="areaId"
+        label="table.field.loc.areaId"
+        reference="warehouseAreas"
+        alwaysOn
+    >
+        <AutocompleteInput
+            label="table.field.loc.areaId"
+            optionText="name"
+            filterToQuery={(val) => ({ name: val })}
+        />
+    </ReferenceInput>,
     <TextInput source="code" label="table.field.loc.code" />,
     <TextInput source="type" label="table.field.loc.type" />,
     <TextInput source="name" label="table.field.loc.name" />,
diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
index b2d9744..9a9b31b 100644
--- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx
@@ -61,8 +61,7 @@
     const http = async (val) => {
         const res = await request.post(`/matnrGroup/page`, { id: val });
         const code = res.data.data.records[0].code || ''
-        // setpCode(code)
-        editRecord.parCode = code;
+        editRecord && (editRecord.parCode = code);
         update(code)
     }
     return (
@@ -83,7 +82,7 @@
                     source="parCode"
                     value={editRecord?.parCode}
                     parse={v => v}
-                    disabled
+                    readOnly
                 />
             </Grid>
             <Grid item xs={6} display="flex" gap={1}>
@@ -99,7 +98,7 @@
                     label="table.field.matnrGroup.code"
                     source="code"
                     parse={v => v}
-                    disabled={!!editRecord}
+                    readOnly={!!editRecord}
                 />
             </Grid>
         </Grid>
@@ -134,6 +133,7 @@
     const onSubmit = (data) => {
         const _params = { ...data };
         if (editRecord) {
+            debugger
             if (_params.parentId === editRecord.id) {
                 notify('common.response.dataError', { type: 'error' });
                 return;
diff --git a/rsf-admin/src/page/system/role/AssignPermissions.jsx b/rsf-admin/src/page/system/role/AssignPermissions.jsx
index a70bc66..d9fd08b 100644
--- a/rsf-admin/src/page/system/role/AssignPermissions.jsx
+++ b/rsf-admin/src/page/system/role/AssignPermissions.jsx
@@ -4,7 +4,7 @@
     useNotify,
     TextInput
 } from 'react-admin';
-import { Box, Button, Card, Stack, CardContent, Skeleton } from '@mui/material';
+import { Box, Button, Card, Stack, CardContent, Skeleton, TextField } from '@mui/material';
 import { SimpleTreeView, TreeItem, RichTreeView, useTreeViewApiRef } from '@mui/x-tree-view';
 import SaveIcon from '@mui/icons-material/Save';
 import request from '@/utils/request'
@@ -20,10 +20,15 @@
     const [treeData, setTreeData] = useState([]);
     const [selectedItems, setSelectedItems] = useState([]);
     const [expandedItems, setExpandedItems] = useState([]);
+    const [parmas, setParmas] = useState({ condition: '' });
     const toggledItemRef = useRef({});
     const apiRef = useTreeViewApiRef();
 
     useEffect(() => {
+        reload()
+    }, [role, originMenuIds])
+
+    const reload = () => {
         setSelectedItems(originMenuIds.map(item => item + ""));
 
         const transformTree = (treeData) => {
@@ -37,7 +42,7 @@
             })
         }
         const http = async () => {
-            const res = await request.post('/menu' + '/tree', { condition: '' });
+            const res = await request.post('/menu/tree', parmas);
             if (res?.data?.code === 200) {
                 const transformData = transformTree(res.data.data);
                 setTreeData(transformData);
@@ -53,7 +58,7 @@
         setTimeout(() => {
             http();
         }, 200);
-    }, [role, originMenuIds])
+    }
 
 
     const getAllItemItemIds = () => {
@@ -157,6 +162,16 @@
         })
     }
 
+    const search = (e) => {
+        const value = e.target.value;
+        setParmas({
+            ...parmas,
+            condition: value
+        })
+        reload()
+
+    }
+
     return (
         <>
             <Card sx={{
@@ -193,10 +208,11 @@
                         </Box>
                         <Box sx={{
                             display: 'flex',
-                            justifyContent: 'flex-start'
+                            justifyContent: 'space-between',
+                            alignItems: 'center'
                         }}>
-
-                            <Button startIcon={<SaveIcon />} variant="contained" onClick={handleSave}>
+                            <TextField sx={{ width: '200px' }} label="鎼滅储鑿滃崟" variant="outlined" value={parmas.condition} onChange={(e) => search(e)} />
+                            <Button startIcon={<SaveIcon />} size="small" variant="contained" onClick={handleSave} sx={{ height: '40px' }}>
                                 {translate('ra.action.save')}
                             </Button>
                         </Box>
diff --git a/rsf-admin/src/page/warehouseAreas/BatchModal.jsx b/rsf-admin/src/page/warehouseAreas/BatchModal.jsx
new file mode 100644
index 0000000..34ebb10
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreas/BatchModal.jsx
@@ -0,0 +1,149 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    CreateBase,
+    useTranslate,
+    TextInput,
+    NumberInput,
+    BooleanInput,
+    DateInput,
+    SaveButton,
+    SelectInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    Toolbar,
+    required,
+    useDataProvider,
+    useNotify,
+    Form,
+    useCreateController,
+    useListContext,
+    useRefresh,
+} from 'react-admin';
+import {
+    Dialog,
+    DialogActions,
+    DialogContent,
+    DialogTitle,
+    Grid,
+    TextField,
+    Box,
+    Button,
+    Paper,
+    TableContainer,
+    Table,
+    TableHead,
+    TableBody,
+    TableRow,
+    TableCell,
+    Tooltip,
+    IconButton,
+    styled
+
+
+} from '@mui/material';
+import DialogCloseButton from "../components/DialogCloseButton";
+import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
+import SaveIcon from '@mui/icons-material/Save';
+import request from '@/utils/request';
+import { Add, Edit, Delete } from '@mui/icons-material';
+import _ from 'lodash';
+import { DataGrid } from '@mui/x-data-grid';
+import StatusSelectInput from "../components/StatusSelectInput";
+
+const InitModal = ({ open, setOpen }) => {
+    const refresh = useRefresh();
+    const translate = useTranslate();
+
+
+    const notify = useNotify();
+
+    const [formData, setFormData] = useState({
+        'status': null
+    });
+
+    const { selectedIds, onUnselectItems } = useListContext();
+
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setOpen(false);
+            reset()
+            refresh();
+            onUnselectItems()
+        }
+    };
+
+    const reset = () => {
+        setFormData({
+            'status': null
+        })
+    }
+
+    const handleReset = (e) => {
+        e.preventDefault();
+    };
+
+    const handleChange = (value, name) => {
+        setFormData((prevData) => ({
+            ...prevData,
+            [name]: value
+        }));
+    };
+
+    const removeEmptyKeys = (obj) => {
+        return _.pickBy(obj, (value) => {
+            if (_.isObject(value)) {
+                const newObj = removeEmptyKeys(value);
+                return !_.isEmpty(newObj);
+            }
+            return !_.isNil(value) && (_.isNumber(value) ? value !== 0 : !_.isEmpty(value));
+        });
+    }
+
+    const handleSubmit = async () => {
+        const parmas = {
+            id: selectedIds,
+            matnr: removeEmptyKeys(formData)
+        }
+
+        const res = await request.post(`/matnr/modify`, parmas);
+        if (res?.data?.code === 200) {
+            handleClose()
+
+        } else {
+            notify(res.data.msg);
+        }
+    }
+
+    return (
+        <Dialog open={open} maxWidth="md" fullWidth>
+            <Form onSubmit={handleSubmit}>
+                <DialogCloseButton onClose={handleClose} />
+                <DialogTitle>{translate('toolbar.batch')}</DialogTitle>
+                <DialogContent sx={{ mt: 2 }}>
+                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
+                        <Grid container spacing={2}>
+                            <Grid item xs={4}>
+                                <StatusSelectInput
+                                    onChange={(e) => handleChange(e.target.value, 'status')}
+                                    defaultValue={''}
+                                    require={false}
+                                />
+                            </Grid>
+                        </Grid>
+
+                    </Box>
+                </DialogContent>
+                <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+                    <Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
+                        <Button type="submit" variant="contained" startIcon={<SaveIcon />}>
+                            {translate('toolbar.confirm')}
+                        </Button>
+                    </Box>
+                </DialogActions>
+            </Form>
+        </Dialog>
+    );
+}
+
+export default InitModal;
\ No newline at end of file
diff --git a/rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx b/rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx
index ea777c0..a44e1fb 100644
--- a/rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx
+++ b/rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx
@@ -31,6 +31,8 @@
     ReferenceArrayInput,
     AutocompleteInput,
     DeleteButton,
+    useRefresh,
+    Button
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
@@ -40,9 +42,10 @@
 import MyCreateButton from "../components/MyCreateButton";
 import MyExportButton from '../components/MyExportButton';
 import PageDrawer from "../components/PageDrawer";
-import MyField from "../components/MyField";
+import BatchModal from "./BatchModal";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
+import EditIcon from '@mui/icons-material/Edit';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -132,7 +135,12 @@
             >
                 <StyledDatagrid
                     preferenceKey='warehouseAreas'
-                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    bulkActionButtons={
+                        <>
+                            <BatchButton />
+                            <BulkDeleteButton mutationMode={OPERATE_MODE} />
+                        </>
+                    }
                     rowClick={(id, resource, record) => false}
                     omit={['id', 'createTime', 'createBy', 'memo']}
                 >
@@ -181,3 +189,27 @@
 }
 
 export default WarehouseAreasList;
+
+
+const BatchButton = () => {
+    const record = useRecordContext();
+    const notify = useNotify();
+    const refresh = useRefresh();
+
+
+    const [createDialog, setCreateDialog] = useState(false);
+
+    return (
+        <>
+            <Button onClick={() => setCreateDialog(true)} label={"toolbar.batch"}>
+                <EditIcon />
+            </Button>
+
+            <BatchModal
+                open={createDialog}
+                setOpen={setCreateDialog}
+            />
+        </>
+
+    )
+}

--
Gitblit v1.9.1