| import React, { useState, useRef, useEffect, useMemo } from "react"; | 
| import { | 
|     CreateBase, | 
|     useTranslate, | 
|     TextInput, | 
|     NumberInput, | 
|     BooleanInput, | 
|     DateInput, | 
|     SaveButton, | 
|     SelectInput, | 
|     ReferenceInput, | 
|     ReferenceArrayInput, | 
|     AutocompleteInput, | 
|     Toolbar, | 
|     required, | 
|     useDataProvider, | 
|     useNotify, | 
|     Form, | 
|     useCreateController, | 
| } from 'react-admin'; | 
| import { | 
|     Dialog, | 
|     DialogActions, | 
|     DialogContent, | 
|     DialogTitle, | 
|     Stack, | 
|     Grid, | 
|     Box, | 
|     Tabs, | 
|     Tab, | 
| } from '@mui/material'; | 
| import PropTypes from 'prop-types'; | 
| import DialogCloseButton from "@/page/components/DialogCloseButton"; | 
| import StatusSelectInput from "@/page/components/StatusSelectInput"; | 
| import MemoInput from "@/page/components/MemoInput"; | 
| import TreeSelectInput from "@/page/components/TreeSelectInput"; | 
| import request from '@/utils/request'; | 
| function CustomTabPanel(props) { | 
|     const { children, value, index, ...other } = props; | 
|   | 
|     return ( | 
|         <div | 
|             role="tabpanel" | 
|             hidden={value !== index} | 
|             id={`simple-tabpanel-${index}`} | 
|             aria-labelledby={`simple-tab-${index}`} | 
|             {...other} | 
|         > | 
|             {value === index && <Box sx={{ p: 3 }}>{children}</Box>} | 
|         </div> | 
|     ); | 
| } | 
|   | 
| CustomTabPanel.propTypes = { | 
|     children: PropTypes.node, | 
|     index: PropTypes.number.isRequired, | 
|     value: PropTypes.number.isRequired, | 
| }; | 
|   | 
| function a11yProps(index) { | 
|     return { | 
|         id: `simple-tab-${index}`, | 
|         'aria-controls': `simple-tabpanel-${index}`, | 
|     }; | 
| } | 
| const MatnrCreate = (props) => { | 
|     const { open, setOpen } = props; | 
|   | 
|     const translate = useTranslate(); | 
|     const notify = useNotify(); | 
|     const [value, setValue] = React.useState(0); | 
|     const [dynamicFields, setDynamicFields] = useState([]); | 
|   | 
|     useEffect(() => { | 
|         getDynamicFields(); | 
|     }, []); | 
|     const getDynamicFields = async () => { | 
|         const { | 
|             data: { code, data, msg }, | 
|         } = await request.get("/fields/enable/list"); | 
|         if (code === 200) { | 
|             setDynamicFields(data || []) | 
|         } else { | 
|             notify(msg); | 
|         } | 
|     }; | 
|     const handleChange = (event, newValue) => { | 
|         setValue(newValue); | 
|     }; | 
|   | 
|     const handleClose = (event, reason) => { | 
|         if (reason !== "backdropClick") { | 
|             setOpen(false); | 
|         } | 
|     }; | 
|   | 
|     const handleSuccess = async (data) => { | 
|         setOpen(false); | 
|         notify('common.response.success'); | 
|     }; | 
|   | 
|     const handleError = async (error) => { | 
|         notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } }); | 
|     }; | 
|     // const validateForm = (values) => { | 
|     //     const errors = {}; | 
|     //     if (!values.name) errors.name = translate('form.matnr.name'); | 
|     //     if (!values.shipperId) errors.shipperId = translate('form.matnr.shipper'); | 
|     //     if (!values.groupId) errors.groupId = translate('form.matnr.groupId'); | 
|     //     if (!values.code) errors.code = translate('form.matnr.code'); | 
|   | 
|     //     return errors; | 
|     // }; | 
|   | 
|     return ( | 
|         <> | 
|             <CreateBase | 
|                 record={{}} | 
|                 transform={(data) => { | 
|                     return data; | 
|                 }} | 
|                 mutationOptions={{ onSuccess: handleSuccess, onError: handleError }} | 
|             > | 
|                 <Dialog | 
|                     open={open} | 
|                     onClose={handleClose} | 
|                     aria-labelledby="form-dialog-title" | 
|                     fullWidth | 
|                     disableRestoreFocus | 
|                     maxWidth="xl"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
|                 > | 
|                     <Form > | 
|                         <DialogTitle id="form-dialog-title" sx={{ | 
|                             position: 'sticky', | 
|                             top: 0, | 
|                             backgroundColor: 'background.paper', | 
|                             zIndex: 1000 | 
|                         }} | 
|                         > | 
|                             {translate('create.title')} | 
|                             <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> | 
|                                 <DialogCloseButton onClose={handleClose} /> | 
|                             </Box> | 
|                         </DialogTitle> | 
|                         <DialogContent sx={{ mt: 2 }}> | 
|                             <Tabs value={value} onChange={handleChange} aria-label="basic tabs example"> | 
|                                 <Tab label={translate('page.matnr.title.basic')} {...a11yProps(0)} /> | 
|                                 <Tab label={translate('page.matnr.title.control')} {...a11yProps(1)} /> | 
|                                 <Tab label={translate('page.matnr.title.batchRole')} {...a11yProps(2)} /> | 
|                             </Tabs> | 
|                             <CustomTabPanel value={value} index={0}> | 
|                                 <Grid container rowSpacing={2} columnSpacing={2}> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.name" | 
|                                                 validate={[required()]} | 
|                                                 source="name" | 
|                                                 parse={v => v} | 
|                                                 autoFocus | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.code" | 
|                                                 validate={[required()]} | 
|                                                 source="code" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <ReferenceInput source="shipperId" reference="companys" filter={{ type: 'shipper' }}> | 
|                                                 <AutocompleteInput | 
|                                                     label="table.field.matnr.shipperId" | 
|                                                     optionText="name" | 
|                                                     filterToQuery={(val) => ({ name: val })} | 
|                                                 /> | 
|                                             </ReferenceInput> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TreeSelectInput | 
|                                                 label="table.field.matnr.groupId" | 
|                                                 resource={'matnrGroup'} | 
|                                                 source="groupId" | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.platCode" | 
|                                                 source="platCode" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.spec" | 
|                                                 source="spec" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.model" | 
|                                                 source="model" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.weight" | 
|                                                 source="weight" | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.color" | 
|                                                 source="color" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.size" | 
|                                                 source="size" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.describle" | 
|                                                 source="describle" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.nromNum" | 
|                                                 source="nromNum" | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.unit" | 
|                                                 source="unit" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.purUnit" | 
|                                                 source="purchaseUnit" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <TextInput | 
|                                                 label="table.field.matnr.stockUnit" | 
|                                                 source="stockUnit" | 
|                                                 parse={v => v} | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <SelectInput | 
|                                                 label="table.field.matnr.stockLevel" | 
|                                                 source="stockLevel" | 
|                                                 choices={[ | 
|                                                     { id: 0, name: ' A' }, | 
|                                                     { id: 1, name: ' B' }, | 
|                                                     { id: 2, name: 'C' }, | 
|                                                 ]} | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <SelectInput | 
|                                                 label="table.field.matnr.isLabelMange" | 
|                                                 source="flagLabelMange" | 
|                                                 choices={[ | 
|                                                     { id: 0, name: ' 否' }, | 
|                                                     { id: 1, name: ' 是' }, | 
|                                                 ]} | 
|                                             /> | 
|                                         </Grid> | 
|   | 
|                                         {dynamicFields.map((item) => { | 
|                                             return ( | 
|                                                 <Grid key={item.id} item xs={6} display="flex" gap={1}> | 
|                                                     <TextInput | 
|                                                         label={item.fieldsAlise} | 
|                                                         source={item.fields} | 
|                                                         validate={item.unique === 1 ? required() : false} | 
|                                                     /> | 
|                                                 </Grid> | 
|                                             ) | 
|                                         })} | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <StatusSelectInput /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Stack direction="column" spacing={1} width={'100%'}> | 
|                                             <MemoInput /> | 
|                                         </Stack> | 
|                                     </Grid> | 
|                                 </Grid> | 
|                             </CustomTabPanel> | 
|                             <CustomTabPanel value={value} index={1}> | 
|                                 <Grid container rowSpacing={2} columnSpacing={2}> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.safeQty" | 
|                                                 source="safeQty" | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.minQty" | 
|                                                 source="minQty" | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.maxQty" | 
|                                                 source="maxQty" | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.stagn" | 
|                                                 source="stagn" | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.valid" | 
|                                                 source="valid" | 
|                                             /> | 
|                                         </Grid> | 
|                                         <Grid item xs={6} display="flex" gap={1}> | 
|                                             <NumberInput | 
|                                                 label="table.field.matnr.validWarn" | 
|                                                 source="validWarn" | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                     <Grid item xs={12} display="flex" gap={1}> | 
|                                         <Grid item xs={4} display="flex" gap={1}> | 
|                                             <SelectInput | 
|                                                 label="table.field.matnr.flagCheck" | 
|                                                 source="flagCheck" | 
|                                                 choices={[ | 
|                                                     { id: 0, name: ' 否' }, | 
|                                                     { id: 1, name: ' 是' }, | 
|                                                 ]} | 
|                                             /> | 
|                                         </Grid> | 
|                                     </Grid> | 
|                                 </Grid> | 
|                             </CustomTabPanel> | 
|                             <CustomTabPanel value={value} index={2}> | 
|                                 <Grid container rowSpacing={2} columnSpacing={2}> | 
|                                     <Grid item xs={6} display="flex" gap={1}> | 
|                                         <ReferenceInput | 
|                                             source="rglar_id" | 
|                                             reference="serialRule" | 
|                                         > | 
|                                             <AutocompleteInput | 
|                                                 label="table.field.matnr.rglarId" | 
|                                                 optionText="name" | 
|                                                 filterToQuery={(val) => ({ name: val })} | 
|                                             /> | 
|                                         </ReferenceInput> | 
|                                     </Grid> | 
|                                 </Grid> | 
|                             </CustomTabPanel> | 
|                         </DialogContent> | 
|                         <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> | 
|                             <Toolbar sx={{ width: '100%', justifyContent: 'flex-end' }}  > | 
|                                 <SaveButton /> | 
|                             </Toolbar> | 
|                         </DialogActions> | 
|                     </Form> | 
|                 </Dialog> | 
|             </CreateBase> | 
|         </> | 
|     ) | 
| } | 
|   | 
| export default MatnrCreate; |