|  |  | 
 |  |  |                 err: "error", | 
 |  |  |                 result: "result", | 
 |  |  |                 userId: "user", | 
 |  |  |                 detail: "detail" | 
 |  |  |             }, | 
 |  |  |             customer: { | 
 |  |  |                 uuid: "uuid", | 
 
 |  |  | 
 |  |  |                 err: "错误信息", | 
 |  |  |                 result: "result", | 
 |  |  |                 userId: "操作用户", | 
 |  |  |                 detail: "详细信息" | 
 |  |  |             }, | 
 |  |  |             customer: { | 
 |  |  |                 uuid: "编号", | 
 
 |  |  | 
 |  |  | import outStock from './orders/outStock'; | 
 |  |  | import deviceBind from './deviceBind'; | 
 |  |  | import wave from './orders/wave'; | 
 |  |  | import locItem from './locItem' | 
 |  |  | import locItem from './locItem'; | 
 |  |  | import basStation from './basicInfo/basStation'; | 
 |  |  | import warehouseStock from './statistics/stockManage'; | 
 |  |  | import basContainer from './basicInfo/basContainer'; | 
 
 |  |  | 
 |  |  |  | 
 |  |  | const filters = [ | 
 |  |  |     <SearchInput source="condition" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.after' source="timeStart" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.before' source="timeEnd" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.after' source="timeStart"  />, | 
 |  |  |     <DateInput label='common.time.before' source="timeEnd"  />, | 
 |  |  |  | 
 |  |  |     <NumberInput source="containerType" label="table.field.basContainer.containerType" />, | 
 |  |  |     <TextInput source="codeType" label="table.field.basContainer.codeType" />, | 
 |  |  | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false}                     | 
 |  |  |                     expandSingle={true} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo','statusBool']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <NumberField source="containerType$" label="table.field.basContainer.containerType" /> | 
 
 |  |  | 
 |  |  |                         </Stack> | 
 |  |  |  | 
 |  |  |                     </Grid> | 
 |  |  |                     <Grid item xs={12} md={4}> | 
 |  |  |                     {/* <Grid item xs={12} md={4}> | 
 |  |  |                         <Typography variant="h6" gutterBottom> | 
 |  |  |                             {translate('common.edit.title.common')} | 
 |  |  |                         </Typography> | 
 |  |  |                         <StatusSelectInput /> | 
 |  |  |                         <Box mt="2em" /> | 
 |  |  |                         <MemoInput /> | 
 |  |  |                     </Grid> | 
 |  |  |                     </Grid> */} | 
 |  |  |                 </Grid> | 
 |  |  |             </SimpleForm> | 
 |  |  |         </Edit > | 
 
 |  |  | 
 |  |  |  | 
 |  |  | const filters = [ | 
 |  |  |     <SearchInput source="condition" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.after' source="timeStart" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.before' source="timeEnd" alwaysOn />, | 
 |  |  |     <DateInput label='common.time.after' source="timeStart"  />, | 
 |  |  |     <DateInput label='common.time.before' source="timeEnd"  />, | 
 |  |  |  | 
 |  |  |     <TextInput source="stationName" label="table.field.basStation.stationName" />, | 
 |  |  |     <TextInput source="stationName" label="table.field.basStation.stationName" alwaysOn/>, | 
 |  |  |     <NumberInput source="inAble" label="table.field.basStation.inAble" />, | 
 |  |  |     <NumberInput source="outAble" label="table.field.basStation.outAble" />, | 
 |  |  |     <TextInput source="useStatus" label="table.field.basStation.useStatus" />, | 
 |  |  | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false}                     | 
 |  |  |                     expandSingle={true} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo','updateBy','autoTransfer']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <TextField source="stationName" label="table.field.basStation.stationName" /> | 
 |  |  |                     <TextField source="useStatus$" label="table.field.basStation.useStatus" /> | 
 |  |  |                     <TextField source="barcode" label="table.field.basStation.barcode" />    | 
 |  |  |                     <FunctionField | 
 |  |  |                         source="inAble" | 
 |  |  |                         label="table.field.basStation.inAble" | 
 |  |  | 
 |  |  |                         label="table.field.basStation.outAble" | 
 |  |  |                         render={record => record.inAble === 1 ? '是' : '否'} | 
 |  |  |                     /> | 
 |  |  |                     <TextField source="useStatus$" label="table.field.basStation.useStatus" /> | 
 |  |  |                      | 
 |  |  |                     <NumberField source="area$" label="table.field.basStation.area" />                     | 
 |  |  |                     <FunctionField | 
 |  |  |                         source="isCrossZone" | 
 |  |  | 
 |  |  |                         source="isWcs" | 
 |  |  |                         label="table.field.basStation.isWcs" | 
 |  |  |                         render={record => record.inAble === 1 ? '是' : '否'} | 
 |  |  |                     />                     | 
 |  |  |                     <NumberField source="containerType$" label="table.field.basStation.containerType" /> | 
 |  |  |                     />                    | 
 |  |  |                      | 
 |  |  |                     <WrapperField cellClassName="containerType" label="table.field.basStation.containerType"> | 
 |  |  |                         <ContainerTypesField | 
 |  |  |                             open={areaFieldDialog2} | 
 |  |  |                             setOpen={setAreaFieldDialog2}                 | 
 |  |  |                         />                         | 
 |  |  |                     </WrapperField> | 
 |  |  |                     <TextField source="barcode" label="table.field.basStation.barcode" />                     | 
 |  |  |                                       | 
 |  |  |                     <FunctionField | 
 |  |  |                         source="autoTransfer" | 
 |  |  |                         label="table.field.basStation.autoTransfer" | 
 
 |  |  | 
 |  |  |     '& .opt': { | 
 |  |  |         width: 200 | 
 |  |  |     }, | 
 |  |  |      | 
 |  |  |     '& .MuiTableCell-root': { | 
 |  |  |         whiteSpace: 'nowrap', | 
 |  |  |         overflow: 'visible', | 
 |  |  |         textOverflow: 'unset' | 
 |  |  |     }, | 
 |  |  | })); | 
 |  |  |  | 
 |  |  | const filters = [ | 
 |  |  | 
 |  |  |                     preferenceKey='companys' | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo','createBy$','updateBy$','statusBool','province','city','address']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <TextField source="name" label="table.field.companys.name" /> | 
 |  |  |                     <TextField source="code" label="table.field.companys.code" /> | 
 |  |  |                     <TextField source="name" label="table.field.companys.name" /> | 
 |  |  |                      | 
 |  |  |                     <TextField source="nameEn" label="table.field.companys.nameEn" /> | 
 |  |  |                     <TextField source="breifCode" label="table.field.companys.breifCode" /> | 
 |  |  |                     <DictField source="type" label="table.field.companys.type" dictTypeCode={'sys_companys_type'} /> | 
 
 |  |  | 
 |  |  |                     preferenceKey='deviceSite' | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo', 'label']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo', 'label','name','target','statusBool','updateBy']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <TextField source="site" label="table.field.deviceSite.site" /> | 
 |  |  |                     <TextField source="name" label="table.field.deviceSite.name" /> | 
 |  |  |                     <NumberField source="type$" label="table.field.deviceSite.type" /> | 
 |  |  |                     <TextField source="site" label="table.field.deviceSite.site" /> | 
 |  |  |                      | 
 |  |  |                     <TextField source="target" label="table.field.deviceSite.target" /> | 
 |  |  |                     <TextField source="label" label="table.field.deviceSite.label" /> | 
 |  |  |                     <TextField source="device$" label="table.field.deviceSite.device" /> | 
 
 |  |  | 
 |  |  |                     } | 
 |  |  |                     onClick={() => { }} />} | 
 |  |  |                 filters={filters} | 
 |  |  |                 sort={{ field: "create_time", order: "desc" }} | 
 |  |  |                 sort={{ field: "'row'" }} | 
 |  |  |                 actions={( | 
 |  |  |                     <TopToolbar> | 
 |  |  |                         <FilterButton /> | 
 |  |  | 
 |  |  |                         </> | 
 |  |  |                     } | 
 |  |  |                     rowClick={() => false} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo', 'updateTime', 'updateBy']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo', 'updateTime', 'updateBy', 'length', 'width', 'height','statusBool','updateBy$','createBy$']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <NumberField source="warehouseId$" label="table.field.loc.warehouseId" /> | 
 |  |  |                     <NumberField source="areaId$" label="table.field.loc.areaId" /> | 
 |  |  |                     <TextField source="code" label="table.field.loc.code" /> | 
 |  |  |                     <NumberField source="warehouseId$" label="table.field.loc.warehouseId" /> | 
 |  |  |                     <NumberField source="areaId$" label="table.field.loc.areaId" />                     | 
 |  |  |                     <TextField source="typeIds$" label="table.field.loc.type" cellClassName="type" /> | 
 |  |  |                     {/* <TextField source="name" label="table.field.loc.name" /> */} | 
 |  |  |                     {/* <NumberField source="flagLogic" label="table.field.loc.flagLogic" /> | 
 
 |  |  | 
 |  |  |                     </Grid> | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                     <Grid item xs={12} md={2}> | 
 |  |  |                     {/* <Grid item xs={12} md={2}> | 
 |  |  |                         <Typography variant="h6" gutterBottom> | 
 |  |  |                             {translate('common.edit.title.common')} | 
 |  |  |                         </Typography> | 
 |  |  |                         <StatusSelectInput /> | 
 |  |  |                         <Box mt="2em" /> | 
 |  |  |                         <MemoInput /> | 
 |  |  |                     </Grid> | 
 |  |  |                     </Grid> */} | 
 |  |  |                 </Grid> | 
 |  |  |             </SimpleForm> | 
 |  |  |         </Edit > | 
 
 |  |  | 
 |  |  |             if (code === 200) { | 
 |  |  |                 const arr = [ | 
 |  |  |                     <NumberField key="id" source="id" />, | 
 |  |  |                     <TooltipField key="name" source="name" label="table.field.matnr.name" cellClassName="name" />, | 
 |  |  |                     <TextField key="code" source="code" label="table.field.matnr.code" />, | 
 |  |  |                     <TooltipField key="name" source="name" label="table.field.matnr.name" cellClassName="name" />,                     | 
 |  |  |                     <TextField key="shipperId$" source="shipperId$" label="table.field.matnr.shipperId" />, | 
 |  |  |                     <ReferenceField key="groupId" source="groupId" label="table.field.matnr.groupId" reference="matnrGroup" link={false} sortable={false}> | 
 |  |  |                         <TextField source="name" /> | 
 |  |  | 
 |  |  |                         <BulkDeleteButton mutationMode={OPERATE_MODE} /> | 
 |  |  |                     </>} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'shipperId', 'platCode', 'spec', 'model', 'weight', 'color', 'describle' | 
 |  |  |                         , 'nromNum', 'unit', 'purchaseUnit', 'stockUnit', 'stockLeval', 'isLabelMange', 'safeQty' | 
 |  |  |                     omit={['id', 'shipperId', 'platCode', 'model', 'weight', 'color', 'describle' | 
 |  |  |                         , 'nromNum', 'unit', 'purchaseUnit', 'stockUnit', 'isLabelMange', 'safeQty' | 
 |  |  |                         , 'minQty', 'maxQty', 'stagn', 'valid', 'validWarn', 'flagCheck', 'updateTime', 'updateBy' | 
 |  |  |                         , 'createTime', 'createBy', 'memo', 'rglarId', 'groupId', 'stockLevel']} | 
 |  |  |                         , 'createTime', 'createBy', 'memo', 'rglarId', 'groupId','statusBool', 'stockLeval$']} | 
 |  |  |                 > | 
 |  |  |                     {columns.map((column) => column)} | 
 |  |  |                 </StyledDatagrid>} | 
 
 |  |  | 
 |  |  |                             /> | 
 |  |  |                         </Stack> | 
 |  |  |                     </Grid> | 
 |  |  |                     <Grid item xs={12} md={4}> | 
 |  |  |                         <Typography variant="h6" gutterBottom> | 
 |  |  |                             {translate('common.edit.title.common')} | 
 |  |  |                         </Typography> | 
 |  |  |                         <StatusSelectInput /> | 
 |  |  |                         <Box mt="2em" /> | 
 |  |  |                         <TextInput | 
 |  |  |                             label="common.field.memo" | 
 |  |  |                             source="memo" | 
 |  |  |                             parse={v => v} | 
 |  |  |                             fullWidth | 
 |  |  |                             multiline | 
 |  |  |                             minRows={2} | 
 |  |  |                             autoFocus | 
 |  |  |                         /> | 
 |  |  |                     </Grid> | 
 |  |  |                      | 
 |  |  |                 </Grid> | 
 |  |  |             </SimpleForm> | 
 |  |  |         </Edit > | 
 
 |  |  | 
 |  |  | import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; | 
 |  |  | import * as Common from '@/utils/common'; | 
 |  |  |  | 
 |  |  | const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ | 
 |  |  |     '& .css-1vooibu-MuiSvgIcon-root': { | 
 |  |  |         height: '.9em' | 
 |  |  |     }, | 
 |  |  |     '& .RaDatagrid-row': { | 
 |  |  |         cursor: 'auto' | 
 |  |  |     }, | 
 |  |  |     '& .column-name': { | 
 |  |  |     }, | 
 |  |  |     '& .opt': { | 
 |  |  |         width: 200 | 
 |  |  |     }, | 
 |  |  | })); | 
 |  |  | // const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ | 
 |  |  | //     '& .css-1vooibu-MuiSvgIcon-root': { | 
 |  |  | //         height: '.9em' | 
 |  |  | //     }, | 
 |  |  | //     '& .RaDatagrid-row': { | 
 |  |  | //         cursor: 'auto' | 
 |  |  | //     }, | 
 |  |  | //     '& .column-name': { | 
 |  |  | //     }, | 
 |  |  | //     '& .opt': { | 
 |  |  | //         width: 200 | 
 |  |  | //     },        | 
 |  |  | //     '& .RaDatagrid-cell': { | 
 |  |  | //         whiteSpace: 'nowrap', | 
 |  |  | //         overflow: 'visible', | 
 |  |  | //         textOverflow: 'unset', | 
 |  |  | //         maxWidth: 'none' | 
 |  |  | //     }, | 
 |  |  | //     '& .MuiTableCell-root': { | 
 |  |  | //         whiteSpace: 'nowrap', | 
 |  |  | //         overflow: 'visible', | 
 |  |  | //         textOverflow: 'unset' | 
 |  |  | //     } | 
 |  |  | // })); | 
 |  |  |  | 
 |  |  | const filters = [ | 
 |  |  |     <SearchInput source="condition" alwaysOn />, | 
 |  |  | 
 |  |  |                         <MyExportButton /> | 
 |  |  |                     </TopToolbar> | 
 |  |  |                 )} | 
 |  |  |                 perPage={DEFAULT_PAGE_SIZE} | 
 |  |  |                 perPage={DEFAULT_PAGE_SIZE}                 | 
 |  |  |             > | 
 |  |  |                 <StyledDatagrid | 
 |  |  |                 <DatagridConfigurable | 
 |  |  |                     preferenceKey='warehouse' | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     rowClick={(id, resource, record) => false}  | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo', 'longitude', 'latgitude', 'length', 'width', 'height']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <TextField source="factory" label="table.field.warehouse.factory" /> | 
 |  |  | 
 |  |  |                         <TextField source="nickname" /> | 
 |  |  |                     </ReferenceField> | 
 |  |  |                     <DateField source="createTime" label="common.field.createTime" showTime /> | 
 |  |  |                     <BooleanField source="statusBool" label="common.field.status" sortable={false} /> | 
 |  |  |                     <TextField source="memo" label="common.field.memo" sortable={false} /> | 
 |  |  |                     <WrapperField cellClassName="opt" label="common.field.opt"> | 
 |  |  |                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> | 
 |  |  |                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> | 
 |  |  |                     </WrapperField> | 
 |  |  |                 </StyledDatagrid> | 
 |  |  |                 </DatagridConfigurable> | 
 |  |  |             </List> | 
 |  |  |             <WarehouseCreate | 
 |  |  |                 open={createDialog} | 
 
 |  |  | 
 |  |  |     const theme = useTheme(); | 
 |  |  |  | 
 |  |  |     const value = JSON.parse(localStorage.getItem('sys_dicts'))?.find(dict => (dict.value == record[source])).label; | 
 |  |  |  | 
 |  |  |     console.log(value) | 
 |  |  |  | 
 |  |  |     return record ? ( | 
 |  |  |         <Typography | 
 
 |  |  | 
 |  |  |                                 {translate('common.edit.side.title')} | 
 |  |  |                             </Typography> | 
 |  |  |                             <Grid container rowSpacing={2} columnSpacing={1}> | 
 |  |  |                                 <Grid item xs={12} display="flex" gap={1}> | 
 |  |  |                                 {/* <Grid item xs={12} display="flex" gap={1}> | 
 |  |  |                                     <StatusField label="Status" /> | 
 |  |  |                                 </Grid> | 
 |  |  |                                 </Grid> */} | 
 |  |  |                                 <Grid item xs={12} display="flex" gap={1}> | 
 |  |  |                                     <AccessTimeIcon fontSize="small" color="disabled" /> | 
 |  |  |                                     <Box flexGrow={1}> | 
 
 |  |  | 
 |  |  |                 <StyledDatagrid | 
 |  |  |                     preferenceKey='deviceBind' | 
 |  |  |                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     expand={() => <DeviceBindPanel />} | 
 |  |  |                     rowClick={(id, resource, record) => false}                     | 
 |  |  |                     expandSingle={true} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo','updateBy','emptySimilar']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     <NumberField source="currentRow" label="table.field.deviceBind.currentRow" /> | 
 |  |  | 
 |  |  |                     <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> | 
 |  |  |                         <TextField source="nickname" /> | 
 |  |  |                     </ReferenceField> | 
 |  |  |                     <DateField source="createTime" label="common.field.createTime" showTime /> | 
 |  |  |                     <BooleanField source="statusBool" label="common.field.status" sortable={false} /> | 
 |  |  |                     <DateField source="createTime" label="common.field.createTime" showTime />                     | 
 |  |  |                     <TextField source="memo" label="common.field.memo" sortable={false} /> | 
 |  |  |                     <WrapperField cellClassName="opt" label="common.field.opt"> | 
 |  |  |                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> | 
 
 |  |  | 
 |  |  |     DateField, | 
 |  |  |     Labeled, | 
 |  |  | } from 'react-admin'; | 
 |  |  | import { Box, Grid, Stack, IconButton, Typography, Card, CardContent, TextField, Button } from '@mui/material'; | 
 |  |  | import { Box, Grid, Stack, IconButton, Typography, Card, CardContent, TextField, Button,FormLabel } from '@mui/material'; | 
 |  |  | import CloseIcon from '@mui/icons-material/Close'; | 
 |  |  | import { format } from 'date-fns'; | 
 |  |  |  | 
 |  |  | const OperationDetail = (props) => { | 
 |  |  |     const { operation, ...rest } = props; | 
 |  |  |  | 
 |  |  |     const translate = useTranslate(); | 
 |  |  |      | 
 |  |  |     return ( | 
 |  |  |         <> | 
 |  |  | 
 |  |  |                     <CardContent> | 
 |  |  |                         <Grid container rowSpacing={1} mb={1}> | 
 |  |  |                             <Grid item xs={6}> | 
 |  |  |                                 <Labeled label="table.field.operationRecord.namespace"> | 
 |  |  |                                     <Typography | 
 |  |  |                                         variant="body2" | 
 |  |  |                                         flexWrap="nowrap" | 
 |  |  |                                     > | 
 |  |  |                                         {operation.namespace || ''} | 
 |  |  |                                     </Typography> | 
 |  |  |                                 </Labeled> | 
 |  |  |                                 <FormLabel component="legend"> | 
 |  |  |                                     {translate('table.field.operationRecord.namespace')} | 
 |  |  |                                 </FormLabel> | 
 |  |  |                                 <Typography variant="body2" flexWrap="nowrap"> | 
 |  |  |                                     {operation.namespace || ''} | 
 |  |  |                                 </Typography> | 
 |  |  |                             </Grid> | 
 |  |  |                             <Grid item xs={6}> | 
 |  |  |                                 <Labeled label="table.field.operationRecord.url"> | 
 |  |  |                                 <FormLabel component="legend"> | 
 |  |  |                                     {translate('table.field.operationRecord.url')} | 
 |  |  |                                 </FormLabel> | 
 |  |  |                                  | 
 |  |  |                                     <Typography | 
 |  |  |                                         variant="body2" | 
 |  |  |                                         flexWrap="nowrap" | 
 |  |  |                                     > | 
 |  |  |                                         {operation.url || ''} | 
 |  |  |                                     </Typography> | 
 |  |  |                                 </Labeled> | 
 |  |  |                                  | 
 |  |  |                             </Grid> | 
 |  |  |                             <Grid item xs={6}> | 
 |  |  |                                 <Labeled label="table.field.operationRecord.timestamp"> | 
 |  |  |                                 <FormLabel component="legend"> | 
 |  |  |                                     {translate('table.field.operationRecord.timestamp')} | 
 |  |  |                                 </FormLabel> | 
 |  |  |                                 | 
 |  |  |                                     <Typography | 
 |  |  |                                         variant="body2" | 
 |  |  |                                         flexWrap="nowrap" | 
 |  |  |                                     > | 
 |  |  |                                         {format(new Date(Number(operation.timestamp)), 'yyyy-MM-dd HH:mm:ss')} | 
 |  |  |                                     </Typography> | 
 |  |  |                                 </Labeled> | 
 |  |  |                                  | 
 |  |  |                             </Grid> | 
 |  |  |                             <Grid item xs={6}> | 
 |  |  |                                 <Labeled label="table.field.operationRecord.userId"> | 
 |  |  |                                 <FormLabel component="legend"> | 
 |  |  |                                     {translate('table.field.operationRecord.userId')} | 
 |  |  |                                 </FormLabel> | 
 |  |  |                                  | 
 |  |  |                                     <Typography | 
 |  |  |                                         variant="body2" | 
 |  |  |                                         flexWrap="nowrap" | 
 |  |  |                                     > | 
 |  |  |                                         {operation.userId$ || ''} | 
 |  |  |                                     </Typography> | 
 |  |  |                                 </Labeled> | 
 |  |  |                                  | 
 |  |  |                             </Grid> | 
 |  |  |                             <Grid item sm={12}> | 
 |  |  |                                 <TextField | 
 |  |  | 
 |  |  |                                 /> | 
 |  |  |                             </Grid> | 
 |  |  |                             <Grid item xs={6}> | 
 |  |  |                                 <Labeled label="table.field.operationRecord.clientIp"> | 
 |  |  |                                 <FormLabel component="legend"> | 
 |  |  |                                     {translate('table.field.operationRecord.userId')} | 
 |  |  |                                 </FormLabel> | 
 |  |  |                                  | 
 |  |  |                                     <Typography | 
 |  |  |                                         variant="body2" | 
 |  |  |                                         flexWrap="nowrap" | 
 |  |  |                                     > | 
 |  |  |                                         {operation.clientIp || ''} | 
 |  |  |                                     </Typography> | 
 |  |  |                                 </Labeled> | 
 |  |  |                                  | 
 |  |  |                             </Grid> | 
 |  |  |                         </Grid> | 
 |  |  |                     </CardContent> | 
 
 |  |  | 
 |  |  |                 </StyledDatagrid> | 
 |  |  |             </List> | 
 |  |  |             <PageDrawer | 
 |  |  |                 title='OperationRecord Detail' | 
 |  |  |                 title={translate('table.field.operationRecord.detail')} | 
 |  |  |                 drawerVal={drawerVal} | 
 |  |  |                 setDrawerVal={setDrawerVal} | 
 |  |  |             > | 
 
 |  |  | 
 |  |  | import CustomerTopToolBar from "../components/EditTopToolBar"; | 
 |  |  | import MemoInput from "../components/MemoInput"; | 
 |  |  | import StatusSelectInput from "../components/StatusSelectInput"; | 
 |  |  | import DictionarySelect from "../components/DictionarySelect"; | 
 |  |  | import DictSelect from "../components/DictSelect"; | 
 |  |  |  | 
 |  |  | const FormToolbar = () => { | 
 |  |  |     const { getValues } = useFormContext(); | 
 |  |  | 
 |  |  |                                 validate={[required()]} | 
 |  |  |                                 parse={v => v} | 
 |  |  |                             /> | 
 |  |  |                             <AutocompleteInput | 
 |  |  |                                 choices={dicts} | 
 |  |  |                                 optionText="label" | 
 |  |  |                                 label="table.field.warehouseAreas.type" | 
 |  |  |                                 source="type" | 
 |  |  |                                 optionValue="value" | 
 |  |  |                                 parse={v => v} | 
 |  |  |                             <DictionarySelect | 
 |  |  |                                 label='table.field.warehouseAreas.type' | 
 |  |  |                                 name="type" | 
 |  |  |                                 dictTypeCode="sys_ware_areas_type" | 
 |  |  |                                 alwaysOn                                 | 
 |  |  |                             /> | 
 |  |  |                             <ReferenceInput | 
 |  |  |                                 source="warehouseId" | 
 |  |  | 
 |  |  |                                 <AutocompleteInput | 
 |  |  |                                     label="table.field.warehouseAreas.wareId" | 
 |  |  |                                     optionText="name" | 
 |  |  |                                     optionValue="id" | 
 |  |  |                                     validate={[required()]} | 
 |  |  |                                     filterToQuery={(val) => ({ name: val })} | 
 |  |  |                                 /> | 
 
 |  |  | 
 |  |  |     '& .opt': { | 
 |  |  |         width: 200 | 
 |  |  |     }, | 
 |  |  |     '& .RaDatagrid-cell': { | 
 |  |  |         whiteSpace: 'nowrap', | 
 |  |  |         overflow: 'visible', | 
 |  |  |         textOverflow: 'unset', | 
 |  |  |         maxWidth: 'none' | 
 |  |  |     }, | 
 |  |  |     '& .MuiTableCell-root': { | 
 |  |  |         whiteSpace: 'nowrap', | 
 |  |  |         overflow: 'visible', | 
 |  |  |         textOverflow: 'unset' | 
 |  |  |     } | 
 |  |  | })); | 
 |  |  |  | 
 |  |  | const filters = [ | 
 |  |  | 
 |  |  |                     </TopToolbar> | 
 |  |  |                 )} | 
 |  |  |                 perPage={DEFAULT_PAGE_SIZE} | 
 |  |  |             > | 
 |  |  |                 <StyledDatagrid | 
 |  |  |             >  | 
 |  |  |              | 
 |  |  |  | 
 |  |  |              | 
 |  |  |                 <StyledDatagrid                                     | 
 |  |  |                     preferenceKey='warehouseAreas' | 
 |  |  |                     bulkActionButtons={ | 
 |  |  |                         <> | 
 |  |  |                             <WareButton /> | 
 |  |  |                             {/* <WareButton /> | 
 |  |  |                             <MixButton /> | 
 |  |  |                             <StatusButton /> | 
 |  |  |                             <StatusButton /> */} | 
 |  |  |                             <BulkDeleteButton mutationMode={OPERATE_MODE} /> | 
 |  |  |                         </> | 
 |  |  |                     } | 
 |  |  |                     rowClick={(id, resource, record) => false} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo']} | 
 |  |  |                     omit={['id', 'createTime', 'createBy', 'memo','statusBool','flagMix$','flagLabelMange$','shipperId$','supplierId']} | 
 |  |  |                 > | 
 |  |  |                     <NumberField source="id" /> | 
 |  |  |                     {/* <TextField source="uuid" label="table.field.warehouseAreas.uuid" /> */} | 
 |  |  |                     <TextField source="name" label="table.field.warehouseAreas.name" /> | 
 |  |  |                     <TextField source="code" label="table.field.warehouseAreas.code" /> | 
 |  |  |                     <TextField source="name" label="table.field.warehouseAreas.name" /> | 
 |  |  |                     | 
 |  |  |                     <TextField source="type$" label="table.field.warehouseAreas.type"/> | 
 |  |  |                     {/* <ReferenceField source="shipperId" label="table.field.warehouseAreas.shipperId" reference="shipper" link={false} sortable={false}> | 
 |  |  |                         <TextField source="name" /> | 
 |  |  | 
 |  |  |                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> | 
 |  |  |                     </WrapperField> | 
 |  |  |                 </StyledDatagrid> | 
 |  |  |                  | 
 |  |  |             </List> | 
 |  |  |             <WarehouseAreasCreate | 
 |  |  |                 open={createDialog} | 
 
 |  |  | 
 |  |  | import com.vincent.rsf.framework.common.SpringUtils; | 
 |  |  | import com.vincent.rsf.server.system.service.UserService; | 
 |  |  | import com.vincent.rsf.server.system.entity.User; | 
 |  |  | import org.springframework.format.annotation.DateTimeFormat; | 
 |  |  |  | 
 |  |  | import java.io.Serializable; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.util.Date; | 
 |  |  |  | 
 |  |  | @Data | 
 |  |  | 
 |  |  |     @TableLogic | 
 |  |  |     private Integer deleted; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 创建人 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "创建人") | 
 |  |  |     private Long createBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 创建时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "创建时间") | 
 |  |  |     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date createTime; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 更新人 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "更新人") | 
 |  |  |     private Long updateBy; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 更新时间 | 
 |  |  |      */ | 
 |  |  |     @ApiModelProperty(value= "更新时间") | 
 |  |  |     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") | 
 |  |  |     private Date updateTime; | 
 |  |  |  | 
 |  |  |     public DeviceBind() {} | 
 |  |  |  | 
 |  |  |     public DeviceBind(Integer currentRow,Integer startRow,Integer endRow,Integer deviceQty,Integer startDeviceNo,Integer endDeviceNo,String staList,Integer typeId,String beSimilar,String emptySimilar) { | 
 |  |  | 
 |  |  | //            null    // 空板靠近开关 | 
 |  |  | //    ); | 
 |  |  |  | 
 |  |  |     public String getCreateTime$(){ | 
 |  |  |         if (Cools.isEmpty(this.createTime)){ | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getUpdateTime$(){ | 
 |  |  |         if (Cools.isEmpty(this.updateTime)){ | 
 |  |  |             return ""; | 
 |  |  |         } | 
 |  |  |         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | //    public Boolean getStatusBool(){ |