DESKTOP-LMJ82IJ\Eno
2025-04-13 e411a471a08717964937be2e6ac0eadaa84961ca
#修改
1. 组拖界面优化
6个文件已删除
15个文件已修改
1072 ■■■■■ 已修改文件
rsf-admin/src/i18n/en.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/ResourceContent.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrderLog/index.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/qlyInspect/QlyInspectList.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/qlyIsptItem/QlyIsptItemList.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/waitPakin/WaitPakinList.jsx 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js
@@ -631,6 +631,7 @@
                ansId: "ansId",
                asnCode: "asnCode",
                barcode: "barcode",
                flagDefect: "Defective",
                anfme: "anfme",
                ioStatus: "ioStatus",
            },
@@ -821,6 +822,7 @@
        creatcode: "creatcode",
        print: "print",
        enable: 'enable',
        detail: "Detail",
        unenable: 'unenable',
        locInit: 'loc init',
        siteInit: 'site init',
rsf-admin/src/i18n/zh.js
@@ -641,6 +641,7 @@
                ansId: "收货通知单号",
                asnCode: "收货通知单编码",
                barcode: "容器码",
                flagDefect: "不良品",
                anfme: "数量",
                ioStatus: "状态",
            },
@@ -832,6 +833,7 @@
        inspection: "报检",
        creatcode: "生成条码",
        print: "打印",
        detail: "查看详情",
        enable: '启用',
        unenable: '禁用',
        locInit: '库位初始化',
rsf-admin/src/page/ResourceContent.js
@@ -23,18 +23,14 @@
import qlyInspect from './qlyInspect';
import qlyIsptItem from './qlyIsptItem';
import dictType from './system/dicts/dictType';
// import dictData from './system/dicts/dictData';
import companys from './basicInfo/companys';
import locType from './basicInfo/locType';
import locArea from './basicInfo//locArea';
import locAreaMatRela from './basicInfo/locAreaMatRela';
import locAreaMat from './basicInfo/locAreaMat';
// import serialRuleItem from './system/serialRuleItem';
import serialRule from './system/serialRule';
import whMat from './basicInfo/whMat';
import asnOrder from './orders/asnOrder';
// import asnOrderItem from './orders/asnOrderItem';
// import purchaseItem from './purchaseItem';
import purchase from './purchase';
import fields from './fields';
import fieldsItem from './fieldsItem';
@@ -43,7 +39,7 @@
import waitPakin from './waitPakin';
import waitPakinItem from './waitPakinItem';
import waitPakinLog from './waitPakinLog';
import asnOrderLog from './asnOrderLog';
import asnOrderLog from './orders/asnOrderLog';
import task from './task';
import taskLog from './taskLog';
@@ -89,12 +85,8 @@
            return qlyIsptItem;
        case 'dictType':
            return dictType;
        // case 'dictData':
        //     return dictData;
        case 'companys':
            return companys;
        // case 'serialRuleItem':
        //     return serialRuleItem;
        case 'serialRule':
            return serialRule;
        case 'whMat':
@@ -105,8 +97,6 @@
            return asnOrderItem;
        case 'asnOrderLog':
            return asnOrderLog;
        // case 'purchaseItem':
        //     return purchaseItem;
        case 'purchase':
            return purchase;
        case 'fields':
rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
File was deleted
rsf-admin/src/page/asnOrderLog/AsnOrderLogCreate.jsx
File was deleted
rsf-admin/src/page/asnOrderLog/AsnOrderLogEdit.jsx
File was deleted
rsf-admin/src/page/asnOrderLog/AsnOrderLogList.jsx
File was deleted
rsf-admin/src/page/asnOrderLog/AsnOrderLogPanel.jsx
File was deleted
rsf-admin/src/page/asnOrderLog/index.jsx
File was deleted
rsf-admin/src/page/qlyInspect/QlyInspectEdit.jsx
@@ -28,12 +28,13 @@
import CustomerTopToolBar from "../components/EditTopToolBar";
import MemoInput from "../components/MemoInput";
import StatusSelectInput from "../components/StatusSelectInput";
import QlyIsptItemList from "./QlyIsptItemList";
const FormToolbar = () => {
    const { getValues } = useFormContext();
    return (
        <Toolbar sx={{ justifyContent: 'space-between' }}>
        <Toolbar sx={{ justifyContent: 'end' }}>
            <SaveButton />
            <DeleteButton mutationMode="optimistic" />
        </Toolbar>
@@ -42,8 +43,10 @@
const QlyInspectEdit = () => {
    const translate = useTranslate();
    const business = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_business_type')) || [];
    return (
        <>
        <Edit
            redirect="list"
            mutationMode={EDIT_MODE}
@@ -56,32 +59,32 @@
                toolbar={<FormToolbar />}
                mode="onTouched"
                defaultValues={{}}
            // validate={(values) => { }}
            >
                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
                    <Grid item xs={12} md={8}>
                    <Grid container width={{ xs: '100%', xl: '100%' }}>
                        <Grid item xs={24} md={12}>
                        <Typography variant="h6" gutterBottom>
                            {translate('common.edit.title.main')}
                        </Typography>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.qlyInspect.asnItemId"
                                source="asnItemId"
                                autoFocus
                                <TextInput
                                    label="table.field.qlyInspect.asnCode"
                                    source="asnCode"
                                    readOnly
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.qlyInspect.code"
                                source="code"
                                parse={v => v}
                                    readOnly
                                validate={required()}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.qlyInspect.wkType"
                                <AutocompleteInput
                                    choices={business}
                                    optionText="label"
                                    label="table.field.asnOrder.wkType"
                                source="wkType"
                                    readOnly
                                    optionValue="value"
                                parse={v => v}
                            />
                        </Stack>
@@ -89,39 +92,33 @@
                            <NumberInput
                                label="table.field.qlyInspect.safeQty"
                                source="safeQty"
                                    readOnly
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.qlyInspect.dlyQty"
                                source="dlyQty"
                                    readOnly
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.qlyInspect.rcptQty"
                                source="rcptQty"
                                    readOnly
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.qlyInspect.isptQty"
                                source="isptQty"
                                    readOnly
                            />
                        </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 >
            <QlyIsptItemList />
        </>
    )
}
rsf-admin/src/page/qlyInspect/QlyInspectList.jsx
@@ -128,8 +128,7 @@
                <StyledDatagrid
                    preferenceKey='qlyInspect'
                    bulkActionButtons={<BulkDeleteButton mutationMode={OPERATE_MODE} />}
                    rowClick={(id, resource, record) => false}
                    expand={() => <QlyInspectPanel />}
                    rowClick='edit'
                    expandSingle={true}
                    omit={['id', 'createTime', 'createBy', 'memo', 'asnId', 'statusBool']}
                >
@@ -143,14 +142,9 @@
                    <NumberField source="dlyQty" label="table.field.qlyInspect.dlyQty" />
                    <NumberField source="rcptQty" label="table.field.qlyInspect.rcptQty" />
                    <NumberField source="isptQty" label="table.field.qlyInspect.isptQty" />
                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <TextField source="updateBy$" label="common.field.updateBy"  />
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <TextField source="createBy$" label="common.field.createBy" />
                    <DateField source="createTime" label="common.field.createTime" showTime />
                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                    <TextField source="memo" label="common.field.memo" sortable={false} />
rsf-admin/src/page/qlyIsptItem/QlyIsptItemList.jsx
@@ -88,7 +88,6 @@
const QlyIsptItemList = () => {
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
rsf-admin/src/page/system/dicts/dictType/DictDataList.jsx
@@ -43,7 +43,7 @@
import MyCreateButton from "../../../components/MyCreateButton";
import MyExportButton from '../../../components/MyExportButton';
import PageDrawer from "../../../components/PageDrawer";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
import DictDataEdit from "./DictDataEdit";
import { use } from "react";
@@ -117,7 +117,7 @@
                            <MyExportButton />
                        </TopToolbar>
                    )}
                    perPage={DEFAULT_PAGE_SIZE}
                    perPage={DEFAULT_ITEM_PAGE_SIZE}
                >
                    <StyledDatagrid
                        bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
@@ -140,7 +140,7 @@
                        <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">
                            <Button onClick={() => { setEditDialog(true) }}>编辑</Button>
                            <Button onClick={() => { setEditDialog(true) }} label="ra.action.edit"></Button>
                            <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode='pessimistic' redirect={"/dictType/" + dictId} />
                        </WrapperField>
                    </StyledDatagrid>
rsf-admin/src/page/waitPakin/WaitPakinEdit.jsx
@@ -2,38 +2,29 @@
import {
    Edit,
    SimpleForm,
    FormDataConsumer,
    useTranslate,
    TextInput,
    NumberInput,
    BooleanInput,
    DateInput,
    SelectInput,
    ReferenceInput,
    ReferenceArrayInput,
    AutocompleteInput,
    SaveButton,
    Toolbar,
    Labeled,
    NumberField,
    required,
    useRecordContext,
    DeleteButton,
} from 'react-admin';
import { useWatch, useFormContext } from "react-hook-form";
import { Stack, Grid, Box, Typography } from '@mui/material';
import * as Common from '@/utils/common';
import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
import EditBaseAside from "../components/EditBaseAside";
import CustomerTopToolBar from "../components/EditTopToolBar";
import MemoInput from "../components/MemoInput";
import StatusSelectInput from "../components/StatusSelectInput";
import WaitPakinItem from "../waitPakinItem";
import WaitPakinItemList from "../waitPakinItem/WaitPakinItemList";
const FormToolbar = () => {
    const { getValues } = useFormContext();
    return (
        <Toolbar sx={{ justifyContent: 'space-between' }}>
        <Toolbar sx={{ justifyContent: 'end' }}>
            <SaveButton />
            <DeleteButton mutationMode="optimistic" />
        </Toolbar>
@@ -44,6 +35,7 @@
    const translate = useTranslate();
    return (
        <>
        <Edit
            redirect="list"
            mutationMode={EDIT_MODE}
@@ -56,9 +48,8 @@
                toolbar={<FormToolbar />}
                mode="onTouched"
                defaultValues={{}}
            // validate={(values) => { }}
            >
                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
                    <Grid container width={{ xs: '100%', xl: '100%' }}>
                    <Grid item xs={12} md={8}>
                        <Typography variant="h6" gutterBottom>
                            {translate('common.edit.title.main')}
@@ -67,39 +58,43 @@
                            <TextInput
                                label="table.field.waitPakin.code"
                                source="code"
                                    readOnly
                                parse={v => v}
                                autoFocus
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.waitPakin.ansId"
                                    readOnly
                                source="ansId"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.waitPakin.asnCode"
                                    readOnly
                                source="asnCode"
                                    parse={v => v}
                                />
                                <SelectInput
                                    label="table.field.waitPakin.flagDefect"
                                    readOnly
                                    source="flagDefect"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <TextInput
                                label="table.field.waitPakin.barcode"
                                    readOnly
                                source="barcode"
                                parse={v => v}
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <NumberInput
                                label="table.field.waitPakin.anfme"
                                    readOnly
                                source="anfme"
                            />
                        </Stack>
                        <Stack direction='row' gap={2}>
                            <SelectInput
                                label="table.field.waitPakin.ioStatus"
                                    readOnly
                                source="ioStatus"
                                choices={[
                                    { id: 0, name: '待入库' },
@@ -107,19 +102,12 @@
                                ]}
                            />
                        </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 >
            <WaitPakinItemList />
        </>
    )
}
rsf-admin/src/page/waitPakin/WaitPakinList.jsx
@@ -39,12 +39,9 @@
import WaitPakinCreate from "./WaitPakinCreate";
import WaitPakinPanel from "./WaitPakinPanel";
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 AddIcon from '@mui/icons-material/Add';
import request from '@/utils/request';
@@ -64,7 +61,6 @@
const filters = [
    <SearchInput source="condition" alwaysOn />,
    <TextInput source="code" label="table.field.waitPakin.code" />,
    <NumberInput source="ansId" label="table.field.waitPakin.ansId" />,
    <TextInput source="asnCode" label="table.field.waitPakin.asnCode" />,
@@ -76,7 +72,6 @@
            { id: 1, name: ' 入库中' },
        ]}
    />,
    <TextInput label="common.field.memo" source="memo" />,
    <SelectInput
        label="common.field.status"
@@ -91,7 +86,6 @@
const WaitPakinList = () => {
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
@@ -113,7 +107,6 @@
                actions={(
                    <TopToolbar>
                        <FilterButton />
                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                        <SelectColumnsButton preferenceKey='waitPakin' />
                        <MyExportButton />
                    </TopToolbar>
@@ -123,8 +116,8 @@
                <StyledDatagrid
                    preferenceKey='waitPakin'
                    bulkActionButtons={<> <CreateTaskButton /> <BulkDeleteButton mutationMode={OPERATE_MODE} /></>}
                    rowClick={(id, resource, record) => false}
                    expand={() => <WaitPakinPanel />}
                    rowClick='edit'
                    expand={false}
                    expandSingle={true}
                    omit={['id', 'createTime', 'createBy', 'memo']}
                >
@@ -135,20 +128,14 @@
                    <TextField source="barcode" label="table.field.waitPakin.barcode" />
                    <NumberField source="anfme" label="table.field.waitPakin.anfme" />
                    <TextField source="ioStatus$" label="table.field.waitPakin.ioStatus" sortable={false} />
                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <TextField source="updateBy$" label="common.field.updateBy" />
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <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} />
                        <EditButton label="toolbar.detail" sx={{ padding: '1px', fontSize: '.75rem' }} />
                        {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */}
                    </WrapperField>
                </StyledDatagrid>
            </List>
rsf-admin/src/page/waitPakinItem/WaitPakinItemList.jsx
@@ -31,6 +31,7 @@
    ReferenceArrayInput,
    AutocompleteInput,
    DeleteButton,
    useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -41,7 +42,7 @@
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 { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
import * as Common from '@/utils/common';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -60,7 +61,6 @@
const filters = [
    <SearchInput source="condition" alwaysOn />,
    <NumberInput source="pakinId" label="table.field.waitPakinItem.pakinId" />,
    <TextInput source="maktx" label="table.field.waitPakinItem.maktx" />,
    <NumberInput source="matnrId" label="table.field.waitPakinItem.matnrId" />,
@@ -71,7 +71,6 @@
    <TextInput source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />,
    <NumberInput source="qty" label="table.field.waitPakinItem.qty" />,
    <TextInput source="batch" label="table.field.waitPakinItem.batch" />,
    <TextInput label="common.field.memo" source="memo" />,
    <SelectInput
        label="common.field.status"
@@ -86,13 +85,15 @@
const WaitPakinItemList = () => {
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const pakinId = useGetRecordId();
    return (
        <Box display="flex">
            <List
            resource="waitPakinItem"
            filter={{pakinId: pakinId}}
                sx={{
                    flexGrow: 1,
                    transition: (theme) =>
@@ -113,7 +114,7 @@
                        <MyExportButton />
                    </TopToolbar>
                )}
                perPage={DEFAULT_PAGE_SIZE}
                perPage={DEFAULT_ITEM_PAGE_SIZE}
            >
                <StyledDatagrid
                    preferenceKey='waitPakinItem'
@@ -132,21 +133,13 @@
                    <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />
                    <NumberField source="qty" label="table.field.waitPakinItem.qty" />
                    <TextField source="batch" label="table.field.waitPakinItem.batch" />
                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <TextField source="updateBy$" label="common.field.updateBy" />
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
                        <TextField source="nickname" />
                    </ReferenceField>
                    <TextField source="createBy$" label="common.field.createBy"  />
                    <TextField source="flagDefect" label="common.field.createBy"  />
                    <DateField source="createTime" label="common.field.createTime" showTime />
                    <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                    <TextField source="memo" label="common.field.memo" sortable={false} />
                    <WrapperField cellClassName="opt" label="common.field.opt">
                        {/* <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> */}
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                    </WrapperField>
                </StyledDatagrid>
            </List>
            <WaitPakinItemCreate
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -145,6 +145,7 @@
    @ApiOperation("组拖")
    @PostMapping("/waitPakin/merge")
    public R pikinOrder(@RequestBody WaitPakinParam waitPakin) {
        Long userId = getLoginUserId();
        if (Objects.isNull(waitPakin)) {
            return R.error("参数不能为空!!");
        }
@@ -154,7 +155,7 @@
        if (Objects.isNull(waitPakin.getItems()) || waitPakin.getItems().isEmpty()) {
            return R.error("跟踪码不能为空!!");
        }
        return R.ok(mobileService.mergeItems(waitPakin));
        return R.ok(mobileService.mergeItems(waitPakin, userId));
    }
    @PreAuthorize("hasAuthority('manager:waitPakin:update')")
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -38,7 +38,7 @@
    R getDeltByCode(String code);
    WaitPakin mergeItems(WaitPakinParam waitPakin);
    WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId);
    WaitPakin unBind(WaitPakinParam param);
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -16,7 +16,6 @@
import com.vincent.rsf.server.common.security.JwtSubject;
import com.vincent.rsf.server.common.utils.CommonUtil;
import com.vincent.rsf.server.common.utils.FieldsUtils;
import com.vincent.rsf.server.common.utils.JSONUtil;
import com.vincent.rsf.server.common.utils.JwtUtil;
import com.vincent.rsf.server.manager.controller.params.IsptItemsParams;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
@@ -32,13 +31,10 @@
import com.vincent.rsf.server.system.entity.*;
import com.vincent.rsf.server.system.mapper.FieldsMapper;
import com.vincent.rsf.server.system.mapper.TenantMapper;
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;
@@ -48,7 +44,6 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -370,7 +365,8 @@
     */
    @Override
    public R getReceiptAreas() {
        return R.ok(warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type)));
        List<WarehouseAreas> areas = warehouseAreasService.list(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getType, WarehouseAreaType.WAREHOUSE_AREA_RECEIPT.type));
        return R.ok(areas);
    }
    /**
@@ -403,15 +399,16 @@
    }
    /**
     * @param
     * @param userId
     * @return
     * @author Ryan
     * @description PDA组拖
     * @param
     * @return
     * @time 2025/3/29 14:26
     */
    @Override
    public WaitPakin mergeItems(WaitPakinParam waitPakin) {
        return waitPakinService.mergeItems(waitPakin);
    public WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId) {
        return waitPakinService.mergeItems(waitPakin, userId);
    }
    /**
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WaitPakinService.java
@@ -6,7 +6,7 @@
public interface WaitPakinService extends IService<WaitPakin> {
    WaitPakin mergeItems(WaitPakinParam waitPakin);
    WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId);
    WaitPakin unBind(WaitPakinParam param);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -2,7 +2,6 @@
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;
import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
@@ -16,7 +15,6 @@
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;
@@ -41,15 +39,16 @@
    private LocService locService;
    /**
     * @param
     * @param userId
     * @return
     * @author Ryan
     * @description 组拖
     * @param
     * @return
     * @time 2025/3/29 14:42
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public WaitPakin mergeItems(WaitPakinParam waitPakin) {
    public WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId) {
        if (waitPakin.getItems().isEmpty()) {
            throw new CoolException("参数错误:物料跟踪码为空!");
        }
@@ -125,6 +124,8 @@
                        .setFieldsIndex(item.getFieldsIndex())
                        .setMatnrId(item.getMatnrId())
                        .setMaktx(item.getMaktx())
                        .setUpdateBy(userId)
                        .setCreateBy(userId)
                        .setMatnrCode(item.getMatnrCode());
                for (PakinItem waitPakinItem : waitPakin.getItems()) {
                    if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {
@@ -159,6 +160,8 @@
                        .setFieldsIndex(item.getFieldsIndex())
                        .setMatnrId(item.getMatnrId())
                        .setMaktx(item.getMaktx())
                        .setUpdateBy(userId)
                        .setCreateBy(userId)
                        .setMatnrCode(item.getMatnrCode());
                for (PakinItem waitPakinItem : waitPakin.getItems()) {
                    if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {