From 23253548dca45ef77746e1d1b1e9a02c6a261d37 Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期六, 22 三月 2025 15:37:00 +0800
Subject: [PATCH] feat:物料库区绑定
---
rsf-admin/src/page/basicInfo/loc/BindModal.jsx | 0
rsf-admin/src/page/basicInfo/locType/BindModal.jsx | 0
rsf-admin/src/page/basicInfo/matnr/BindModal.jsx | 186 ++++++++++++++++++++++++++++++++++++++++++++++
rsf-admin/src/page/basicInfo/locAreaMatRela/LocAreaMatRelaList.jsx | 10 +-
rsf-admin/src/i18n/zh.js | 2
rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx | 26 ++++++
rsf-admin/src/page/basicInfo/locType/LocTypeList.jsx | 8 +-
rsf-admin/src/page/basicInfo/loc/LocList.jsx | 8 +-
8 files changed, 226 insertions(+), 14 deletions(-)
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 6319e61..bec9beb 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -129,7 +129,7 @@
loc: '搴撲綅',
locType: '搴撲綅绫诲瀷',
locArea: '閫昏緫鍒嗗尯',
- locAreaMatRela: '鐗╂枡缁戝畾',
+ locAreaMatRela: '搴撳尯鐗╂枡鍏崇郴',
container: '瀹瑰櫒绠$悊',
contract: '鍚堝悓淇℃伅',
qlyInspect: '璐ㄦ淇℃伅',
diff --git a/rsf-admin/src/page/basicInfo/loc/MatnrModal.jsx b/rsf-admin/src/page/basicInfo/loc/BindModal.jsx
similarity index 100%
rename from rsf-admin/src/page/basicInfo/loc/MatnrModal.jsx
rename to rsf-admin/src/page/basicInfo/loc/BindModal.jsx
diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
index 8acee82..1053f48 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -38,7 +38,7 @@
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
import LocCreate from "./LocCreate";
-import MatnrModal from "./MatnrModal";
+import BindModal from "./BindModal";
import EmptyData from "../../components/EmptyData";
import DynamicField from "../../components/DynamicField";
import MyCreateButton from "../../components/MyCreateButton";
@@ -148,7 +148,7 @@
bulkActionButtons={
<>
<BatchButton />
- <MatnrButton />
+ <BindButton />
<SubzoneButton />
<BulkDeleteButton />
</>
@@ -285,7 +285,7 @@
)
}
-const MatnrButton = () => {
+const BindButton = () => {
const record = useRecordContext();
const notify = useNotify();
const refresh = useRefresh();
@@ -299,7 +299,7 @@
<LinkIcon />
</Button>
- <MatnrModal
+ <BindModal
open={createDialog}
setOpen={setCreateDialog}
/>
diff --git a/rsf-admin/src/page/basicInfo/locAreaMatRela/LocAreaMatRelaList.jsx b/rsf-admin/src/page/basicInfo/locAreaMatRela/LocAreaMatRelaList.jsx
index dcb16d5..c4c916d 100644
--- a/rsf-admin/src/page/basicInfo/locAreaMatRela/LocAreaMatRelaList.jsx
+++ b/rsf-admin/src/page/basicInfo/locAreaMatRela/LocAreaMatRelaList.jsx
@@ -120,12 +120,12 @@
omit={['id', 'createTime', 'createBy', 'memo']}
>
<NumberField source="id" />
- <NumberField source="areaId" label="table.field.locAreaMatRela.areaId" />
+ <NumberField source="areaId$" label="table.field.locAreaMatRela.areaId" />
<TextField source="code" label="table.field.locAreaMatRela.code" />
- <NumberField source="matnrId" label="table.field.locAreaMatRela.matnrId" />
- <NumberField source="groupId" label="table.field.locAreaMatRela.groupId" />
- <NumberField source="locTypeId" label="table.field.locAreaMatRela.locTypeId" />
- <NumberField source="locId" label="table.field.locAreaMatRela.locId" />
+ <NumberField source="matnrId$" label="table.field.locAreaMatRela.matnrId" />
+ <NumberField source="groupId$" label="table.field.locAreaMatRela.groupId" />
+ <NumberField source="locTypeId$" label="table.field.locAreaMatRela.locTypeId" />
+ <NumberField source="locId$" label="table.field.locAreaMatRela.locId" />
<ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
<TextField source="nickname" />
diff --git a/rsf-admin/src/page/basicInfo/locType/MatnrModal.jsx b/rsf-admin/src/page/basicInfo/locType/BindModal.jsx
similarity index 100%
rename from rsf-admin/src/page/basicInfo/locType/MatnrModal.jsx
rename to rsf-admin/src/page/basicInfo/locType/BindModal.jsx
diff --git a/rsf-admin/src/page/basicInfo/locType/LocTypeList.jsx b/rsf-admin/src/page/basicInfo/locType/LocTypeList.jsx
index 58ad20e..5fd0003 100644
--- a/rsf-admin/src/page/basicInfo/locType/LocTypeList.jsx
+++ b/rsf-admin/src/page/basicInfo/locType/LocTypeList.jsx
@@ -45,7 +45,7 @@
import PageDrawer from "../../components/PageDrawer";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import * as Common from '@/utils/common';
-import MatnrModal from "./MatnrModal";
+import BindModal from "./BindModal";
import LinkIcon from '@mui/icons-material/Link';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -115,7 +115,7 @@
<StyledDatagrid
preferenceKey='locType'
bulkActionButtons={<>
- <MatnrButton />
+ <BindButton />
<BulkDeleteButton />
</>}
rowClick={(id, resource, record) => false}
@@ -159,7 +159,7 @@
export default LocTypeList;
-const MatnrButton = () => {
+const BindButton = () => {
const record = useRecordContext();
const notify = useNotify();
const refresh = useRefresh();
@@ -173,7 +173,7 @@
<LinkIcon />
</Button>
- <MatnrModal
+ <BindModal
open={createDialog}
setOpen={setCreateDialog}
/>
diff --git a/rsf-admin/src/page/basicInfo/matnr/BindModal.jsx b/rsf-admin/src/page/basicInfo/matnr/BindModal.jsx
new file mode 100644
index 0000000..3ada880
--- /dev/null
+++ b/rsf-admin/src/page/basicInfo/matnr/BindModal.jsx
@@ -0,0 +1,186 @@
+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,
+ SelectArrayInput
+} 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 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';
+import { Add, Edit, Delete } from '@mui/icons-material';
+import _ from 'lodash';
+import { DataGrid } from '@mui/x-data-grid';
+import StatusSelectInput from "../../components/StatusSelectInput";
+import TreeSelectInput from "@/page/components/TreeSelectInput";
+const MatnrModal = ({ open, setOpen }) => {
+ const refresh = useRefresh();
+ const translate = useTranslate();
+
+
+ const notify = useNotify();
+
+ const [formData, setFormData] = useState({
+ areaId: null,
+ locId: null,
+ });
+
+ const { selectedIds, onUnselectItems } = useListContext();
+
+ const handleClose = (event, reason) => {
+ if (reason !== "backdropClick") {
+ setOpen(false);
+ reset()
+ refresh();
+ onUnselectItems()
+ }
+ };
+
+ const reset = () => {
+ setFormData({
+ areaId: null,
+ locId: null,
+ })
+ }
+
+ const handleReset = (e) => {
+ e.preventDefault();
+ };
+
+ const handleChange = (value, name) => {
+ setFormData((prevData) => ({
+ ...prevData,
+ [name]: value
+ }));
+ refresh()
+ };
+
+ 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 = {
+ matnrId: selectedIds,
+ areaId: formData.areaId,
+ locId: formData.locId,
+ }
+
+ const res = await request.post(`/locAreaMatRela/matnr/bind`, parmas);
+ if (res?.data?.code === 200) {
+ handleClose()
+
+ } else {
+ notify(res.data.msg);
+ }
+
+
+ }
+
+ const [groupId, setGroupId] = useState();
+
+ const warehouseChange = (e) => {
+ setGroupId(e.target.value)
+ }
+
+ return (
+ <Dialog open={open} maxWidth="md" fullWidth>
+ <Form onSubmit={handleSubmit}>
+ <DialogCloseButton onClose={handleClose} />
+ <DialogTitle>{translate('toolbar.bindloc')}</DialogTitle>
+ <DialogContent sx={{ mt: 2 }}>
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
+ <Grid container spacing={2}>
+ <Grid item xs={4}>
+ <ReferenceInput
+ source="areaId"
+ reference="warehouseAreas"
+ >
+ <AutocompleteInput
+ label="table.field.loc.areaId"
+ optionText="name"
+ onChange={(value) => handleChange(value, 'areaId')}
+ value={formData.areaId}
+ validate={required()}
+ filterToQuery={(val) => ({ name: val })}
+ />
+ </ReferenceInput>
+
+ </Grid>
+
+
+ <Grid item xs={4}>
+ <ReferenceArrayInput source="locId" reference="loc" >
+ <SelectArrayInput
+ label="table.field.locAreaMatRela.locId"
+ validate={required()}
+ optionText={'code'}
+ value={formData.locId}
+ onChange={(e) => handleChange(e.target.value, 'locId')}
+ />
+ </ReferenceArrayInput>
+
+ </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 MatnrModal;
\ No newline at end of file
diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
index e27b5e6..23079ee 100644
--- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx
@@ -55,6 +55,8 @@
import request from '@/utils/request';
import BatchModal from './BatchModal';
import PrintModal from './PrintModal';
+import LinkIcon from '@mui/icons-material/Link';
+import BindModal from './BindModal';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
'& .css-1vooibu-MuiSvgIcon-root': {
@@ -238,6 +240,7 @@
preferenceKey='matnr'
bulkActionButtons={<>
<BatchButton />
+ <BindButton />
<PrintButton />
<BulkDeleteButton mutationMode={OPERATE_MODE} />
</>}
@@ -379,4 +382,27 @@
</>
)
+}
+
+const BindButton = () => {
+ const record = useRecordContext();
+ const notify = useNotify();
+ const refresh = useRefresh();
+
+
+ const [createDialog, setCreateDialog] = useState(false);
+
+ return (
+ <>
+ <Button onClick={() => setCreateDialog(true)} label={"toolbar.bindloc"}>
+ <LinkIcon />
+ </Button>
+
+ <BindModal
+ open={createDialog}
+ setOpen={setCreateDialog}
+ />
+ </>
+
+ )
}
\ No newline at end of file
--
Gitblit v1.9.1