From b5e8045d5f5b5401b696db12f62fdbcc86dc5c5d Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 10 四月 2025 11:40:02 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop

---
 rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx                                         |  156 ++--
 rsf-admin/src/page/taskLog/TaskLogEdit.jsx                                                      |  249 ++----
 rsf-admin/src/page/task/TaskItemCreate.jsx                                                      |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java |    3 
 rsf-admin/src/page/fields/FieldsList.jsx                                                        |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java                   |    4 
 rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx                                          |  177 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java  |   98 +-
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java         |  103 ++
 rsf-admin/src/page/system/role/AssignPermissions.jsx                                            |    5 
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx                                |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java        |    5 
 rsf-admin/src/page/fields/FieldsCreate.jsx                                                      |   10 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java  |    4 
 rsf-admin/src/page/qlyInspect/AsnSelModal.jsx                                                   |   12 
 rsf-admin/src/page/task/TaskEdit.jsx                                                            |  238 ++----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java             |    2 
 rsf-admin/src/i18n/zh.js                                                                        |    5 
 rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx                                              |  222 ++---
 rsf-admin/src/i18n/en.js                                                                        |    1 
 rsf-admin/src/page/ResourceContent.js                                                           |   18 
 rsf-admin/src/config/setting.js                                                                 |    2 
 rsf-server/src/main/resources/application-dev.yml                                               |    8 
 rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx                                                   |   14 
 rsf-admin/src/page/fields/FieldsEdit.jsx                                                        |    8 
 rsf-admin/src/page/taskLog/TaskLogList.jsx                                                      |   50 
 rsf-admin/src/page/system/serialRule/SerialRuleList.jsx                                         |   28 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java                  |    4 
 rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx                                              |   11 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java            |   17 
 rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx                                     |  233 ++++++
 rsf-admin/src/page/taskLog/TaskItemLogList.jsx                                                  |   23 
 rsf-admin/src/page/system/user/UserList.jsx                                                     |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java                     |   34 
 rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx                                   |  151 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java                 |    3 
 rsf-admin/src/page/task/TaskItemList.jsx                                                        |   44 
 /dev/null                                                                                       |   18 
 rsf-admin/src/page/task/TaskList.jsx                                                            |   14 
 rsf-admin/src/page/system/role/RoleList.jsx                                                     |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java                 |    1 
 rsf-admin/src/page/purchase/PurchaseList.jsx                                                    |    2 
 rsf-admin/src/page/asnOrder/AsnOrderModal.jsx                                                   |   38 
 43 files changed, 1,266 insertions(+), 765 deletions(-)

diff --git a/rsf-admin/src/config/setting.js b/rsf-admin/src/config/setting.js
index 18ec5ad..9fe0af1 100644
--- a/rsf-admin/src/config/setting.js
+++ b/rsf-admin/src/config/setting.js
@@ -15,7 +15,7 @@
 
 export const DEFAULT_THEME_NAME = 'rsf';
 
-export const DEFAULT_THEME_MODE = 'dark';
+export const DEFAULT_THEME_MODE = 'light';
 
 export const TOKEN_HEADER_NAME = 'Authorization';
 
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 2e67cf6..daf2177 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -840,6 +840,7 @@
         close: "close",
         asnCreate: "asnCreate",
         createTask: "createTask",
+        recover: "recover",
     },
 };
 
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 8b0c4ab..7a43338 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -537,7 +537,7 @@
                 packName: "鍖呰鍚嶇О",
                 ntyStatus: "鎶ユ鐘舵��",
                 prodTime: "鐢熶骇鏃ユ湡",
-                platItemId: 'PO琛屽彿'
+                platItemId: 'PO鍗曞彿'
             },
             asnOrderLog: {
                 code: "缂栫爜",
@@ -609,7 +609,7 @@
             fields: {
                 fields: "瀛楁",
                 fieldsAlise: "瀛楁鍒悕",
-                unique: "绱㈠紩瀛楁",
+                unique: "鏄惁蹇呭~",
                 flagEnable: "鍚敤",
             },
             fieldsItem: {
@@ -854,6 +854,7 @@
         close: "鍏抽棴",
         asnCreate: "閫氳繃ASN鍒涘缓",
         createTask: "鐢熸垚浠诲姟",
+        recover: "缁х画鏀惰揣",
     },
 };
 
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index daf5821..ed01cd9 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -45,11 +45,11 @@
 import waitPakinLog from './waitPakinLog';
 import waitPakinItemLog from './waitPakinItemLog';
 import asnOrderLog from './asnOrderLog';
-import asnOrderItemLog from './asnOrderItemLog';
+// import asnOrderItemLog from './asnOrderItemLog';
 import task from './task';
-import taskItem from './taskItem';
+// import taskItem from './taskItem';
 import taskLog from './taskLog';
-import taskItemLog from './taskItemLog';
+// import taskItemLog from './taskItemLog';
 
 
 const ResourceContent = (node) => {
@@ -110,8 +110,8 @@
             return asnOrderItem;
         case 'asnOrderLog':
             return asnOrderLog;
-        case 'asnOrderItemLog':
-            return asnOrderItemLog;
+        // case 'asnOrderItemLog':
+        //     return asnOrderItemLog;
         case 'purchaseItem':
             return purchaseItem;
         case 'purchase':
@@ -140,12 +140,12 @@
             return waitPakinItemLog;
         case 'task':
             return task;
-        case 'taskItem':
-            return taskItem;
+        // case 'taskItem':
+        //     return taskItem;
         case 'taskLog':
             return taskLog;
-        case 'taskItemLog':
-            return taskItemLog;
+        // case 'taskItemLog':
+        //     return taskItemLog;
 
         default:
             return {
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
index e8fa4ac..1791f4d 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
@@ -88,6 +88,8 @@
     const [formData, setFormData] = useState({
         type: '',
         wkType: '',
+        poCode: '',
+        logisNo: ''
     });
 
     const [tabelData, setTableData] = useState([]);
@@ -104,6 +106,8 @@
         setFormData({
             type: '',
             wkType: '',
+            poCode: '',
+            logisNo: ''
         })
         setTableData([])
     }
@@ -222,7 +226,7 @@
                     <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
                         <Form>
                             <Grid container spacing={2}>
-                                <Grid item md={4}>
+                                <Grid item md={3}>
                                     <DictSelect
                                         label={translate("table.field.asnOrder.type")}
                                         value={formData.type}
@@ -234,13 +238,29 @@
 
                                 </Grid>
 
-                                <Grid item md={4}>
+                                <Grid item md={3}>
                                     <DictSelect
                                         label={translate("table.field.asnOrder.wkType")}
                                         value={formData.wkType}
                                         onChange={(e) => handleChange(e.target.value, 'wkType')}
                                         dictTypeCode="sys_business_type"
                                         required
+                                    />
+                                </Grid>
+
+                                <Grid item md={3}>
+                                    <TextField
+                                        label={translate("table.field.asnOrder.poCode")}
+                                        value={formData.poCode}
+                                        onChange={(e) => handleChange(e.target.value, 'poCode')}
+                                    />
+                                </Grid>
+
+                                <Grid item md={3}>
+                                    <TextField
+                                        label={translate("table.field.asnOrder.logisNo")}
+                                        value={formData.logisNo}
+                                        onChange={(e) => handleChange(e.target.value, 'logisNo')}
                                     />
                                 </Grid>
                             </Grid>
@@ -307,10 +327,7 @@
             minWidth: 100,
             flex: 1,
             editable: true,
-            // preProcessEditCellProps: (params) => {
-            //     const hasError = params.props.value.length !== '';
-            //     return { ...params.props, error: hasError };
-            // },
+            valueFormatter: (val) => val < 0 ? 0 : val
         },
         {
             field: 'splrCode',
@@ -463,7 +480,14 @@
                 disableColumnSorting
                 disableMultipleColumnsSorting
                 processRowUpdate={processRowUpdate}
-                autoPageSize
+                initialState={{
+                    pagination: {
+                        paginationModel: {
+                            pageSize: 25,
+                        },
+                    },
+                }}
+                pageSizeOptions={[10, 25, 50, 100]}
                 editMode="row"
                 checkboxSelection
                 onRowSelectionModelChange={handleSelectionChange}
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index 00c0a89..3a6c137 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -140,15 +140,13 @@
     }
 
 
-
     return (
         <Box sx={{
             position: 'relative',
             padding: '5px 10px'
         }}>
-
             <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '4px', alignItems: 'center' }}>
-                <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" variant="outlined" sx={{ width: '300px' }} size="small" />
+                <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" sx={{ width: '300px' }} size="small" />
 
                 <div style={{ display: 'flex', gap: '10px' }}>
                     <PrintsButton rows={selectedRows} />
@@ -168,6 +166,16 @@
                 disableColumnMenu={true}
                 disableColumnSorting
                 disableMultipleColumnsSorting
