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