From 47a682630b8563017db497f2d0b48b3827a2ab40 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 25 三月 2025 14:25:49 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-admin/src/page/warehouseAreas/WarehouseAreasList.jsx | 36 ++++++
rsf-admin/src/page/warehouseAreas/BatchModal.jsx | 149 +++++++++++++++++++++++++++++
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupEdit.jsx | 9 -
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(+), 16 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..4fbd112 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 (
@@ -79,11 +78,10 @@
<Grid item xs={6} display="flex" gap={1}>
<TextInput
label="table.field.matnrGroup.parCode"
- validate={[required()]}
source="parCode"
value={editRecord?.parCode}
parse={v => v}
- disabled
+ readOnly
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
@@ -99,7 +97,7 @@
label="table.field.matnrGroup.code"
source="code"
parse={v => v}
- disabled={!!editRecord}
+ readOnly={!!editRecord}
/>
</Grid>
</Grid>
@@ -134,6 +132,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