From c1b649d515870d3fb1fb9c8291806d4b97faf914 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 16 四月 2025 18:00:19 +0800 Subject: [PATCH] 1.添加接口拦截器 2. --- /dev/null | 18 ------ rsf-admin/src/page/orders/stock/OrderList.jsx | 2 rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java | 16 +++++ rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx | 16 +++-- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java | 15 +++++ rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx | 14 +--- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 3 + rsf-admin/src/i18n/zh.js | 14 ++-- rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx | 1 rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java | 35 +++++++++++ rsf-admin/src/page/orders/stock/OrderEdit.jsx | 18 ++++-- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CompanysType.java | 25 ++++++++ 12 files changed, 127 insertions(+), 50 deletions(-) diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index ee7f63e..32fb483 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -533,25 +533,25 @@ asnOrderItem: { asnId: "涓诲崟鏍囪瘑", asnCode: "涓诲崟缂栫爜", - poDetlId: "PO鍗曟爣璇�", - poDetlCode: "PO鍗曠紪鐮�", + poDetlId: "PO鍗旾D", + poDetlCode: "PO鍗�", matnrId: "鐗╂枡鏍囪瘑", maktx: "鐗╂枡鍚嶇О", matnrCode: "鐗╂枡缂栫爜", - anfme: "璁″垝鏀惰揣鏁伴噺", + anfme: "璁″垝鏀惰揣鏁�", stockUnit: "搴撳瓨鍗曚綅", - purQty: "閲囪喘鏁伴噺", + purQty: "閲囪喘閲�", purUnit: "閲囪喘鍗曚綅", - qty: "宸插畬鎴愭暟閲�", + qty: "瀹屾垚鏁伴噺", splrBatch: "渚涘簲鍟嗘壒娆�", splrCode: "渚涘簲鍟嗙紪鐮�", splrName: "渚涘簲鍟嗗悕绉�", qrcode: "浜岀淮鐮�", barcode: "鏉″舰鐮�", - packName: "鍖呰鍚嶇О", + packName: "鍖呰", ntyStatus: "鎶ユ鐘舵��", prodTime: "鐢熶骇鏃ユ湡", - platItemId: 'PO鍗曞彿' + platItemId: '琛屽彿' }, asnOrderLog: { code: "缂栫爜", diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx index 7fec209..8aad86d 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx @@ -264,7 +264,6 @@ const MatnrList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); const notify = useNotify(); diff --git a/rsf-admin/src/page/orderItem/OrderItemCreate.jsx b/rsf-admin/src/page/orderItem/OrderItemCreate.jsx deleted file mode 100644 index 71904b9..0000000 --- a/rsf-admin/src/page/orderItem/OrderItemCreate.jsx +++ /dev/null @@ -1,249 +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 OrderItemCreate = (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.orderItem.orderId" - source="orderId" - autoFocus - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.orderCode" - source="orderCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.sourceItemId" - source="sourceItemId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.matnrId" - source="matnrId" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.maktx" - source="maktx" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.orderItem.anfme" - source="anfme" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.orderItem.workQty" - source="workQty" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.orderItem.purQty" - source="purQty" - validate={required()} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.purUnit" - source="purUnit" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <NumberInput - label="table.field.orderItem.qty" - source="qty" - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.splrCode" - source="splrCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.batch" - source="batch" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.splrName" - source="splrName" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.trackCode" - source="trackCode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.barcode" - source="barcode" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.prodTime" - source="prodTime" - parse={v => v} - /> - </Grid> - <Grid item xs={6} display="flex" gap={1}> - <TextInput - label="table.field.orderItem.packName" - source="packName" - 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 OrderItemCreate; diff --git a/rsf-admin/src/page/orderItem/OrderItemEdit.jsx b/rsf-admin/src/page/orderItem/OrderItemEdit.jsx deleted file mode 100644 index 2133716..0000000 --- a/rsf-admin/src/page/orderItem/OrderItemEdit.jsx +++ /dev/null @@ -1,221 +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 OrderItemEdit = () => { - 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.orderItem.orderId" - source="orderId" - autoFocus - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.orderCode" - source="orderCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.sourceItemId" - source="sourceItemId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.matnrId" - source="matnrId" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.matnrCode" - source="matnrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.maktx" - source="maktx" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.orderItem.anfme" - source="anfme" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.stockUnit" - source="stockUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.orderItem.workQty" - source="workQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.orderItem.purQty" - source="purQty" - validate={required()} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.purUnit" - source="purUnit" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <NumberInput - label="table.field.orderItem.qty" - source="qty" - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.splrCode" - source="splrCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.batch" - source="batch" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.splrBatch" - source="splrBatch" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.splrName" - source="splrName" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.trackCode" - source="trackCode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.barcode" - source="barcode" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.prodTime" - source="prodTime" - parse={v => v} - /> - </Stack> - <Stack direction='row' gap={2}> - <TextInput - label="table.field.orderItem.packName" - source="packName" - 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 OrderItemEdit; diff --git a/rsf-admin/src/page/orderItem/OrderItemList.jsx b/rsf-admin/src/page/orderItem/OrderItemList.jsx deleted file mode 100644 index f90bde9..0000000 --- a/rsf-admin/src/page/orderItem/OrderItemList.jsx +++ /dev/null @@ -1,190 +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 OrderItemCreate from "./OrderItemCreate"; -import OrderItemPanel from "./OrderItemPanel"; -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 />, - <DateInput label='common.time.after' source="timeStart" alwaysOn />, - <DateInput label='common.time.before' source="timeEnd" alwaysOn />, - - <NumberInput source="orderId" label="table.field.orderItem.orderId" />, - <TextInput source="orderCode" label="table.field.orderItem.orderCode" />, - <TextInput source="sourceItemId" label="table.field.orderItem.sourceItemId" />, - <TextInput source="matnrId" label="table.field.orderItem.matnrId" />, - <TextInput source="matnrCode" label="table.field.orderItem.matnrCode" />, - <TextInput source="maktx" label="table.field.orderItem.maktx" />, - <NumberInput source="anfme" label="table.field.orderItem.anfme" />, - <TextInput source="stockUnit" label="table.field.orderItem.stockUnit" />, - <NumberInput source="workQty" label="table.field.orderItem.workQty" />, - <NumberInput source="purQty" label="table.field.orderItem.purQty" />, - <TextInput source="purUnit" label="table.field.orderItem.purUnit" />, - <NumberInput source="qty" label="table.field.orderItem.qty" />, - <TextInput source="splrCode" label="table.field.orderItem.splrCode" />, - <TextInput source="batch" label="table.field.orderItem.batch" />, - <TextInput source="splrBatch" label="table.field.orderItem.splrBatch" />, - <TextInput source="splrName" label="table.field.orderItem.splrName" />, - <TextInput source="trackCode" label="table.field.orderItem.trackCode" />, - <TextInput source="barcode" label="table.field.orderItem.barcode" />, - <TextInput source="prodTime" label="table.field.orderItem.prodTime" />, - <TextInput source="packName" label="table.field.orderItem.packName" />, - - <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 OrderItemList = () => { - 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.orderItem"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} - filters={filters} - sort={{ field: "create_time", order: "desc" }} - actions={( - <TopToolbar> - <FilterButton /> - <MyCreateButton onClick={() => { setCreateDialog(true) }} /> - <SelectColumnsButton preferenceKey='orderItem' /> - <MyExportButton /> - </TopToolbar> - )} - perPage={DEFAULT_PAGE_SIZE} - > - <StyledDatagrid - preferenceKey='orderItem' - bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} - expand={() => <OrderItemPanel />} - expandSingle={true} - omit={['id', 'createTime', 'createBy', 'memo']} - > - <NumberField source="id" /> - <NumberField source="orderId" label="table.field.orderItem.orderId" /> - <TextField source="orderCode" label="table.field.orderItem.orderCode" /> - <TextField source="sourceItemId" label="table.field.orderItem.sourceItemId" /> - <TextField source="matnrId" label="table.field.orderItem.matnrId" /> - <TextField source="matnrCode" label="table.field.orderItem.matnrCode" /> - <TextField source="maktx" label="table.field.orderItem.maktx" /> - <NumberField source="anfme" label="table.field.orderItem.anfme" /> - <TextField source="stockUnit" label="table.field.orderItem.stockUnit" /> - <NumberField source="workQty" label="table.field.orderItem.workQty" /> - <NumberField source="purQty" label="table.field.orderItem.purQty" /> - <TextField source="purUnit" label="table.field.orderItem.purUnit" /> - <NumberField source="qty" label="table.field.orderItem.qty" /> - <TextField source="splrCode" label="table.field.orderItem.splrCode" /> - <TextField source="batch" label="table.field.orderItem.batch" /> - <TextField source="splrBatch" label="table.field.orderItem.splrBatch" /> - <TextField source="splrName" label="table.field.orderItem.splrName" /> - <TextField source="trackCode" label="table.field.orderItem.trackCode" /> - <TextField source="barcode" label="table.field.orderItem.barcode" /> - <TextField source="prodTime" label="table.field.orderItem.prodTime" /> - <TextField source="packName" label="table.field.orderItem.packName" /> - - <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> - <OrderItemCreate - open={createDialog} - setOpen={setCreateDialog} - /> - <PageDrawer - title='OrderItem Detail' - drawerVal={drawerVal} - setDrawerVal={setDrawerVal} - > - </PageDrawer> - </Box> - ) -} - -export default OrderItemList; diff --git a/rsf-admin/src/page/orderItem/OrderItemPanel.jsx b/rsf-admin/src/page/orderItem/OrderItemPanel.jsx deleted file mode 100644 index 43a4681..0000000 --- a/rsf-admin/src/page/orderItem/OrderItemPanel.jsx +++ /dev/null @@ -1,171 +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 OrderItemPanel = () => { - 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.orderItem.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.orderItem.orderId" - property={record.orderId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.orderCode" - property={record.orderCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.sourceItemId" - property={record.sourceItemId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.matnrId" - property={record.matnrId} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.matnrCode" - property={record.matnrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.maktx" - property={record.maktx} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.anfme" - property={record.anfme} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.stockUnit" - property={record.stockUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.workQty" - property={record.workQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.purQty" - property={record.purQty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.purUnit" - property={record.purUnit} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.qty" - property={record.qty} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.splrCode" - property={record.splrCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.batch" - property={record.batch} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.splrBatch" - property={record.splrBatch} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.splrName" - property={record.splrName} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.trackCode" - property={record.trackCode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.barcode" - property={record.barcode} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.prodTime" - property={record.prodTime} - /> - </Grid> - <Grid item xs={6}> - <PanelTypography - title="table.field.orderItem.packName" - property={record.packName} - /> - </Grid> - - </Grid> - </CardContent> - </Card > - </> - ); -}; - -export default OrderItemPanel; diff --git a/rsf-admin/src/page/orderItem/index.jsx b/rsf-admin/src/page/orderItem/index.jsx deleted file mode 100644 index 0382eef..0000000 --- a/rsf-admin/src/page/orderItem/index.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import React, { useState, useRef, useEffect, useMemo } from "react"; -import { - ListGuesser, - EditGuesser, - ShowGuesser, -} from "react-admin"; - -import OrderItemList from "./OrderItemList"; -import OrderItemEdit from "./OrderItemEdit"; - -export default { - list: OrderItemList, - edit: OrderItemEdit, - show: ShowGuesser, - recordRepresentation: (record) => { - return `${record.id}` - } -}; diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx index 1dfd40c..42a5404 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemEdit.jsx @@ -22,6 +22,7 @@ useGetOne, DeleteButton, EditBase, + ReferenceField, } from 'react-admin'; import { useWatch, useFormContext } from "react-hook-form"; import { Stack, Grid, Box, Typography, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material'; @@ -151,18 +152,11 @@ source="qty" readOnly /> - <TextInput - label="table.field.asnOrderItem.splrCode" - source="splrCode" - parse={v => v} - /> + <ReferenceInput source="splrName" label="table.field.asnOrderItem.splrName" reference="companys" filter={{type: 'supplier'}}> + <AutocompleteInput optionText="name" label="table.field.asnOrderItem.splrName" /> + </ReferenceInput> </Stack> <Stack direction='row' gap={2}> - <TextInput - label="table.field.asnOrderItem.splrName" - source="splrName" - parse={v => v} - /> <TextInput label="table.field.asnOrderItem.qrcode" source="qrcode" diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx index ba28903..1a1356a 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx @@ -66,7 +66,10 @@ '& .column-name': { }, '& .opt': { - width: 180 + width: 220 + }, + '& .wkType': { + width: 110 }, '& .status': { width: 90 @@ -79,7 +82,7 @@ <TextInput source="poCode" label="table.field.asnOrder.poCode" />, <NumberInput source="poId" label="table.field.asnOrder.poId" />, <TextInput source="type" label="table.field.asnOrder.type" />, - <ReferenceInput source="wkType" reference="dictData" filter={{dictTypeCode: 'sys_business_type'}} label="table.field.asnOrder.wkType"> + <ReferenceInput source="wkType" reference="dictData" filter={{ dictTypeCode: 'sys_business_type' }} label="table.field.asnOrder.wkType"> <AutocompleteInput label="table.field.asnOrder.wkType" optionValue="value" /> </ReferenceInput>, <NumberInput source="anfme" label="table.field.asnOrder.anfme" />, @@ -109,10 +112,8 @@ const [drawerVal, setDrawerVal] = useState(false); const [modalType, setmodalType] = useState(0); const [select, setSelect] = useState(0); - const billReload = useRef(); const location = useLocation(); - const redirect = useRedirect(); const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; return ( <Box display="flex"> @@ -143,7 +144,7 @@ sx={{ width: '100%' }} preferenceKey='asnOrder' bulkActionButtons={<> <InspectionsButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>} - rowClick='edit' + rowClick={false} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo', 'poId', 'rleStatus$']} > @@ -152,7 +153,7 @@ <TextField source="poCode" label="table.field.asnOrder.poCode" /> <NumberField source="poId" label="table.field.asnOrder.poId" /> <TextField source="type$" label="table.field.asnOrder.type" /> - <TextField source="wkType$" label="table.field.asnOrder.wkType" /> + <TextField cellClassName="wkType" source="wkType$" label="table.field.asnOrder.wkType" /> <NumberField source="anfme" label="table.field.asnOrder.anfme" /> <NumberField source="qty" label="table.field.asnOrder.qty" /> <TextField source="logisNo" label="table.field.asnOrder.logisNo" /> @@ -164,7 +165,8 @@ <DateField source="createTime" label="common.field.createTime" showTime /> <BillStatusField cellClassName="status" source="exceStatus" label="table.field.asnOrder.exceStatus" /> <TextField source="memo" label="common.field.memo" sortable={false} /> - <WrapperField cellClassName="opt" label="common.field.opt" width={300} > + <WrapperField cellClassName="opt" label="common.field.opt" > + <EditButton label="toolbar.detail"></EditButton> <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} /> <InspectionButton /> <CompleteButton /> diff --git a/rsf-admin/src/page/orders/stock/OrderEdit.jsx b/rsf-admin/src/page/orders/stock/OrderEdit.jsx index e857082..acc0034 100644 --- a/rsf-admin/src/page/orders/stock/OrderEdit.jsx +++ b/rsf-admin/src/page/orders/stock/OrderEdit.jsx @@ -39,6 +39,8 @@ const OrderEdit = () => { const translate = useTranslate(); + const business = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || []; + const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_order_type')) || []; return ( <Box> @@ -79,17 +81,21 @@ /> </Stack> <Stack direction='row' gap={2}> - <TextInput - label="table.field.stock.type" + <AutocompleteInput + choices={dicts} + optionText="label" + label="table.field.asnOrder.type" source="type" + optionValue="value" parse={v => v} - validate={required()} /> - <TextInput - label="table.field.stock.wkType" + <AutocompleteInput + choices={business} + optionText="label" + label="table.field.asnOrder.wkType" source="wkType" + optionValue="value" parse={v => v} - validate={required()} /> <NumberInput label="table.field.stock.anfme" diff --git a/rsf-admin/src/page/orders/stock/OrderList.jsx b/rsf-admin/src/page/orders/stock/OrderList.jsx index bcf4178..192b56a 100644 --- a/rsf-admin/src/page/orders/stock/OrderList.jsx +++ b/rsf-admin/src/page/orders/stock/OrderList.jsx @@ -114,7 +114,7 @@ <StyledDatagrid preferenceKey='stock' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} - rowClick={(id, resource, record) => false} + rowClick='edit' expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo']} > diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java index ddb8d66..2c74c43 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java @@ -1,6 +1,7 @@ package com.vincent.rsf.server.common.config; import com.vincent.rsf.server.common.constant.Constants; +import com.vincent.rsf.server.common.interceptor.DynamicFieldsInterceptor; import com.vincent.rsf.server.common.utils.Http; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -27,6 +28,21 @@ registry.addInterceptor(getAsyncHandlerInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/swagger-resources/**", "/webjars/**","/erp/**", "/v2/**","/v3/**","/doc.html/**", "/swagger-ui.html/**"); + + registry.addInterceptor(dynamicFieldsInterceptor()) + .addPathPatterns("/**") + .excludePathPatterns("/swagger-resources/**", + "/webjars/**", + "/erp/**", + "/v2/**", + "/v3/**", + "/doc.html/**", + "/swagger-ui.html/**"); + } + + @Bean + public DynamicFieldsInterceptor dynamicFieldsInterceptor() { + return new DynamicFieldsInterceptor(); } @Bean diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java new file mode 100644 index 0000000..4f29efb --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java @@ -0,0 +1,35 @@ +package com.vincent.rsf.server.common.interceptor; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Ryan + * @version 1.0 + * @title DynamicFieldsInterceptor + * @description + * @create 2025/4/16 16:10 + */ +@Slf4j +public class DynamicFieldsInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + return HandlerInterceptor.super.preHandle(request, response, handler); + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + System.out.println(response.getOutputStream().toString()); + HandlerInterceptor.super.afterCompletion(request, response, handler, ex); + } +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java index 3ca24bd..e8b7059 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java @@ -14,11 +14,15 @@ import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.entity.AsnOrderItem; +import com.vincent.rsf.server.manager.entity.Companys; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; +import com.vincent.rsf.server.manager.enums.CompanysType; import com.vincent.rsf.server.manager.service.AsnOrderItemService; +import com.vincent.rsf.server.manager.service.CompanysService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -33,6 +37,9 @@ @Autowired private AsnOrderItemService asnOrderItemService; + + @Autowired + private CompanysService companysService; @PreAuthorize("hasAuthority('manager:asnOrderItem:list')") @ApiOperation("鍒嗛〉鑾峰彇鍒楄〃") @@ -84,6 +91,14 @@ public R update(@RequestBody AsnOrderItem asnOrderItem) { asnOrderItem.setUpdateBy(getLoginUserId()); asnOrderItem.setUpdateTime(new Date()); + if (!Objects.isNull(asnOrderItem.getSplrName()) && StringUtils.isNotBlank(asnOrderItem.getSplrName())) { + Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() + .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val) + .eq(Companys::getId, asnOrderItem.getSplrName())); + if (!Objects.isNull(companys)) { + asnOrderItem.setSplrCode(companys.getCode()).setSplrName(companys.getName()); + } + } if (!asnOrderItemService.updateById(asnOrderItem)) { return R.error("Update Fail"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CompanysType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CompanysType.java new file mode 100644 index 0000000..e84eafa --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CompanysType.java @@ -0,0 +1,25 @@ +package com.vincent.rsf.server.manager.enums; + +/** + * @author Ryan + * @version 1.0 + * @title CompanysType + * @description + * @create 2025/4/16 14:53 + */ +public enum CompanysType { + //璐ㄦ鐘舵�� + COMPANYS_TYPE_SHIPPER("shipper", "璐т富"), + COMPANYS_TYPE_CUSTOMER("customer", "瀹㈡埛"), + COMPANYS_TYPE_SUPPLIER("supplier", "渚涘簲鍟�"), + + ; + CompanysType(String val, String desc) { + this.val = val; + this.desc = desc; + } + + public String val; + + public String desc; +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java index 7687195..41f21f6 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java @@ -184,6 +184,9 @@ if (!this.updateById(waitPakin1)) { throw new CoolException("缁勬嫋鏁伴噺淇敼澶辫触锛侊紒"); } + + //TODO 缁勬嫋瀹屾垚鍚庯紝鎵e噺鏀惰揣鍖哄簱瀛� + return pakin; } -- Gitblit v1.9.1