|
import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText, TextField } from "@mui/material";
|
import React, { useState, useRef, useEffect, useMemo } from "react";
|
import QueryStatsIcon from '@mui/icons-material/QueryStats';
|
import request from '@/utils/request';
|
import { DataGrid, useGridApiContext, GridActionsCellItem, useGridApiRef } from '@mui/x-data-grid';
|
import {
|
List,
|
Button,
|
useTranslate,
|
useNotify,
|
useListContext,
|
NumberField,
|
ReferenceInput,
|
AutocompleteInput,
|
required,
|
Form,
|
useRefresh,
|
useRedirect,
|
TextInput,
|
} from 'react-admin';
|
|
const CheckPreviewTable = (props) => {
|
const { rows, gridRef, setRows, record, selectedIds, setSelectedIds, selectedMatnr, setDialog, formData } = props;
|
// const translate = useTranslate();
|
// const refresh = useRefresh();
|
// const notify = useNotify();
|
gridRef.current = useGridApiRef();
|
const translate = useTranslate();
|
|
useEffect(() => {
|
if (selectedIds.length > 0) {
|
console.log(selectedIds);
|
}
|
}, [selectedIds])
|
|
const baseColumns = [
|
{ field: 'locCode', headerName: '库位', width: 110 },
|
{ field: 'barcode', headerName: '容器', width: 120 },
|
{ field: 'matnrCode', headerName: '物料编码', width: 120 },
|
{ field: 'batch', headerName: '批次', width: 90 },
|
{ field: 'unit', headerName: '单位', width: 60 },
|
{
|
field: 'anfme', headerName: '库存数量', width: 110,
|
renderCell: (params) => (
|
<OutStockAnfme value={params.value} />
|
)
|
},
|
{
|
field: 'siteNo',
|
headerName: '出库口',
|
width: 90,
|
type: 'singleSelect',
|
editable: true,
|
renderCell: (params) => (
|
<OutStockSiteNo value={params.value} />
|
),
|
renderEditCell: (params) => (
|
<OutStockSite {...params} />
|
),
|
},
|
]
|
|
const optAction = {
|
field: 'actions',
|
type: 'actions',
|
headerName: translate('common.field.opt'),
|
with: 120,
|
getActions: (params) => [
|
<GridActionsCellItem
|
icon={<Delete />}
|
label="Delete"
|
onClick={() => handleDelete(params.row, rows, setRows)}
|
/>,
|
]
|
}
|
|
const columns = (formData.waveId == 15 || formData.waveId == 16) ? [...baseColumns] : [...baseColumns, optAction];
|
|
/**
|
* 删除事件
|
* @param {*} params
|
*/
|
const handleDelete = (params, rows, setRows) => {
|
const outRows = rows.filter(row => {
|
return row.id !== params.id
|
})
|
setRows(outRows)
|
}
|
|
const OutStockAnfme = React.memo(function OutStockAnfme(props) {
|
const { value } = props;
|
return (
|
value > 0 ?
|
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
|
<span>{value}</span>
|
</Box>
|
:
|
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
|
<span style={{ color: 'red' }}>{translate('common.edit.title.insuffInventory')}</span>
|
</Box>
|
);
|
});
|
|
const OutStockSiteNo = React.memo(function OutStockSiteNo(props) {
|
const { value } = props;
|
if (!value) {
|
return null;
|
}
|
return (
|
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
|
<span>{value}</span>
|
</Box>
|
);
|
});
|
|
const CustomToolBar = () => {
|
const [queryParams, setQueryParams] = useState({ locCode: null, channel: null, matnrCode: selectedMatnr });
|
const notify = useNotify();
|
const queryClick = async () => {
|
console.log(queryParams);
|
console.log(rows);
|
const { data: { code, data, msg } } = await request.post('/check/locs/', queryParams);
|
if (code === 200) {
|
setRows(data)
|
} else {
|
notify(msg);
|
}
|
}
|
|
const handleChange = (e) => {
|
const { name, value } = e.target;
|
setQueryParams(() => ({
|
...queryParams,
|
[name]: value
|
}));
|
|
};
|
|
const selectSiteNo = () => {
|
setDialog(true)
|
}
|
return (
|
<>
|
<Box sx={{
|
p: 1,
|
display: 'flex',
|
justifyContent: 'space-between',
|
borderTop: '1px solid rgba(224, 224, 224, 1)'
|
}}>
|
<Box sx={{
|
'& > :not(style)': { m: 1, width: '25ch' },
|
display: 'flex',
|
}}>
|
<TextField
|
label={translate("table.field.stockTransfer.inputLoc")}
|
size="small"
|
name="locCode"
|
value={queryParams?.locCode}
|
onChange={handleChange}
|
sx={{ mr: 1 }} />
|
|
<TextField
|
label={translate("table.field.stockTransfer.inputChannel")}
|
size="small"
|
name="channel"
|
value={queryParams?.channel}
|
onChange={handleChange}
|
sx={{ mr: 1 }} />
|
|
<Box sx={{
|
'& > :not(style)': { m: 1, width: '11ch' },
|
}}>
|
<Button variant="contained"
|
size="medium"
|
startIcon={<QueryStatsIcon />}
|
label="toolbar.query"
|
onClick={queryClick} />
|
</Box>
|
</Box>
|
<Box sx={{
|
'& > :not(style)': { m: 1, width: '13ch' },
|
}}>
|
<Button
|
onClick={selectSiteNo}
|
variant="outlined"
|
label="toolbar.modiftySite"
|
size="medium"
|
sx={{ mr: 1 }} />
|
</Box>
|
</Box>
|
|
</>
|
);
|
}
|
|
|
|
const OutStockSite = (params) => {
|
const { id, field, siteNo, row: { staNos } } = params;
|
const apiRef = useGridApiContext();
|
const handleChange = async (event) => {
|
await apiRef.current.setEditCellValue(
|
{ id, field, value: event.target.value },
|
event,
|
);
|
apiRef.current.stopCellEditMode({ id, field });
|
};
|
|
const handleClose = (event, reason) => {
|
if (reason === 'backdropClick') {
|
apiRef.current.stopCellEditMode({ id, field });
|
}
|
};
|
|
return (
|
<Select
|
value={siteNo}
|
onChange={handleChange}
|
MenuProps={{
|
onClose: handleClose,
|
}}
|
sx={{
|
height: '100%',
|
'& .MuiSelect-select': {
|
display: 'flex',
|
alignItems: 'center',
|
pl: 1,
|
},
|
}}
|
autoFocus
|
fullWidth
|
open
|
>
|
{staNos.map((option) => {
|
return (
|
<MenuItem
|
key={option}
|
value={option.staNo}
|
>
|
<ListItemText sx={{ overflow: 'hidden' }} primary={option.staNo} />
|
</MenuItem>
|
);
|
})}
|
</Select >
|
)
|
}
|
|
return (
|
<Box sx={{ maxHeight: 780 }}>
|
<DataGrid
|
sx={{ maxHeight: 730 }}
|
storeKey={"locItemPreview"}
|
rows={rows}
|
columns={columns}
|
slots={{ toolbar: CustomToolBar }}
|
apiRef={gridRef}
|
checkboxSelection
|
disableRowSelectionOnClick
|
hideFooterPagination={true} // 隐藏分页控件
|
hideFooter={false}
|
onRowSelectionModelChange={(ids) => {
|
setSelectedIds(ids)
|
}}
|
/>
|
</Box>
|
|
)
|
}
|
|
export default CheckPreviewTable;
|