From e0351f5e0d75ab4f1da19696b55a1d3cd70b0a68 Mon Sep 17 00:00:00 2001 From: verou <857149855@qq.com> Date: 星期二, 25 三月 2025 16:43:06 +0800 Subject: [PATCH] feat:库区批量 --- rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx | 92 +++++++++++++++++++++++++----- rsf-admin/src/page/warehouseAreas/BatchModal.jsx | 13 ++- rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx | 1 rsf-admin/src/page/components/TreeSelectInput.jsx | 4 rsf-admin/src/i18n/zh.js | 5 + rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx | 31 +++++++++- rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx | 2 rsf-admin/src/i18n/en.js | 1 rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx | 10 +++ 9 files changed, 129 insertions(+), 30 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index b970d00..e6b9ca2 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -649,6 +649,7 @@ batchStatus: 'batchStatus', batchMix: 'batchFiexed', batchWarehouse: 'batchWarehouse', + batchStockLevel: "batchStockLevel", }, }; diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index 6e7ede8..dc195f9 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -278,8 +278,8 @@ minQty: "鏈�灏忓��", maxQty: "鏈�澶у��", stagn: "鍋滄粸棰勮鍊�", - valid: "淇濊川鏈�", - validWarn: "鏁堟湡棰勮", + valid: "淇濊川鏈�(澶�)", + validWarn: "鏁堟湡棰勮(澶�)", flagCheck: "鍏嶆", }, matnrGroup: { @@ -651,6 +651,7 @@ batchStatus: '鎵归噺鐘舵��', batchMix: '鎵归噺娣锋斁', batchWarehouse: '鎵归噺浠撳簱', + batchStockLevel: "鎵归噺ABC鍒嗙被", }, }; diff --git a/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx index 25a484e..8c10825 100644 --- a/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/BatchModal.jsx @@ -43,7 +43,6 @@ } from '@mui/material'; import DialogCloseButton from "../../components/DialogCloseButton"; -import DictionarySelect from "../../components/DictionarySelect"; import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form"; import SaveIcon from '@mui/icons-material/Save'; import request from '@/utils/request'; @@ -52,7 +51,7 @@ import { DataGrid } from '@mui/x-data-grid'; import StatusSelectInput from "../../components/StatusSelectInput"; -const InitModal = ({ open, setOpen }) => { +const InitModal = ({ open, setOpen, fieldType }) => { const refresh = useRefresh(); const translate = useTranslate(); @@ -60,7 +59,11 @@ const notify = useNotify(); const [formData, setFormData] = useState({ - 'status': null + 'status': null, + 'stockLevel': null, + 'validWarn': null, + 'valid': null, + 'flagCheck': null, }); const { selectedIds, onUnselectItems } = useListContext(); @@ -76,7 +79,11 @@ const reset = () => { setFormData({ - 'status': null + 'status': null, + 'stockLevel': null, + 'validWarn': null, + 'valid': null, + 'flagCheck': null, }) } @@ -87,7 +94,7 @@ const handleChange = (value, name) => { setFormData((prevData) => ({ ...prevData, - [name]: ['locType', 'type'].includes(name) ? value : +value + [name]: value })); }; @@ -97,17 +104,20 @@ const newObj = removeEmptyKeys(value); return !_.isEmpty(newObj); } - return !_.isNil(value) && (_.isNumber(value) ? value !== 0 : !_.isEmpty(value)); + return !_.isNil(value); }); } + const handleSubmit = async () => { const parmas = { - id: selectedIds, - matnr: removeEmptyKeys(formData) + ids: selectedIds, + matnr: { + ...removeEmptyKeys(formData) + } } - const res = await request.post(`/matnr/modify`, parmas); + const res = await request.post(`/matnr/batch/update`, parmas); if (res?.data?.code === 200) { handleClose() @@ -117,20 +127,68 @@ } return ( - <Dialog open={open} maxWidth="md" fullWidth> + <Dialog open={open} maxWidth="xs" 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> + {fieldType === 'status' && + <Grid item xs={6}> + <StatusSelectInput + onChange={(e) => handleChange(+e.target.value, 'status')} + defaultValue={''} + require={false} + /> + </Grid> + } + {fieldType === 'stockLevel' && + <Grid item xs={6}> + <SelectInput + label="table.field.matnr.stockLevel" + source="stockLevel" + onChange={(e) => handleChange(e.target.value, 'stockLevel')} + choices={[ + { id: 0, name: ' A' }, + { id: 1, name: ' B' }, + { id: 2, name: 'C' }, + ]} + validate={required()} + /> + </Grid> + } + {fieldType === 'validWarn' && + <Grid item xs={6}> + <NumberInput + onChange={(e) => handleChange(e.target.value, 'validWarn')} + label="table.field.matnr.validWarn" + source="validWarn" + /> + </Grid> + } + {fieldType === 'validWarn' && + <Grid item xs={6}> + <NumberInput + onChange={(e) => handleChange(e.target.value, 'valid')} + label="table.field.matnr.valid" + source="valid" + /> + </Grid> + } + {fieldType === 'flagCheck' && + <Grid item xs={6}> + <SelectInput + onChange={(e) => handleChange(e.target.value, 'flagCheck')} + label="table.field.matnr.flagCheck" + source="flagCheck" + choices={[ + { id: 0, name: ' 鍚�' }, + { id: 1, name: ' 鏄�' }, + ]} + /> + </Grid> + } </Grid> </Box> diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx index c86aeef..003de96 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx @@ -318,6 +318,16 @@ source="valid" /> </Grid> + <Grid item xs={6} display="flex" gap={1}> + <SelectInput + label="table.field.matnr.flagCheck" + source="flagCheck" + choices={[ + { id: 0, name: ' 鍚�' }, + { id: 1, name: ' 鏄�' }, + ]} + /> + </Grid> </Grid> </CustomTabPanel> <CustomTabPanel value={value} index={2}> diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx index 9bf7cfc..4114430 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx @@ -242,7 +242,8 @@ preferenceKey='matnr' bulkActionButtons={<> <BatchGroupButton /> - <BatchButton /> + <BatchStatusButton /> + <BatchLevelButton /> <BindButton /> <PrintButton /> <BulkDeleteButton mutationMode={OPERATE_MODE} /> @@ -340,7 +341,7 @@ ) } -const BatchButton = () => { +const BatchStatusButton = () => { const record = useRecordContext(); const notify = useNotify(); const refresh = useRefresh(); @@ -350,13 +351,37 @@ return ( <> - <Button onClick={() => setCreateDialog(true)} label={"toolbar.batch"}> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchStatus"}> <EditIcon /> </Button> <BatchModal open={createDialog} setOpen={setCreateDialog} + fieldType={'status'} + /> + </> + + ) +} +const BatchLevelButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + + const [createDialog, setCreateDialog] = useState(false); + + return ( + <> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchStockLevel"}> + <EditIcon /> + </Button> + + <BatchModal + open={createDialog} + setOpen={setCreateDialog} + fieldType={'stockLevel'} /> </> diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx index e381f93..c2e5226 100644 --- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx +++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx @@ -73,6 +73,7 @@ isTranslate resource={resource} onChange={(e) => pChange(e.target.value)} + required /> </Grid> <Grid item xs={6} display="flex" gap={1}> diff --git a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx index b7436b2..74b125e 100644 --- a/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx +++ b/rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx @@ -269,7 +269,7 @@ {expandAll ? translate('common.action.collapseAll') : translate('common.action.expandAll')} </Button> <TextField - label="鎼滅储" + label="鎼滅储鍚嶇О" value={filter} onChange={({ target }) => { setFilter(target.value) diff --git a/rsf-admin/src/page/components/TreeSelectInput.jsx b/rsf-admin/src/page/components/TreeSelectInput.jsx index 569451a..2c51cc5 100644 --- a/rsf-admin/src/page/components/TreeSelectInput.jsx +++ b/rsf-admin/src/page/components/TreeSelectInput.jsx @@ -5,7 +5,7 @@ import * as Common from '@/utils/common'; import { useFormContext } from 'react-hook-form'; -const TreeSelectInput = ({ resource, onChange, label, source = 'parentId', value, isTranslate = false, ...rest }) => { +const TreeSelectInput = ({ resource, required, onChange, label, source = 'parentId', value, isTranslate = false, ...rest }) => { const translate = useTranslate(); const { setValue } = useFormContext(); const [filter, setFilter] = React.useState(""); @@ -42,7 +42,7 @@ }; return ( - <FormControl fullWidth> + <FormControl fullWidth required={required}> <InputLabel>{translate(label)}</InputLabel> <Select value={proxyVal || ''} diff --git a/rsf-admin/src/page/warehouseAreas/BatchModal.jsx b/rsf-admin/src/page/warehouseAreas/BatchModal.jsx index 1f64a7b..7b8558c 100644 --- a/rsf-admin/src/page/warehouseAreas/BatchModal.jsx +++ b/rsf-admin/src/page/warehouseAreas/BatchModal.jsx @@ -100,17 +100,20 @@ const newObj = removeEmptyKeys(value); return !_.isEmpty(newObj); } - return !_.isNil(value) && (_.isNumber(value) ? value !== 0 : !_.isEmpty(value)); + return !_.isNil(value); }); } + const handleSubmit = async () => { const parmas = { - id: selectedIds, - ...removeEmptyKeys(formData) + ids: selectedIds, + warehouseAreas: { + ...removeEmptyKeys(formData) + } } - const res = await request.post(`/warehouseAreas/modify`, parmas); + const res = await request.post(`/warehouseAreas/batch/update`, parmas); if (res?.data?.code === 200) { handleClose() @@ -130,7 +133,7 @@ {fieldType === 'status' && <Grid item xs={6}> <StatusSelectInput - onChange={(e) => handleChange(e.target.value, 'status')} + onChange={(e) => handleChange(+e.target.value, 'status')} defaultValue={''} require={false} /> -- Gitblit v1.9.1