| | |
| | | import { Dialog, DialogActions, DialogContent, DialogTitle, Box, LinearProgress } from "@mui/material"; |
| | | import React, { useState, useRef, useEffect, useMemo } from "react"; |
| | | import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; |
| | | import { |
| | | List, |
| | | DatagridConfigurable, |
| | | SearchInput, |
| | | TopToolbar, |
| | | Toolbar, |
| | | Button, |
| | | SelectColumnsButton, |
| | | EditButton, |
| | |
| | | ExportButton, |
| | | BulkDeleteButton, |
| | | WrapperField, |
| | | Toolbar, |
| | | useRecordContext, |
| | | useTranslate, |
| | | useNotify, |
| | |
| | | useRefresh, |
| | | useGetList, |
| | | } from 'react-admin'; |
| | | import DialogCloseButton from "../../components/DialogCloseButton"; |
| | | import { styled } from '@mui/material/styles'; |
| | | |
| | | import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; |
| | | import { Grid, margin, Stack, width } from "@mui/system"; |
| | | import request from '@/utils/request'; |
| | | import SaveIcon from '@mui/icons-material/Save'; |
| | | import debounce from "lodash/debounce"; |
| | | import DialogCloseButton from "../../components/DialogCloseButton"; |
| | | import EditableTextField from "../../components/EditableTextField"; |
| | | import CheckCircleIcon from '@mui/icons-material/CheckCircle'; |
| | | import { Grid, margin, Stack, width } from "@mui/system"; |
| | | import SaveIcon from '@mui/icons-material/Save'; |
| | | import OutOrderPreview from "./OutOrderPreview"; |
| | | import { styled } from '@mui/material/styles'; |
| | | import request from '@/utils/request'; |
| | | |
| | | |
| | | const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ |
| | | '& .css-1vooibu-MuiSvgIcon-root': { |
| | |
| | | ] |
| | | |
| | | const OutOrderModal = (props) => { |
| | | const { open, setOpen, record } = props; |
| | | const translate = useTranslate(); |
| | | const [params, setParams] = useState({}); |
| | | const { open, setOpen, preview, setPreview, record, initialFormData, saveFormData } = props; |
| | | const [drawerVal, setDrawerVal] = useState(false); |
| | | const [params, setParams] = useState(() => initialFormData?.params ?? {}); |
| | | const [select, setSelect] = useState([]); |
| | | const translate = useTranslate(); |
| | | const refresh = useRefresh(); |
| | | |
| | | useEffect(() => { |
| | | if (open && initialFormData?.params) { |
| | | setParams(initialFormData.params); |
| | | } |
| | | }, [open, initialFormData?.params]); |
| | | |
| | | const handleClose = (event, reason) => { |
| | | if (reason !== "backdropClick") { |
| | | setOpen(false); |
| | | } |
| | | }; |
| | | |
| | | useEffect(() => { |
| | | if (open && params && Object.keys(params).length > 0 && saveFormData) { |
| | | saveFormData({ params, formValues: params }); |
| | | } |
| | | }, [open, params, saveFormData]); |
| | | |
| | | const handleFormValuesChange = useCallback((formValues) => { |
| | | if (saveFormData) { |
| | | saveFormData({ params: formValues, formValues }); |
| | | } |
| | | }, [saveFormData]); |
| | | |
| | | const CustomFilter = () => { |
| | | const { filterValues, setFilters, refetch } = useListContext('deliveryItem'); |
| | | const [formValues, setFormValues] = useState(filterValues); |
| | | const { filterValues } = useListContext(); |
| | | const initialFormValues = initialFormData?.formValues ?? initialFormData?.params ?? params ?? filterValues; |
| | | const [formValues, setFormValues] = useState(initialFormValues || {}); |
| | | const initializedRef = useRef(false); |
| | | useEffect(() => { |
| | | if (open && (initialFormData?.formValues || initialFormData?.params) && !initializedRef.current) { |
| | | const init = initialFormData?.formValues ?? initialFormData?.params ?? {}; |
| | | setFormValues(init); |
| | | initializedRef.current = true; |
| | | } |
| | | if (!open) initializedRef.current = false; |
| | | }, [open, initialFormData?.formValues, initialFormData?.params]); |
| | | |
| | | const handleChange = (event) => { |
| | | if (event.target == undefined || event.target == null) { return } |
| | | setFormValues(formValues => ({ |
| | | const next = { |
| | | ...formValues, |
| | | [event.target.name]: event.target.value, |
| | | })); |
| | | }; |
| | | setFormValues(next); |
| | | handleFormValuesChange(next); |
| | | }; |
| | | |
| | | const handleSubmit = (event) => { |
| | | setParams(formValues) |
| | | setParams(formValues); |
| | | if (saveFormData) saveFormData({ params: formValues, formValues }); |
| | | }; |
| | | |
| | | return ( |
| | |
| | | source="condition" |
| | | label="common.action.search" |
| | | resettable |
| | | defaultValue={params?.condition} |
| | | value={formValues?.condition ?? ''} |
| | | onChange={handleChange} /> |
| | | </Stack> |
| | | <Stack> |
| | | <TextInput |
| | | source="deliveryCode" |
| | | label="table.field.deliveryItem.deliveryCode" |
| | | defaultValue={params?.deliveryCode} |
| | | value={formValues?.deliveryCode ?? ''} |
| | | onChange={handleChange} |
| | | resettable |
| | | /> |
| | |
| | | <TextInput |
| | | source="maktx" |
| | | label="table.field.deliveryItem.matnrName" |
| | | defaultValue={params?.maktx} |
| | | value={formValues?.maktx ?? ''} |
| | | onChange={handleChange} |
| | | resettable |
| | | /> |
| | |
| | | <TextInput |
| | | source="matnrCode" |
| | | label="table.field.deliveryItem.matnrCode" |
| | | defaultValue={params?.matnrCode} |
| | | value={formValues?.matnrCode ?? ''} |
| | | resettable |
| | | onChange={handleChange} /> |
| | | </Stack> |
| | |
| | | <TextInput |
| | | source="splrName" |
| | | label="table.field.deliveryItem.splrName" |
| | | defaultValue={params?.splrName} |
| | | value={formValues?.splrName ?? ''} |
| | | resettable |
| | | onChange={handleChange} /> |
| | | </Stack> |
| | |
| | | </DialogTitle> |
| | | <Grid container rowSpacing={2} columnSpacing={2}> |
| | | <DialogContent> |
| | | <Grid item sx={24}> |
| | | <Grid item> |
| | | <List |
| | | resource="/deliveryItem/filters" |
| | | sx={{ |
| | |
| | | /> |
| | | <StyledDatagrid |
| | | preferenceKey='deliveryItem' |
| | | bulkActionButtons={<AddOutStockButton setOpen={setOpen} />} |
| | | bulkActionButtons={<AddOutStockButton setOpen={setOpen} setPreview={setPreview} setSelect={setSelect} />} |
| | | rowClick={(id, resource, record) => false} |
| | | expand={false} |
| | | expandSingle={true} |
| | | omit={['id', 'createTime', 'createBy', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy', 'createTime']} |
| | | omit={['id', 'createTime', 'createBy', 'memo', 'startTime', 'endTime', 'updateBy', 'createTime']} |
| | | > |
| | | <NumberField source="id" /> |
| | | <TextField source="deliveryCode" label="table.field.deliveryItem.deliveryCode" /> |
| | |
| | | <TextField source="maktx" label="table.field.deliveryItem.matnrName" /> |
| | | <TextField source="unit" label="table.field.deliveryItem.unit" /> |
| | | <NumberField source="anfme" label="table.field.deliveryItem.anfme" /> |
| | | <NumberField source="workQty" label="table.field.outStockItem.workQty" /> |
| | | <TextField source="splrName" label="table.field.deliveryItem.splrName" /> |
| | | <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" /> |
| | | <TextField source="updateBy$" label="common.field.updateBy" /> |
| | |
| | | </Grid> |
| | | </DialogContent> |
| | | </Grid> |
| | | <Grid> |
| | | <OutOrderPreview open={preview} setOpen={setPreview} selectedIds={select} setCloseParent={setOpen} /> |
| | | </Grid> |
| | | </Dialog > |
| | | ) |
| | | } |
| | |
| | | export default OutOrderModal; |
| | | |
| | | const AddOutStockButton = (props) => { |
| | | const { setOpen } = props; |
| | | const { setOpen, setPreview, setSelect } = props; |
| | | const { selectedIds, onUnselectItems } = useListContext(); |
| | | const notify = useNotify(); |
| | | const refresh = useRefresh(); |
| | | const confirm = async (event) => { |
| | | const res = await request.post(`/outStock/generate/orders`, { ids: selectedIds }); |
| | | if (res?.data?.code === 200) { |
| | | notify(res.data.msg); |
| | | } else { |
| | | notify(res.data.msg); |
| | | } |
| | | refresh(); |
| | | setPreview(true) |
| | | setSelect(selectedIds); |
| | | onUnselectItems(); |
| | | setOpen(false); |
| | | // refresh(); |
| | | } |
| | | |
| | | return ( |