+                columnHeaderHeight={40}
+                rowHeight={42}
+                initialState={{
+                    pagination: {
+                        paginationModel: {
+                            pageSize: 10,
+                        },
+                    },
+                }}
+                pageSizeOptions={[10, 25, 50]}
             />
         </Box >
 
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
new file mode 100644
index 0000000..643d4ca
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
@@ -0,0 +1,177 @@
+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,
+    useGetRecordId,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import EmptyData from "../components/EmptyData";
+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);
+    const recodeId = useGetRecordId();
+
+    return (
+        <Box display="flex">
+            <List
+                resource="asnOrderItemLog"
+                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={false}
+                filters={filters}
+                filter={{ logId: recodeId }}
+                sort={{ field: "create_time", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <FilterButton />
+                        <SelectColumnsButton preferenceKey='asnOrderItemLog' />
+                        <MyExportButton />
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <StyledDatagrid
+                    preferenceKey='asnOrderItemLog'
+                    bulkActionButtons={false}
+                    rowClick={(id, resource, record) => false}
+                    omit={['id', 'asnId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']}
+                >
+                    <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} />
+                    <TextField source="updateBy$" label="common.field.updateBy" />
+                    <TextField source="createBy$" label="common.field.createBy" />
+                    <DateField source="createTime" label="common.field.createTime" showTime />
+                    <TextField source="memo" label="common.field.memo" sortable={false} />
+                </StyledDatagrid>
+            </List>
+            <PageDrawer
+                title='AsnOrderItemLog Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default AsnOrderItemLogList;
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
index 2e044bd..a1c2e7c 100644
--- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
@@ -21,21 +21,20 @@
     DeleteButton,
 } from 'react-admin';
 import { useWatch, useFormContext } from "react-hook-form";
-import { Stack, Grid, Box, Typography } from '@mui/material';
+import { Stack, Grid, Box, Typography, Card } 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 AsnOrderItemLogList from "./AsnOrderItemLogList"
 const FormToolbar = () => {
     const { getValues } = useFormContext();
 
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
-            <DeleteButton mutationMode="optimistic" />
         </Toolbar>
     )
 }
@@ -44,125 +43,106 @@
     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}>
-                            <TextInput
-                                label="table.field.asnOrderLog.code"
-                                source="code"
-                                parse={v => v}
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.asnOrderLog.poCode"
-                                source="poCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.asnOrderLog.poId"
-                                source="poId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.asnOrderLog.type"
-                                source="type"
-                                parse={v => v}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.asnOrderLog.wkType"
-                                source="wkType"
-                                parse={v => v}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.asnOrderLog.anfme"
-                                source="anfme"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.asnOrderLog.qty"
-                                source="qty"
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.asnOrderLog.logisNo"
-                                source="logisNo"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.asnOrderLog.arrTime"
-                                source="arrTime"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <SelectInput
-                                label="table.field.asnOrderLog.rleStatus"
-                                source="rleStatus"
-                                choices={[
-                                    { id: 0, name: ' 姝e父' },
-                                    { id:  1, name: ' 宸查噴鏀�' },
-                                ]}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <SelectInput
-                                label="table.field.asnOrderLog.ntyStatus"
-                                source="ntyStatus"
-                                choices={[
-                                    { id: 0, name: ' 鏈笂鎶�' },
-                                    { id:  1, name: ' 宸蹭笂鎶�' },
-                                    { id:  2, name: ' 閮ㄥ垎涓婃姤' },
-                                ]}
-                                validate={required()}
-                            />
-                        </Stack>
-
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                // validate={(values) => { }}
+                >
+                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={24} md={12}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.asnOrderLog.code"
+                                    source="code"
+                                    parse={v => v}
+                                    readOnly
+                                />
+                                <TextInput
+                                    label="table.field.asnOrderLog.poCode"
+                                    source="poCode"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <NumberInput
+                                    label="table.field.asnOrderLog.poId"
+                                    readOnly
+                                    source="poId"
+                                />
+                                <TextInput
+                                    label="table.field.asnOrderLog.type"
+                                    source="type"
+                                    readOnly
+                                    parse={v => v}
+                                    validate={required()}
+                                />
+                                <TextInput
+                                    label="table.field.asnOrderLog.wkType"
+                                    source="wkType"
+                                    readOnly
+                                    parse={v => v}
+                                    validate={required()}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <NumberInput
+                                    label="table.field.asnOrderLog.anfme"
+                                    source="anfme"
+                                    readOnly
+                                    validate={required()}
+                                />
+                                <NumberInput
+                                    label="table.field.asnOrderLog.qty"
+                                    source="qty"
+                                    readOnly
+                                    validate={required()}
+                                />
+                                <TextInput
+                                    label="table.field.asnOrderLog.logisNo"
+                                    source="logisNo"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <DateInput
+                                    label="table.field.asnOrderLog.arrTime"
+                                    readOnly
+                                    source="arrTime"
+                                />
+                                <SelectInput
+                                    label="table.field.asnOrderLog.ntyStatus"
+                                    source="ntyStatus"
+                                    readOnly
+                                    choices={[
+                                        { id: 0, name: ' 鏈笂鎶�' },
+                                        { id: 1, name: ' 宸蹭笂鎶�' },
+                                        { id: 2, name: ' 閮ㄥ垎涓婃姤' },
+                                    ]}
+                                    validate={required()}
+                                />
+                            </Stack>
+                        </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 >
+            <Grid item xs={24} md={16} sx={{ marginTop: '1em' }}>
+                <Typography variant="h6" gutterBottom >
+                    {translate('common.edit.title.common')}
+                </Typography>
+            </Grid>
+            <AsnOrderItemLogList />
+        </>
     )
 }
 
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
index a4e8f60..29c4a09 100644
--- a/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
@@ -98,7 +98,6 @@
 
 const AsnOrderLogList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
 
@@ -120,7 +119,7 @@
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                         <SelectColumnsButton preferenceKey='asnOrderLog' />
                         <MyExportButton />
                     </TopToolbar>
@@ -130,8 +129,8 @@
                 <StyledDatagrid
                     preferenceKey='asnOrderLog'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-                    rowClick={(id, resource, record) => false}
-                    expand={() => <AsnOrderLogPanel />}
+                    rowClick={'edit'}
+                    expand={false}
                     expandSingle={true}
                     omit={['id', 'createTime', 'createBy', 'memo']}
                 >
@@ -158,10 +157,6 @@
                     <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>
             <AsnOrderLogCreate
diff --git a/rsf-admin/src/page/fields/FieldsCreate.jsx b/rsf-admin/src/page/fields/FieldsCreate.jsx
index cd84b28..87afbb0 100644
--- a/rsf-admin/src/page/fields/FieldsCreate.jsx
+++ b/rsf-admin/src/page/fields/FieldsCreate.jsx
@@ -89,6 +89,7 @@
                                         label="table.field.fields.fields"
                                         source="fields"
                                         parse={v => v}
+                                        validate={required()}
                                         autoFocus
                                     />
                                 </Grid>
@@ -96,6 +97,7 @@
                                     <TextInput
                                         label="table.field.fields.fieldsAlise"
                                         source="fieldsAlise"
+                                        validate={required()}
                                         parse={v => v}
                                     />
                                 </Grid>
@@ -104,9 +106,10 @@
                                         label="table.field.fields.unique"
                                         source="unique"
                                         choices={[
-                                            { id: 0, name: ' 闈炲敮涓�' },
-                                            { id:   1, name: '  鍞竴' },
+                                            { id: 0, name: ' 闈炲繀濉�' },
+                                            { id: 1, name: '  蹇呭~' },
                                         ]}
+                                        validate={required()}
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
@@ -115,8 +118,9 @@
                                         source="flagEnable"
                                         choices={[
                                             { id: 0, name: ' 涓嶅惎鐢�' },
-                                            { id:  1, name: ' 鍚敤' },
+                                            { id: 1, name: ' 鍚敤' },
                                         ]}
+                                        validate={required()}
                                     />
                                 </Grid>
 
diff --git a/rsf-admin/src/page/fields/FieldsEdit.jsx b/rsf-admin/src/page/fields/FieldsEdit.jsx
index de6bcea..b474bd2 100644
--- a/rsf-admin/src/page/fields/FieldsEdit.jsx
+++ b/rsf-admin/src/page/fields/FieldsEdit.jsx
@@ -69,6 +69,7 @@
                                 source="fields"
                                 parse={v => v}
                                 autoFocus
+                                validate={required()}
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
@@ -76,6 +77,7 @@
                                 label="table.field.fields.fieldsAlise"
                                 source="fieldsAlise"
                                 parse={v => v}
+                                validate={required()}
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
@@ -83,8 +85,8 @@
                                 label="table.field.fields.unique"
                                 source="unique"
                                 choices={[
-                                    { id: 0, name: ' 闈炲敮涓�' },
-                                    { id:   1, name: '  鍞竴' },
+                                    { id: 0, name: ' 闈炲繀濉�' },
+                                    { id: 1, name: '  蹇呭~' },
                                 ]}
                                 validate={required()}
                             />
