From bfc43ca0e4683c1c0322a6cad5d5be2bc07decc3 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 24 七月 2025 15:00:44 +0800 Subject: [PATCH] 新增调拔单功能 盘点功能优化 --- rsf-admin/src/page/orders/outStock/OutStockPublic.jsx | 178 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 111 insertions(+), 67 deletions(-) diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx index 3a9f70b..0dc8ff5 100644 --- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx +++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx @@ -37,6 +37,7 @@ Form, useRefresh, useRedirect, + useRecordSelection, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE, DEFAULT_TYPE } from '@/config/setting'; import { styled } from '@mui/material/styles'; @@ -47,7 +48,6 @@ import ConfirmButton from '../../components/ConfirmButton'; import { Delete, Edit, Add } from '@mui/icons-material'; import OutStockSiteDialog from "./OutStockSiteDialog"; -import { color } from "framer-motion"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -58,22 +58,57 @@ }, '& .column-maktx': { width: 200 - } + }, + + mt: '60px' + // '& .RaBulkActionsToolbar-toolbar': { + // display: 'none' + // } + })); const OutStockPublic = (props) => { - const { record, open, setOpen } = props; + const { record, open, setOpen, setManualDialog } = props; const notify = useNotify(); const gridRef = useGridApiRef(); - const [rows, setRows] = useState({}); + const [rows, setRows] = useState([]); + const [fetchRows, setFetchRows] = useState([]); const translate = useTranslate(); + const [rowSelectedIds, setRowSelectedIds] = useState([]); + const [selectedMatnr, setSelectedMatnr] = useState([]); const [selectedIds, setSelectedIds] = useState([]); - const [formData, setFormData] = useState({ - orderId: record?.id, - waveId: DEFAULT_TYPE - }); + const [formData, setFormData] = useState({ orderId: record?.id, waveId: DEFAULT_TYPE }); const [dialog, setDialog] = useState(false); const [selectedValue, setSelectedValue] = useState({}); + + useEffect(() => { + if (selectedMatnr.length < 1) { + setRows(fetchRows) + } else { + const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode)); + setRows(mas) + } + }, [selectedMatnr]) + + + const ComfirmButton = () => { + const { data } = useListContext(); + const [selectedIds, selectionModifiers] = useRecordSelection(); + + const handleRowClick = () => { + console.log(selectedIds); + + const ids = data.filter(item => selectedIds.includes(item.id)).map(item => item.id); + setRowSelectedIds(ids); + const mas = data.filter(item => selectedIds.includes(item.id)).map(item => item.matnrCode); + //璁剧疆搴撲綅淇℃伅绛涢�夋潯浠� + setSelectedMatnr(mas); + } + + return ( + <Button label="toolbar.confirm" size="medium" onClick={handleRowClick} /> + ) + }; const handleClickOpen = () => { setDialog(true); @@ -82,20 +117,28 @@ const handleClose = (value) => { setDialog(false); setSelectedValue(value); - const newRows = rows.map(item => { - return { - ...item, - siteNo: value?.site - } - }) - setRows(newRows); + if (selectedIds.length == 0) { + const newRows = rows.map(item => { + return { + ...item, + siteNo: value?.site + } + }) + setRows(newRows); + } else { + const newRows = rows.map(item => { + return selectedIds.includes(item?.id) ? { + ...item, + siteNo: value?.site + } : item + }) + setRows(newRows); + } }; useEffect(() => { - if (open) { - getWaveRule() - } - }, [open, formData]) + getWaveRule() + }, [open]) const getWaveRule = async () => { if (formData.waveId == null && formData.waveId == undefined) { @@ -103,7 +146,8 @@ } const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData }); if (code === 200) { - setRows(data) + // setRows(data) + setFetchRows(data) } else { notify(msg); } @@ -149,22 +193,25 @@ }} title={"menu.outStockItem"} empty={false} - filter={{ asnId: record?.id, deleted: 0 }} + filter={{ orderId: record?.id, deleted: 0 }} sort={{ field: "create_time", order: "desc" }} actions={false} + pagination={false} perPage={DEFAULT_ITEM_PAGE_SIZE} > <LinearProgress sx={{ height: "2px", position: 'absolute', top: 0, left: 0, right: 0, }} /> <StyledDatagrid + storeKey={"outStockPublic"} preferenceKey='outStockItem' - bulkActionButtons={false} - rowClick={false} - omit={['id', 'splrName', 'qty', 'poCode', 'workQty']} + bulkActionButtons={<> + <ComfirmButton /> + </>} + omit={['id', 'splrName', 'qty', 'poCode',]} > <NumberField source="id" /> - <TextField source="asnCode" label="table.field.outStockItem.asnCode" /> + <TextField source="asnCode" label="table.field.outStockItem.orderCode" /> <TextField source="poCode" label="table.field.outStockItem.poCode" /> <TextField source="matnrCode" label="table.field.outStockItem.matnrCode" /> <TextField source="maktx" label="table.field.outStockItem.maktx" /> @@ -178,13 +225,14 @@ </Card> </Grid> <Grid item xl={6.3} gap={2}> - <Card> - <Box sx={{ height: 500, width: '100%' }}> + <Card sx={{ minHeight: 1050, height: 'calc(100% - 10px)', width: '100%' }}> + <Box> <PreviewTable rows={rows} gridRef={gridRef} setRows={setRows} record={record} + formData={formData} selectedIds={selectedIds} setDialog={setDialog} setSelectedIds={setSelectedIds} @@ -209,11 +257,17 @@ ); } -const PreviewTable = ({ rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog }) => { +const PreviewTable = ({ rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog, formData }) => { gridRef.current = useGridApiRef(); const translate = useTranslate(); - const columns = [ + useEffect(() => { + if (selectedIds.length > 0) { + console.log(selectedIds); + } + }, [selectedIds]) + + const baseColumns = [ // { field: 'id', headerName: 'ID', width: 40 }, { field: 'locCode', headerName: '搴撲綅', width: 110 }, { field: 'barcode', headerName: '瀹瑰櫒', width: 120 }, @@ -240,20 +294,23 @@ <OutStockSite {...params} /> ), }, - { - field: 'actions', - type: 'actions', - headerName: '鎿嶄綔', - with: 120, - getActions: (params) => [ - <GridActionsCellItem - icon={<Delete />} - label="Delete" - onClick={() => handleDelete(params.row, rows, setRows)} - />, - ] - }, ] + + 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]; /** * 鍒犻櫎浜嬩欢 @@ -270,15 +327,12 @@ const { value } = props; return ( value > 0 ? - <Box - sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }} - > + <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> + : + <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <span style={{ color: 'red' }}>{translate('common.edit.title.insuffInventory')}</span> </Box> ); }); @@ -289,9 +343,7 @@ return null; } return ( - <Box - sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }} - > + <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> <span>{value}</span> </Box> ); @@ -301,9 +353,8 @@ const selectSiteNo = () => { setDialog(true) } - return ( - selectedIds.length > 0 ? <Box sx={{ + <Box sx={{ p: 1, display: 'flex', justifyContent: 'flex-end', @@ -315,7 +366,7 @@ label="toolbar.modiftySite" size="medium" sx={{ mr: 1 }} /> - </Box> : <></> + </Box> ); } @@ -371,27 +422,21 @@ return ( <DataGrid + storeKey={"locItemPreview"} rows={rows} columns={columns} slots={{ toolbar: CustomToolBar }} apiRef={gridRef} - initialState={{ - pagination: { - paginationModel: { - pageSize: 15, - }, - }, - }} checkboxSelection disableRowSelectionOnClick - pageSizeOptions={[15, 25, 35, 45]} + hideFooterPagination={true} // 闅愯棌鍒嗛〉鎺т欢 + hideFooter={false} onRowSelectionModelChange={(ids) => { setSelectedIds(ids) }} /> ) } - //鎻愪氦鎸夐挳 @@ -411,11 +456,10 @@ } return ( <ConfirmButton - label="toolbar.confirm" + label="toolbar.allComfirm" variant="contained" size="medium" onConfirm={submit} - startIcon={<ConfirmationNumberOutlinedIcon />} /> ) } -- Gitblit v1.9.1