skyouc
2025-02-24 c3949ec79f06e7bdee9c3a12367bd97ddf46e033
Merge branch 'dev' of http://47.97.1.152:5880/r/wms-master into dev
6个文件已修改
1007 ■■■■■ 已修改文件
rsf-admin/src/i18n/en.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/matnr/MatnrCreate.jsx 465 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx 464 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/warehouse/WarehouseCreate.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js
@@ -425,6 +425,20 @@
                },
            },
        },
        matnr: {
            title: {
                basic: 'basic info',
                control: 'control',
                batchRole: 'batch role',
            }
        },
    },
    form: {
        matnr: {
            shipper: 'shipper is required',
            groupId: 'groupId is required',
        }
    }
};
rsf-admin/src/i18n/zh.js
@@ -1,3 +1,4 @@
import { s } from "motion/react-client";
import chineseMessages from "./core/chineseMessages";
const customChineseMessages = {
@@ -425,6 +426,20 @@
                },
            },
        },
        matnr: {
            title: {
                basic: '基础属性',
                control: '控制属性',
                batchRole: '批次规则',
            }
        }
    },
    form: {
        matnr: {
            name: '物料名称不能为空',
            shipper: '货主不能为空',
            groupId: '分组不能为空',
        }
    }
};
rsf-admin/src/page/basicInfo/matnr/MatnrCreate.jsx
@@ -26,16 +26,53 @@
    Stack,
    Grid,
    Box,
    Tabs,
    Tab,
} from '@mui/material';
import PropTypes from 'prop-types';
import DialogCloseButton from "@/page/components/DialogCloseButton";
import StatusSelectInput from "@/page/components/StatusSelectInput";
import MemoInput from "@/page/components/MemoInput";
import { tr } from "date-fns/locale";
function CustomTabPanel(props) {
    const { children, value, index, ...other } = props;
    return (
        <div
            role="tabpanel"
            hidden={value !== index}
            id={`simple-tabpanel-${index}`}
            aria-labelledby={`simple-tab-${index}`}
            {...other}
        >
            {value === index && <Box sx={{ p: 3 }}>{children}</Box>}
        </div>
    );
}
CustomTabPanel.propTypes = {
    children: PropTypes.node,
    index: PropTypes.number.isRequired,
    value: PropTypes.number.isRequired,
};
function a11yProps(index) {
    return {
        id: `simple-tab-${index}`,
        'aria-controls': `simple-tabpanel-${index}`,
    };
}
const MatnrCreate = (props) => {
    const { open, setOpen } = props;
    const translate = useTranslate();
    const notify = useNotify();
    const [value, setValue] = React.useState(0);
    const handleChange = (event, newValue) => {
        setValue(newValue);
    };
    const handleClose = (event, reason) => {
        if (reason !== "backdropClick") {
@@ -50,6 +87,19 @@
    const handleError = async (error) => {
        notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
    };
    const validateForm = (values) => {
        const errors = {};
        if (!values.shipperId) {
            errors.shipperId = translate('form.matnr.shipper');
        }
        if (!values.groupId) {
            errors.groupId = translate('form.matnr.groupId');
        }
        if (!values.name) {
            errors.name = translate('form.matnr.name');
        }
        return errors;
    };
    return (
@@ -69,7 +119,7 @@
                    disableRestoreFocus
                    maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
                >
                    <Form>
                    <Form validate={validateForm}>
                        <DialogTitle id="form-dialog-title" sx={{
                            position: 'sticky',
                            top: 0,
@@ -83,206 +133,231 @@
                            </Box>
                        </DialogTitle>
                        <DialogContent sx={{ mt: 2 }}>
                            <Grid container rowSpacing={2} columnSpacing={2}>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.name"
                                        source="name"
                                        parse={v => v}
                                        autoFocus
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.code"
                                        source="code"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="shipperId"
                                        reference="shipper"
                                    >
                                        <AutocompleteInput
                                            label="table.field.matnr.shipperId"
                                            optionText="name"
                                            filterToQuery={(val) => ({ name: val })}
                            <Tabs value={value} onChange={handleChange} aria-label="basic tabs example">
                                <Tab label={translate('page.matnr.title.basic')} {...a11yProps(0)} />
                                <Tab label={translate('page.matnr.title.control')} {...a11yProps(1)} />
                                <Tab label={translate('page.matnr.title.batchRole')} {...a11yProps(2)} />
                            </Tabs>
                            <CustomTabPanel value={value} index={0}>
                                <Grid container rowSpacing={2} columnSpacing={2}>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.name"
                                            validate={[required()]}
                                            source="name"
                                            parse={v => v}
                                            autoFocus
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="groupId"
                                        reference="matnrGroup"
                                    >
                                        <AutocompleteInput
                                            label="table.field.matnr.groupId"
                                            optionText="code"
                                            filterToQuery={(val) => ({ code: val })}
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.code"
                                            required
                                            source="code"
                                            parse={v => v}
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="rglarId"
                                        reference="rglarId"
                                    >
                                        <AutocompleteInput
                                            label="table.field.matnr.rglarId"
                                            optionText="code"
                                            filterToQuery={(val) => ({ code: val })}
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <ReferenceInput
                                            source="shipperId"
                                            reference="shipper"
                                        >
                                            <AutocompleteInput
                                                label="table.field.matnr.shipperId"
                                                optionText="name"
                                                validate={[required()]}
                                                filterToQuery={(val) => ({ name: val })}
                                            />
                                        </ReferenceInput>
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <ReferenceInput
                                            source="groupId"
                                            reference="matnrGroup"
                                        >
                                            <AutocompleteInput
                                                label="table.field.matnr.groupId"
                                                optionText="code"
                                                validate={[required()]}
                                                filterToQuery={(val) => ({ code: val })}
                                            />
                                        </ReferenceInput>
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.erpCode"
                                            source="erpCode"
                                            required
                                            parse={v => v}
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.erpCode"
                                        source="erpCode"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.spec"
                                        source="spec"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.model"
                                        source="model"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.weight"
                                        source="weight"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.color"
                                        source="color"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.size"
                                        source="size"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.describle"
                                        source="describle"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.nromNum"
                                        source="nromNum"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.unit"
                                        source="unit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.purUnit"
                                        source="purchaseUnit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.stockUnit"
                                        source="stockUnit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <SelectInput
                                        label="table.field.matnr.stockLevel"
                                        source="stockLevel"
                                        choices={[
                                            { id: 0, name: ' A' },
                                            { id:   1, name: ' B' },
                                            { id:   2, name: 'C' },
                                        ]}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <SelectInput
                                        label="table.field.matnr.isLabelMange"
                                        source="isLabelMange"
                                        choices={[
                                            { id: 0, name: ' 否' },
                                            { id:  1, name: ' 是' },
                                        ]}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.safeQty"
                                        source="safeQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.minQty"
                                        source="minQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.maxQty"
                                        source="maxQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.stagn"
                                        source="stagn"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.valid"
                                        source="valid"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.validWarn"
                                        source="validWarn"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.flagCheck"
                                        source="flagCheck"
                                    />
                                </Grid>
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.spec"
                                            source="spec"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.model"
                                            source="model"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.weight"
                                            source="weight"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.color"
                                            source="color"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.size"
                                            source="size"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.describle"
                                            source="describle"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.nromNum"
                                            source="nromNum"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.unit"
                                            source="unit"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.purUnit"
                                            source="purchaseUnit"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <TextInput
                                            label="table.field.matnr.stockUnit"
                                            source="stockUnit"
                                            parse={v => v}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <SelectInput
                                            label="table.field.matnr.stockLevel"
                                            source="stockLevel"
                                            choices={[
                                                { id: 0, name: ' A' },
                                                { id: 1, name: ' B' },
                                                { id: 2, name: 'C' },
                                            ]}
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <SelectInput
                                            label="table.field.matnr.isLabelMange"
                                            source="isLabelMange"
                                            choices={[
                                                { id: 0, name: ' 否' },
                                                { id: 1, name: ' 是' },
                                            ]}
                                        />
                                    </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <StatusSelectInput />
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <StatusSelectInput />
                                    </Grid>
                                    <Grid item xs={12} display="flex" gap={1}>
                                        <Stack direction="column" spacing={1} width={'100%'}>
                                            <MemoInput />
                                        </Stack>
                                    </Grid>
                                </Grid>
                                <Grid item xs={12} display="flex" gap={1}>
                                    <Stack direction="column" spacing={1} width={'100%'}>
                                        <MemoInput />
                                    </Stack>
                            </CustomTabPanel>
                            <CustomTabPanel value={value} index={1}>
                                <Grid container rowSpacing={2} columnSpacing={2}>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.safeQty"
                                            source="safeQty"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.minQty"
                                            source="minQty"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.maxQty"
                                            source="maxQty"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.stagn"
                                            source="stagn"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.valid"
                                            source="valid"
                                        />
                                    </Grid>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <NumberInput
                                            label="table.field.matnr.validWarn"
                                            source="validWarn"
                                        />
                                    </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>
                            </Grid>
                            </CustomTabPanel>
                            <CustomTabPanel value={value} index={2}>
                                <Grid container rowSpacing={2} columnSpacing={2}>
                                    <Grid item xs={6} display="flex" gap={1}>
                                        <ReferenceInput
                                            source="rglarId"
                                            reference="rglarId"
                                        >
                                            <AutocompleteInput
                                                label="table.field.matnr.rglarId"
                                                optionText="code"
                                                filterToQuery={(val) => ({ code: val })}
                                            />
                                        </ReferenceInput>
                                    </Grid>
                                </Grid>
                            </CustomTabPanel>
                        </DialogContent>
                        <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
                            <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  >
rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx
@@ -20,8 +20,9 @@
    useRecordContext,
    DeleteButton,
} from 'react-admin';
import PropTypes from 'prop-types';
import { useWatch, useFormContext } from "react-hook-form";
import { Stack, Grid, Box, Typography } from '@mui/material';
import { Stack, Grid, Box, Typography, Tabs, Tab, } from '@mui/material';
import * as Common from '@/utils/common';
import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
import EditBaseAside from "@/page/components/EditBaseAside";
@@ -31,7 +32,6 @@
const FormToolbar = () => {
    const { getValues } = useFormContext();
    return (
        <Toolbar sx={{ justifyContent: 'space-between' }}>
            <SaveButton />
@@ -40,9 +40,51 @@
    )
}
function CustomTabPanel(props) {
    const { children, value, index, ...other } = props;
    return (
        <div
            role="tabpanel"
            hidden={value !== index}
            id={`simple-tabpanel-${index}`}
            aria-labelledby={`simple-tab-${index}`}
            {...other}
        >
            {value === index && <Box sx={{ p: 3 }}>{children}</Box>}
        </div>
    );
}
CustomTabPanel.propTypes = {
    children: PropTypes.node,
    index: PropTypes.number.isRequired,
    value: PropTypes.number.isRequired,
};
function a11yProps(index) {
    return {
        id: `simple-tab-${index}`,
        'aria-controls': `simple-tabpanel-${index}`,
    };
}
const MatnrEdit = () => {
    const translate = useTranslate();
    const [value, setValue] = React.useState(0);
    const handleChange = (event, newValue) => {
        setValue(newValue);
    };
    const validateForm = (values) => {
        const errors = {};
        if (!values.shipperId) {
            errors.shipperId = translate('form.matnr.shipper');
        }
        if (!values.groupId) {
            errors.groupId = translate('form.matnr.groupId');
        }
        return errors;
    };
    return (
        <Edit
            redirect="list"
@@ -56,210 +98,232 @@
                toolbar={<FormToolbar />}
                mode="onTouched"
                defaultValues={{}}
                validate={validateForm}
            // validate={(values) => { }}
            >
                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
                    <Grid item xs={12} md={8}>
                <Grid container width={{ xs: '20%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
                    <Grid item xs={12} md={10}>
                        <Typography variant="h6" gutterBottom>
                            {translate('common.edit.title.main')}
                        </Typography>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.name"
                                source="name"
                                parse={v => v}
                                autoFocus
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.code"
                                source="code"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <ReferenceInput
                                source="shipperId"
                                reference="shipper"
                                perPage={REFERENCE_INPUT_PAGESIZE}
                            >
                                <AutocompleteInput
                                    label="table.field.matnr.shipperId"
                                    optionText="name"
                                    filterToQuery={(val) => ({ name: val })}
                                />
                            </ReferenceInput>
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <ReferenceInput
                                source="groupId"
                                reference="matnrGroup"
                                perPage={REFERENCE_INPUT_PAGESIZE}
                            >
                                <AutocompleteInput
                                    label="table.field.matnr.groupId"
                                    optionText="code"
                                    filterToQuery={(val) => ({ code: val })}
                                />
                            </ReferenceInput>
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <ReferenceInput
                                source="rglarId"
                                reference="rglarId"
                                perPage={REFERENCE_INPUT_PAGESIZE}
                            >
                                <AutocompleteInput
                                    label="table.field.matnr.rglarId"
                                    optionText="code"
                                    filterToQuery={(val) => ({ code: val })}
                                />
                            </ReferenceInput>
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.erpCode"
                                source="erpCode"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.spec"
                                source="spec"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.model"
                                source="model"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.weight"
                                source="weight"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.color"
                                source="color"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.size"
                                source="size"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.describle"
                                source="describle"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.nromNum"
                                source="nromNum"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.unit"
                                source="unit"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.purUnit"
                                source="purUnit"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.matnr.stockUnit"
                                source="stockUnit"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <SelectInput
                                label="table.field.matnr.stockLevel"
                                source="stockLevel"
                                choices={[
                                    { id: 0, name: ' A' },
                                    { id:   1, name: ' B' },
                                    { id:   2, name: 'C' },
                                ]}
                                validate={required()}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <SelectInput
                                label="table.field.matnr.isLabelMange"
                                source="isLabelMange"
                                choices={[
                                    { id: 0, name: ' 否' },
                                    { id:  1, name: ' 是' },
                                ]}
                                validate={required()}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.safeQty"
                                source="safeQty"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.minQty"
                                source="minQty"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.maxQty"
                                source="maxQty"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.stagn"
                                source="stagn"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.valid"
                                source="valid"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.validWarn"
                                source="validWarn"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.matnr.flagCheck"
                                source="flagCheck"
                            />
                        </Stack>
                        <Tabs value={value} onChange={handleChange} aria-label="basic tabs example">
                            <Tab label={translate('page.matnr.title.basic')} {...a11yProps(0)} />
                            <Tab label={translate('page.matnr.title.control')} {...a11yProps(1)} />
                            <Tab label={translate('page.matnr.title.batchRole')} {...a11yProps(2)} />
                        </Tabs>
                        <CustomTabPanel value={value} index={0}>
                            <Grid container rowSpacing={2} columnSpacing={2}>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.name"
                                        source="name"
                                        parse={v => v}
                                        required
                                        autoFocus
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.code"
                                        source="code"
                                        required
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="shipperId"
                                        reference="shipper"
                                        perPage={REFERENCE_INPUT_PAGESIZE}
                                    >
                                        <AutocompleteInput
                                            validate={[required()]}
                                            label="table.field.matnr.shipperId"
                                            optionText="name"
                                            filterToQuery={(val) => ({ name: val })}
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="groupId"
                                        reference="matnrGroup"
                                        perPage={REFERENCE_INPUT_PAGESIZE}
                                    >
                                        <AutocompleteInput
                                            label="table.field.matnr.groupId"
                                            optionText="code"
                                            validate={[required()]}
                                            filterToQuery={(val) => ({ code: val })}
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <ReferenceInput
                                        source="rglarId"
                                        reference="rglarId"
                                        perPage={REFERENCE_INPUT_PAGESIZE}
                                    >
                                        <AutocompleteInput
                                            label="table.field.matnr.rglarId"
                                            optionText="code"
                                            filterToQuery={(val) => ({ code: val })}
                                        />
                                    </ReferenceInput>
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.erpCode"
                                        source="erpCode"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.spec"
                                        source="spec"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.weight"
                                        source="weight"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.color"
                                        source="color"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.size"
                                        source="size"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.describle"
                                        source="describle"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.nromNum"
                                        source="nromNum"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.unit"
                                        source="unit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.purUnit"
                                        source="purUnit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <TextInput
                                        label="table.field.matnr.stockUnit"
                                        source="stockUnit"
                                        parse={v => v}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <SelectInput
                                        label="table.field.matnr.stockLevel"
                                        source="stockLevel"
                                        choices={[
                                            { id: 0, name: ' A' },
                                            { id: 1, name: ' B' },
                                            { id: 2, name: 'C' },
                                        ]}
                                        validate={required()}
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <SelectInput
                                        label="table.field.matnr.isLabelMange"
                                        source="isLabelMange"
                                        choices={[
                                            { id: 0, name: ' 否' },
                                            { id: 1, name: ' 是' },
                                        ]}
                                        validate={required()}
                                    />
                                </Grid>
                            </Grid>
                        </CustomTabPanel>
                        <CustomTabPanel value={value} index={1}>
                            <Grid container rowSpacing={2} columnSpacing={2}>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.safeQty"
                                        source="safeQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.minQty"
                                        source="minQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.maxQty"
                                        source="maxQty"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.stagn"
                                        source="stagn"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.validWarn"
                                        source="validWarn"
                                    />
                                </Grid>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.valid"
                                        source="valid"
                                    />
                                </Grid>
                            </Grid>
                        </CustomTabPanel>
                        <CustomTabPanel value={value} index={2}>
                            <Grid container rowSpacing={2} columnSpacing={2}>
                                <Grid item xs={6} display="flex" gap={1}>
                                    <NumberInput
                                        label="table.field.matnr.flagCheck"
                                        source="flagCheck"
                                    />
                                </Grid>
                            </Grid>
                        </CustomTabPanel>
                    </Grid>
                    <Grid item xs={12} md={4}>
                    <Grid item xs={12} md={2}>
                        <Typography variant="h6" gutterBottom>
                            {translate('common.edit.title.common')}
                        </Typography>
rsf-admin/src/page/basicInfo/matnr/MatnrListAside.jsx
@@ -18,13 +18,41 @@
    const { setFilters } = useListContext(); // 获取列表上下文
    const [selectedOption, setSelectedOption] = useState(null);
    const [treeData, setTreeData] = useState([]);
    const trees = []
    const haveChildren = (item) => {
        // 如果 item 是一个数组,遍历数组中的每个元素
        if (Array.isArray(item)) {
            return item.map((k) => haveChildren(k));
        }
        // 如果 item 是一个对象
        if (item && typeof item === 'object') {
            // 将 id 转换为字符串
            if (item.id !== undefined) {
                item.id = item.id.toString();
            }
            // 如果存在 children,递归处理 children
            if (item.children && Array.isArray(item.children)) {
                item.children = haveChildren(item.children);
            }
        }
        return item;
    };
    useEffect(() => {
        request.post('/matnrGroup/tree')
            .then(res => {
                console.log('Tree Data:', res);
                if (res?.data?.code === 200) {
                    setTreeData(res.data.data);
                    let data = res.data.data;
                    // for (let k of data) {
                    //     k.id = k.id.toString();
                    // }
                    let items = haveChildren(data)
                    setTreeData(items)
                    console.log('Tree Data:', items);
                } else {
                    notify(res.data.msg);
                }
@@ -32,10 +60,10 @@
            .catch(error => {
                notify('Error fetching tree data');
            });
    },[]);
    }, []);
@@ -79,7 +107,7 @@
        // 在这里可以根据 nodeId 更新主内容区域
    };
    const handleSearch = () => {
            console.log('Search Input:', selectedOption);
        console.log('Search Input:', selectedOption);
    };
@@ -114,12 +142,12 @@
        >
            <CardContent>
                <SavedQueriesList icon={<BookmarkIcon />} />
                <FilterLiveSearch source="condition"  />
                <FilterLiveSearch source="condition" />
                <RichTreeView
                    defaultExpandedItems={['grid', 'pickers']}
                    expansionTrigger="iconContainer"
                    items={ treeData }
                    slots={ CustomTreeItem }
                    items={treeData}
                    slots={CustomTreeItem}
                    onItemClick={handleNodeSelect} // 监听节点点击事件
                />
rsf-admin/src/page/basicInfo/warehouse/WarehouseCreate.jsx
@@ -88,6 +88,7 @@
                                    <TextInput
                                        label="table.field.warehouse.name"
                                        source="name"
                                        required
                                        parse={v => v}
                                        autoFocus
                                    />
@@ -103,6 +104,7 @@
                                    <TextInput
                                        label="table.field.warehouse.factory"
                                        source="factory"
                                        required
                                        parse={v => v}
                                    />
                                </Grid>
@@ -110,6 +112,7 @@
                                    <TextInput
                                        label="table.field.warehouse.address"
                                        source="address"
                                        required
                                        parse={v => v}
                                    />
                                </Grid>