From 1ec363b2a7195cb47e35a7e119012e20366aa71a Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期二, 18 三月 2025 10:00:33 +0800
Subject: [PATCH] feat:字典选择器
---
rsf-admin/src/page/basicInfo/loc/InitModal.jsx | 249 +++++++++++++++++++++--------------------
rsf-admin/src/page/basicInfo/loc/LocCreate.jsx | 17 ++
rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx | 2
rsf-admin/src/page/components/DictionarySelect.jsx | 45 +++++++
rsf-admin/src/page/basicInfo/loc/LocEdit.jsx | 19 ++-
rsf-admin/.env | 4
rsf-admin/src/page/asnOrder/AsnOrderModal.jsx | 2
7 files changed, 202 insertions(+), 136 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/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
index 2942d22..1b23e74 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
@@ -183,7 +183,7 @@
onBlur={requestSetHead}
variant="outlined"
size="small"
- validate={required()}
+ required
/>
</Grid>
diff --git a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
index ef64347..ed84903 100644
--- a/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/InitModal.jsx
@@ -43,6 +43,7 @@
} 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';
@@ -61,14 +62,14 @@
const notify = useNotify();
const [formData, setFormData] = useState({
- "areaId": "",
- "endBay": "",
- "endLev": "",
- "endRow": "",
+ "areaId": undefined,
+ "endBay": undefined,
+ "endLev": undefined,
+ "endRow": undefined,
"locType": "",
- "startBay": "",
- "startLev": "",
- "startRow": "",
+ "startBay": undefined,
+ "startLev": undefined,
+ "startRow": undefined,
"type": ""
});
@@ -82,11 +83,10 @@
e.preventDefault();
};
- const handleChange = (e) => {
- const { name, value } = e.target;
+ const handleChange = (value, name) => {
setFormData((prevData) => ({
...prevData,
- [name]: value
+ [name]: ['locType', 'type'].includes(name) ? value : +value
}));
};
@@ -106,118 +106,125 @@
<DialogCloseButton onClose={handleClose} />
<DialogTitle>{translate('toolbar.locInit')}</DialogTitle>
<DialogContent sx={{ mt: 2 }}>
- <Box component="form" sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
- <Grid container spacing={2}>
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.areaId")}
- name="wkType"
- value={formData.areaId}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
+ <Form>
+
+ <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}>
+ <DictionarySelect
+ label={translate("table.field.loc.locType")}
+ name="locType"
+ value={formData.locType}
+ onChange={(e) => handleChange(e.target.value, 'locType')}
+ size="small"
+ validate={[required()]}
+ dictTypeCode="sys_width_type"
+ />
+ </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"
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.startBay")}
+ name="startBay"
+ value={formData.startBay}
+ onChange={(e) => handleChange(e.target.value, 'startBay')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.startLev")}
+ name="startLev"
+ value={formData.startLev}
+ onChange={(e) => handleChange(e.target.value, 'startLev')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.startRow")}
+ name="startRow"
+ value={formData.startRow}
+ onChange={(e) => handleChange(e.target.value, 'startRow')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.endBay")}
+ name="endBay"
+ value={formData.endBay}
+ onChange={(e) => handleChange(e.target.value, 'endBay')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.endLev")}
+ name="endLev"
+ value={formData.endLev}
+ onChange={(e) => handleChange(e.target.value, 'endLev')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
+ <Grid item xs={4}>
+ <TextField
+ label={translate("table.field.loc.endRow")}
+ name="endRow"
+ value={formData.endRow}
+ onChange={(e) => handleChange(e.target.value, 'endRow')}
+ size="small"
+ type="number"
+ required
+ />
+ </Grid>
+
</Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.locType")}
- name="wkType"
- value={formData.locType}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.type")}
- name="wkType"
- value={formData.type}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.startBay")}
- name="type"
- value={formData.startBay}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.startLev")}
- name="wkType"
- value={formData.startLev}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.startRow")}
- name="wkType"
- value={formData.startRow}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.endBay")}
- name="wkType"
- value={formData.endBay}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.endLev")}
- name="wkType"
- value={formData.endLev}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
- <Grid item xs={4}>
- <TextField
- label={translate("table.field.loc.endRow")}
- name="wkType"
- value={formData.endRow}
- onChange={handleChange}
- variant="outlined"
- size="small"
- validate={required()}
- />
- </Grid>
-
-
- </Grid>
+ </Form>
</Box>
</DialogContent>
<DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
diff --git a/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
index e48599a..0602179 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
@@ -119,12 +119,19 @@
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.loc.type"
+ <ReferenceInput
source="type"
- parse={v => v}
- validate={required()}
- />
+ reference="dictData"
+ filter={{ dictTypeCode: 'sys_loc_type' }}
+ >
+ <AutocompleteInput
+ label="table.field.loc.type"
+ optionText="label"
+ optionValue="value"
+ parse={v => v}
+ validate={[required()]}
+ />
+ </ReferenceInput>
</Grid>
{/* <Grid item xs={6} display="flex" gap={1}>
<TextInput
diff --git a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
index ab883db..3ea6793 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
@@ -66,7 +66,7 @@
<Grid container rowSpacing={2} columnSpacing={2}>
<Grid item xs={6} display="flex" gap={1}>
<ReferenceInput
- source="warehouseId$"
+ source="warehouseId"
reference="warehouse"
>
<AutocompleteInput
@@ -99,12 +99,19 @@
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
- <TextInput
- label="table.field.loc.type"
+ <ReferenceInput
source="type"
- parse={v => v}
- validate={required()}
- />
+ reference="dictData"
+ filter={{ dictTypeCode: 'sys_loc_type' }}
+ >
+ <AutocompleteInput
+ label="table.field.loc.type"
+ optionText="label"
+ optionValue="value"
+ parse={v => v}
+ validate={[required()]}
+ />
+ </ReferenceInput>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
<TextInput
diff --git a/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx b/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
index 16631c9..d0b4c7c 100644
--- a/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
+++ b/rsf-admin/src/page/basicInfo/whMat/WhMatList.jsx
@@ -145,7 +145,7 @@
const getMatnrList = async () => {
const {
data: { code, data, msg },
- } = await request.post("/matnr/list", {}).then();
+ } = await request.post("/matnr/list", {});
if (code === 200) {
console.log(data);
} else {
diff --git a/rsf-admin/src/page/components/DictionarySelect.jsx b/rsf-admin/src/page/components/DictionarySelect.jsx
new file mode 100644
index 0000000..43dc811
--- /dev/null
+++ b/rsf-admin/src/page/components/DictionarySelect.jsx
@@ -0,0 +1,45 @@
+import EditIcon from '@mui/icons-material/Edit';
+import { useState, useEffect } from 'react';
+import {
+ Button, useListContext, SelectInput,
+ required,
+ useTranslate, useNotify
+} from 'react-admin';
+import request from '@/utils/request';
+
+const DictionarySelect = (props) => {
+ const { dictTypeCode, name, ...parmas } = props;
+ const { selectedIds } = useListContext();
+ const translate = useTranslate();
+ const notify = useNotify();
+ const [list, setList] = useState([])
+
+ useEffect(() => {
+ http()
+ }, [dictTypeCode]);
+
+ const http = async () => {
+ const res = await request.post('/dictData/page', { dictTypeCode });
+ if (res?.data?.code === 200) {
+
+ setList(res.data.data.records.map((item) => {
+ return {
+ id: item.value,
+ name: item.value
+ }
+ }))
+ } else {
+ notify(res.data.msg);
+ }
+ }
+
+ return (
+ <SelectInput
+ source={name}
+ choices={list}
+ {...parmas}
+ />
+ );
+};
+
+export default DictionarySelect;
\ No newline at end of file
--
Gitblit v1.9.1