From db475501a4073d48f2fd804ca6428b0f86fe6332 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 08 五月 2025 18:14:59 +0800 Subject: [PATCH] 动态字段显示问题修复 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java | 14 + rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java | 14 + rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java | 7 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java | 2 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx | 118 ++++++++--- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java | 6 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 1 rsf-admin/src/page/locItem/LocItemList.jsx | 117 ++++++++--- rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx | 104 +++++++-- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java | 14 + rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx | 139 ++++++++----- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java | 12 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java | 16 + rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx | 1 14 files changed, 399 insertions(+), 166 deletions(-) diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx index 4e433ce..fa639b7 100644 --- a/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx +++ b/rsf-admin/src/page/basicInfo/matnr/MatnrList.jsx @@ -210,7 +210,6 @@ <PrintButton /> </WrapperField> setColumns([...arr, ...fields, opt]); - } else { notify(msg); } diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locItem/LocItemList.jsx index 8822317..6469f7e 100644 --- a/rsf-admin/src/page/locItem/LocItemList.jsx +++ b/rsf-admin/src/page/locItem/LocItemList.jsx @@ -29,10 +29,11 @@ NumberInput, ReferenceInput, ReferenceArrayInput, + useRefresh, AutocompleteInput, DeleteButton, } from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; +import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import LocItemCreate from "./LocItemCreate"; import LocItemPanel from "./LocItemPanel"; @@ -43,6 +44,7 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -95,7 +97,6 @@ const LocItemList = () => { const translate = useTranslate(); - const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); @@ -124,40 +125,7 @@ )} perPage={DEFAULT_PAGE_SIZE} > - <StyledDatagrid - preferenceKey='locItem' - bulkActionButtons={false} - rowClick={false} - expand={false} - expandSingle={true} - omit={['id', 'createTime','locId','orderId', 'orderItemId', 'matnrId', 'splrBatch','workQty','qty', 'createBy', 'memo','fieldsIndex']} - - > - <NumberField source="id" /> - <NumberField source="locId" label="table.field.locItem.locId" /> - <TextField source="locCode" label="table.field.locItem.locCode" /> - <NumberField source="orderId" label="table.field.locItem.orderId" /> - <TextField source="type$" label="table.field.locItem.type" /> - <NumberField source="orderItemId" label="table.field.locItem.orderItemId" /> - <NumberField source="wkType$" label="table.field.locItem.wkType" /> - <NumberField source="matnrId" label="table.field.locItem.matnrId" /> - <TextField source="matnrCode" label="table.field.locItem.matnrCode" /> - <TextField source="maktx" label="table.field.locItem.maktx" /> - <TextField source="spec" label="table.field.locItem.spec" /> - <TextField source="model" label="table.field.locItem.model" /> - <TextField source="batch" label="table.field.locItem.batch" /> - <TextField source="trackCode" label="table.field.locItem.trackCode" /> - <TextField source="unit" label="table.field.locItem.unit" /> - <NumberField source="anfme" label="table.field.locItem.anfme" /> - <TextField source="splrBatch" label="table.field.locItem.splrBatch" /> - <TextField source="fieldsIndex" label="table.field.locItem.fieldsIndex" /> - <TextField source="updateBy$" label="common.field.updateBy" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <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} /> - </StyledDatagrid> + <DynamicFields /> </List> <LocItemCreate open={createDialog} @@ -174,3 +142,80 @@ } export default LocItemList; + + +const DynamicFields = (props) => { + const translate = useTranslate(); + const notify = useNotify(); + const [columns, setColumns] = useState([]); + const { isLoading } = useListContext(); + const refresh = useRefresh(); + useEffect(() => { + getDynamicFields(); + }, []); + + const getDynamicFields = async () => { + const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); + if (code == 200) { + const arr = [ + <NumberField source="id" />, + <NumberField source="locId" label="table.field.locItem.locId" />, + <TextField source="locCode" label="table.field.locItem.locCode" />, + <NumberField source="orderId" label="table.field.locItem.orderId" />, + <TextField source="type$" label="table.field.locItem.type" />, + <NumberField source="orderItemId" label="table.field.locItem.orderItemId" />, + <NumberField source="wkType$" label="table.field.locItem.wkType" />, + <NumberField source="matnrId" label="table.field.locItem.matnrId" />, + <TextField source="matnrCode" label="table.field.locItem.matnrCode" />, + <TextField source="maktx" label="table.field.locItem.maktx" />, + <TextField source="spec" label="table.field.locItem.spec" />, + <TextField source="model" label="table.field.locItem.model" />, + <TextField source="batch" label="table.field.locItem.batch" />, + <TextField source="trackCode" label="table.field.locItem.trackCode" />, + <TextField source="unit" label="table.field.locItem.unit" />, + <NumberField source="anfme" label="table.field.locItem.anfme" />, + <TextField source="splrBatch" label="table.field.locItem.splrBatch" />, + <TextField source="fieldsIndex" label="table.field.locItem.fieldsIndex" />, + ] + const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) + const lastArr = [ + <TextField source="updateBy$" label="common.field.updateBy" />, + <DateField source="updateTime" label="common.field.updateTime" showTime />, + <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} />, + ] + setColumns([...arr, ...fields, ...lastArr]); + } else { + notify(msg); + } + } + + return ( + <Box sx={{ position: 'relative', minHeight: "60vh", }}> + {isLoading && ( + <LinearProgress + sx={{ + height: "2px", + position: 'absolute', + top: 0, + left: 0, + right: 0, + }} + /> + )} + {columns.length > 0 && + <StyledDatagrid + preferenceKey='locItem' + bulkActionButtons={false} + rowClick={false} + expand={false} + expandSingle={true} + omit={['id', 'createTime', 'locId', 'orderId', 'orderItemId', 'matnrId', 'splrBatch', 'workQty', 'qty', 'createBy', 'memo', 'fieldsIndex']} + > + {columns.map((column) => column)} + </StyledDatagrid>} + </Box> + ) +} \ No newline at end of file diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx index c9bbd3b..cedaad8 100644 --- a/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx +++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderItemList.jsx @@ -34,15 +34,17 @@ Button, useEditContext, useGetRecordId, + useRefresh, useGetOne } from 'react-admin'; -import { Box, Typography, Card, Stack, Dialog, DialogActions, DialogTitle } from '@mui/material'; +import { Box, Typography, Card, Stack, Dialog, DialogActions, DialogTitle, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import AsnOrderItemCreate from "./AsnOrderItemCreate"; import EmptyData from "../../components/EmptyData"; import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from '../../components/MyExportButton'; import PageDrawer from "../../components/PageDrawer"; +import request from '@/utils/request'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting'; import AsnOrderItemEdit from "./AsnOrderItemEdit"; import ImportButton from "../../components/ImportButton"; @@ -130,52 +132,7 @@ )} perPage={DEFAULT_ITEM_PAGE_SIZE} > - <StyledDatagrid - preferenceKey='asnOrderItem' - bulkActionButtons={false} - rowClick={false} - // rowClick={(id, resource, record) => { - // setSelect(record) - // setEditDialog(true) - // }} - omit={['id', 'purQty', 'purUnit', 'platItemId', 'poDetlCode', 'trackCode', 'memo', 'model', 'packName', 'splrCode', 'qrcode', 'poDetlId', 'matnrId', 'asnId']} - > - <NumberField source="id" /> - <NumberField source="asnId" label="table.field.asnOrderItem.asnId" /> - <TextField source="asnCode" label="table.field.asnOrderItem.asnCode" /> - <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" /> - <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" /> - <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" /> - <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" /> - <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" /> - <TextField source="maktx" label="table.field.asnOrderItem.maktx" /> - <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" /> - <TextField source="spec" label="table.field.asnOrderItem.spec" /> - <TextField source="model" label="table.field.asnOrderItem.model" /> - <NumberField source="anfme" label="table.field.asnOrderItem.anfme" /> - <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" /> - <NumberField source="purQty" label="table.field.asnOrderItem.purQty" /> - <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" /> - <NumberField source="qty" label="table.field.asnOrderItem.qty" /> - {/* <NumberField source="safeQty" label="table.field.asnOrderItem.safeQty" /> - <NumberField source="disQty" label="table.field.asnOrderItem.disQty" /> - <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" /> */} - <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" /> - <TextField source="splrName" label="table.field.asnOrderItem.splrName" /> - <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" /> - <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" /> - <TextField source="trackCode" label="table.field.asnOrderItem.barcode" /> - <TextField source="packName" label="table.field.asnOrderItem.packName" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> - <TextField source="nickname" /> - </ReferenceField> - <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 /> - <TextField source="memo" label="common.field.memo" sortable={false} /> - </StyledDatagrid> + <DynamicFields /> </List> <AsnOrderItemCreate open={createDialog} @@ -197,16 +154,94 @@ </> ) } + AsnOrderItemList.Context = React.createContext() +export default AsnOrderItemList; -const DynamicFields = async () => { - const { - data: { code, data, msg }, - } = await request.get("/fields/enable/list"); +const DynamicFields = (props) => { + const translate = useTranslate(); + const notify = useNotify(); + const [columns, setColumns] = useState([]); + const { isLoading } = useListContext(); + const refresh = useRefresh(); + useEffect(() => { + getDynamicFields(); + }, []); + + const getDynamicFields = async () => { + const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); + if (code == 200) { + const arr = [ + <NumberField source="id" />, + <NumberField source="asnId" label="table.field.asnOrderItem.asnId" />, + <TextField source="asnCode" label="table.field.asnOrderItem.asnCode" />, + <TextField source="poDetlId" label="table.field.asnOrderItem.poDetlId" />, + <TextField source="poDetlCode" label="table.field.asnOrderItem.poDetlCode" />, + <TextField source="platItemId" label="table.field.asnOrderItem.platItemId" />, + <TextField source="matnrId" label="table.field.asnOrderItem.matnrId" />, + <TextField source="matnrCode" label="table.field.asnOrderItem.matnrCode" />, + <TextField source="maktx" label="table.field.asnOrderItem.maktx" />, + <TextField source="splrBatch" label="table.field.asnOrderItem.splrBatch" />, + <TextField source="spec" label="table.field.asnOrderItem.spec" />, + <TextField source="model" label="table.field.asnOrderItem.model" />, + <NumberField source="anfme" label="table.field.asnOrderItem.anfme" />, + <TextField source="stockUnit" label="table.field.asnOrderItem.stockUnit" />, + <NumberField source="purQty" label="table.field.asnOrderItem.purQty" />, + <TextField source="purUnit" label="table.field.asnOrderItem.purUnit" />, + <NumberField source="qty" label="table.field.asnOrderItem.qty" />, + <TextField source="splrCode" label="table.field.asnOrderItem.splrCode" />, + <TextField source="splrName" label="table.field.asnOrderItem.splrName" />, + <TextField source="isptResult$" label="table.field.asnOrderItem.isptResult" />, + <TextField source="qrcode" label="table.field.asnOrderItem.qrcode" />, + <TextField source="trackCode" label="table.field.asnOrderItem.barcode" />, + <TextField source="packName" label="table.field.asnOrderItem.packName" />, + ] + const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) + const lastArr = [ + <DateField source="updateTime" label="common.field.updateTime" showTime />, + <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> + <TextField source="nickname" /> + </ReferenceField>, + <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 />, + <TextField source="memo" label="common.field.memo" sortable={false} />, + ] + setColumns([...arr, ...fields, ...lastArr]); + } else { + notify(msg); + } + } + + return ( + <Box sx={{ position: 'relative', minHeight: "60vh", }}> + {isLoading && ( + <LinearProgress + sx={{ + height: "2px", + position: 'absolute', + top: 0, + left: 0, + right: 0, + }} + /> + )} + {columns.length > 0 && + <StyledDatagrid + preferenceKey='asnOrderItem' + bulkActionButtons={false} + rowClick={(id, resource, record) => false} + omit={['id', 'asnId', 'poDetlId', 'poDetlCode', 'matnrId', 'purQty', 'purUnit', 'qrcode', 'trackCode']} + > + {columns.map((column) => column)} + </StyledDatagrid>} + </Box> + ) } -export default AsnOrderItemList; + diff --git a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx index 13acd1c..fa3d78e 100644 --- a/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx +++ b/rsf-admin/src/page/waitPakin/WaitPakinItemList.jsx @@ -30,10 +30,11 @@ ReferenceInput, ReferenceArrayInput, AutocompleteInput, + useRefresh, DeleteButton, useGetRecordId, } from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; +import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import WaitPakinItemCreate from "./WaitPakinItemCreate"; import EmptyData from "../components/EmptyData"; @@ -43,6 +44,8 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import request from '@/utils/request'; + const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -91,8 +94,8 @@ return ( <Box display="flex"> <List - resource="waitPakinItem" - filter={{pakinId: pakinId}} + resource="waitPakinItem" + filter={{ pakinId: pakinId }} sx={{ flexGrow: 1, transition: (theme) => @@ -115,31 +118,7 @@ )} perPage={DEFAULT_ITEM_PAGE_SIZE} > - <StyledDatagrid - preferenceKey='waitPakinItem' - bulkActionButtons={false} - rowClick={(id, resource, record) => false} - omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex']} - > - <NumberField source="id" /> - <NumberField source="pakinId" label="table.field.waitPakinItem.pakinId" /> - <TextField source="matnrCode" label="table.field.waitPakinItem.matnrCode" /> - <TextField source="maktx" label="table.field.waitPakinItem.maktx" /> - <TextField source="batch" label="table.field.waitPakinItem.batch" /> - <NumberField source="matnrId" label="table.field.waitPakinItem.matnrId" /> - <NumberField source="anfme" label="table.field.waitPakinItem.anfme" /> - <TextField source="unit" label="table.field.waitPakinItem.unit" /> - <NumberField source="workQty" label="table.field.waitPakinItem.workQty" /> - <NumberField source="qty" label="table.field.waitPakinItem.qty" /> - <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" /> - <TextField source="isptResult$" label="table.field.waitPakinItem.isptResult" /> - <TextField source="updateBy$" label="common.field.updateBy" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <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} /> - </StyledDatagrid> + <DynamicFields /> </List> <WaitPakinItemCreate open={createDialog} @@ -156,3 +135,72 @@ } export default WaitPakinItemList; + + + +const DynamicFields = (props) => { + const translate = useTranslate(); + const notify = useNotify(); + const [columns, setColumns] = useState([]); + const { isLoading } = useListContext(); + const refresh = useRefresh(); + useEffect(() => { + getDynamicFields(); + }, []); + + const getDynamicFields = async () => { + const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); + if (code == 200) { + const arr = [ + <NumberField source="id" />, + <NumberField source="pakinId" label="table.field.waitPakinItem.pakinId" />, + <TextField source="matnrCode" label="table.field.waitPakinItem.matnrCode" />, + <TextField source="maktx" label="table.field.waitPakinItem.maktx" />, + <TextField source="batch" label="table.field.waitPakinItem.batch" />, + <NumberField source="matnrId" label="table.field.waitPakinItem.matnrId" />, + <NumberField source="anfme" label="table.field.waitPakinItem.anfme" />, + <TextField source="unit" label="table.field.waitPakinItem.unit" />, + <NumberField source="workQty" label="table.field.waitPakinItem.workQty" />, + <NumberField source="qty" label="table.field.waitPakinItem.qty" />, + <TextField source="fieldsIndex" label="table.field.waitPakinItem.fieldsIndex" />, + <TextField source="isptResult$" label="table.field.waitPakinItem.isptResult" />, + ] + const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) + const lastArr = [ + <TextField source="updateBy$" label="common.field.updateBy" />, + <DateField source="updateTime" label="common.field.updateTime" showTime />, + <TextField source="createBy$" label="common.field.createBy" />, + <DateField source="createTime" label="common.field.createTime" showTime />, + <TextField source="memo" label="common.field.memo" sortable={false} />, + ] + setColumns([...arr, ...fields, ...lastArr]); + } else { + notify(msg); + } + } + + return ( + <Box sx={{ position: 'relative', minHeight: "60vh", }}> + {isLoading && ( + <LinearProgress + sx={{ + height: "2px", + position: 'absolute', + top: 0, + left: 0, + right: 0, + }} + /> + )} + {columns.length > 0 && + <StyledDatagrid + preferenceKey='waitPakinItem' + bulkActionButtons={false} + rowClick={(id, resource, record) => false} + omit={['id', 'pakinId', 'createTime', 'matnrId', 'createBy', 'memo', 'fieldsIndex']} + > + {columns.map((column) => column)} + </StyledDatagrid>} + </Box> + ) +} \ No newline at end of file diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx index 214c32b..911e62c 100644 --- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx +++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx @@ -29,14 +29,16 @@ NumberInput, ReferenceInput, ReferenceArrayInput, + useRefresh, AutocompleteInput, DeleteButton, } from 'react-admin'; -import { Box, Typography, Card, Stack } from '@mui/material'; +import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import WarehouseAreasItemCreate from "./WarehouseAreasItemCreate"; import WarehouseAreasItemPanel from "./WarehouseAreasItemPanel"; import EmptyData from "../components/EmptyData"; +import request from '@/utils/request'; import MyCreateButton from "../components/MyCreateButton"; import MyExportButton from '../components/MyExportButton'; import PageDrawer from "../components/PageDrawer"; @@ -123,41 +125,7 @@ )} perPage={DEFAULT_PAGE_SIZE} > - <StyledDatagrid - preferenceKey='warehouseAreasItem' - bulkActionButtons={false} - rowClick={(id, resource, record) => false} - omit={['id', 'createTime', 'memo', 'areaId', 'brand', 'createBy$', 'weight', 'matnrId', 'batch', 'shipperId', 'splrId']} - > - <NumberField source="id" /> - <TextField source="asnCode" label="table.field.warehouseAreasItem.asnCode" /> - <NumberField source="areaId" label="table.field.warehouseAreasItem.areaId" /> - <TextField source="areaName" label="table.field.warehouseAreasItem.areaName" /> - <NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" /> - <TextField source="maktx" label="table.field.warehouseAreasItem.matnrName" /> - <TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" /> - <TextField source="trackCode" label="table.field.warehouseAreasItem.barcode" /> - <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" /> - <NumberField source="workQty" label="table.field.warehouseAreasItem.workQty" /> - <NumberField source="qty" label="table.field.warehouseAreasItem.qty" /> - <TextField source="splrBatch" label="table.field.warehouseAreasItem.splrBtch" /> - <TextField source="batch" label="table.field.warehouseAreasItem.batch" /> - <TextField source="unit" label="table.field.warehouseAreasItem.unit" /> - <TextField source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" /> - <TextField source="brand" label="table.field.warehouseAreasItem.brand" /> - <TextField source="shipperId" label="table.field.warehouseAreasItem.shipperId" /> - <TextField source="splrId" label="table.field.warehouseAreasItem.splrId" /> - <TextField source="isptResult$" label="table.field.warehouseAreasItem.isptResult" sortable={false} /> - <NumberField source="weight" label="table.field.warehouseAreasItem.weight" /> - <TextField source="prodTime" label="table.field.warehouseAreasItem.prodTime" /> - <TextField source="updateBy$" label="common.field.updateBy" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> - <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} /> - - </StyledDatagrid> + <DynamicFields /> </List> <WarehouseAreasItemCreate open={createDialog} @@ -174,3 +142,81 @@ } export default WarehouseAreasItemList; + + +const DynamicFields = (props) => { + const translate = useTranslate(); + const notify = useNotify(); + const [columns, setColumns] = useState([]); + const { isLoading } = useListContext(); + const refresh = useRefresh(); + useEffect(() => { + getDynamicFields(); + }, []); + + const getDynamicFields = async () => { + const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); + if (code == 200) { + const arr = [ + <NumberField source="id" />, + <TextField source="asnCode" label="table.field.warehouseAreasItem.asnCode" />, + <NumberField source="areaId" label="table.field.warehouseAreasItem.areaId" />, + <TextField source="areaName" label="table.field.warehouseAreasItem.areaName" />, + <NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" />, + <TextField source="maktx" label="table.field.warehouseAreasItem.matnrName" />, + <TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />, + <TextField source="trackCode" label="table.field.warehouseAreasItem.barcode" />, + <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" />, + <NumberField source="workQty" label="table.field.warehouseAreasItem.workQty" />, + <NumberField source="qty" label="table.field.warehouseAreasItem.qty" />, + <TextField source="splrBatch" label="table.field.warehouseAreasItem.splrBtch" />, + <TextField source="batch" label="table.field.warehouseAreasItem.batch" />, + <TextField source="unit" label="table.field.warehouseAreasItem.unit" />, + <TextField source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />, + <TextField source="brand" label="table.field.warehouseAreasItem.brand" />, + <TextField source="shipperId" label="table.field.warehouseAreasItem.shipperId" />, + <TextField source="splrId" label="table.field.warehouseAreasItem.splrId" />, + <TextField source="isptResult$" label="table.field.warehouseAreasItem.isptResult" sortable={false} />, + <NumberField source="weight" label="table.field.warehouseAreasItem.weight" />, + <TextField source="prodTime" label="table.field.warehouseAreasItem.prodTime" />, + ] + const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) + const lastArr = [ + <TextField source="updateBy$" label="common.field.updateBy" />, + <DateField source="updateTime" label="common.field.updateTime" showTime />, + <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} />, + ] + setColumns([...arr, ...fields, ...lastArr]); + } else { + notify(msg); + } + } + + return ( + <Box sx={{ position: 'relative', minHeight: "60vh", }}> + {isLoading && ( + <LinearProgress + sx={{ + height: "2px", + position: 'absolute', + top: 0, + left: 0, + right: 0, + }} + /> + )} + {columns.length > 0 && + <StyledDatagrid + preferenceKey='warehouseAreasItem' + bulkActionButtons={false} + rowClick={(id, resource, record) => false} + omit={['id', 'createTime', 'memo', 'areaId', 'brand', 'createBy$', 'weight', 'matnrId', 'batch', 'shipperId', 'splrId']} + > + {columns.map((column) => column)} + </StyledDatagrid>} + </Box> + ) +} 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 98a805b..00039ca 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 @@ -279,7 +279,7 @@ }); }); } - sb.append(dto.getAsnCode() + dto.getMatnr()); + sb.append(dto.getAsnCode() + dto.getMatnr() + dto.getSplrBatch() + orderItem.getIsptResult$()); //鑾峰彇16浣島uid String uuid16 = Cools.md5Chinese(sb.toString()); rcpt.put("index", uuid16); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java index 485bae5..5dd2240 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java @@ -13,8 +13,10 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.Companys; +import com.vincent.rsf.server.manager.entity.Matnr; import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate; import com.vincent.rsf.server.manager.enums.CompanysType; import com.vincent.rsf.server.manager.service.AsnOrderItemService; @@ -47,7 +49,17 @@ public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<AsnOrderItem, BaseParam> pageParam = new PageParam<>(baseParam, AsnOrderItem.class); - return R.ok().add(asnOrderItemService.listByAsnId(pageParam, pageParam.buildWrapper(true))); + /**鎷兼帴鎵╁睍瀛楁*/ + PageParam<AsnOrderItem, BaseParam> page = asnOrderItemService.page(pageParam, pageParam.buildWrapper(true)); + List<AsnOrderItem> records = page.getRecords(); + for (AsnOrderItem record : records) { + if (!Objects.isNull(record.getFieldsIndex())) { + Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex()); + record.setExtendFields(fields); + } + } + page.setRecords(records); + return R.ok(page); } @PreAuthorize("hasAuthority('manager:asnOrderItem:list')") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java index 9e4110b..2ef4102 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java @@ -9,7 +9,9 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.entity.LocItem; +import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.service.LocItemService; import com.vincent.rsf.server.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +32,19 @@ public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class); - return R.ok().add(locItemService.page(pageParam, pageParam.buildWrapper(true))); + + /**鎷兼帴鎵╁睍瀛楁*/ + PageParam<LocItem, BaseParam> page = locItemService.page(pageParam, pageParam.buildWrapper(true)); + List<LocItem> records = page.getRecords(); + for (LocItem record : records) { + if (!Objects.isNull(record.getFieldsIndex())) { + Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex()); + record.setExtendFields(fields); + } + } + page.setRecords(records); + + return R.ok().add(page); } @PreAuthorize("hasAuthority('manager:locItem:list')") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java index edd0274..98d2963 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinItemController.java @@ -10,8 +10,10 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.entity.TaskItem; import com.vincent.rsf.server.manager.entity.WaitPakinItem; +import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.service.TaskItemService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.system.controller.BaseController; @@ -37,7 +39,17 @@ public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<WaitPakinItem, BaseParam> pageParam = new PageParam<>(baseParam, WaitPakinItem.class); - return R.ok().add(waitPakinItemService.page(pageParam, pageParam.buildWrapper(true))); + /**鎷兼帴鎵╁睍瀛楁*/ + PageParam<WaitPakinItem, BaseParam> page = waitPakinItemService.page(pageParam, pageParam.buildWrapper(true)); + List<WaitPakinItem> records = page.getRecords(); + for (WaitPakinItem record : records) { + if (!Objects.isNull(record.getFieldsIndex())) { + Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex()); + record.setExtendFields(fields); + } + } + page.setRecords(records); + return R.ok().add(page); } @PreAuthorize("hasAuthority('manager:waitPakinItem:list')") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java index 5a5ad83..2635d05 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java @@ -10,6 +10,8 @@ import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.common.utils.FieldsUtils; +import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.service.WarehouseAreasItemService; import com.vincent.rsf.server.system.controller.BaseController; @@ -34,7 +36,17 @@ BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<WarehouseAreasItem, BaseParam> pageParam = new PageParam<>(baseParam, WarehouseAreasItem.class); QueryWrapper<WarehouseAreasItem> queryWrapper = pageParam.buildWrapper(true); - return R.ok().add(warehouseAreasItemService.page(pageParam, queryWrapper)); + /**鎷兼帴鎵╁睍瀛楁*/ + PageParam<WarehouseAreasItem, BaseParam> page = warehouseAreasItemService.page(pageParam, queryWrapper); + List<WarehouseAreasItem> records = page.getRecords(); + for (WarehouseAreasItem record : records) { + if (!Objects.isNull(record.getFieldsIndex())) { + Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex()); + record.setExtendFields(fields); + } + } + page.setRecords(records); + return R.ok().add(page); } @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')") diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java index 3dfa6cf..0bee1c9 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.annotation.*; import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; @@ -25,7 +25,6 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; -import java.util.Objects; @Data @Accessors(chain = true) @@ -148,6 +147,10 @@ @ApiModelProperty(value= "瀛楁绱㈠紩") private String fieldsIndex; + @ApiModelProperty("鎵╁睍瀛楁") + @TableField(exist = false) + private Map<String, String> extendFields; + /** * 鐘舵�� 1: 姝e父 0: 鍐荤粨 */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java index 9ebe1a3..34fb5c3 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java @@ -3,6 +3,7 @@ import java.text.SimpleDateFormat; import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; import com.vincent.rsf.server.system.constant.DictTypeCode; @@ -22,6 +23,7 @@ import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; +import java.util.Map; import java.util.Objects; @Data @@ -139,6 +141,10 @@ @ApiModelProperty(value= "瀛楁绱㈠紩") private String fieldsIndex; + @ApiModelProperty("鎵╁睍瀛楁") + @TableField(exist = false) + private Map<String, String> extendFields; + /** * 鐘舵�� 1: 姝e父 0: 鍐荤粨 */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java index 4812e94..541e98c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java @@ -1,8 +1,9 @@ package com.vincent.rsf.server.manager.entity; -import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.*; + import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; @@ -14,10 +15,7 @@ import java.text.SimpleDateFormat; import java.util.Date; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; -import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,7 +25,6 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; -import java.util.Objects; @Data @Accessors(chain = true) @@ -171,6 +168,9 @@ @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date createTime; + @ApiModelProperty("鎵╁睍瀛楁") + @TableField(exist = false) + private Map<String, String> extendFields; /** * 淇敼浜哄憳 */ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java index 9468bd4..27169a4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java @@ -165,6 +165,7 @@ .setTrackCode(item.getTrackCode()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) + .setExtendFields(item.getExtendFields()) .setOrderId(item.getAsnId()) .setOrderItemId(item.getAsnItemId()); taskItems.add(taskItem); -- Gitblit v1.9.1