chen.lin
2 天以前 79edfec1f6e6789d3f6cc57db3cb0cfdffd64c32
rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
@@ -10,12 +10,17 @@
    Box,
    Button,
    Paper,
    styled
    styled,
    Select,
    MenuItem,
    FormControl,
    InputLabel
} from '@mui/material';
import DialogCloseButton from "../../components/DialogCloseButton";
import { EDIT_MODE, DEFAULT_START_PAGE, DEFAULT_PAGE_SIZE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
import { useTranslate, useNotify, useRefresh } from 'react-admin';
import request from '@/utils/request';
import { formatQuantity } from '@/utils/common';
import { DataGrid } from '@mui/x-data-grid';
import SaveIcon from '@mui/icons-material/Save';
import TreeSelectInput from "@/page/components/TreeSelectInput";
@@ -32,7 +37,7 @@
        }
    };
    const [formData, setFormData] = useState({});
    const [formData, setFormData] = useState({ locUseStatus: 'F' });
    const [tableData, setTableData] = useState([]);
    const [dyFields, setDyFields] = useState([]);
    const [selectedRows, setSelectedRows] = useState([]);
@@ -41,58 +46,65 @@
    const [isLoading, setIsLoading] = useState(false);
    const handleChange = (e) => {
        const { name, value } = e.target;
        setFormData(() => ({
        setFormData((prev) => ({
            ...prev,
            [name]: value
        }));
    };
    const reset = () => {
        setFormData({
            name: '',
            code: '',
            groupId: 0
            name: null,
            code: null,
            groupId: null,
            locUseStatus: 'F'
        })
    }
    const getRowId = (row) => (row.locUseStatus$ != null ? `${row.id}_${row.locUseStatus$}` : String(row.id));
    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 hasarr = data.map(el => +el.matnrId);
        const selectedData = selectedRows
            .map((id) => tableData.find((row) => getRowId(row) === id))
            .filter(Boolean)
            .filter((row) => !hasarr.includes(row.id));
        const deduped = [...new Map(selectedData.map((s) => [s.id, s])).values()];
        const value = deduped.map((el, i) => {
            const dynamicFields = dyFields.reduce((acc, item) => {
                acc[item.fields] = el['extendFields']?.[item.fields] || '';
                return acc;
            }, {});
            return {
                _rowKey: `new_${Date.now()}_${i}`,
                matnrId: el.id,
                maktx: el.name,
                matnrCode: el.code,
                stockUnit: el.stockUnit || '',
                purUnit: el.purchaseUnit || '',
                ...dynamicFields
            }
        }))
            };
        });
        setData([...data, ...value]);
        setOpen(false);
        reset();
    };
    const getData = async () => {
        setIsLoading(true)
        const res = await request.post(`/matnr/page`, {
        setIsLoading(true);
        const res = await request.post(`/outStock/matnr/page`, {
            ...formData,
            current: page?.page,
            pageSize: page?.pageSize,
            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);
            notify(res.data?.msg || '查询失败');
        }
        setIsLoading(false)
        setIsLoading(false);
    };
    useEffect(() => {
@@ -144,7 +156,7 @@
                                size="small"
                            />
                        </Grid>
                        <Grid item md={4}>
                        <Grid item md={3}>
                            <TreeSelectInput
                                label="table.field.matnr.groupId"
                                value={formData.groupId}
@@ -153,6 +165,24 @@
                                name="groupId"
                                onChange={handleChange}
                            />
                        </Grid>
                        <Grid item md={3}>
                            <FormControl size="small" fullWidth variant="filled">
                                <InputLabel>{translate('table.field.loc.useStatus')}</InputLabel>
                                <Select
                                    name="locUseStatus"
                                    value={formData.locUseStatus ?? ''}
                                    onChange={handleChange}
                                    label={translate('table.field.loc.useStatus')}
                                >
                                    <MenuItem value="">全部</MenuItem>
                                    {(JSON.parse(localStorage.getItem('sys_dicts')) || [])
                                        .filter((d) => d.dictTypeCode === 'sys_loc_use_stas')
                                        .map((d) => (
                                            <MenuItem key={d.value} value={d.value}>{d.label}</MenuItem>
                                        ))}
                                </Select>
                            </FormControl>
                        </Grid>
                    </Grid>
                </Box>
@@ -169,9 +199,11 @@
                        page={page}
                        rowCount={rowCount}
                        setPage={setPage}
                        isLoading={isLoading}
                        setDyFields={setDyFields}
                        selectedRows={selectedRows}
                        setSelectedRows={setSelectedRows}
                        getRowId={getRowId}
                    />
                </Box>
            </DialogContent>
@@ -188,12 +220,11 @@
export default MatnrInfoModal;
const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
const AsnWareModalTable = ({ tableData, setTableData, page, isLoading, pageSize, setPage, rowCount, selectedRows, setSelectedRows, dyFields, setDyFields, getRowId }) => {
    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 },
@@ -205,13 +236,15 @@
        { 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: 'stockQty', headerName: translate('table.field.matnr.stockQty') || '库存数量', width: 110, type: 'number', valueFormatter: (v) => formatQuantity(v) },
        { field: 'locUseStatus$', headerName: translate('table.field.loc.useStatus'), width: 120 },
        { field: 'locCodes$', headerName: translate('table.field.loc.locCode'), width: 180, flex: 1 },
        { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
    ])
    const handleSelectionChange = (ids) => {
        setSelectedRows(ids)
    };
    useEffect(() => {
@@ -244,6 +277,7 @@
        <div style={{ height: 400, width: '100%' }}>
            <DataGrid
                size="small"
                getRowId={getRowId}
                rows={tableData}
                columns={columns}
                checkboxSelection