@@ -95,7 +97,7 @@
                                 source="flagEnable"
                                 choices={[
                                     { id: 0, name: ' 涓嶅惎鐢�' },
-                                    { id:  1, name: ' 鍚敤' },
+                                    { id: 1, name: ' 鍚敤' },
                                 ]}
                                 validate={required()}
                             />
diff --git a/rsf-admin/src/page/fields/FieldsList.jsx b/rsf-admin/src/page/fields/FieldsList.jsx
index 78970d9..795c931 100644
--- a/rsf-admin/src/page/fields/FieldsList.jsx
+++ b/rsf-admin/src/page/fields/FieldsList.jsx
@@ -60,15 +60,13 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
-    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
 
     <TextInput source="fields" label="table.field.fields.fields" />,
     <TextInput source="fieldsAlise" label="table.field.fields.fieldsAlise" />,
     <SelectInput source="unique" label="table.field.fields.unique"
         choices={[
-            { id: 0, name: ' 闈炲敮涓�' },
-            { id: 1, name: '  鍞竴' },
+            { id: 0, name: ' 闈炲繀濉�' },
+            { id: 1, name: '  蹇呭~' },
         ]}
     />,
     <SelectInput source="flagEnable" label="table.field.fields.flagEnable"
diff --git a/rsf-admin/src/page/purchase/PurchaseList.jsx b/rsf-admin/src/page/purchase/PurchaseList.jsx
index adc1921..ffdb648 100644
--- a/rsf-admin/src/page/purchase/PurchaseList.jsx
+++ b/rsf-admin/src/page/purchase/PurchaseList.jsx
@@ -123,7 +123,7 @@
         <StyledDatagrid
           preferenceKey='purchase'
           bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-          rowClick={(id, resource, record) => false}
+          rowClick={'edit'}
           expand={() => <PurchasePanel />}
           expandSingle={true}
           omit={['id', 'createTime', 'createBy', 'memo']}
diff --git a/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx b/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
index 7e3f206..f51a761 100644
--- a/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
+++ b/rsf-admin/src/page/qlyInspect/AsnSelModal.jsx
@@ -38,7 +38,7 @@
     };
 
     const [formData, setFormData] = useState({
-        code: ''
+        asnCode: ''
     });
 
     const [tableData, setTableData] = useState([]);
@@ -54,7 +54,7 @@
 
     const reset = () => {
         setFormData({
-            code: ''
+            asnCode: ''
         })
     }
 
