From 141f60bd32ea2027665a0495b6d9f538e8b7dad0 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 10 四月 2025 14:19:04 +0800 Subject: [PATCH] #修改 1. 修改收货单历史档显示 2. 修改采购PO单显示问题 --- /dev/null | 18 - rsf-admin/src/page/purchase/PurchaseItemList.jsx | 169 ++++++++++++ rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx | 7 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java | 43 +++ rsf-admin/src/page/taskLog/TaskItemLogList.jsx | 1 rsf-admin/src/page/purchase/PurchaseItemCreate.jsx | 201 ++++++++++++++ rsf-admin/src/page/purchase/PurchaseItemEdit.jsx | 173 ++++++++++++ rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx | 2 rsf-admin/src/page/purchase/PurchaseEdit.jsx | 201 ++++++------- rsf-admin/src/page/purchase/PurchaseList.jsx | 7 10 files changed, 687 insertions(+), 135 deletions(-) diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx deleted file mode 100644 index e1c793e..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogCreate.jsx +++ /dev/null @@ -1,265 +0,0 @@ -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, -} from '@mui/material'; -import DialogCloseButton from "../components/DialogCloseButton"; -import StatusSelectInput from "../components/StatusSelectInput"; -import MemoInput from "../components/MemoInput"; - -const AsnOrderItemLogCreate = (props) => { - const { open, setOpen } = props; - - const translate = useTranslate(); - const notify = useNotify(); - - 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 } }); - }; - - 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="md" // '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 }}> - <Grid container rowSpacing={2} columnSpacing={2}> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.asnId" - source="asnId" - autoFocus - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.asnCode" - source="asnCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.platItemId" - source="platItemId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.poDetlId" - source="poDetlId" - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.poCode" - source="poCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.fieldsIndex" - source="fieldsIndex" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.matnrId" - source="matnrId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.maktx" - source="maktx" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.anfme" - source="anfme" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.purQty" - source="purQty" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.purUnit" - source="purUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.asnOrderItemLog.qty" - source="qty" - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrCode" - source="splrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.splrName" - source="splrName" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.qrcode" - source="qrcode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.trackCode" - source="trackCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.barcode" - source="barcode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.asnOrderItemLog.packName" - source="packName" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <SelectInput - label="table.field.asnOrderItemLog.ntyStatus" - source="ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - /> - </Grid> - - <Grid item xs={6} display="flex" gap={1}> - <StatusSelectInput /> - </Grid> - <Grid item xs={12} display="flex" gap={1}> - <Stack direction="column" spacing={1} width={'100%'}> - <MemoInput /> - </Stack> - </Grid> - </Grid> - </DialogContent> - <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> - <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} > - <SaveButton /> - </Toolbar> - </DialogActions> - </Form> - </Dialog> - </CreateBase> - </> - ) -} - -export default AsnOrderItemLogCreate; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx deleted file mode 100644 index dab571c..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogEdit.jsx +++ /dev/null @@ -1,238 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - Edit, - SimpleForm, - FormDataConsumer, - useTranslate, - TextInput, - NumberInput, - BooleanInput, - DateInput, - SelectInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - SaveButton, - Toolbar, - Labeled, - NumberField, - required, - useRecordContext, - DeleteButton, -} from 'react-admin'; -import { useWatch, useFormContext } from "react-hook-form"; -import { Stack, Grid, Box, Typography } from '@mui/material'; -import * as Common from '@/utils/common'; -import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; -import EditBaseAside from "../components/EditBaseAside"; -import CustomerTopToolBar from "../components/EditTopToolBar"; -import MemoInput from "../components/MemoInput"; -import StatusSelectInput from "../components/StatusSelectInput"; - -const FormToolbar = () => { - const { getValues } = useFormContext(); - - return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> - <SaveButton /> - <DeleteButton mutationMode="optimistic" /> - </Toolbar> - ) -} - -const AsnOrderItemLogEdit = () => { - const translate = useTranslate(); - - return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} - > - <SimpleForm - shouldUnregister - warnWhenUnsavedChanges - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} - > - <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> - <Grid item xs={12} md={8}> - <Typography variant="h6" gutterBottom> - {translate('common.edit.title.main')} - </Typography> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.asnId" - source="asnId" - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.asnCode" - source="asnCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.platItemId" - source="platItemId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.poDetlId" - source="poDetlId" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.poCode" - source="poCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.fieldsIndex" - source="fieldsIndex" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.matnrId" - source="matnrId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.maktx" - source="maktx" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.anfme" - source="anfme" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.purQty" - source="purQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.purUnit" - source="purUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.asnOrderItemLog.qty" - source="qty" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrCode" - source="splrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.splrName" - source="splrName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.qrcode" - source="qrcode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.trackCode" - source="trackCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.barcode" - source="barcode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItemLog.packName" - source="packName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <SelectInput - label="table.field.asnOrderItemLog.ntyStatus" - source="ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - validate={required()} - /> - </Stack> - - </Grid> - <Grid item xs={12} md={4}> - <Typography variant="h6" gutterBottom> - {translate('common.edit.title.common')} - </Typography> - <StatusSelectInput /> - <Box mt="2em" /> - <MemoInput /> - </Grid> - </Grid> - </SimpleForm> - </Edit > - ) -} - -export default AsnOrderItemLogEdit; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx deleted file mode 100644 index 6161f34..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogList.jsx +++ /dev/null @@ -1,193 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; -import { useNavigate } from 'react-router-dom'; -import { - List, - DatagridConfigurable, - SearchInput, - TopToolbar, - SelectColumnsButton, - EditButton, - FilterButton, - CreateButton, - ExportButton, - BulkDeleteButton, - WrapperField, - useRecordContext, - useTranslate, - useNotify, - useListContext, - FunctionField, - TextField, - NumberField, - DateField, - BooleanField, - ReferenceField, - TextInput, - DateTimeInput, - DateInput, - SelectInput, - NumberInput, - ReferenceInput, - ReferenceArrayInput, - AutocompleteInput, - DeleteButton, -} from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; -import { styled } from '@mui/material/styles'; -import AsnOrderItemLogCreate from "./AsnOrderItemLogCreate"; -import AsnOrderItemLogPanel from "./AsnOrderItemLogPanel"; -import EmptyData from "../components/EmptyData"; -import MyCreateButton from "../components/MyCreateButton"; -import MyExportButton from '../components/MyExportButton'; -import PageDrawer from "../components/PageDrawer"; -import MyField from "../components/MyField"; -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 filters = [ - <SearchInput source="condition" alwaysOn />, - - <NumberInput source="asnId" label="table.field.asnOrderItemLog.asnId" />, - <TextInput source="asnCode" label="table.field.asnOrderItemLog.asnCode" />, - <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />, - <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />, - <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />, - <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />, - <TextInput source="matnrId" label="table.field.asnOrderItemLog.matnrId" />, - <TextInput source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />, - <TextInput source="maktx" label="table.field.asnOrderItemLog.maktx" />, - <NumberInput source="anfme" label="table.field.asnOrderItemLog.anfme" />, - <TextInput source="stockUnit" label="table.field.asnOrderItemLog.stockUnit" />, - <NumberInput source="purQty" label="table.field.asnOrderItemLog.purQty" />, - <TextInput source="purUnit" label="table.field.asnOrderItemLog.purUnit" />, - <NumberInput source="qty" label="table.field.asnOrderItemLog.qty" />, - <TextInput source="splrCode" label="table.field.asnOrderItemLog.splrCode" />, - <TextInput source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />, - <TextInput source="splrName" label="table.field.asnOrderItemLog.splrName" />, - <TextInput source="qrcode" label="table.field.asnOrderItemLog.qrcode" />, - <TextInput source="trackCode" label="table.field.asnOrderItemLog.trackCode" />, - <TextInput source="barcode" label="table.field.asnOrderItemLog.barcode" />, - <TextInput source="packName" label="table.field.asnOrderItemLog.packName" />, - <SelectInput source="ntyStatus" label="table.field.asnOrderItemLog.ntyStatus" - choices={[ - { id: 0, name: ' 鏈笂鎶�' }, - { id: 1, name: ' 宸蹭笂鎶�' }, - ]} - />, - - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, -] - -const AsnOrderItemLogList = () => { - const translate = useTranslate(); - - const [createDialog, setCreateDialog] = useState(false); - const [drawerVal, setDrawerVal] = useState(false); - - return ( - <Box display="flex"> - <List - sx={{ - flexGrow: 1, - transition: (theme) => - theme.transitions.create(['all'], { - duration: theme.transitions.duration.enteringScreen, - }), - marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, - }} - title={"menu.asnOrderItemLog"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='asnOrderItemLog' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='asnOrderItemLog' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" /> - <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" /> - <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" /> - <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" /> - <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" /> - <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" /> - <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" /> - <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" /> - <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" /> - <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" /> - <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" /> - <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" /> - <NumberField source="qty" label="table.field.asnOrderItemLog.qty" /> - <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" /> - <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" /> - <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" /> - <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" /> - <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" /> - <TextField source="packName" label="table.field.asnOrderItemLog.packName" /> - <TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} /> - - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <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} /> - <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> - </List> - <AsnOrderItemLogCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='AsnOrderItemLog Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) -} - -export default AsnOrderItemLogList; diff --git a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx b/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx deleted file mode 100644 index 8fb6c06..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/AsnOrderItemLogPanel.jsx +++ /dev/null @@ -1,183 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material'; -import { - useTranslate, - useRecordContext, -} from 'react-admin'; -import PanelTypography from "../components/PanelTypography"; -import * as Common from '@/utils/common' - -const AsnOrderItemLogPanel = () => { - const record = useRecordContext(); - if (!record) return null; - const translate = useTranslate(); - return ( - <> - <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}> - <CardContent> - <Grid container spacing={2}> - <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}> - <Typography variant="h6" gutterBottom align="left" sx={{ - maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' }, - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - }}> - {Common.camelToPascalWithSpaces(translate('table.field.asnOrderItemLog.id'))}: {record.id} - </Typography> - {/* inherit, primary, secondary, textPrimary, textSecondary, error */} - <Typography variant="h6" gutterBottom align="right" > - ID: {record.id} - </Typography> - </Grid> - </Grid> - <Grid container spacing={2}> - <Grid item xs={12} container alignContent="flex-end"> - <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}> - {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo} - </Typography> - </Grid> - </Grid> - <Box height={20}> </Box> - <Grid container spacing={2}> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.asnId" - property={record.asnId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.asnCode" - property={record.asnCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.platItemId" - property={record.platItemId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.poDetlId" - property={record.poDetlId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.poCode" - property={record.poCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.fieldsIndex" - property={record.fieldsIndex} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.matnrId" - property={record.matnrId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.matnrCode" - property={record.matnrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.maktx" - property={record.maktx} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.anfme" - property={record.anfme} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.stockUnit" - property={record.stockUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.purQty" - property={record.purQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.purUnit" - property={record.purUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.qty" - property={record.qty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrCode" - property={record.splrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrBatch" - property={record.splrBatch} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.splrName" - property={record.splrName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.qrcode" - property={record.qrcode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.trackCode" - property={record.trackCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.barcode" - property={record.barcode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.packName" - property={record.packName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.asnOrderItemLog.ntyStatus" - property={record.ntyStatus$} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default AsnOrderItemLogPanel; diff --git a/rsf-admin/src/page/asnOrderItemLog/index.jsx b/rsf-admin/src/page/asnOrderItemLog/index.jsx deleted file mode 100644 index 555b583..0000000 --- a/rsf-admin/src/page/asnOrderItemLog/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import AsnOrderItemLogList from "./AsnOrderItemLogList"; -import AsnOrderItemLogEdit from "./AsnOrderItemLogEdit"; - -export default { - list: AsnOrderItemLogList, - edit: AsnOrderItemLogEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx index f3701ff..a1c2e7c 100644 --- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx +++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx @@ -28,7 +28,7 @@ import CustomerTopToolBar from "../components/EditTopToolBar"; import MemoInput from "../components/MemoInput"; import StatusSelectInput from "../components/StatusSelectInput"; -// import AsnOrderItemLogList from "./AsnOrderItemLogList" +import AsnOrderItemLogList from "./AsnOrderItemLogList" const FormToolbar = () => { const { getValues } = useFormContext(); diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx index 29c4a09..1478e38 100644 --- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx +++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx @@ -60,7 +60,6 @@ const filters = [ <SearchInput source="condition" alwaysOn />, - <TextInput source="code" label="table.field.asnOrderLog.code" />, <TextInput source="poCode" label="table.field.asnOrderLog.poCode" />, <NumberInput source="poId" label="table.field.asnOrderLog.poId" />, @@ -128,7 +127,7 @@ > <StyledDatagrid preferenceKey='asnOrderLog' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + bulkActionButtons={false} rowClick={'edit'} expand={false} expandSingle={true} @@ -138,8 +137,8 @@ <TextField source="code" label="table.field.asnOrderLog.code" /> <TextField source="poCode" label="table.field.asnOrderLog.poCode" /> <NumberField source="poId" label="table.field.asnOrderLog.poId" /> - <TextField source="type" label="table.field.asnOrderLog.type" /> - <TextField source="wkType" label="table.field.asnOrderLog.wkType" /> + <TextField source="type$" label="table.field.asnOrderLog.type" /> + <TextField source="wkType$" label="table.field.asnOrderLog.wkType" /> <NumberField source="anfme" label="table.field.asnOrderLog.anfme" /> <NumberField source="qty" label="table.field.asnOrderLog.qty" /> <TextField source="logisNo" label="table.field.asnOrderLog.logisNo" /> diff --git a/rsf-admin/src/page/purchase/PurchaseEdit.jsx b/rsf-admin/src/page/purchase/PurchaseEdit.jsx index b12726f..93bb094 100644 --- a/rsf-admin/src/page/purchase/PurchaseEdit.jsx +++ b/rsf-admin/src/page/purchase/PurchaseEdit.jsx @@ -28,12 +28,13 @@ import CustomerTopToolBar from "../components/EditTopToolBar"; import MemoInput from "../components/MemoInput"; import StatusSelectInput from "../components/StatusSelectInput"; +import PurchaseItemList from "./PurchaseItemList"; const FormToolbar = () => { const { getValues } = useFormContext(); return ( - <Toolbar sx={{ justifyContent: 'space-between' }}> + <Toolbar sx={{ justifyContent: 'end' }}> <SaveButton /> <DeleteButton mutationMode="optimistic" /> </Toolbar> @@ -44,26 +45,27 @@ const translate = useTranslate(); return ( - <Edit - redirect="list" - mutationMode={EDIT_MODE} - actions={<CustomerTopToolBar />} - aside={<EditBaseAside />} - > - <SimpleForm - shouldUnregister - warnWhenUnsavedChanges - toolbar={<FormToolbar />} - mode="onTouched" - defaultValues={{}} - // validate={(values) => { }} + <> + <Edit + redirect="list" + mutationMode={EDIT_MODE} + actions={<CustomerTopToolBar />} + aside={<EditBaseAside />} > - <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> - <Grid item xs={12} md={8}> - <Typography variant="h6" gutterBottom> - {translate('common.edit.title.main')} - </Typography> - {/* <Stack direction='row' gap={2}> + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + // validate={(values) => { }} + > + <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> + <Grid item xs={18} md={10}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.main')} + </Typography> + {/* <Stack direction='row' gap={2}> <TextInput label="table.field.purchase.code" source="code" @@ -71,95 +73,80 @@ autoFocus /> </Stack> */} - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.type" - source="type" - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.source" - source="source" - parse={v => v} - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchase.type" + source="type$" + parse={v => v} + validate={required()} + /> + <TextInput + label="table.field.purchase.source" + source="source" + parse={v => v} + validate={required()} + /> + <DateInput + label="table.field.purchase.preArr" + source="preArr" + /> + <NumberInput + label="table.field.purchase.anfme" + source="anfme" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchase.qty" + source="qty" + validate={required()} + /> + <NumberInput + label="table.field.purchase.workQty" + source="workQty" + validate={required()} + /> + <TextInput + label="table.field.purchase.channel" + source="channel" + parse={v => v} + /> + <TextInput + label="table.field.purchase.platCode" + source="platCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> <DateInput - label="table.field.purchase.preArr" - source="preArr" - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.anfme" - source="anfme" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.qty" - source="qty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.purchase.workQty" - source="workQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.channel" - source="channel" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.platCode" - source="platCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <DateInput - label="table.field.purchase.startTime" - source="startTime" - /> - </Stack> - <Stack direction='row' gap={2}> - <DateInput - label="table.field.purchase.endTime" - source="endTime" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.purchase.project" - source="project" - parse={v => v} - /> - </Stack> - + label="table.field.purchase.startTime" + source="startTime" + /> + <DateInput + label="table.field.purchase.endTime" + source="endTime" + /> + <TextInput + label="table.field.purchase.project" + source="project" + parse={v => v} + /> + </Stack> + </Grid> + <Grid item xs={6} md={2}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.common')} + </Typography> + <StatusSelectInput /> + <Box mt="2em" /> + <MemoInput /> + </Grid> </Grid> - <Grid item xs={12} md={4}> - <Typography variant="h6" gutterBottom> - {translate('common.edit.title.common')} - </Typography> - <StatusSelectInput /> - <Box mt="2em" /> - <MemoInput /> - </Grid> - </Grid> - </SimpleForm> - </Edit > + </SimpleForm> + </Edit > + <PurchaseItemList /> + </> ) } diff --git a/rsf-admin/src/page/purchase/PurchaseItemCreate.jsx b/rsf-admin/src/page/purchase/PurchaseItemCreate.jsx new file mode 100644 index 0000000..abc53cc --- /dev/null +++ b/rsf-admin/src/page/purchase/PurchaseItemCreate.jsx @@ -0,0 +1,201 @@ +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, +} from '@mui/material'; +import DialogCloseButton from "../components/DialogCloseButton"; +import StatusSelectInput from "../components/StatusSelectInput"; +import MemoInput from "../components/MemoInput"; + +const PurchaseItemCreate = (props) => { + const { open, setOpen, row } = props; + + const translate = useTranslate(); + const notify = useNotify(); + + 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 } }); + }; + + 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="md" // '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 }}> + <Grid container rowSpacing={2} columnSpacing={2}> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.purchaseId" + source="purchaseId" + defaultValue={row.poId} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.platItemId" + source="platItemId" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.matnrCode" + source="matnrCode" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.matnrName" + source="matnrName" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.unit" + source="unit" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.anfme" + source="anfme" + validate={required()} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.qty" + source="qty" + validate={required()} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.nromQty" + source="nromQty" + validate={required()} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.asnQty" + source="asnQty" + validate={required()} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <NumberInput + label="table.field.purchaseItem.printQty" + source="printQty" + validate={required()} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.splrName" + source="splrName" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.splrCode" + source="splrCode" + parse={v => v} + /> + </Grid> + <Grid item xs={6} display="flex" gap={1}> + <TextInput + label="table.field.purchaseItem.splrBatch" + source="splrBatch" + parse={v => v} + /> + </Grid> + + <Grid item xs={6} display="flex" gap={1}> + <StatusSelectInput /> + </Grid> + <Grid item xs={12} display="flex" gap={1}> + <Stack direction="column" spacing={1} width={'100%'}> + <MemoInput /> + </Stack> + </Grid> + </Grid> + </DialogContent> + <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> + <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }} > + <SaveButton /> + </Toolbar> + </DialogActions> + </Form> + </Dialog> + </CreateBase> + </> + ) +} + +export default PurchaseItemCreate; diff --git a/rsf-admin/src/page/purchase/PurchaseItemEdit.jsx b/rsf-admin/src/page/purchase/PurchaseItemEdit.jsx new file mode 100644 index 0000000..f7103d7 --- /dev/null +++ b/rsf-admin/src/page/purchase/PurchaseItemEdit.jsx @@ -0,0 +1,173 @@ +import React, { useState, useRef, useEffect, useMemo } from "react"; +import { + Edit, + SimpleForm, + FormDataConsumer, + useTranslate, + TextInput, + NumberInput, + BooleanInput, + DateInput, + SelectInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + SaveButton, + Toolbar, + Labeled, + NumberField, + required, + useRecordContext, + DeleteButton, +} from 'react-admin'; +import { useWatch, useFormContext } from "react-hook-form"; +import { Stack, Grid, Box, Typography } from '@mui/material'; +import * as Common from '@/utils/common'; +import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting'; +import EditBaseAside from "../components/EditBaseAside"; +import CustomerTopToolBar from "../components/EditTopToolBar"; +import MemoInput from "../components/MemoInput"; +import StatusSelectInput from "../components/StatusSelectInput"; + +const FormToolbar = () => { + const { getValues } = useFormContext(); + + return ( + <Toolbar sx={{ justifyContent: 'space-between' }}> + <SaveButton /> + <DeleteButton mutationMode="optimistic" /> + </Toolbar> + ) +} + +const PurchaseItemEdit = () => { + const translate = useTranslate(); + + return ( + <Edit + redirect="list" + mutationMode={EDIT_MODE} + actions={<CustomerTopToolBar />} + aside={<EditBaseAside />} + > + <SimpleForm + shouldUnregister + warnWhenUnsavedChanges + toolbar={<FormToolbar />} + mode="onTouched" + defaultValues={{}} + // validate={(values) => { }} + > + <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}> + <Grid item xs={12} md={8}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.main')} + </Typography> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.purchaseId" + source="purchaseId" + autoFocus + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.platItemId" + source="platItemId" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.matnrCode" + source="matnrCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.matnrName" + source="matnrName" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.unit" + source="unit" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.anfme" + source="anfme" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.qty" + source="qty" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.nromQty" + source="nromQty" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.asnQty" + source="asnQty" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <NumberInput + label="table.field.purchaseItem.printQty" + source="printQty" + validate={required()} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.splrName" + source="splrName" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.splrCode" + source="splrCode" + parse={v => v} + /> + </Stack> + <Stack direction='row' gap={2}> + <TextInput + label="table.field.purchaseItem.splrBatch" + source="splrBatch" + parse={v => v} + /> + </Stack> + + </Grid> + <Grid item xs={12} md={4}> + <Typography variant="h6" gutterBottom> + {translate('common.edit.title.common')} + </Typography> + <StatusSelectInput /> + <Box mt="2em" /> + <MemoInput /> + </Grid> + </Grid> + </SimpleForm> + </Edit > + ) +} + +export default PurchaseItemEdit; diff --git a/rsf-admin/src/page/purchase/PurchaseItemList.jsx b/rsf-admin/src/page/purchase/PurchaseItemList.jsx new file mode 100644 index 0000000..970263d --- /dev/null +++ b/rsf-admin/src/page/purchase/PurchaseItemList.jsx @@ -0,0 +1,169 @@ +import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; +import { useNavigate, useLocation } from 'react-router-dom'; +import { + List, + DatagridConfigurable, + SearchInput, + TopToolbar, + SelectColumnsButton, + EditButton, + FilterButton, + CreateButton, + ExportButton, + BulkDeleteButton, + WrapperField, + useRecordContext, + useTranslate, + useNotify, + useListContext, + FunctionField, + TextField, + NumberField, + DateField, + BooleanField, + ReferenceField, + TextInput, + DateTimeInput, + DateInput, + SelectInput, + NumberInput, + ReferenceInput, + ReferenceArrayInput, + AutocompleteInput, + DeleteButton, + useGetRecordId, +} from 'react-admin'; +import { Box, Typography, Card, Stack } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import PurchaseItemCreate from "./PurchaseItemCreate"; +import EmptyData from "../components/EmptyData"; +import MyCreateButton from "../components/MyCreateButton"; +import MyExportButton from '../components/MyExportButton'; +import PageDrawer from "../components/PageDrawer"; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; + +const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ + '& .css-1vooibu-MuiSvgIcon-root': { + height: '.9em' + }, + '& .RaDatagrid-row': { + cursor: 'auto' + }, + '& .column-name': { + }, + '& .opt': { + width: 200 + }, +})); + +const filters = [ + <SearchInput source="condition" alwaysOn />, + + <NumberInput source="purchaseId" label="table.field.purchaseItem.purchaseId" />, + <TextInput source="platItemId" label="table.field.purchaseItem.platItemId" />, + <TextInput source="matnrCode" label="table.field.purchaseItem.matnrCode" />, + <TextInput source="matnrName" label="table.field.purchaseItem.matnrName" />, + <TextInput source="unit" label="table.field.purchaseItem.unit" />, + <NumberInput source="anfme" label="table.field.purchaseItem.anfme" />, + <NumberInput source="qty" label="table.field.purchaseItem.qty" />, + <NumberInput source="nromQty" label="table.field.purchaseItem.nromQty" />, + <NumberInput source="asnQty" label="table.field.purchaseItem.asnQty" />, + <NumberInput source="printQty" label="table.field.purchaseItem.printQty" />, + <TextInput source="splrName" label="table.field.purchaseItem.splrName" />, + <TextInput source="splrCode" label="table.field.purchaseItem.splrCode" />, + <TextInput source="splrBatch" label="table.field.purchaseItem.splrBatch" />, + + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, +] + +const PurchaseItemList = () => { + const translate = useTranslate(); + const [createDialog, setCreateDialog] = useState(false); + const [drawerVal, setDrawerVal] = useState(false); + const poId = useGetRecordId(); + + return ( + <> + <Box display="flex"> + <List + resource="purchaseItem" + sx={{ + flexGrow: 1, + transition: (theme) => + theme.transitions.create(['all'], { + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, + }} + title={"menu.purchaseItem"} + empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + filters={filters} + filter={{ purchaseId: poId }} + sort={{ field: "create_time", order: "desc" }} + actions={( + <TopToolbar> + <FilterButton /> + <MyCreateButton onClick={() => { setCreateDialog(true) }} /> + <SelectColumnsButton preferenceKey='purchaseItem' /> + <MyExportButton /> + </TopToolbar> + )} + perPage={DEFAULT_PAGE_SIZE} + > + <StyledDatagrid + preferenceKey='purchaseItem' + bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} + rowClick={(id, resource, record) => false} + omit={['id', 'createTime','purchaseId', 'platItemId', 'createBy', 'memo']} + > + <NumberField source="id" /> + <NumberField source="purchaseId" label="table.field.purchaseItem.purchaseId" /> + <TextField source="platItemId" label="table.field.purchaseItem.platItemId" /> + <TextField source="matnrCode" label="table.field.purchaseItem.matnrCode" /> + <TextField source="matnrName" label="table.field.purchaseItem.matnrName" /> + <TextField source="unit" label="table.field.purchaseItem.unit" /> + <NumberField source="anfme" label="table.field.purchaseItem.anfme" /> + <NumberField source="qty" label="table.field.purchaseItem.qty" /> + <NumberField source="nromQty" label="table.field.purchaseItem.nromQty" /> + <NumberField source="asnQty" label="table.field.purchaseItem.asnQty" /> + <NumberField source="printQty" label="table.field.purchaseItem.printQty" /> + <TextField source="splrName" label="table.field.purchaseItem.splrName" /> + <TextField source="splrCode" label="table.field.purchaseItem.splrCode" /> + <TextField source="splrBatch" label="table.field.purchaseItem.splrBatch" /> + <TextField source="updateBy$" label="common.field.updateBy" reference="user" /> + <DateField source="updateTime" label="common.field.updateTime" showTime /> + <TextField source="createBy$" label="common.field.createBy" /> + <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> + </List> + <PurchaseItemCreate + open={createDialog} + setOpen={setCreateDialog} + row={{ poId }} + /> + <PageDrawer + title='PurchaseItem Detail' + drawerVal={drawerVal} + setDrawerVal={setDrawerVal} + > + </PageDrawer> + </Box></> + ) +} + +export default PurchaseItemList; diff --git a/rsf-admin/src/page/purchase/PurchaseList.jsx b/rsf-admin/src/page/purchase/PurchaseList.jsx index ffdb648..4a67361 100644 --- a/rsf-admin/src/page/purchase/PurchaseList.jsx +++ b/rsf-admin/src/page/purchase/PurchaseList.jsx @@ -124,19 +124,20 @@ preferenceKey='purchase' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={'edit'} - expand={() => <PurchasePanel />} + expand={false} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo']} > <NumberField source="id" /> - <MyField + {/* <MyField source="code" label="table.field.purchase.code" onClick={(event, record, val) => { event.stopPropagation(); assign(record); }} - /> + /> */} + <TextField source="code" label="table.field.purchase.code" /> <TextField source="type" label="table.field.purchase.type" /> <TextField source="source" label="table.field.purchase.source" /> <DateField source="preArr" label="table.field.purchase.preArr" showTime /> diff --git a/rsf-admin/src/page/taskLog/TaskItemLogList.jsx b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx index acf1ae7..8659c06 100644 --- a/rsf-admin/src/page/taskLog/TaskItemLogList.jsx +++ b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx @@ -57,7 +57,6 @@ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" alwaysOn />, <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - <NumberInput source="taskItemId" label="table.field.taskItemLog.taskItemId" />, <NumberInput source="taskId" label="table.field.taskItemLog.taskId" />, <NumberInput source="orderId" label="table.field.taskItemLog.orderId" />, diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java index 346f37e..38b863f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java @@ -1,7 +1,12 @@ package com.vincent.rsf.server.manager.entity; import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.*; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.vincent.rsf.server.system.constant.DictTypeCode; +import com.vincent.rsf.server.system.entity.DictData; +import com.vincent.rsf.server.system.service.DictDataService; import org.springframework.format.annotation.DateTimeFormat; import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; @@ -206,6 +211,42 @@ // null // 澶囨敞 // ); + public String getExceStatus$() { + if (Cools.isEmpty(this.exceStatus)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_ASN_EXCE_STATUS).eq(DictData::getValue, this.exceStatus)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + + public String getType$(){ + if (Cools.isEmpty(this.type)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE).eq(DictData::getValue, this.type)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + + public String getWkType$(){ + if (Cools.isEmpty(this.wkType)){ + return ""; + } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE).eq(DictData::getValue, this.wkType)); + if (Objects.isNull(dictData)) { + return null; + } + return dictData.getLabel(); + } + public String getArrTime$(){ if (Cools.isEmpty(this.arrTime)){ return ""; -- Gitblit v1.9.1