From b3a8cec76cd3d2d3aa6d470e1c28ec161bc1a16b Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 三月 2026 17:22:44 +0800
Subject: [PATCH] 路径管理-初始化功能优化

---
 rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteList.jsx |   68 ++++++++++++++++++++++++++++++---
 1 files changed, 61 insertions(+), 7 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteList.jsx b/rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteList.jsx
index 3ba3c50..4e9017d 100644
--- a/rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteList.jsx
+++ b/rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteList.jsx
@@ -33,7 +33,7 @@
     DeleteButton,
     Button
 } from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
+import { Box, Typography, Card, Stack, Button as MuiButton } from '@mui/material';
 import { styled } from '@mui/material/styles';
 import DeviceSiteCreate from "./DeviceSiteCreate";
 import DeviceSitePanel from "./DeviceSitePanel";
@@ -46,6 +46,7 @@
 import * as Common from '@/utils/common';
 import InitModal from "./InitModal";
 import CabinIcon from '@mui/icons-material/Cabin';
+import ContentCopyIcon from '@mui/icons-material/ContentCopy';
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
     '& .css-1vooibu-MuiSvgIcon-root': {
@@ -57,7 +58,10 @@
     '& .column-name': {
     },
     '& .opt': {
-        width: 200
+        width: 260,
+        minWidth: 260,
+        overflow: 'visible',
+        '& > *': { flexShrink: 0 }
     },
 }));
 
@@ -72,6 +76,8 @@
     <TextInput source="device" label="table.field.deviceSite.device" />,
     <TextInput source="deviceCode" label="table.field.deviceSite.deviceCode" />,
     <TextInput source="deviceSite" label="table.field.deviceSite.deviceSite" />,
+    <NumberInput source="deviceSite" label="table.field.deviceSite.areaIdStart" />,
+    <NumberInput source="deviceSite" label="table.field.deviceSite.areaIdEnd" />,
 
     <TextInput label="common.field.memo" source="memo" />,
     <SelectInput
@@ -85,12 +91,57 @@
     />,
 ]
 
+const CopyButton = ({ setInitCopyData, setInitDialogOpen }) => {
+    const record = useRecordContext();
+    const translate = useTranslate();
+    if (!record) return null;
+    const label = translate('toolbar.copy') || '澶嶅埗';
+    return (
+        <MuiButton
+            size="small"
+            color="primary"
+            sx={{
+                padding: '2px 8px',
+                fontSize: '.75rem',
+                minWidth: 'auto',
+                flexShrink: 0,
+                '& .MuiButton-startIcon': { marginRight: 0.5 },
+            }}
+            startIcon={<ContentCopyIcon fontSize="small" />}
+            onClick={(e) => {
+                e.stopPropagation();
+                setInitCopyData({
+                    rows: [{
+                        deviceSiteName: record.deviceSite ?? '',
+                        siteName: record.site ?? '',
+                        target: record.target ?? '',
+                    }],
+                    channel: record.channel != null ? String(record.channel) : '',
+                    type: record.type,
+                    typeIds: record.type != null ? [record.type] : [],
+                    deviceType: record.device ?? '',
+                    deviceCode: record.deviceCode ?? '',
+                    areaIdStart: record.areaIdStart,
+                    areaIdEnd: record.areaIdEnd,
+                    name: record.name ?? '',
+                    wcsCode: record.target ?? '',
+                    label: record.label ?? '',
+                });
+                setInitDialogOpen(true);
+            }}
+        >
+            <span style={{ whiteSpace: 'nowrap' }}>{label}</span>
+        </MuiButton>
+    );
+};
+
 const DeviceSiteList = () => {
     const translate = useTranslate();
 
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
     const [initDialog, setInitDialog] = useState(false);
+    const [initCopyData, setInitCopyData] = useState(null);
 
     return (
         <Box display="flex">
@@ -126,7 +177,7 @@
                                     mt: 2
                                 }}
                                 onClick={() => { setInitDialog(true) }}>
-                                {translate('toolbar.siteInit')}
+                                {translate('toolbar.pathInit')}
                             </Button>
                         </Box>
                     }
@@ -147,17 +198,17 @@
                     preferenceKey='deviceSite'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                     rowClick={(id, resource, record) => false}
-                    omit={['id', 'createTime', 'createBy', 'memo', 'label','name','target','statusBool','updateBy']}
+                    omit={['id', 'createTime', 'createBy', 'memo', 'statusBool', 'updateBy']}
                 >
                     <NumberField source="id" />
-                    <TextField source="site$" label="table.field.deviceSite.site" />
+                    <TextField source="site" label="table.field.deviceSite.site" />
                     <TextField source="name" label="table.field.deviceSite.name" />
                     <NumberField source="type$" label="table.field.deviceSite.type" />
                     <TextField source="target" label="table.field.deviceSite.target" />
                     <TextField source="label" label="table.field.deviceSite.label" />
                     <TextField source="device$" label="table.field.deviceSite.device" />
                     <TextField source="channel" label="table.field.deviceSite.channel" />
-                    <TextField source="deviceSite$" label="table.field.deviceSite.deviceSite" />
+                    <TextField source="deviceSite" label="table.field.deviceSite.deviceSite" />
                     <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
                         <TextField source="nickname" />
                     </ReferenceField>
@@ -169,6 +220,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">
+                        <CopyButton setInitCopyData={setInitCopyData} setInitDialogOpen={setInitDialog} />
                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                     </WrapperField>
@@ -188,6 +240,8 @@
             <InitModal
                 open={initDialog}
                 setOpen={setInitDialog}
+                initialData={initCopyData}
+                onClose={() => setInitCopyData(null)}
             />
         </Box>
     )
@@ -203,7 +257,7 @@
 
     return (
         <>
-            <Button onClick={() => setCreateDialog(true)} label={"toolbar.siteInit"}>
+            <Button onClick={() => setCreateDialog(true)} label={"toolbar.pathInit"}>
                 <CabinIcon />
             </Button>
             <InitModal

--
Gitblit v1.9.1