From e68784a7f17654af96d45a3f57b9fbb12de0d4a7 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期四, 07 八月 2025 16:18:02 +0800 Subject: [PATCH] # --- rsf-admin/src/page/basicInfo/loc/LocList.jsx | 309 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 213 insertions(+), 96 deletions(-) diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx index 0d2f8e5..732f9a8 100644 --- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx +++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx @@ -35,26 +35,26 @@ Button, useList, } from 'react-admin'; +import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import { Box, Typography, Card, Stack } from '@mui/material'; -import { styled } from '@mui/material/styles'; -import LocCreate from "./LocCreate"; -import BindModal from "./BindModal"; -import EmptyData from "../../components/EmptyData"; -import DynamicField from "../../components/DynamicField"; import MyCreateButton from "../../components/MyCreateButton"; import MyExportButton from '../../components/MyExportButton'; +import DashboardIcon from '@mui/icons-material/Dashboard'; +import DynamicField from "../../components/DynamicField"; +import DiscountIcon from '@mui/icons-material/Discount'; +import PageDrawer from "../../components/PageDrawer"; +import EmptyData from "../../components/EmptyData"; +import EditIcon from '@mui/icons-material/Edit'; +import LinkIcon from '@mui/icons-material/Link'; +import { styled } from '@mui/material/styles'; +import SubzoneModal from './SubzoneModal'; +import LocListAside from "./LocListAside"; import InitButton from './InitButton'; import BatchModal from './BatchModal'; -import SubzoneModal from './SubzoneModal'; -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 DashboardIcon from '@mui/icons-material/Dashboard'; -import EditIcon from '@mui/icons-material/Edit'; import request from '@/utils/request'; -import DiscountIcon from '@mui/icons-material/Discount'; -import LinkIcon from '@mui/icons-material/Link'; +import LocCreate from "./LocCreate"; +import BindModal from "./BindModal"; +import InitModal from "./InitModal"; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -66,80 +66,93 @@ '& .column-name': { }, '& .opt': { - width: 200 + width: 180 }, - '& .RaDatagrid-headerCell': { - textAlign: 'left' + // '& .RaDatagrid-headerCell': { + // textAlign: 'left' + // }, + // '& .RaDatagrid-rowCell': { + // textAlign: 'left' + // }, + '& .type .MuiTypography-root': { + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + display: 'block', + width: 'auto', }, - '& .RaDatagrid-rowCell': { - textAlign: 'left' - } })); -const filters = [ - <SearchInput source="condition" alwaysOn />, - - <ReferenceInput - source="warehouseId" - label="table.field.loc.warehouseId" - reference="warehouse" - alwaysOn - > - <AutocompleteInput - label="table.field.loc.warehouseId" - optionText="name" - filterToQuery={(val) => ({ name: val })} - /> - </ReferenceInput>, - <ReferenceInput - source="areaId" - label="table.field.loc.areaId" - reference="warehouseAreas" - alwaysOn - > - <AutocompleteInput - label="table.field.loc.areaId" - optionText="name" - filterToQuery={(val) => ({ name: val })} - /> - </ReferenceInput>, - <TextInput source="code" label="table.field.loc.code" />, - <TextInput source="type" label="table.field.loc.type" />, - <TextInput source="name" label="table.field.loc.name" />, - <NumberInput source="flagLogic" label="table.field.loc.flagLogic" />, - <TextInput source="fucAtrrs" label="table.field.loc.fucAtrrs" />, - <TextInput source="barcode" label="table.field.loc.barcode" />, - <TextInput source="unit" label="table.field.loc.unit" />, - <TextInput source="size" label="table.field.loc.size" />, - <NumberInput source="row" label="table.field.loc.row" />, - <NumberInput source="col" label="table.field.loc.col" />, - <NumberInput source="lev" label="table.field.loc.lev" />, - <NumberInput source="channel" label="table.field.loc.channel" />, - <NumberInput source="maxParts" label="table.field.loc.maxParts" />, - <NumberInput source="maxPack" label="table.field.loc.maxPack" />, - <NumberInput source="flagLabelMange" label="table.field.loc.flagLabelMange" />, - <TextInput source="locAttrs" label="table.field.loc.locAttrs" />, - - <TextInput label="common.field.memo" source="memo" />, - <SelectInput - label="common.field.status" - source="status" - choices={[ - { id: '1', name: 'common.enums.statusTrue' }, - { id: '0', name: 'common.enums.statusFalse' }, - ]} - resettable - />, -] - const LocList = () => { - const translate = useTranslate(); - const notify = useNotify(); - const refresh = useRefresh(); - + const dicts = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_loc_use_stas')) || []; const [createDialog, setCreateDialog] = useState(false); + const [initDialog, setInitDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const translate = useTranslate(); + const refresh = useRefresh(); + const notify = useNotify(); + const filters = [ + <SearchInput source="condition" alwaysOn />, + <ReferenceInput + source="warehouseId" + label="table.field.loc.warehouseId" + reference="warehouse" + > + <AutocompleteInput + label="table.field.loc.warehouseId" + optionText="name" + filterToQuery={(val) => ({ name: val })} + /> + </ReferenceInput>, + <ReferenceInput + source="areaId" + label="table.field.loc.areaId" + reference="warehouseAreas" + > + <AutocompleteInput + label="table.field.loc.areaId" + optionText="name" + filterToQuery={(val) => ({ name: val })} + /> + </ReferenceInput>, + <AutocompleteInput + choices={dicts} + optionText="label" + label="table.field.loc.useStatus" + source="useStatus" + optionValue="value" + parse={v => v} + alwaysOn + />, + <TextInput source="code" label="table.field.loc.code" />, + <TextInput source="type" label="table.field.loc.type" />, + <TextInput source="name" label="table.field.loc.name" />, + <NumberInput source="flagLogic" label="table.field.loc.flagLogic" />, + <TextInput source="fucAtrrs" label="table.field.loc.fucAtrrs" />, + <TextInput source="barcode" label="table.field.loc.barcode" />, + <TextInput source="unit" label="table.field.loc.unit" />, + <TextInput source="size" label="table.field.loc.size" />, + <NumberInput source="row" label="table.field.loc.row" />, + <NumberInput source="col" label="table.field.loc.col" />, + <NumberInput source="lev" label="table.field.loc.lev" />, + <NumberInput source="channel" label="table.field.loc.channel" />, + <NumberInput source="maxParts" label="table.field.loc.maxParts" />, + <NumberInput source="maxPack" label="table.field.loc.maxPack" />, + <NumberInput source="flagLabelMange" label="table.field.loc.flagLabelMange" />, + <TextInput source="locAttrs" label="table.field.loc.locAttrs" />, + + <TextInput label="common.field.memo" source="memo" />, + <SelectInput + label="common.field.status" + source="status" + choices={[ + { id: '1', name: 'common.enums.statusTrue' }, + { id: '0', name: 'common.enums.statusFalse' }, + ]} + resettable + />, + ] return ( <Box display="flex"> @@ -153,9 +166,34 @@ marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0, }} title={"menu.loc"} - empty={<EmptyData onClick={() => { setCreateDialog(true) }} />} + empty={<EmptyData + children={ + <Box sx={{ gap: 2, display: 'flex' }}> + <Button + variant="contained" + color="primary" + sx={{ + fontSize: '1em', + mt: 2 + }} + onClick={() => { setCreateDialog(true) }}> + {translate('create.empty.button')} + </Button> + <Button + variant="contained" + color="primary" + sx={{ + fontSize: '1em', + mt: 2 + }} + onClick={() => { setInitDialog(true) }}> + {translate('toolbar.locInit')} + </Button> + </Box> + } + onClick={() => { }} />} filters={filters} - sort={{ field: "create_time", order: "desc" }} + sort={{ field: "'row'" }} actions={( <TopToolbar> <FilterButton /> @@ -166,54 +204,55 @@ </TopToolbar> )} perPage={DEFAULT_PAGE_SIZE} + aside={<LocListAside />} > <StyledDatagrid preferenceKey='loc' align="left" bulkActionButtons={ <> - <BatchButton /> + <BatchWateButton /> + <BatchAreasButton /> + <BatchLocTypeButton /> + <BatchStatusButton /> <BindButton /> <SubzoneButton /> <BulkDeleteButton /> </> } rowClick={() => false} - omit={['id', 'createTime', 'createBy', 'memo', 'updateTime', 'updateBy']} + omit={['id', 'createTime', 'createBy', 'memo', 'updateTime', 'updateBy', 'length', 'width', 'height', 'statusBool', 'updateBy$', 'createBy$']} > <NumberField source="id" /> + <TextField source="code" label="table.field.loc.code" /> <NumberField source="warehouseId$" label="table.field.loc.warehouseId" /> <NumberField source="areaId$" label="table.field.loc.areaId" /> - <TextField source="code" label="table.field.loc.code" /> - <TextField source="typeIds$" label="table.field.loc.type" /> + <TextField source="typeIds$" label="table.field.loc.type" cellClassName="type" /> {/* <TextField source="name" label="table.field.loc.name" /> */} {/* <NumberField source="flagLogic" label="table.field.loc.flagLogic" /> <TextField source="fucAtrrs" label="table.field.loc.fucAtrrs" /> - <TextField source="barcode" label="table.field.loc.barcode" /> */} + */} {/* <TextField source="unit" label="table.field.loc.unit" /> */} + <TextField source="barcode" label="table.field.loc.barcode" /> <TextField source="length" label="table.field.loc.length" /> <TextField source="width" label="table.field.loc.width" /> <TextField source="height" label="table.field.loc.height" /> <NumberField source="row" label="table.field.loc.row" /> <NumberField source="col" label="table.field.loc.col" /> <NumberField source="lev" label="table.field.loc.lev" /> + <NumberField source="channel" label="table.field.loc.channel" /> {/* <NumberField source="channel" label="table.field.loc.channel" /> <NumberField source="maxParts" label="table.field.loc.maxParts" /> <NumberField source="maxPack" label="table.field.loc.maxPack" /> <NumberField source="flagLabelMange" label="table.field.loc.flagLabelMange" /> <TextField source="locAttrs" label="table.field.loc.locAttrs" /> */} <TextField source="useStatus$" label="table.field.loc.useStatus" /> - <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 align="left" /> - <ReferenceField source="createBy" label="common.field.createBy" align="left" 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 align="left" /> <BooleanField source="statusBool" label="common.field.status" sortable={false} align="left" /> <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} /> */} @@ -221,6 +260,10 @@ </WrapperField> </StyledDatagrid> + <InitModal + open={initDialog} + setOpen={setInitDialog} + /> </List> <LocCreate open={createDialog} @@ -232,6 +275,8 @@ setDrawerVal={setDrawerVal} > </PageDrawer> + + </Box> ) } @@ -264,7 +309,30 @@ ) } -const BatchButton = () => { +const BatchWateButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + const [createDialog, setCreateDialog] = useState(false); + + return ( + <> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchWarehouse"}> + <EditIcon /> + </Button> + + <BatchModal + open={createDialog} + setOpen={setCreateDialog} + fieldType={'warehouseId'} + /> + </> + + ) +} + +const BatchAreasButton = () => { const record = useRecordContext(); const notify = useNotify(); const refresh = useRefresh(); @@ -274,13 +342,62 @@ return ( <> - <Button onClick={() => setCreateDialog(true)} label={"toolbar.batch"}> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchWarehouseAreas"}> <EditIcon /> </Button> <BatchModal open={createDialog} setOpen={setCreateDialog} + fieldType={'areaId'} + /> + </> + + ) +} + +const BatchLocTypeButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + + const [createDialog, setCreateDialog] = useState(false); + + return ( + <> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchLocType"}> + <EditIcon /> + </Button> + + <BatchModal + open={createDialog} + setOpen={setCreateDialog} + fieldType={'typeIds'} + /> + </> + + ) +} + +const BatchStatusButton = () => { + const record = useRecordContext(); + const notify = useNotify(); + const refresh = useRefresh(); + + + const [createDialog, setCreateDialog] = useState(false); + + return ( + <> + <Button onClick={() => setCreateDialog(true)} label={"toolbar.batchStatus"}> + <EditIcon /> + </Button> + + <BatchModal + open={createDialog} + setOpen={setCreateDialog} + fieldType={'status'} /> </> -- Gitblit v1.9.1