From 61e8382caf798f4d20078297c85a63884041329d Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 21 四月 2025 15:16:27 +0800
Subject: [PATCH] 新增DO单据

---
 /dev/null                                                                        |  173 --------------
 rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx                            |    6 
 rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx                          |  204 +++++++++++++++++
 rsf-admin/src/page/orders/delivery/index.jsx                                     |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java     |   32 ++
 rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx                          |   47 ++-
 rsf-admin/src/page/orders/delivery/DeliveryList.jsx                              |   23 -
 rsf-admin/src/page/ResourceContent.js                                            |    3 
 rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx                        |   15 
 rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx                              |  157 +++++++++++++
 rsf-admin/src/page/orders/delivery/DeliveryPanel.jsx                             |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java |    5 
 12 files changed, 450 insertions(+), 217 deletions(-)

diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index 2d9e7be..256cf8a 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -41,6 +41,7 @@
 import task from './task';
 import taskLog from './histories/taskLog';
 import stock from './orders/stock';
+import delivery from './orders/delivery';
 
 const ResourceContent = (node) => {
     switch (node.component) {
@@ -118,6 +119,8 @@
             return taskLog;
         case 'stock':
             return stock;
+        case 'delivery':
+            return delivery;
         default:
             return {
                 list: ListGuesser,
diff --git a/rsf-admin/src/page/delivery/DeliveryEdit.jsx b/rsf-admin/src/page/delivery/DeliveryEdit.jsx
deleted file mode 100644
index 090e940..0000000
--- a/rsf-admin/src/page/delivery/DeliveryEdit.jsx
+++ /dev/null
@@ -1,159 +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 DeliveryEdit = () => {
-    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}>
-                            <TextInput
-                                label="table.field.delivery.code"
-                                source="code"
-                                parse={v => v}
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.delivery.platId"
-                                source="platId"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.delivery.type"
-                                source="type"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.delivery.wkType"
-                                source="wkType"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.delivery.source"
-                                source="source"
-                                parse={v => v}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.delivery.anfme"
-                                source="anfme"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.delivery.qty"
-                                source="qty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.delivery.workQty"
-                                source="workQty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.delivery.platCode"
-                                source="platCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.delivery.startTime"
-                                source="startTime"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.delivery.endTime"
-                                source="endTime"
-                            />
-                        </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 DeliveryEdit;
diff --git a/rsf-admin/src/page/delivery/DeliveryItemEdit.jsx b/rsf-admin/src/page/delivery/DeliveryItemEdit.jsx
deleted file mode 100644
index f903642..0000000
--- a/rsf-admin/src/page/delivery/DeliveryItemEdit.jsx
+++ /dev/null
@@ -1,173 +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 DeliveryItemEdit = () => {
-    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.deliveryItem.deliveryId"
-                                source="deliveryId"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.platItemId"
-                                source="platItemId"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.matnrCode"
-                                source="matnrCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.matnrName"
-                                source="matnrName"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.fieldsIndex"
-                                source="fieldsIndex"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.unit"
-                                source="unit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.deliveryItem.anfme"
-                                source="anfme"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.deliveryItem.qty"
-                                source="qty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.deliveryItem.nromQty"
-                                source="nromQty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.deliveryItem.printQty"
-                                source="printQty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.splrName"
-                                source="splrName"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.splrCode"
-                                source="splrCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.deliveryItem.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 DeliveryItemEdit;
diff --git a/rsf-admin/src/page/delivery/DeliveryCreate.jsx b/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
similarity index 97%
rename from rsf-admin/src/page/delivery/DeliveryCreate.jsx
rename to rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
index 15106f0..eeccfba 100644
--- a/rsf-admin/src/page/delivery/DeliveryCreate.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
@@ -27,9 +27,9 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
 
 const DeliveryCreate = (props) => {
     const { open, setOpen } = props;
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx b/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx
new file mode 100644
index 0000000..0f80dae
--- /dev/null
+++ b/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx
@@ -0,0 +1,157 @@
+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";
+import DeliveryItemList from "./DeliveryItemList";
+
+const FormToolbar = () => {
+    const { getValues } = useFormContext();
+
+    return (
+        <Toolbar sx={{ justifyContent: 'end' }}>
+            <SaveButton />
+            <DeleteButton mutationMode="optimistic" />
+        </Toolbar>
+    )
+}
+
+const DeliveryEdit = () => {
+    const translate = useTranslate();
+    const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_order_type')) || [];
+    const business = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
+
+    return (
+        <>
+            <Edit
+                redirect="list"
+                mutationMode={EDIT_MODE}
+                actions={<CustomerTopToolBar />}
+                aside={<EditBaseAside />}
+            >
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                >
+                    <Grid container width={{ xs: '100%', xl: '100%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={16} md={10}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.delivery.code"
+                                    source="code"
+                                    parse={v => v}
+                                    autoFocus
+                                />
+                                <TextInput
+                                    label="table.field.delivery.platId"
+                                    source="platId"
+                                    parse={v => v}
+                                />
+                                <AutocompleteInput
+                                    choices={dicts}
+                                    optionText="label"
+                                    label="table.field.asnOrder.type"
+                                    source="type"
+                                    optionValue="value"
+                                    parse={v => v}
+                                    readOnly
+                                />
+                                <AutocompleteInput
+                                    choices={business}
+                                    optionText="label"
+                                    label="table.field.asnOrder.wkType"
+                                    source="wkType"
+                                    optionValue="value"
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.delivery.source"
+                                    source="source"
+                                    parse={v => v}
+                                    validate={required()}
+                                />
+                                <NumberInput
+                                    label="table.field.delivery.anfme"
+                                    source="anfme"
+                                    validate={required()}
+                                />
+                                <NumberInput
+                                    label="table.field.delivery.qty"
+                                    source="qty"
+                                    validate={required()}
+                                />
+                                <NumberInput
+                                    label="table.field.delivery.workQty"
+                                    source="workQty"
+                                    validate={required()}
+                                />
+                                <TextInput
+                                    label="table.field.delivery.platCode"
+                                    source="platCode"
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <DateInput
+                                    label="table.field.delivery.startTime"
+                                    source="startTime"
+                                />
+                                <DateInput
+                                    label="table.field.delivery.endTime"
+                                    source="endTime"
+                                />
+                            </Stack>
+                        </Grid>
+                        <Grid item xs={8} md={2}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.common')}
+                            </Typography>
+                            <StatusSelectInput />
+                            <Box mt="2em" />
+                            <MemoInput />
+                        </Grid>
+                    </Grid>
+                </SimpleForm>
+            </Edit >
+            <Grid>
+                <Box mt="2em"></Box>
+                <DeliveryItemList />
+            </Grid>
+        </>
+    )
+}
+
+export default DeliveryEdit;
diff --git a/rsf-admin/src/page/delivery/DeliveryItemCreate.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
similarity index 94%
rename from rsf-admin/src/page/delivery/DeliveryItemCreate.jsx
rename to rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
index 59c04d7..c9c4eb4 100644
--- a/rsf-admin/src/page/delivery/DeliveryItemCreate.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
@@ -27,12 +27,12 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
 
 const DeliveryItemCreate = (props) => {
-    const { open, setOpen } = props;
+    const { open, setOpen, record } = props;
 
     const translate = useTranslate();
     const notify = useNotify();
@@ -84,11 +84,12 @@
                         </DialogTitle>
                         <DialogContent sx={{ mt: 2 }}>
                             <Grid container rowSpacing={2} columnSpacing={2}>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
+                                <Grid item xs={6} display="flex" gap={1} sx={{display : "none"}}>
+                                    <NumberInput 
                                         label="table.field.deliveryItem.deliveryId"
                                         source="deliveryId"
-                                        autoFocus
+                                        defaultValue={record?.id}
+                                        readOnly
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx
new file mode 100644
index 0000000..4eb91dc
--- /dev/null
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemEdit.jsx
@@ -0,0 +1,204 @@
+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,
+
+    Form,
+    DeleteButton,
+    useGetOne,
+    EditBase,
+} from 'react-admin';
+import { useWatch, useFormContext } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Dialog, DialogActions, DialogContent, DialogTitle } 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";
+import DialogCloseButton from "../../components/DialogCloseButton";
+import { Visibility } from "@mui/icons-material";
+
+const FormToolbar = () => {
+    const { getValues } = useFormContext();
+
+    return (
+        <Toolbar sx={{ justifyContent: 'space-between' }}>
+            <SaveButton />
+            <DeleteButton mutationMode="optimistic" />
+        </Toolbar>
+    )
+}
+
+const DeliveryItemEdit = (props) => {
+    const { open, setOpen, record } = props;
+    const translate = useTranslate();
+
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setOpen(false);
+        }
+    };
+    const { data, isPending, } = useGetOne('deliveryItem', { id: record?.id });
+    if (data == null || data == undefined) { return }
+
+    return (
+        <>
+            <Dialog
+                open={open}
+                onClose={handleClose}
+                aria-labelledby="form-dialog-title"
+                fullWidth
+                disableRestoreFocus
+                maxWidth="lg">
+                <DialogTitle id="form-dialog-title" sx={{
+                    position: 'sticky',
+                    top: 0,
+                    backgroundColor: 'background.paper',
+                    zIndex: 1000
+                }}
+                >
+                    {translate('update.title')}
+                    <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+                        <DialogCloseButton onClose={handleClose} />
+                    </Box>
+                </DialogTitle>
+                <DialogContent sx={{ mt: 2 }}>
+                    <EditBase
+                        resource={'deliveryItem'}
+                        id={record?.id}
+                        mutationMode={EDIT_MODE}
+                        // actions={<CustomerTopToolBar />}
+                        aside={<EditBaseAside />}
+                    >
+                        <Form
+                            shouldUnregister
+                            warnWhenUnsavedChanges
+                            toolbar={<FormToolbar />}
+                            mode="onTouched"
+                            defaultValues={{}}
+                        // validate={(values) => { }}
+                        >
+                            <Grid container width={{ xs: '100%', xl: '100%' }} rowSpacing={3} columnSpacing={3}>
+                                <Grid item xs={16} md={10}>
+                                    <Typography variant="h6" gutterBottom>
+                                        {translate('common.edit.title.main')}
+                                    </Typography>
+                                    <Stack direction='row' gap={2}>
+                                        <NumberInput
+                                            label="table.field.deliveryItem.deliveryId"
+                                            source="deliveryId"
+                                            autoFocus
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.platItemId"
+                                            source="platItemId"
+                                            parse={v => v}
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.matnrCode"
+                                            source="matnrCode"
+                                            parse={v => v}
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.matnrName"
+                                            source="matnrName"
+                                            parse={v => v}
+                                        />
+                                    </Stack>
+                                    <Stack direction='row' gap={2}>
+                                        <TextInput
+                                            label="table.field.deliveryItem.fieldsIndex"
+                                            source="fieldsIndex"
+                                            parse={v => v}
+                                        />
+    
+                                        <TextInput
+                                            label="table.field.deliveryItem.unit"
+                                            source="unit"
+                                            parse={v => v}
+                                        />
+                                        <NumberInput
+                                            label="table.field.deliveryItem.anfme"
+                                            source="anfme"
+                                            validate={required()}
+                                        />
+                                        <NumberInput
+                                            label="table.field.deliveryItem.qty"
+                                            source="qty"
+                                            validate={required()}
+                                        />
+                                        <NumberInput
+                                            label="table.field.deliveryItem.nromQty"
+                                            source="nromQty"
+                                            validate={required()}
+                                        />
+                                    </Stack>
+                                    <Stack direction='row' gap={2}>
+                                        <NumberInput
+                                            label="table.field.deliveryItem.printQty"
+                                            source="printQty"
+                                            validate={required()}
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.splrName"
+                                            source="splrName"
+                                            parse={v => v}
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.splrCode"
+                                            source="splrCode"
+                                            parse={v => v}
+                                        />
+                                        <TextInput
+                                            label="table.field.deliveryItem.splrBatch"
+                                            source="splrBatch"
+                                            parse={v => v}
+                                        />
+                                    </Stack>
+                                </Grid>
+                                <Grid item xs={8} md={2}>
+                                    <Typography variant="h6" gutterBottom>
+                                        {translate('common.edit.title.common')}
+                                    </Typography>
+                                    <StatusSelectInput />
+                                    <Box mt="2em" />
+                                    <MemoInput />
+                                </Grid>
+                            </Grid>
+                            <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+                                <Toolbar sx={{ width: '100%', justifyContent: 'end' }}  >
+                                    <SaveButton type="button" mutationOptions={{
+                                        onSuccess: () => {
+                                            setOpen(false)
+                                        }
+                                    }} />
+                                </Toolbar>
+                            </DialogActions>
+                        </Form>
+                    </EditBase >
+                </DialogContent>
+            </Dialog>
+        </>
+
+
+    )
+}
+
+export default DeliveryItemEdit;
diff --git a/rsf-admin/src/page/delivery/DeliveryItemList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
similarity index 82%
rename from rsf-admin/src/page/delivery/DeliveryItemList.jsx
rename to rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
index 25a58a1..3cfd440 100644
--- a/rsf-admin/src/page/delivery/DeliveryItemList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
@@ -31,18 +31,20 @@
     ReferenceArrayInput,
     AutocompleteInput,
     DeleteButton,
+    useGetOne,
+    useGetRecordId,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
 import DeliveryItemCreate from "./DeliveryItemCreate";
-import DeliveryItemPanel from "./DeliveryItemPanel";
-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 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';
+import DeliveryItemEdit from "./DeliveryItemEdit";
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -91,13 +93,16 @@
 
 const DeliveryItemList = () => {
     const translate = useTranslate();
-
+    const doId = useGetRecordId();
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
-
+    const [editDialog, setEditDialog] = useState(false);
+    const [select, setSelect] = useState({});
+    const { data: dicts, isPending, error } = useGetOne('delivery', { id: doId });
     return (
         <Box display="flex">
             <List
+                resource="deliveryItem"
                 sx={{
                     flexGrow: 1,
                     transition: (theme) =>
@@ -109,6 +114,7 @@
                 title={"menu.deliveryItem"}
                 empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
                 filters={filters}
+                filter={{deliveryId: doId}}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
@@ -123,10 +129,13 @@
                 <StyledDatagrid
                     preferenceKey='deliveryItem'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-                    rowClick={(id, resource, record) => false}
-                    expand={() => <DeliveryItemPanel />}
+                    rowClick={(id, resource, record) => {
+                        setSelect(record)
+                        setEditDialog(true)
+                    }}
+                    expand={false}
                     expandSingle={true}
-                    omit={['id', 'createTime', 'createBy', 'memo']}
+                    omit={['id', 'createTime','deliveryId','fieldsIndex','qty', 'printQty', 'nromQty', 'createBy', 'memo']}
                 >
                     <NumberField source="id" />
                     <NumberField source="deliveryId" label="table.field.deliveryItem.deliveryId" />
@@ -142,26 +151,26 @@
                     <TextField source="splrName" label="table.field.deliveryItem.splrName" />
                     <TextField source="splrCode" label="table.field.deliveryItem.splrCode" />
                     <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" />
-
-                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>
+                    <TextField source="updateBy$" label="common.field.updateBy"  />
                     <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>
+                    <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>
+            <DeliveryItemEdit 
+                open={editDialog}
+                setOpen={setEditDialog}
+                record={select}
+            />
             <DeliveryItemCreate
                 open={createDialog}
                 setOpen={setCreateDialog}
+                record={dicts}
             />
             <PageDrawer
                 title='DeliveryItem Detail'
diff --git a/rsf-admin/src/page/delivery/DeliveryList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
similarity index 90%
rename from rsf-admin/src/page/delivery/DeliveryList.jsx
rename to rsf-admin/src/page/orders/delivery/DeliveryList.jsx
index a9235f9..5d7dfae 100644
--- a/rsf-admin/src/page/delivery/DeliveryList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
@@ -36,11 +36,11 @@
 import { styled } from '@mui/material/styles';
 import DeliveryCreate from "./DeliveryCreate";
 import DeliveryPanel from "./DeliveryPanel";
-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 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';
 
@@ -60,9 +60,8 @@
 
 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="code" label="table.field.delivery.code" />,
     <TextInput source="platId" label="table.field.delivery.platId" />,
     <TextInput source="type" label="table.field.delivery.type" />,
@@ -74,7 +73,6 @@
     <TextInput source="platCode" label="table.field.delivery.platCode" />,
     <DateInput source="startTime" label="table.field.delivery.startTime" />,
     <DateInput source="endTime" label="table.field.delivery.endTime" />,
-
     <TextInput label="common.field.memo" source="memo" />,
     <SelectInput
         label="common.field.status"
@@ -89,7 +87,6 @@
 
 const DeliveryList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
 
@@ -122,15 +119,15 @@
                     preferenceKey='delivery'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false}
-                    expand={() => <DeliveryPanel />}
+                    expand={false}
                     expandSingle={true}
                     omit={['id', 'createTime', 'createBy', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy','createTime']}
                 >
                     <NumberField source="id" />
                     <TextField source="code" label="table.field.delivery.code" />
                     <TextField source="platId" label="table.field.delivery.platId" />
-                    <TextField source="type" label="table.field.delivery.type" />
-                    <TextField source="wkType" label="table.field.delivery.wkType" />
+                    <TextField source="type$" label="table.field.delivery.type" />
+                    <TextField source="wkType$" label="table.field.delivery.wkType" />
                     <TextField source="source" label="table.field.delivery.source" />
                     <NumberField source="anfme" label="table.field.delivery.anfme" />
                     <NumberField source="qty" label="table.field.delivery.qty" />
diff --git a/rsf-admin/src/page/delivery/DeliveryPanel.jsx b/rsf-admin/src/page/orders/delivery/DeliveryPanel.jsx
similarity index 98%
rename from rsf-admin/src/page/delivery/DeliveryPanel.jsx
rename to rsf-admin/src/page/orders/delivery/DeliveryPanel.jsx
index 056aa96..9243f6a 100644
--- a/rsf-admin/src/page/delivery/DeliveryPanel.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryPanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const DeliveryPanel = () => {
diff --git a/rsf-admin/src/page/delivery/index.jsx b/rsf-admin/src/page/orders/delivery/index.jsx
similarity index 100%
rename from rsf-admin/src/page/delivery/index.jsx
rename to rsf-admin/src/page/orders/delivery/index.jsx
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java
index 30cba35..6403956 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Delivery.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 java.text.SimpleDateFormat;
 import java.util.Date;
@@ -203,6 +208,31 @@
 //            null    // 澶囨敞
 //    );
 
+
+    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 getStartTime$(){
         if (Cools.isEmpty(this.startTime)){
             return "";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
index 94c834d..05b6fc6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
@@ -40,6 +40,9 @@
     @ApiModelProperty(value= "涓诲崟鏍囪瘑")
     private Long deliveryId;
 
+    @ApiModelProperty("涓诲崟缂栫爜")
+    private String deliveryCode;
+
     /**
      * erp鏄庣粏鏍囪瘑
      */
@@ -213,6 +216,8 @@
 //            null    // 澶囨敞
 //    );
 
+
+
     public String getStatus$(){
         if (null == this.status){ return null; }
         switch (this.status){

--
Gitblit v1.9.1