From 4a620b306e2e0ff208dbea260f998ffce8d08e39 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期五, 06 三月 2026 15:46:05 +0800
Subject: [PATCH] #站点区域

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java |    2 
 rsf-admin/src/page/basStationArea/BasStationAreaEdit.jsx                                      |  120 ++++------------
 rsf-admin/src/page/orders/transfer/ManualCreate.jsx                                           |    9 
 rsf-admin/src/i18n/zh.js                                                                      |   18 ++
 rsf-admin/src/page/components/WarehouseSelect.jsx                                             |    5 
 rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx                                     |    2 
 rsf-admin/src/i18n/en.js                                                                      |   18 ++
 rsf-admin/src/page/ResourceContent.js                                                         |    3 
 rsf-admin/src/page/basStationArea/BasStationAreaList.jsx                                      |  109 +++++++--------
 rsf-admin/src/page/basStationArea/BasStationAreaCreate.jsx                                    |  112 ++++-----------
 rsf-admin/src/page/components/StickyDataTable.jsx                                             |    5 
 11 files changed, 175 insertions(+), 228 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 8ea701e..7db3a65 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -137,6 +137,7 @@
         title: 'Update'
     },
     menu: {
+        basStationArea: 'BasStationArea',
         dashboard: 'Dashboard',
         settings: 'Settings',
         basicInfo: 'BasicInfo',
@@ -228,6 +229,23 @@
     },
     table: {
         field: {
+            basStationArea: {
+                type: "type",
+                stationAreaName: "stationAreaName",
+                inAble: "inAble",
+                outAble: "outAble",
+                useStatus: "useStatus",
+                area: "area",
+                isCrossZone: "isCrossZone",
+                crossZoneArea: "crossZoneArea",
+                isWcs: "isWcs",
+                wcsData: "wcsData",
+                containerType: "containerType",
+                barcode: "barcode",
+                autoTransfer: "autoTransfer",
+                stationAreaId: "stationAreaId",
+                stationAlias: "stationAlias",
+            },
             taskPathTemplateMerge: {
                 templateCode: "templateCode",
                 templateName: "templateName",
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 51aee49..352ab0a 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -138,6 +138,7 @@
         title: '淇敼'
     },
     menu: {
+        basStationArea: '绔欑偣鍖哄煙',
         dashboard: '鎺у埗鍙�',
         settings: '涓汉璁剧疆',
         basicInfo: '鍩虹淇℃伅',
@@ -244,6 +245,23 @@
     },
     table: {
         field: {
+            basStationArea: {
+                type: "绫诲瀷",
+                stationAreaName: "绔欑偣鍖哄煙鍚嶇О",
+                inAble: "鍏ュ簱",
+                outAble: "鍑哄簱",
+                useStatus: "浣跨敤鐘舵��",
+                area: "鍖哄煙",
+                isCrossZone: "鏄惁璺ㄥ尯",
+                crossZoneArea: "璺ㄥ尯鍖哄煙",
+                isWcs: "鏄惁WCS",
+                wcsData: "WCS鏁版嵁",
+                containerType: "瀹瑰櫒绫诲瀷",
+                barcode: "鏉$爜",
+                autoTransfer: "鑷姩绉讳綅",
+                stationAreaId: "鍖哄煙缂栫爜",
+                stationAlias: "鍖哄煙鍖呭惈绔欑偣",
+            },
             taskPathTemplateMerge: {
                 templateCode: "妯℃澘缂栫爜",
                 templateName: "妯℃澘鍚嶇О",
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index 88b9a97..b9aefe3 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -69,6 +69,7 @@
 import menuPda from './menuPda';
 import taskPathTemplate from './taskPathTemplate';
 import taskPathTemplateMerge from './taskPathTemplateMerge';
+import basStationArea from './basStationArea';
 
 const ResourceContent = (node) => {
   switch (node.component) {
@@ -202,6 +203,8 @@
       return taskPathTemplate;
     case 'taskPathTemplateMerge':
       return taskPathTemplateMerge;
+    case 'basStationArea':
+      return basStationArea;
     // case "locItem":
     //   return locItem;
     default:
diff --git a/rsf-admin/src/page/basStationArea/BasStationAreaCreate.jsx b/rsf-admin/src/page/basStationArea/BasStationAreaCreate.jsx
index ce98977..29cbc67 100644
--- a/rsf-admin/src/page/basStationArea/BasStationAreaCreate.jsx
+++ b/rsf-admin/src/page/basStationArea/BasStationAreaCreate.jsx
@@ -17,6 +17,7 @@
     useNotify,
     Form,
     useCreateController,
+    SelectArrayInput,
 } from 'react-admin';
 import {
     Dialog,
@@ -30,6 +31,8 @@
 import DialogCloseButton from "../components/DialogCloseButton";
 import StatusSelectInput from "../components/StatusSelectInput";
 import MemoInput from "../components/MemoInput";
+import DictionarySelect from "../components/DictionarySelect";
+import DictionaryArraySelect from "../components/DictionaryArraySelect";
 
 const BasStationAreaCreate = (props) => {
     const { open, setOpen } = props;
@@ -84,13 +87,7 @@
                         </DialogTitle>
                         <DialogContent sx={{ mt: 2 }}>
                             <Grid container rowSpacing={2} columnSpacing={2}>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.type"
-                                        source="type"
-                                        autoFocus
-                                    />
-                                </Grid>
+
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.basStationArea.stationAreaName"
@@ -99,74 +96,23 @@
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.inAble"
-                                        source="inAble"
-                                    />
+                                    <ReferenceInput source="area" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}>
+                                        <SelectInput
+                                            label="table.field.basStation.area"
+                                            optionText="name"
+                                            optionValue="id"
+                                            fullWidth
+                                            validate={[required()]}
+                                        />
+                                    </ReferenceInput>
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.outAble"
-                                        source="outAble"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.useStatus"
-                                        source="useStatus"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.area"
-                                        source="area"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.isCrossZone"
-                                        source="isCrossZone"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.crossZoneArea"
-                                        source="crossZoneArea"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.isWcs"
-                                        source="isWcs"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.wcsData"
-                                        source="wcsData"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.containerType"
-                                        source="containerType"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.barcode"
-                                        source="barcode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.basStationArea.autoTransfer"
-                                        source="autoTransfer"
+                                    <DictionaryArraySelect
+                                        label={translate("table.field.basStation.containerType")}
+                                        name="containerTypes"
+                                        size="small"
+                                        validate={[required()]}
+                                        dictTypeCode="sys_container_type"
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
@@ -177,11 +123,21 @@
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.basStationArea.stationAlias"
-                                        source="stationAlias"
-                                        parse={v => v}
-                                    />
+
+                                    <ReferenceArrayInput source="stationAlias" reference="basStation">
+                                        <SelectArrayInput
+                                            label="table.field.basStationArea.stationAlias"
+                                            optionText="stationName"
+                                            optionValue="id"
+                                            fullWidth
+                                        // validate={(value) => {
+                                        //     if (value && value.length > 1) {
+                                        //         return '鍙兘閫夋嫨涓�涓ā鏉�';
+                                        //     }
+                                        //     return undefined;
+                                        // }}
+                                        />
+                                    </ReferenceArrayInput>
                                 </Grid>
 
                                 <Grid item xs={6} display="flex" gap={1}>
diff --git a/rsf-admin/src/page/basStationArea/BasStationAreaEdit.jsx b/rsf-admin/src/page/basStationArea/BasStationAreaEdit.jsx
index 7eaff13..36d4940 100644
--- a/rsf-admin/src/page/basStationArea/BasStationAreaEdit.jsx
+++ b/rsf-admin/src/page/basStationArea/BasStationAreaEdit.jsx
@@ -18,7 +18,7 @@
     NumberField,
     required,
     useRecordContext,
-    DeleteButton,
+    DeleteButton, SelectArrayInput,
 } from 'react-admin';
 import { useWatch, useFormContext } from "react-hook-form";
 import { Stack, Grid, Box, Typography } from '@mui/material';
@@ -28,6 +28,8 @@
 import CustomerTopToolBar from "../components/EditTopToolBar";
 import MemoInput from "../components/MemoInput";
 import StatusSelectInput from "../components/StatusSelectInput";
+import DictionarySelect from "../components/DictionarySelect";
+import DictionaryArraySelect from "../components/DictionaryArraySelect";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
@@ -64,13 +66,6 @@
                             {translate('common.edit.title.main')}
                         </Typography>
                         <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.type"
-                                source="type"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
                             <TextInput
                                 label="table.field.basStationArea.stationAreaName"
                                 source="stationAreaName"
@@ -78,74 +73,23 @@
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.inAble"
-                                source="inAble"
-                            />
+                            <ReferenceInput source="area" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}>
+                                <SelectInput
+                                    label="table.field.basStation.area"
+                                    optionText="name"
+                                    optionValue="id"
+                                    fullWidth
+                                    validate={[required()]}
+                                />
+                            </ReferenceInput>
                         </Stack>
                         <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.outAble"
-                                source="outAble"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.useStatus"
-                                source="useStatus"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.area"
-                                source="area"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.isCrossZone"
-                                source="isCrossZone"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.crossZoneArea"
-                                source="crossZoneArea"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.isWcs"
-                                source="isWcs"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.wcsData"
-                                source="wcsData"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.containerType"
-                                source="containerType"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.barcode"
-                                source="barcode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.basStationArea.autoTransfer"
-                                source="autoTransfer"
+                            <DictionaryArraySelect
+                                label={translate("table.field.basStation.containerType")}
+                                name="containerTypes"
+                                size="small"
+                                validate={[required()]}
+                                dictTypeCode="sys_container_type"
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
@@ -156,21 +100,23 @@
                             />
                         </Stack>
                         <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.basStationArea.stationAlias"
-                                source="stationAlias"
-                                parse={v => v}
-                            />
+                            <ReferenceArrayInput source="stationAlias" reference="basStation">
+                                <SelectArrayInput
+                                    label="table.field.basStationArea.stationAlias"
+                                    optionText="stationName"
+                                    optionValue="id"
+                                    fullWidth
+                                    validate={[required()]}
+                                // validate={(value) => {
+                                //     if (value && value.length > 1) {
+                                //         return '鍙兘閫夋嫨涓�涓ā鏉�';
+                                //     }
+                                //     return undefined;
+                                // }}
+                                />
+                            </ReferenceArrayInput>
                         </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>
diff --git a/rsf-admin/src/page/basStationArea/BasStationAreaList.jsx b/rsf-admin/src/page/basStationArea/BasStationAreaList.jsx
index c7d14ce..723a749 100644
--- a/rsf-admin/src/page/basStationArea/BasStationAreaList.jsx
+++ b/rsf-admin/src/page/basStationArea/BasStationAreaList.jsx
@@ -2,10 +2,9 @@
 import { useNavigate } from 'react-router-dom';
 import {
     List,
-    DatagridConfigurable,
     SearchInput,
     TopToolbar,
-    SelectColumnsButton,
+    ColumnsButton,
     EditButton,
     FilterButton,
     CreateButton,
@@ -33,7 +32,6 @@
     DeleteButton,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
-import { styled } from '@mui/material/styles';
 import BasStationAreaCreate from "./BasStationAreaCreate";
 import BasStationAreaPanel from "./BasStationAreaPanel";
 import EmptyData from "../components/EmptyData";
@@ -41,22 +39,10 @@
 import MyExportButton from '../components/MyExportButton';
 import PageDrawer from "../components/PageDrawer";
 import MyField from "../components/MyField";
+import StickyDataTable from "@/page/components/StickyDataTable";
 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
-    },
-}));
+import useTableLayout from '@/utils/useTableLayout';
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
@@ -97,8 +83,14 @@
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
 
+    const { boxMaxWidth, boxMaxHeight } = useTableLayout(drawerVal);
+
     return (
-        <Box display="flex">
+        <Box display="flex" sx={{
+            '& .opt': {
+                width: 200
+            }
+        }}>
             <List
                 sx={{
                     flexGrow: 1,
@@ -116,52 +108,55 @@
                     <TopToolbar>
                         <FilterButton />
                         <MyCreateButton onClick={() => { setCreateDialog(true) }} />
-                        <SelectColumnsButton preferenceKey='basStationArea' />
+                        <ColumnsButton storeKey='basStationArea' />
                         <MyExportButton />
                     </TopToolbar>
                 )}
                 perPage={DEFAULT_PAGE_SIZE}
             >
-                <StyledDatagrid
-                    preferenceKey='basStationArea'
-                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-                    rowClick={(id, resource, record) => false}
-                    expand={() => <BasStationAreaPanel />}
-                    expandSingle={true}
-                    omit={['id', 'createTime', 'createBy', 'memo']}
+                <Box
+                    sx={{
+                        position: 'relative',
+                        maxHeight: boxMaxHeight,
+                        maxWidth: boxMaxWidth,
+                        overflowX: 'auto',
+                        overflowY: 'auto',
+                        '& .MuiTableCell-root': {
+                            whiteSpace: 'nowrap',
+                        }
+                    }}
                 >
-                    <NumberField source="id" />
-                    <NumberField source="type" label="table.field.basStationArea.type" />
-                    <TextField source="stationAreaName" label="table.field.basStationArea.stationAreaName" />
-                    <NumberField source="inAble" label="table.field.basStationArea.inAble" />
-                    <NumberField source="outAble" label="table.field.basStationArea.outAble" />
-                    <TextField source="useStatus" label="table.field.basStationArea.useStatus" />
-                    <NumberField source="area" label="table.field.basStationArea.area" />
-                    <NumberField source="isCrossZone" label="table.field.basStationArea.isCrossZone" />
-                    <TextField source="crossZoneArea" label="table.field.basStationArea.crossZoneArea" />
-                    <NumberField source="isWcs" label="table.field.basStationArea.isWcs" />
-                    <TextField source="wcsData" label="table.field.basStationArea.wcsData" />
-                    <TextField source="containerType" label="table.field.basStationArea.containerType" />
-                    <TextField source="barcode" label="table.field.basStationArea.barcode" />
-                    <NumberField source="autoTransfer" label="table.field.basStationArea.autoTransfer" />
-                    <TextField source="stationAreaId" label="table.field.basStationArea.stationAreaId" />
-                    <TextField source="stationAlias" label="table.field.basStationArea.stationAlias" />
+                    <StickyDataTable
+                        storeKey='basStationArea'
+                        bulkActionButtons={<BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                        rowClick={(id, resource, record) => false}
+                        stickyRight={['opt']}
+                        expandSingle={true}
+                        hiddenColumns={['id', 'createTime', 'createBy', 'memo']}
+                    >
+                        <NumberField source="id" />
+                        <TextField source="stationAreaName" label="table.field.basStationArea.stationAreaName" />
+                        <NumberField source="area" label="table.field.basStationArea.area" />
+                        <TextField source="containerType" label="table.field.basStationArea.containerType" />
+                        <TextField source="stationAreaId" label="table.field.basStationArea.stationAreaId" />
+                        <TextField source="stationAlias" label="table.field.basStationArea.stationAlias" />
 
-                    <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>
+                        <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 />
+
+                        <WrapperField source="opt" cellClassName="opt" label="common.field.opt">
+                            <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
+                            <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+                        </WrapperField>
+                    </StickyDataTable>
+                </Box>
+
             </List>
             <BasStationAreaCreate
                 open={createDialog}
diff --git a/rsf-admin/src/page/components/StickyDataTable.jsx b/rsf-admin/src/page/components/StickyDataTable.jsx
index 7b71e0a..d5f8b0f 100644
--- a/rsf-admin/src/page/components/StickyDataTable.jsx
+++ b/rsf-admin/src/page/components/StickyDataTable.jsx
@@ -209,6 +209,11 @@
             '& .RaBulkActionsToolbar-toolbar:not(.RaBulkActionsToolbar-collapsed)': {
                 transform: `translateY(${bulkActionsOffsetY}px)`,
                 zIndex: 10,
+                opacity: 1,
+            },
+            '& .RaBulkActionsToolbar-toolbar.RaBulkActionsToolbar-collapsed': {
+                zIndex: 10,
+                opacity: 1,
             },
         };
     }, [bulkActionsOffsetY]);
diff --git a/rsf-admin/src/page/components/WarehouseSelect.jsx b/rsf-admin/src/page/components/WarehouseSelect.jsx
index 18e5507..355898c 100644
--- a/rsf-admin/src/page/components/WarehouseSelect.jsx
+++ b/rsf-admin/src/page/components/WarehouseSelect.jsx
@@ -7,7 +7,7 @@
 import { Select, MenuItem, FormControl, InputLabel } from '@mui/material';
 
 const WarehouseSelect = (props) => {
-    const { dictTypeCode, label, name, validate, ...params } = props;
+    const { dictTypeCode, label, name, validate, onChange, ...params } = props;
     const translate = useTranslate();
     const notify = useNotify();
     const [list, setList] = useState([]);
@@ -47,6 +47,9 @@
     const handleChange = (event) => {
         const selectedValue = event.target.value;
         field.onChange(selectedValue);
+        if (onChange) {
+            onChange(event);
+        }
     };
 
     const validValue = list.some(item => item.id === field.value) ? field.value : '';
diff --git a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
index 70e29ce..dd78dd6 100644
--- a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
+++ b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
@@ -211,7 +211,7 @@
     const [columns, setColumns] = useState([
         { field: 'maktx', headerName: translate('table.field.matnr.name'), width: 300 },
         { field: 'matnrCode', headerName: translate('table.field.matnr.code'), width: 200 },
-        { field: 'locCode', headerName: translate('table.field.locItem.locCode'), width: 100 },
+        // { field: 'locCode', headerName: translate('table.field.locItem.locCode'), width: 100 },
         { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 },
         { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 },
         { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 },
diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
index 99e66f5..cf1b715 100644
--- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
+++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -140,16 +140,16 @@
     }
 
     const newAddClick = () => {
-        if (formData.orgAreaId == null || formData.orgAreaId == undefined) {
+        if (!formData.orgAreaId) {
             notify("鍘熷簱鍖轰笉鑳戒负绌猴紒锛�", { type: 'error' })
             return
         }
-        if (formData.tarAreaId == null || formData.tarAreaId == undefined) {
+        if (!formData.tarAreaId) {
             notify("鐩爣搴撳尯涓嶈兘涓虹┖锛侊紒", { type: 'error' })
             return
         }
         console.log(formData);
-        
+
         setCreateDialog(true)
     }
 
@@ -177,6 +177,7 @@
                         </Grid>
                         <Grid item md={2}>
                             <WarehouseSelect
+                                name="orgAreaId"
                                 value={formData.orgAreaId}
                                 variant="filled"
                                 dictTypeCode="warehouse"
@@ -185,6 +186,7 @@
                         </Grid>
                         <Grid item md={2}>
                             <WarehouseSelect
+                                name="tarAreaId"
                                 label={translate("table.field.transfer.tarAreaName")}
                                 value={formData.tarAreaId}
                                 dictTypeCode="warehouse"
@@ -489,6 +491,7 @@
                 }}
                 pageSizeOptions={[10, 20, 50, 100]}
                 editMode="row"
+                processRowUpdate={processRowUpdate}
                 checkboxSelection
                 rowSelectionModel={tableIds}
                 onRowSelectionModelChange={handleSelectionChange}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
index 0e9c566..d3168c2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -353,7 +353,7 @@
         if (!locs.isEmpty()) {
             Page<LocItem> page = new Page<>(params.getCurrent(), params.getPageSize());
             QueryWrapper<LocItem> wrapper = new QueryWrapper<>();
-            wrapper.select("id, matnr_id, maktx, matnr_code, SUM(anfme) anfme, SUM(work_qty) work_qty, SUM(qty) qty, batch, unit, fields_index, model, spec, loc_id, loc_code ")
+            wrapper.select("id, matnr_id, maktx, matnr_code, SUM(anfme) anfme, SUM(work_qty) work_qty, SUM(qty) qty, batch, unit, fields_index, model, spec")
                     .lambda()
                     .eq(StringUtils.isNotBlank(params.getMatnrCode()), LocItem::getMatnrCode, params.getMatnrCode())
                     .like(StringUtils.isNotBlank(params.getMaktx()), LocItem::getMaktx, params.getMaktx());

--
Gitblit v1.9.1