@@ -72,9 +72,7 @@
     };
 
     const getData = async () => {
-        const res = await request.post(`/qlyInspect/asn/list`, {
-            ...formData,
-        });
+        const res = await request.post(`/qlyInspect/asn/list`, { asnCode: formData.asnCode });
         if (res?.data?.code === 200) {
             setTableData(res.data.data);
         } else {
@@ -116,8 +114,8 @@
                         <Grid item md={4}>
                             <TextField
                                 label={translate('table.field.asnOrder.code')}
-                                name="code"
-                                value={formData.code}
+                                name="asnCode"
+                                value={formData.asnCode}
                                 onChange={handleChange}
                                 size="small"
                             />
diff --git a/rsf-admin/src/page/system/role/AssignPermissions.jsx b/rsf-admin/src/page/system/role/AssignPermissions.jsx
index d9fd08b..7be80ae 100644
--- a/rsf-admin/src/page/system/role/AssignPermissions.jsx
+++ b/rsf-admin/src/page/system/role/AssignPermissions.jsx
@@ -177,11 +177,11 @@
             <Card sx={{
                 ml: 1,
                 mr: 1,
-                height: '620px'
+                height: 'calc(100vh - 140px)',
+                overflowY: 'auto'
             }}>
                 <CardContent sx={{
                     overflow: 'auto',
-                    height: '100%',
                     display: 'flex',
                     flexDirection: 'column',
                     justifyContent: 'space-between'
@@ -218,7 +218,6 @@
                         </Box>
 
                         <Box sx={{
-                            height: 480,
                             minWidth: 290,
                             overflow: 'auto',
                             marginTop: '10px',
diff --git a/rsf-admin/src/page/system/role/RoleList.jsx b/rsf-admin/src/page/system/role/RoleList.jsx
index f02ac2d..cdecd51 100644
--- a/rsf-admin/src/page/system/role/RoleList.jsx
+++ b/rsf-admin/src/page/system/role/RoleList.jsx
@@ -61,8 +61,6 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
-    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
     <TextInput source="name" label="table.field.role.name" />,
     <TextInput source="code" label="table.field.role.code" />,
 
@@ -132,8 +130,6 @@
                     preferenceKey='role'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false}
-                    expand={() => <RolePanel />}
-                    expandSingle={true}
                     omit={['id', 'createTime', 'memo']}
                 >
                     <NumberField source="id" />
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
index 4440c43..53cf77d 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
@@ -28,12 +28,13 @@
 import CustomerTopToolBar from "../../components/EditTopToolBar";
 import MemoInput from "../../components/MemoInput";
 import StatusSelectInput from "../../components/StatusSelectInput";
+import SerialRuleItemList from "./SerialRuleItemList";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
 
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
             <DeleteButton mutationMode="optimistic" />
         </Toolbar>
@@ -44,89 +45,82 @@
     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}>
-                            <TextInput
-                                label="table.field.serialRule.code"
-                                source="code"
-                                parse={v => v}
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.name"
-                                source="name"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.delimit"
-                                source="delimit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.reset"
-                                source="reset"
-                                parse={v => v}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.resetDep"
-                                source="resetDep"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.currValue"
-                                source="currValue"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.lastCode"
-                                source="lastCode"
-                                parse={v => v}
-                            />
-                        </Stack>
+                <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.serialRule.code"
+                                    source="code"
+                                    parse={v => v}
+                                    readOnly
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.name"
+                                    source="name"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.delimit"
+                                    source="delimit"
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.serialRule.reset"
+                                    source="reset"
+                                    parse={v => v}
+                                    validate={required()}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.resetDep"
+                                    source="resetDep"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.currValue"
+                                    source="currValue"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.lastCode"
+                                    source="lastCode"
+                                    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>
-                    <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 >
+            <SerialRuleItemList></SerialRuleItemList>
+        </>
     )
 }
 
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
new file mode 100644
index 0000000..f51326e
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
@@ -0,0 +1,151 @@
+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 SerialRuleItemCreate = (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.serialRuleItem.ruleId"
+                                        source="ruleId"
+                                        autoFocus
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.wkType"
+                                        source="wkType"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.feildValue"
+                                        source="feildValue"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.len"
+                                        source="len"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.lenStr"
+                                        source="lenStr"
+                                        validate={required()}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.sort"
+                                        source="sort"
+                                        validate={required()}
+                                    />
+                                </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 SerialRuleItemCreate;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
new file mode 100644
index 0000000..709c9f4
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
@@ -0,0 +1,233 @@
+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 SerialRuleItemCreate from "./SerialRuleItemCreate";
+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 CustomerTopToolBar from "../../components/EditTopToolBar";
+
+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" />,
+  <DateInput label="common.time.before" source="timeEnd" />,
+
+  <NumberInput source="ruleId" label="table.field.serialRuleItem.ruleId" />,
+  <TextInput source="wkType" label="table.field.serialRuleItem.wkType" />,
+  <TextInput
+    source="feildValue"
+    label="table.field.serialRuleItem.feildValue"
+  />,
+  <NumberInput source="len" label="table.field.serialRuleItem.len" />,
+  <NumberInput source="lenStr" label="table.field.serialRuleItem.lenStr" />,
+  <NumberInput source="sort" label="table.field.serialRuleItem.sort" />,
+
+  <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 SerialRuleItemList = () => {
+  const translate = useTranslate();
+  const [createDialog, setCreateDialog] = useState(false);
+  const [drawerVal, setDrawerVal] = useState(false);
+  const location = useLocation();
+  const ruleId = useGetRecordId();
+
+  return (
+    <>
+      {ruleId && <CustomerTopToolBar backPrevious={true} />}
+      <Box display="flex">
+        <List
+          resource="serialRuleItem"
+          sx={{
+            flexGrow: 1,
+            transition: (theme) =>
+              theme.transitions.create(["all"], {
+                duration: theme.transitions.duration.enteringScreen,
+              }),
+            marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+          }}
+          title={"menu.serialRuleItem"}
+          empty={
+            <EmptyData
+              onClick={() => {
+                setCreateDialog(true);
+              }}
+            />
+          }
+          filters={filters}
+          filter={{ ruleId: ruleId }}
+          sort={{ field: "create_time", order: "desc" }}
+          actions={
+            <TopToolbar>
+              <FilterButton />
+              <MyCreateButton
+                onClick={() => {
+                  setCreateDialog(true);
+                }}
+              />
+              <SelectColumnsButton preferenceKey="serialRuleItem" />
+              <MyExportButton />
+            </TopToolbar>
+          }
+          perPage={DEFAULT_PAGE_SIZE}
+        >
+          <StyledDatagrid
+            preferenceKey="serialRuleItem"
+            bulkActionButtons={() => (
+              <BulkDeleteButton mutationMode={OPERATE_MODE} />
+            )}
+            rowClick={false}
+            omit={["id", "createTime", "createBy", "memo"]}
+          >
+            <NumberField source="id" />
+            <NumberField
+              source="ruleId"
+              label="table.field.serialRuleItem.ruleId"
+            />
+            <TextField
+              source="wkType$"
+              label="table.field.serialRuleItem.wkType"
+            />
+            <TextField
+              source="feildValue"
+              label="table.field.serialRuleItem.feildValue"
+            />
+            <NumberField source="len" label="table.field.serialRuleItem.len" />
+            <NumberField
+              source="lenStr"
+              label="table.field.serialRuleItem.lenStr"
+            />
+            <NumberField
+              source="sort"
+              label="table.field.serialRuleItem.sort"
+            />
+
+            <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>
+        <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} />
+        <PageDrawer
+          title="SerialRuleItem Detail"
+          drawerVal={drawerVal}
+          setDrawerVal={setDrawerVal}
+        ></PageDrawer>
+      </Box>
+    </>
+  );
+};
+
+export default SerialRuleItemList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
index 6008fab..8b4c623 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
@@ -72,7 +72,6 @@
   <SearchInput source="condition" alwaysOn />,
   <DateInput label="common.time.after" source="timeStart" alwaysOn />,
   <DateInput label="common.time.before" source="timeEnd" alwaysOn />,
-
   <TextInput source="code" label="table.field.serialRule.code" />,
   <TextInput source="name" label="table.field.serialRule.name" />,
   <TextInput source="delimit" label="table.field.serialRule.delimit" />,
@@ -100,10 +99,10 @@
   const [drawerVal, setDrawerVal] = useState(false);
   const [detailDialog, setDetailDialog] = useState(false);
 
-  const navigate = useNavigate();
-  const assign = (record) => {
-    navigate(`/serialRuleItem?ruleId=${record.id}`);
-  };
+  // const navigate = useNavigate();
+  // const assign = (record) => {
+  //   navigate(`/serialRuleItem?ruleId=${record.id}`);
+  // };
 
   return (
     <Box display="flex">
@@ -145,26 +144,11 @@
           bulkActionButtons={() => (
             <BulkDeleteButton mutationMode={OPERATE_MODE} />
           )}
-          rowClick={(id, resource, record) => false}
+          rowClick={'edit'}
           omit={["id", "createTime", "createBy", "memo"]}
         >
           <NumberField source="id" />
-          <MyField
-            source="code"
-            label="table.field.serialRule.code"
-            onClick={(event, record, val) => {
-              event.stopPropagation();
-              assign(record);
-            }}
-          />
-          {/* <MyField
-            source="code"
-            label="table.field.serialRule.code"
-            onClick={() => {
-              setDetailDialog(true);
-            }}
-          /> */}
-
+          <TextField source="code" label="table.field.serialRule.code" />
           <TextField source="name" label="table.field.serialRule.name" />
           <TextField source="delimit" label="table.field.serialRule.delimit" />
           <TextField source="reset" label="table.field.serialRule.reset" />
diff --git a/rsf-admin/src/page/system/user/UserList.jsx b/rsf-admin/src/page/system/user/UserList.jsx
index 7906b2f..12e20c8 100644
--- a/rsf-admin/src/page/system/user/UserList.jsx
+++ b/rsf-admin/src/page/system/user/UserList.jsx
@@ -91,8 +91,6 @@
 
 const filters = [
   // <SearchInput source="condition" alwaysOn />,
-  <DateInput label="common.time.after" source="timeStart" alwaysOn />,
-  <DateInput label="common.time.before" source="timeEnd" alwaysOn />,
 
   <TextInput source="username" label="table.field.user.username" />,
   <TextInput source="nickname" label="table.field.user.nickname" />,
@@ -148,8 +146,6 @@
           <BulkDeleteButton mutationMode={OPERATE_MODE} />
         )}
         rowClick={(id, resource, record) => false}
-        expand={() => <UserPanel />}
-        expandSingle={true}
         omit={[
           "id",
           "email",
diff --git a/rsf-admin/src/page/task/TaskEdit.jsx b/rsf-admin/src/page/task/TaskEdit.jsx
index ab88ff1..166b846 100644
--- a/rsf-admin/src/page/task/TaskEdit.jsx
+++ b/rsf-admin/src/page/task/TaskEdit.jsx
@@ -2,180 +2,118 @@
 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 { useWatch, useFormContext, useForm } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Card } 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 TaskItemList from "./TaskItemList";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
-
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
-            <DeleteButton mutationMode="optimistic" />
+            {/* <DeleteButton mutationMode="optimistic" /> */}
         </Toolbar>
     )
 }
 
 const TaskEdit = () => {
     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}>
-                            <TextInput
-                                label="table.field.task.taskCode"
-                                source="taskCode"
-                                parse={v => v}
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.task.taskStatus"
-                                source="taskStatus"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.task.taskType"
-                                source="taskType"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.orgLoc"
-                                source="orgLoc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.orgSite"
-                                source="orgSite"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.targLoc"
-                                source="targLoc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.targSite"
-                                source="targSite"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.barcode"
-                                source="barcode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.robotCode"
-                                source="robotCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.task.exceStatus"
-                                source="exceStatus"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.expDesc"
-                                source="expDesc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.task.sort"
-                                source="sort"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.task.expCode"
-                                source="expCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.task.startTime"
-                                source="startTime"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.task.endTime"
-                                source="endTime"
-                            />
-                        </Stack>
-
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                >
+                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={24} md={16}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.task.taskCode"
+                                    source="taskCode"
+                                    readOnly
+                                    parse={v => v}
+                                    autoFocus
+                                />
+                                <TextInput
+                                    label="table.field.task.taskStatus"
+                                    readOnly
+                                    source="taskStatus$"
+                                />
+                                <TextInput
+                                    label="table.field.task.taskType"
+                                    source="taskType$"
+                                    readOnly
+                                />
+                                <TextInput
+                                    label="table.field.task.orgLoc"
+                                    source="orgLoc"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.targLoc"
+                                    source="targLoc"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.orgSite"
+                                    source="orgSite"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.task.targSite"
+                                    source="targSite"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.barcode"
+                                    source="barcode"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <NumberInput
+                                    label="table.field.task.sort"
+                                    source="sort"
+                                />
+                            </Stack>
+                        </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 >
+            <Grid item xs={24} md={16} sx={{ margin: '1em', height: 'auto' }}>
+                <Typography variant="h6" gutterBottom >
+                    {translate('common.edit.title.common')}
+                </Typography>
+            </Grid>
+            <TaskItemList />
+        </>
     )
 }
 
diff --git a/rsf-admin/src/page/taskItem/TaskItemCreate.jsx b/rsf-admin/src/page/task/TaskItemCreate.jsx
similarity index 100%
rename from rsf-admin/src/page/taskItem/TaskItemCreate.jsx
rename to rsf-admin/src/page/task/TaskItemCreate.jsx
diff --git a/rsf-admin/src/page/taskItem/TaskItemList.jsx b/rsf-admin/src/page/task/TaskItemList.jsx
similarity index 87%
rename from rsf-admin/src/page/taskItem/TaskItemList.jsx
rename to rsf-admin/src/page/task/TaskItemList.jsx
index d146e6d..67ae0ab 100644
--- a/rsf-admin/src/page/taskItem/TaskItemList.jsx
+++ b/rsf-admin/src/page/task/TaskItemList.jsx
@@ -1,62 +1,50 @@
 import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import { useFetcher, 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,
+    useGetRecordId,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
 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 MyCreateButton from "../components/MyCreateButton";
+import TaskItemCreate from "./TaskItemCreate";
+ 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
         height: '.9em'
     },
     '& .RaDatagrid-row': {
-        cursor: 'auto'
+        cursor: 'auto',
+        maring: '1em'
     },
     '& .column-name': {
     },
     '& .opt': {
-        width: 200
+        width: 220
     },
 }));
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
-    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+    <DateInput label='common.time.after' source="timeStart"  />,
+    <DateInput label='common.time.before' source="timeEnd"  />,
     <NumberInput source="taskId" label="table.field.taskItem.taskId" />,
     <NumberInput source="orderId" label="table.field.taskItem.orderId" />,
     <NumberInput source="orderType" label="table.field.taskItem.orderType" />,
@@ -85,10 +73,12 @@
     const translate = useTranslate();
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
+    const recordId = useGetRecordId();
 
     return (
         <Box display="flex">
             <List
+                resource="taskItem"
                 sx={{
                     flexGrow: 1,
                     transition: (theme) =>
@@ -99,12 +89,14 @@
                 }}
                 title={"menu.taskItem"}
                 empty={false}
+                pagination={false}
                 filters={filters}
+                filter={{taskId: recordId}}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
+                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
                         <SelectColumnsButton preferenceKey='taskItem' />
                         {/* <MyExportButton /> */}
                     </TopToolbar>
@@ -113,7 +105,7 @@
             >
                 <StyledDatagrid
                     preferenceKey='taskItem'
-                    // bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    bulkActionButtons={false}
                     rowClick={(id, resource, record) => false}
                     // expand={() => <TaskItemPanel />}
                     expandSingle={true}
@@ -132,7 +124,6 @@
                     <TextField source="batch" label="table.field.taskItem.batch" />
                     <TextField source="spec" label="table.field.taskItem.spec" />
                     <TextField source="model" label="table.field.taskItem.model" />
-
                     <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                         <TextField source="nickname" />
                     </ReferenceField>
@@ -145,6 +136,9 @@
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                 </StyledDatagrid>
             </List>
+            <TaskItemCreate
+                open={createDialog}
+                setOpen={setCreateDialog} />
             <PageDrawer
                 title='TaskItem Detail'
                 drawerVal={drawerVal}
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 7528252..7f6cce0 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -26,7 +26,7 @@
 
     Button,
 } from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
+import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
 import { styled } from '@mui/material/styles';
 import TaskCreate from "./TaskCreate";
 import TaskPanel from "./TaskPanel";
@@ -52,7 +52,7 @@
     '& .column-name': {
     },
     '& .opt': {
-        width: 200
+        width: 248
     },
 }));
 
@@ -122,10 +122,10 @@
                             <BulkDeleteButton mutationMode={OPERATE_MODE} />
                         </>
                     }
-                    rowClick={false}
-                    expand={() => <TaskPanel/>}
+                    rowClick={'edit'}
+                    expand={false}
                     expandSingle={true}
-                    omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'sort']}
+                    omit={['id', 'createTime', 'createBy', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status', 'sort']}
                 >
                     <NumberField source="id" />
                     <TextField source="taskCode" label="table.field.task.taskCode" />
@@ -145,7 +145,7 @@
                     <TextField source="createBy$" label="common.field.createBy"/>
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
                     <DateField source="createTime" label="common.field.createTime" showTime />
-                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+                    {/* <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">
                         <DoneButton sx={{ padding: '1px', fontSize: '.75rem' }} ></DoneButton>
@@ -165,6 +165,8 @@
 }
 
 export default TaskList;
+
+
 /**
  * 瀹屾垚鎿嶄綔
  * @returns 
diff --git a/rsf-admin/src/page/taskItem/TaskItemEdit.jsx b/rsf-admin/src/page/taskItem/TaskItemEdit.jsx
deleted file mode 100644
index df2b7b6..0000000
--- a/rsf-admin/src/page/taskItem/TaskItemEdit.jsx
+++ /dev/null
@@ -1,161 +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 TaskItemEdit = () => {
-    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.taskItem.taskId"
-                                source="taskId"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItem.orderId"
-                                source="orderId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItem.orderType"
-                                source="orderType"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItem.orderItemId"
-                                source="orderItemId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItem.matnrId"
-                                source="matnrId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.maktx"
-                                source="maktx"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.matnrCode"
-                                source="matnrCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.unit"
-                                source="unit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItem.anfme"
-                                source="anfme"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.batch"
-                                source="batch"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.spec"
-                                source="spec"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItem.model"
-                                source="model"
-                                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 TaskItemEdit;
diff --git a/rsf-admin/src/page/taskItem/TaskItemPanel.jsx b/rsf-admin/src/page/taskItem/TaskItemPanel.jsx
deleted file mode 100644
index 9bc1f7a..0000000
--- a/rsf-admin/src/page/taskItem/TaskItemPanel.jsx
+++ /dev/null
@@ -1,123 +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 TaskItemPanel = () => {
-    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.taskItem.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}>&nbsp;</Box>
-                    <Grid container spacing={2}>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.taskId" 
-                                property={record.taskId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.orderId" 
-                                property={record.orderId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.orderType" 
-                                property={record.orderType}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.orderItemId" 
-                                property={record.orderItemId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.matnrId" 
-                                property={record.matnrId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.maktx" 
-                                property={record.maktx}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.matnrCode" 
-                                property={record.matnrCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.unit" 
-                                property={record.unit}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.anfme" 
-                                property={record.anfme}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.batch" 
-                                property={record.batch}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.spec" 
-                                property={record.spec}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItem.model" 
-                                property={record.model}
-                            />
-                        </Grid>
-
-                    </Grid>
-                </CardContent>
-            </Card >
-        </>
-    );
-};
-
-export default TaskItemPanel;
diff --git a/rsf-admin/src/page/taskItem/index.jsx b/rsf-admin/src/page/taskItem/index.jsx
deleted file mode 100644
index da6cff0..0000000
--- a/rsf-admin/src/page/taskItem/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    ListGuesser,
-    EditGuesser,
-    ShowGuesser,
-} from "react-admin";
-
-import TaskItemList from "./TaskItemList";
-import TaskItemEdit from "./TaskItemEdit";
-
-export default {
-    list: TaskItemList,
-    edit: TaskItemEdit,
-    show: ShowGuesser,
-    recordRepresentation: (record) => {
-        return `${record.id}`
-    }
-};
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx
deleted file mode 100644
index 29f89f7..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogCreate.jsx
+++ /dev/null
@@ -1,216 +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 TaskItemLogCreate = (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.taskItemLog.taskItemId"
-                                        source="taskItemId"
-                                        autoFocus
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.taskId"
-                                        source="taskId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.orderId"
-                                        source="orderId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.orderType"
-                                        source="orderType"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.orderItemId"
-                                        source="orderItemId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.source"
-                                        source="source"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.matnrId"
-                                        source="matnrId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.maktx"
-                                        source="maktx"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.matnrCode"
-                                        source="matnrCode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.trackCode"
-                                        source="trackCode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.unit"
-                                        source="unit"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.taskItemLog.anfme"
-                                        source="anfme"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.batch"
-                                        source="batch"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.spec"
-                                        source="spec"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.model"
-                                        source="model"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.taskItemLog.fieldsIndex"
-                                        source="fieldsIndex"
-                                        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 TaskItemLogCreate;
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx
deleted file mode 100644
index 229ce32..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogEdit.jsx
+++ /dev/null
@@ -1,188 +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 TaskItemLogEdit = () => {
-    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.taskItemLog.taskItemId"
-                                source="taskItemId"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.taskId"
-                                source="taskId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.orderId"
-                                source="orderId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.orderType"
-                                source="orderType"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.orderItemId"
-                                source="orderItemId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.source"
-                                source="source"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.matnrId"
-                                source="matnrId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.maktx"
-                                source="maktx"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.matnrCode"
-                                source="matnrCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.trackCode"
-                                source="trackCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.unit"
-                                source="unit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskItemLog.anfme"
-                                source="anfme"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.batch"
-                                source="batch"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.spec"
-                                source="spec"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.model"
-                                source="model"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskItemLog.fieldsIndex"
-                                source="fieldsIndex"
-                                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 TaskItemLogEdit;
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx
deleted file mode 100644
index 6f863f8..0000000
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogPanel.jsx
+++ /dev/null
@@ -1,147 +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 TaskItemLogPanel = () => {
-    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.taskItemLog.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}>&nbsp;</Box>
-                    <Grid container spacing={2}>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.taskItemId" 
-                                property={record.taskItemId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.taskId" 
-                                property={record.taskId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.orderId" 
-                                property={record.orderId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.orderType" 
-                                property={record.orderType}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.orderItemId" 
-                                property={record.orderItemId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.source" 
-                                property={record.source}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.matnrId" 
-                                property={record.matnrId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.maktx" 
-                                property={record.maktx}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.matnrCode" 
-                                property={record.matnrCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.trackCode" 
-                                property={record.trackCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.unit" 
-                                property={record.unit}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.anfme" 
-                                property={record.anfme}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.batch" 
-                                property={record.batch}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.spec" 
-                                property={record.spec}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.model" 
-                                property={record.model}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.taskItemLog.fieldsIndex" 
-                                property={record.fieldsIndex}
-                            />
-                        </Grid>
-
-                    </Grid>
-                </CardContent>
-            </Card >
-        </>
-    );
-};
-
-export default TaskItemLogPanel;
diff --git a/rsf-admin/src/page/taskItemLog/index.jsx b/rsf-admin/src/page/taskItemLog/index.jsx
deleted file mode 100644
index 0208e30..0000000
--- a/rsf-admin/src/page/taskItemLog/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    ListGuesser,
-    EditGuesser,
-    ShowGuesser,
-} from "react-admin";
-
-import TaskItemLogList from "./TaskItemLogList";
-import TaskItemLogEdit from "./TaskItemLogEdit";
-
-export default {
-    list: TaskItemLogList,
-    edit: TaskItemLogEdit,
-    show: ShowGuesser,
-    recordRepresentation: (record) => {
-        return `${record.id}`
-    }
-};
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx
similarity index 87%
rename from rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
rename to rsf-admin/src/page/taskLog/TaskItemLogList.jsx
index 58c7f4f..acf1ae7 100644
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
+++ b/rsf-admin/src/page/taskLog/TaskItemLogList.jsx
@@ -31,18 +31,13 @@
     ReferenceArrayInput,
     AutocompleteInput,
     DeleteButton,
+    useGetRecordId,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
-import TaskItemLogCreate from "./TaskItemLogCreate";
-import TaskItemLogPanel from "./TaskItemLogPanel";
-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': {
@@ -94,13 +89,15 @@
 
 const TaskItemLogList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
+    const recodeId = useGetRecordId();
+
 
     return (
         <Box display="flex">
             <List
+                resource="taskItemLog"
                 sx={{
                     flexGrow: 1,
                     transition: (theme) =>
@@ -112,6 +109,7 @@
                 title={"menu.taskItemLog"}
                 filters={filters}
                 empty={false}
+                filter={{logId: Number(recodeId) }}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
@@ -130,7 +128,6 @@
                     omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']}
                 >
                     <NumberField source="id" />
-                    <NumberField source="taskItemId" label="table.field.taskItemLog.taskItemId" />
                     <NumberField source="taskId" label="table.field.taskItemLog.taskId" />
                     <NumberField source="orderId" label="table.field.taskItemLog.orderId" />
                     <TextField source="orderType" label="table.field.taskItemLog.orderType" />
@@ -145,15 +142,9 @@
                     <TextField source="batch" label="table.field.taskItemLog.batch" />
                     <TextField source="spec" label="table.field.taskItemLog.spec" />
                     <TextField source="model" label="table.field.taskItemLog.model" />
-                    <TextField source="fieldsIndex" label="table.field.taskItemLog.fieldsIndex" />
-
-                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>
+                    <TextField source="updateBy$" label="common.field.updateBy" />
+                    <TextField source="createBy$" label="common.field.createBy" />
                     <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} />
diff --git a/rsf-admin/src/page/taskLog/TaskLogEdit.jsx b/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
index ec5c658..6c366fc 100644
--- a/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
+++ b/rsf-admin/src/page/taskLog/TaskLogEdit.jsx
@@ -2,187 +2,122 @@
 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 { useWatch, useFormContext, useForm } from "react-hook-form";
+import { Stack, Grid, Box, Typography, Card } 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 TaskItemLogList from "./TaskItemLogList";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
-
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
-            <DeleteButton mutationMode="optimistic" />
+            {/* <DeleteButton mutationMode="optimistic" /> */}
         </Toolbar>
     )
 }
 
