| | |
| | | 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") { |
| | |
| | | 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 ( |
| | |
| | | <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> |
| | |
| | | <Box sx={{ mt: 2, height: 400, width: '100%' }}> |
| | | <AsnWareModalTable |
| | | tableData={tableData} |
| | | setTableData={setTableData} |
| | | dyFields={dyFields} |
| | | setDyFields={setDyFields} |
| | | page={page} |
| | |
| | | |
| | | 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 }, |
| | | ]) |
| | | |
| | | |
| | |
| | | size="small" |
| | | rows={tableData} |
| | | columns={columns} |
| | | getRowId={(row) => row.id} |
| | | checkboxSelection |
| | | onRowSelectionModelChange={handleSelectionChange} |
| | | selectionModel={selectedRows} |