chen.lin
3 天以前 4c66319211f9f7e496dfc32718dbd7aefed4ca88
rsf-admin/src/page/orders/check/MatnrInfoModal.jsx
@@ -9,22 +9,18 @@
    TextField,
    Box,
    Button,
    Paper,
    styled
} from '@mui/material';
import { EDIT_MODE, DEFAULT_START_PAGE, DEFAULT_PAGE_SIZE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
import { DEFAULT_START_PAGE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import DialogCloseButton from "../../components/DialogCloseButton";
import { useTranslate, useNotify, useRefresh } from 'react-admin';
import { useTranslate, useNotify } from 'react-admin';
import request from '@/utils/request';
import { DataGrid } from '@mui/x-data-grid';
import SaveIcon from '@mui/icons-material/Save';
import TreeSelectInput from "@/page/components/TreeSelectInput";
const MatnrInfoModal = (props) => {
    const { open, setOpen, data, setData } = props;
    const translate = useTranslate();
    const notify = useNotify();
    const refresh = useRefresh();
    const handleClose = (event, reason) => {
        if (reason !== "backdropClick") {
@@ -41,65 +37,74 @@
    const [isLoading, setIsLoading] = useState(false);
    const handleChange = (e) => {
        const { name, value } = e.target;
        setFormData(() => ({
            [name]: value
        }));
        setFormData(prev => ({ ...prev, [name]: value }));
    };
    const reset = () => {
        setFormData({
            name: null,
            code: null,
            groupId: null
        })
        setFormData({})
    }
    // 添加物料:从总库存选,多选同物料则数量叠加;下发任务时再选具体库位
    const handleSubmit = () => {
        const hasarr = data.map(el => +el.matnrId)
        const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id)));
        const value = selectedData.map((el => {
            const dynamicFields = dyFields.reduce((acc, item) => {
                acc[item.fields] = el['extendFields']?.[item.fields] || '';
        const hasarr = (data || []).map(el => +el.matnrId);
        const selectedLocItems = selectedRows
            .map(id => tableData.find(row => row.id === id))
            .filter(Boolean)
            .filter(row => !hasarr.includes(+row.matnrId));
        const byMatnr = {};
        selectedLocItems.forEach(el => {
            const k = el.matnrId;
            if (!byMatnr[k]) {
                const dynamicFields = (dyFields || []).reduce((acc, item) => {
                    acc[item.fields] = el.extendFields?.[item.fields] || '';
                return acc;
            }, {});
            return {
                matnrId: el.id,
                maktx: el.name,
                matnrCode: el.code,
                stockUnit: el.stockUnit || '',
                purUnit: el.purchaseUnit || '',
                byMatnr[k] = {
                    matnrId: el.matnrId,
                    maktx: el.maktx,
                    matnrCode: el.matnrCode,
                    anfme: 0,
                    stockUnit: el.unit || el.stockUnit || '',
                    purUnit: '',
                    splrBatch: el.splrBatch || '',
                    splrCode: el.splrCode ?? '',
                    splrName: el.splrName ?? '',
                ...dynamicFields
                };
            }
        }))
        setData([...data, ...value]);
            byMatnr[k].anfme = (byMatnr[k].anfme || 0) + (el.anfme || 0);
        });
        const value = Object.values(byMatnr);
        setData(prev => [...(prev || []), ...value]);
        setOpen(false);
        reset();
    };
    const getData = async () => {
        setIsLoading(true)
        const res = await request.post(`/matnr/page`, {
    const getData = async (pageNo) => {
        setIsLoading(true);
        const currentPage = pageNo !== undefined ? pageNo : page?.page;
        const res = await request.post(`/locItem/useO/page`, {
            ...formData,
            current: page?.page,
            pageSize: page?.pageSize,
            current: currentPage,
            pageSize: page?.pageSize ?? DEFAULT_PAGE_SIZE,
            orderBy: "create_time desc"
        });
        if (res?.data?.code === 200) {
            setTableData(res.data.data.records);
            setRowCount(res.data?.data?.total);
            setTableData(res.data.data.records || []);
            setRowCount(res.data.data?.total ?? 0);
        } else {
            notify(res.data.msg);
        }
        setIsLoading(false)
        setIsLoading(false);
    };
    useEffect(() => {
        getData();
        if (open) getData();
    }, [open, page]);
    const handleSearch = () => {
        getData()
        setPage(p => ({ ...p, page: 1 }));
        getData(1);
    };
    return (
@@ -125,32 +130,31 @@
            <DialogContent sx={{ mt: 2 }}>
                <Box component="form" onSubmit={handleSubmit} sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
                    <Grid container spacing={2}>
                        <Grid item md={4}>
                        <Grid item md={2}>
                            <TextField
                                label={translate('table.field.matnr.name')}
                                name="name"
                                value={formData.name}
                                label={translate('table.field.locItem.locCode')}
                                name="locCode"
                                value={formData.locCode ?? ''}
                                onChange={handleChange}
                                size="small"
                            />
                        </Grid>
                        <Grid item md={4}>
                        <Grid item md={2}>
                            <TextField
                                label={translate('table.field.matnr.code')}
                                name="code"
                                value={formData.code}
                                label={translate('table.field.locItem.maktx')}
                                name="maktx"
                                value={formData.maktx ?? ''}
                                onChange={handleChange}
                                size="small"
                            />
                        </Grid>
                        <Grid item md={4}>
                            <TreeSelectInput
                                label="table.field.matnr.groupId"
                                value={formData.groupId}
                                resource={'matnrGroup'}
                                source="groupId"
                                name="groupId"
                        <Grid item md={2}>
                            <TextField
                                label={translate('table.field.locItem.matnrCode')}
                                name="matnrCode"
                                value={formData.matnrCode ?? ''}
                                onChange={handleChange}
                                size="small"
                            />
                        </Grid>
                    </Grid>
@@ -163,7 +167,6 @@
                <Box sx={{ mt: 2, height: 400, width: '100%' }}>
                    <AsnWareModalTable
                        tableData={tableData}
                        setTableData={setTableData}
                        dyFields={dyFields}
                        setDyFields={setDyFields}
                        page={page}
@@ -188,24 +191,17 @@
export default MatnrInfoModal;
const AsnWareModalTable = ({ tableData, page, isLoading, pageSize, setPage, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
const AsnWareModalTable = ({ tableData, page, isLoading, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
    const translate = useTranslate();
    const notify = useNotify();
    const [columns, setColumns] = useState([
        // { field: 'id', headerName: 'ID', width: 100 },
        { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 },
        { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 },
        { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
        { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 },
        { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 },
        { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 },
        { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 },
        { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 },
        { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
        { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 },
        { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 },
        { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
        { field: 'locCode', headerName: translate('table.field.locItem.locCode'), width: 100 },
        { field: 'matnrCode', headerName: translate('table.field.locItem.matnrCode'), width: 130 },
        { field: 'maktx', headerName: translate('table.field.locItem.maktx'), width: 250 },
        { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 },
        { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100, type: 'number' },
        { field: 'unit', headerName: translate('table.field.locItem.unit'), width: 80 },
    ])
@@ -246,6 +242,7 @@
                size="small"
                rows={tableData}
                columns={columns}
                getRowId={(row) => row.id}
                checkboxSelection
                onRowSelectionModelChange={handleSelectionChange}
                selectionModel={selectedRows}