-const TaskLogEdit = () => {
+const TaskItemLog = () => {
     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}>
-                            <NumberInput
-                                label="table.field.taskLog.taskId"
-                                source="taskId"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.taskCode"
-                                source="taskCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskLog.taskStatus"
-                                source="taskStatus"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskLog.taskType"
-                                source="taskType"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.orgLoc"
-                                source="orgLoc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.orgSite"
-                                source="orgSite"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.targLoc"
-                                source="targLoc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.targSite"
-                                source="targSite"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.barcode"
-                                source="barcode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.robotCode"
-                                source="robotCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskLog.exceStatus"
-                                source="exceStatus"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.expDesc"
-                                source="expDesc"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.taskLog.sort"
-                                source="sort"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.taskLog.expCode"
-                                source="expCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.taskLog.startTime"
-                                source="startTime"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <DateInput
-                                label="table.field.taskLog.endTime"
-                                source="endTime"
-                            />
-                        </Stack>
-
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                >
+                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={24} md={16}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.task.taskCode"
+                                    source="taskCode"
+                                    readOnly
+                                    parse={v => v}
+                                    autoFocus
+                                />
+                                <TextInput
+                                    label="table.field.task.taskStatus"
+                                    readOnly
+                                    source="taskStatus$"
+                                />
+                                <TextInput
+                                    label="table.field.task.taskType"
+                                    source="taskType$"
+                                    readOnly
+                                />
+                                <TextInput
+                                    label="table.field.task.orgLoc"
+                                    source="orgLoc"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.targLoc"
+                                    source="targLoc"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.orgSite"
+                                    source="orgSite"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.task.targSite"
+                                    source="targSite"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.task.barcode"
+                                    source="barcode"
+                                    readOnly
+                                    parse={v => v}
+                                />
+                                <NumberInput
+                                    label="table.field.task.sort"
+                                    readOnly
+                                    source="sort"
+                                />
+                            </Stack>
+                        </Grid>
                     </Grid>
-                    <Grid item xs={12} md={4}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.common')}
-                        </Typography>
-                        <StatusSelectInput />
-                        <Box mt="2em" />
-                        <MemoInput />
-                    </Grid>
+                </SimpleForm>
+            </Edit >
+            <Card sx={{ marginTop: '1em', }}>
+                <Grid item xs={24} md={16} sx={{ margin: '1em' }}>
+                    <Typography variant="h6" gutterBottom >
+                        {translate('common.edit.title.common')}
+                    </Typography>
+                    <TaskItemLogList />
                 </Grid>
-            </SimpleForm>
-        </Edit >
+            </Card>
+        </>
     )
 }
 
-export default TaskLogEdit;
+export default TaskItemLog;
diff --git a/rsf-admin/src/page/taskLog/TaskLogList.jsx b/rsf-admin/src/page/taskLog/TaskLogList.jsx
index 5ffad18..fd93f6e 100644
--- a/rsf-admin/src/page/taskLog/TaskLogList.jsx
+++ b/rsf-admin/src/page/taskLog/TaskLogList.jsx
@@ -54,7 +54,7 @@
     '& .column-name': {
     },
     '& .opt': {
-        width: 200
+        width: 250
     },
 }));
 
@@ -125,43 +125,31 @@
                 <StyledDatagrid
                     preferenceKey='taskLog'
                     bulkActionButtons={false}
-                    rowClick={(id, resource, record) => false}
-                    expand={() => <TaskLogPanel />}
+                    rowClick={'edit'}
+                    expand={false}
                     expandSingle={true}
                     omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'robotCode', 'exceStatus', 'sort', 'expCode']}
                 >
                     <NumberField source="id" />
-                    <NumberField source="taskId" label="table.field.taskLog.taskId" />
-                    <TextField source="taskCode" label="table.field.taskLog.taskCode" />
-                    <NumberField source="taskStatus" label="table.field.taskLog.taskStatus" />
-                    <NumberField source="taskType" label="table.field.taskLog.taskType" />
-                    <TextField source="orgLoc" label="table.field.taskLog.orgLoc" />
-                    <TextField source="orgSite" label="table.field.taskLog.orgSite" />
-                    <TextField source="targLoc" label="table.field.taskLog.targLoc" />
-                    <TextField source="targSite" label="table.field.taskLog.targSite" />
-                    <TextField source="barcode" label="table.field.taskLog.barcode" />
-                    <TextField source="robotCode" label="table.field.taskLog.robotCode" />
-                    <NumberField source="exceStatus" label="table.field.taskLog.exceStatus" />
-                    <TextField source="expDesc" label="table.field.taskLog.expDesc" />
-                    <NumberField source="sort" label="table.field.taskLog.sort" />
-                    <TextField source="expCode" label="table.field.taskLog.expCode" />
-                    <DateField source="startTime" label="table.field.taskLog.startTime" showTime />
-                    <DateField source="endTime" label="table.field.taskLog.endTime" showTime />
-
-                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>
+                    <TextField source="taskCode" label="table.field.task.taskCode" />
+                    <NumberField source="taskStatus$" label="table.field.task.taskStatus" />
+                    <NumberField source="taskType$" label="table.field.task.taskType" />
+                    <TextField source="orgLoc" label="table.field.task.orgLoc" />
+                    <TextField source="orgSite" label="table.field.task.orgSite" />
+                    <TextField source="targLoc" label="table.field.task.targLoc" />
+                    <TextField source="targSite" label="table.field.task.targSite" />
+                    <TextField source="barcode" label="table.field.task.barcode" />
+                    <TextField source="robotCode" label="table.field.task.robotCode" />
+                    <NumberField source="exceStatus" label="table.field.task.exceStatus" />
+                    <TextField source="expDesc" label="table.field.task.expDesc" />
+                    <NumberField source="sort" label="table.field.task.sort" />
+                    <TextField source="expCode" label="table.field.task.expCode" />
+                    <TextField source="updateBy$" label="common.field.updateBy" />
+                    <TextField source="createBy$" label="common.field.createBy" />
                     <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} />
+                    {/* <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>
             {/* <TaskLogCreate
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index 37aa8a0..21bc154 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -135,7 +135,7 @@
                     <NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" />
                     <TextField source="matnrName" label="table.field.warehouseAreasItem.matnrName" />
                     <TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />
-                    <TextField source="barcode" label="table.field.warehouseAreasItem.barcode" />
+                    <TextField source="trackCode" label="table.field.warehouseAreasItem.barcode" />
                     <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" />
                     <TextField source="batch" label="table.field.warehouseAreasItem.batch" />
                     <TextField source="unit" label="table.field.warehouseAreasItem.unit" />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index 72da8c5..aaffe4f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -16,6 +16,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -130,6 +131,16 @@
         return mobileService.getDeltByCode(code);
     }
 
+    @PreAuthorize("hasAuthority('manager:asnOrderItem:list')")
+    @ApiOperation("鑾峰彇鎷栫洏鏄庣粏")
+    @PostMapping("/asnOrderItem/container")
+    public R getItemByContainer(@RequestBody Map<String, Object> params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.getItemByContainer(params);
+    }
+
     @PreAuthorize("hasAuthority('manager:waitPakin:update')")
     @ApiOperation("缁勬嫋")
     @PostMapping("/waitPakin/merge")
@@ -193,11 +204,11 @@
     }
 
 
-    @ApiOperation("蹇甫璐ㄦ")
+    @ApiOperation("蹇�熻川妫�")
     @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
     @PostMapping("/inspect/check/update")
-    public R checkUpdate(@RequestBody QlyIsptItem params) {
-        if (Objects.isNull(params)) {
+    public R checkUpdate(@RequestBody List<QlyIsptItem> params) {
+        if (Objects.isNull(params) || params.isEmpty()) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         return mobileService.checkUpdate(params);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index a1c2e6f..b63ead2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -48,7 +48,7 @@
 
     R checkObjs(CheckObjParams params);
 
-    R checkUpdate(QlyIsptItem params);
+    R checkUpdate(List<QlyIsptItem> params);
 
     R operateToStock(OpStockParams params);
 
@@ -59,4 +59,6 @@
     R taskGetLocs(String code) throws Exception;
 
     R completeOrder(Long id, Long loginUserId);
+
+    R getItemByContainer(Map<String, Object> params);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index 92838b8..0229436 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -22,6 +22,7 @@
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
+import com.vincent.rsf.server.manager.enums.PakinIOStatus;
 import com.vincent.rsf.server.manager.mapper.*;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.system.constant.CodeRes;
@@ -34,8 +35,10 @@
 import com.vincent.rsf.server.system.mapper.UserMapper;
 import com.vincent.rsf.server.system.service.FieldsItemService;
 import com.vincent.rsf.server.system.service.UserLoginService;
+import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.utils.ExtendFieldsUtils;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import net.sf.jsqlparser.statement.select.Wait;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -66,7 +69,7 @@
     @Autowired
     private TenantMapper tenantService;
     @Autowired
-    private UserMapper userService;
+    private UserService userService;
     @Autowired
     private UserLoginService userLoginService;
     @Autowired
@@ -147,7 +150,7 @@
         if (user.getStatus() != 1) {
             return R.parse(CodeRes.USER_10002);
         }
-        if (!user.getPassword().equals(param.getPassword())) {
+        if (!userService.comparePassword(user.getPassword(), param.getPassword())) {
             return R.parse(CodeRes.USER_10003);
         }
 
@@ -245,7 +248,7 @@
                 throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒");
             }
             if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
-                throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
+                throw new CoolException("鐗╂枡:" + dto.getMaktx() +  "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
             }
             Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty();
             orderItem.setQty(itemRcptQty)
@@ -494,36 +497,36 @@
         if (Objects.isNull(params.getIsptCode())) {
             throw new CoolException("璐ㄦ鍗曚笉鑳戒负绌�");
         }
-        if (Objects.isNull(params.getMatnrCode())) {
-            throw new CoolException("鐗╂枡缂栫爜涓嶈兘涓虹┖锛�");
-        }
         QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>().eq(QlyInspect::getCode, params.getIsptCode()));
         if (Objects.isNull(inspect)) {
             throw new CoolException("璐ㄦ鍗曟嵁涓嶅瓨鍦紒!");
         }
-        QlyIsptItem isptItem = qlyIsptItemService.getOne(new LambdaQueryWrapper<QlyIsptItem>()
-                .eq(QlyIsptItem::getMatnrCode, params.getMatnrCode())
+        List<QlyIsptItem> isptItems = qlyIsptItemService.list(new LambdaQueryWrapper<QlyIsptItem>()
+                .eq(StringUtils.isNotBlank(params.getMatnrCode()), QlyIsptItem::getMatnrCode, StringUtils.isNotBlank(params.getMatnrCode()) ? params.getMatnrCode() : null)
                 .eq(QlyIsptItem::getIspectId, inspect.getId()));
-        if (Objects.isNull(isptItem)) {
+        if (Objects.isNull(isptItems)) {
             throw new CoolException("璐ㄦ鍗曟槑缁嗕笉瀛樺湪锛侊紒");
         }
-
-        CheckObjDto objDto = new CheckObjDto();
-        objDto.setIsptCode(inspect.getCode())
-                .setAsnCode(inspect.getAsnCode())
-                .setId(isptItem.getId())
-                .setMatnrCode(isptItem.getMatnrCode())
-                .setMaktx(isptItem.getMaktx())
-                .setDisQty(isptItem.getDisQty())
-                .setDlyQty(isptItem.getDlyQty())
-                .setRcptQty(isptItem.getRcptQty())
-                .setIsptResult(isptItem.getIsptResult())
-                .setSplrBatch(isptItem.getSplrBatch())
-                .setSplrName(isptItem.getSplrName())
-                .setPicPath(isptItem.getPicPath())
-                .setMemo(isptItem.getMemo())
-                .setSafeQty(isptItem.getSafeQty());
-        return R.ok(objDto);
+        List<CheckObjDto> dtos = new ArrayList<>();
+        isptItems.forEach(isptItem -> {
+            CheckObjDto objDto = new CheckObjDto();
+            objDto.setIsptCode(inspect.getCode())
+                    .setAsnCode(inspect.getAsnCode())
+                    .setId(isptItem.getId())
+                    .setMatnrCode(isptItem.getMatnrCode())
+                    .setMaktx(isptItem.getMaktx())
+                    .setDisQty(isptItem.getDisQty())
+                    .setDlyQty(isptItem.getDlyQty())
+                    .setRcptQty(isptItem.getRcptQty())
+                    .setIsptResult(isptItem.getIsptResult())
+                    .setSplrBatch(isptItem.getSplrBatch())
+                    .setSplrName(isptItem.getSplrName())
+                    .setPicPath(isptItem.getPicPath())
+                    .setMemo(isptItem.getMemo())
+                    .setSafeQty(isptItem.getSafeQty());
+            dtos.add(objDto);
+        });
+        return R.ok(dtos);
     }
 
     /**
@@ -532,14 +535,12 @@
      * @return
      */
     @Override
-    public R checkUpdate(QlyIsptItem params) {
-        if (Objects.isNull(params.getId())) {
+    public R checkUpdate(List<QlyIsptItem> params) {
+        if (Objects.isNull(params) || params.isEmpty()) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         IsptItemsParams itemsParams = new IsptItemsParams();
-        List<QlyIsptItem> items = new ArrayList<>();
-        items.add(params);
-        itemsParams.setIsptItem(items).setType("0");
+        itemsParams.setIsptItem(params).setType("0");
         if (qlyIsptItemService.batchUpdate(itemsParams)) {
             return R.ok();
         } else {
@@ -729,6 +730,46 @@
     }
 
     /**
+     * @author Ryan
+     * @description 閫氳繃瀹瑰櫒鑾峰彇缁勬嫋鐗╂枡
+     * @param
+     * @return
+     * @time 2025/4/9 16:57
+     */
+    @Override
+    public R getItemByContainer(Map<String, Object> params) {
+        //鑾峰彇缁勬嫋鏈敓鎴愪换鍔$殑缁勬嫋妗�
+        List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+        WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .eq(WaitPakin::getBarcode, params.get("barcode").toString())
+                .in(WaitPakin::getIoStatus, asList));
+        if (Objects.isNull(waitPakin)) {
+            return R.ok(new ArrayList<>());
+        }
+        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+                .eq(WaitPakinItem::getPakinId, waitPakin.getId()));
+        if (pakinItems.isEmpty()) {
+            return R.ok(new ArrayList<>());
+        }
+        List<String> list = pakinItems.stream().map(WaitPakinItem::getTrackCode).collect(Collectors.toList());
+        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>()
+                .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx")
+                .lambda()
+                .in(WarehouseAreasItem::getTrackCode, list)
+                .groupBy(WarehouseAreasItem::getSplrBatch,
+                        WarehouseAreasItem::getTrackCode);
+        List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+        for (int i = 0; i < warehouseAreasItems.size(); i++) {
+            for (WaitPakinItem pakinItem : pakinItems) {
+                if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) {
+                    warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme());
+                }
+            }
+        }
+        return R.ok(warehouseAreasItems);
+    }
+
+    /**
      * 鑾峰彇ReceiptDetlsDtos
      */
     private R getAsnOrderItem(List<AsnOrderItem> items) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
index 6522439..767d42d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
@@ -37,6 +37,8 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty("涓诲崟ID")
+    private Long logId;
 
     @ApiModelProperty("Item ID")
     private Long asnItemId;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
index 498f156..18dc247 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
@@ -37,6 +37,9 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty("涓诲崟ID")
+    private Long logId;
+
     /**
      * 涓诲崟ID
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java
index 22db504..606c1b7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskLog.java
@@ -1,8 +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 lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.text.SimpleDateFormat;
@@ -230,6 +234,34 @@
 //            null    // 澶囨敞
 //    );
 
+    public String getTaskStatus$(){
+        if (Cools.isEmpty(this.taskStatus)) {
+            return null;
+        }
+        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+        DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
+                .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_TASK_STATUS)
+                .eq(DictData::getValue, this.taskStatus));
+        if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) {
+            return null;
+        }
+        return dictDatas.getLabel();
+    }
+
+    public String getTaskType$() {
+        if (Cools.isEmpty(this.taskType)) {
+            return null;
+        }
+        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+        DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
+                .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_TASK_TYPE)
+                .eq(DictData::getValue, this.taskType));
+        if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) {
+            return null;
+        }
+        return dictDatas.getLabel();
+    }
+
     public String getStartTime$(){
         if (Cools.isEmpty(this.startTime)){
             return "";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
index d5ae471..d4b1461 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -152,6 +152,10 @@
                 return "寰呭叆搴�";
             case  1:
                 return " 鍏ュ簱涓�";
+            case 2:
+                return "浠诲姟鎵ц涓�";
+            case 3:
+                return "浠诲姟瀹屾垚";
             default:
                 return String.valueOf(this.ioStatus);
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 3018867..6870db3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -1,12 +1,14 @@
 package com.vincent.rsf.server.manager.service;
 
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Map;
 
 public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
 
     List<WarehouseAreasItem> getList();
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
index e826e7f..e4330bc 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -106,8 +106,7 @@
     public List<AsnOrder> getUnInspect(Map<String, Object> params) {
         List<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>()
                 .eq(AsnOrder::getStatus, 1)
-                .eq(!Objects.isNull(params.get("asnCode")), AsnOrder::getCode, !Objects.isNull(params.get("asnCode")) ? params.get("asnCode").toString() : "")
-                .eq(AsnOrder::getNtyStatus, 0));
+                .eq(!Objects.isNull(params.get("asnCode")) && StringUtils.isNotBlank(params.get("asnCode").toString()), AsnOrder::getCode, StringUtils.isNotBlank(params.get("asnCode").toString()) ? params.get("asnCode").toString() : null));
         return asnOrders;
     }
 
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 b50c28e..75bdb0e 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
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.manager.controller.params.PakinItem;
@@ -13,15 +14,13 @@
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service("waitPakinService")
@@ -36,6 +35,8 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private WaitPakinItemService waitPakinItemService;
+    @Autowired
+    private WarehouseAreasItemService warehouseAreasItemService;
     @Autowired
     private LocService locService;
 
@@ -55,52 +56,73 @@
         if (StringUtils.isBlank(waitPakin.getBarcode())) {
             throw new CoolException("鍙傛暟閿欒锛氭墭鐩樼爜涓虹┖锛侊紒");
         }
-
-        List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
-        if (!list.isEmpty()) {
-            List<String> stringList = list.stream().map(WaitPakin::getCode).collect(Collectors.toList());
-            String join = StringUtils.join(stringList, ",");
-            throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + join + "浣跨敤锛侊紒");
+        List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+        WaitPakin list = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .notIn(WaitPakin::getIoStatus, asList)
+                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+        if (!Objects.isNull(list)) {
+            throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + list.getCode() + "浣跨敤锛侊紒");
         }
-
         List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
         if (!locs.isEmpty()) {
             List<String> locCodes = locs.stream().map(Loc::getCode).collect(Collectors.toList());
             String join = StringUtils.join(locCodes, ",");
             throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶搴撲綅锛�" + join + "浣跨敤锛侊紒");
         }
-
         double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
 
-        WaitPakin pakin = new WaitPakin();
-
-        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
-        if (StringUtils.isBlank(ruleCode)) {
-            throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+        WaitPakin waitPakin1 = new WaitPakin();
+        WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .in(WaitPakin::getIoStatus, asList)
+                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+        if (Objects.isNull(pakin)) {
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+            }
+            waitPakin1.setCode(ruleCode)
+                    //鐘舵�佷慨鏀逛负鍏ュ簱涓�
+                    .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
+                    .setAnfme(sum)
+                    .setBarcode(waitPakin.getBarcode());
+            if (!this.save(waitPakin1)) {
+                throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+        } else {
+            BeanUtils.copyProperties(pakin, waitPakin1);
+            waitPakin1.setAnfme(sum);
+            if (!this.saveOrUpdate(waitPakin1)) {
+                throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+            }
         }
-        pakin.setCode(ruleCode)
-                //鐘舵�佷慨鏀逛负鍏ュ簱涓�
-                .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
-                .setAnfme(sum)
-                .setBarcode(waitPakin.getBarcode());
-        if (!this.save(pakin)) {
-            throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
-        }
-
         /**鐗╂枡璺熻釜鐮�*/
         List<String> tracks = waitPakin.getItems().stream().map(PakinItem::getTrackCode).collect(Collectors.toList());
-
-        List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
-                .in(AsnOrderItem::getTrackCode, tracks));
-        if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) {
-            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+                .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+                .in(WaitPakinItem::getTrackCode, tracks));
+        if (!pakinItems.isEmpty()) {
+            if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
+                    .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+                    .in(WaitPakinItem::getTrackCode, tracks))) {
+                throw new CoolException("鍘熷崟鎹竻闄ゅけ璐ワ紒锛�");
+            }
         }
 
+        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>()
+                .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx")
+                .lambda()
+                .in(WarehouseAreasItem::getTrackCode, tracks)
+                .groupBy(WarehouseAreasItem::getSplrBatch,
+                        WarehouseAreasItem::getTrackCode);
+        List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+        if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) {
+            throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+        }
         List<WaitPakinItem> items = new ArrayList<>();
-        for (AsnOrderItem item : asnOrderItems) {
+        for (WarehouseAreasItem item : warehouseAreasItems) {
             WaitPakinItem pakinItem = new WaitPakinItem();
             pakinItem.setAnfme(item.getAnfme())
-                    .setPakinId(pakin.getId())
+                    .setPakinId(waitPakin1.getId())
                     .setAsnId(item.getAsnId())
                     .setAsnCode(item.getAsnCode())
                     .setAsnItemId(item.getId())
@@ -112,9 +134,10 @@
                     .setMatnrCode(item.getMatnrCode());
             for (PakinItem waitPakinItem : waitPakin.getItems()) {
                 if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {
-//                    Double v = item.getWorkQty() + waitPakinItem.getReceiptQty();
+                    if (waitPakinItem.getReceiptQty() > item.getAnfme()) {
+                        throw new CoolException("缁勬嫋鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+                    }
                     pakinItem
-                            .setWorkQty(waitPakinItem.getReceiptQty())
                             .setAnfme(waitPakinItem.getReceiptQty())
                             .setTrackCode(waitPakinItem.getTrackCode());
                     /**鏇存柊鍗曟嵁鎵ц涓簱瀛�*/
@@ -127,9 +150,14 @@
             }
             items.add(pakinItem);
         }
+        double sum1 = items.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
         if (!waitPakinItemService.saveBatch(items)) {
             throw new CoolException("缁勬嫋鏄庣粏淇濆瓨澶辫触锛侊紒");
         }
+        waitPakin1.setAnfme(sum1);
+        if (!this.updateById(waitPakin1)) {
+            throw new CoolException("缁勬嫋鏁伴噺淇敼澶辫触锛侊紒");
+        }
         return pakin;
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
index 1687006..9981a93 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
@@ -21,4 +21,5 @@
 
     String encodePassword(String password);
 
+    User selectByUsernameWithoutTenant(String username, Long tenantId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
index a08797c..dea12b4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
@@ -65,4 +65,9 @@
         return password == null ? null : bCryptPasswordEncoder.encode(password);
     }
 
+    @Override
+    public User selectByUsernameWithoutTenant(String username, Long tenantId) {
+        return baseMapper.selectByUsernameWithoutTenant(username,tenantId);
+    }
+
 }
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 2fa0bcc..93d6e25 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -12,10 +12,10 @@
       matching-strategy: ANT_PATH_MATCHER
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-#    username: root
-#    url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-    username: rsf
+#    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+#    username: rsf
     password: 34821015
     type: com.alibaba.druid.pool.DruidDataSource
     druid:

--
Gitblit v1.9.1