From e1cac1af6129216da66e569ddec892dd1f07fe80 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 25 二月 2026 10:14:37 +0800
Subject: [PATCH] 站点复制功能

---
 rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx |   33 ++++++++++++++++++++++++++++++---
 1 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
index 8e9407d..eb4489a 100644
--- a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
+++ b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
@@ -33,7 +33,8 @@
     DeleteButton,
 
 } from 'react-admin';
-import { Box, Typography, Card, Stack } from '@mui/material';
+import { Box, Typography, Card, Stack, Button } from '@mui/material';
+import ContentCopyIcon from '@mui/icons-material/ContentCopy';
 import { styled } from '@mui/material/styles';
 import BasStationCreate from "./BasStationCreate";
 import BasStationPanel from "./BasStationPanel";
@@ -59,7 +60,7 @@
     '& .column-name': {
     },
     '& .opt': {
-        width: 200
+        width: 220
     },
 }));
 
@@ -93,7 +94,29 @@
         resettable
     />,
 ]
-
+const CopyButton = ({ setCopyRecord, setCreateDialog }) => {
+    const record = useRecordContext();
+    const translate = useTranslate();
+    if (!record) return null;
+    return (
+        <Button
+            size="small"
+            startIcon={<ContentCopyIcon fontSize="small" />}
+            sx={{ padding: '1px', fontSize: '.75rem', minWidth: 'auto' }}
+            onClick={(e) => {
+                e.stopPropagation();
+                const { id, createTime, updateTime, createBy, updateBy, createBy$, updateBy$, ...rest } = record;
+                const copied = { ...rest };
+                if (record.areaIds) copied.areaIds = [...(Array.isArray(record.areaIds) ? record.areaIds : [])];
+                if (record.containerTypes) copied.containerTypes = [...(Array.isArray(record.containerTypes) ? record.containerTypes : [])];
+                setCopyRecord(copied);
+                setCreateDialog(true);
+            }}
+        >
+            {translate('toolbar.copy')}
+        </Button>
+    );
+};
 const BasStationList = () => {
     const translate = useTranslate();
 
@@ -101,6 +124,7 @@
     const [drawerVal, setDrawerVal] = useState(false);
     const [areaFieldDialog, setAreaFieldDialog] = useState(false);
     const [areaFieldDialog2, setAreaFieldDialog2] = useState(false);
+    const [copyRecord, setCopyRecord] = useState(null);
     return (
         <Box display="flex">
             <List
@@ -201,6 +225,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 setCopyRecord={setCopyRecord} setCreateDialog={setCreateDialog} />
                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                     </WrapperField>
@@ -210,6 +235,8 @@
             <BasStationCreate
                 open={createDialog}
                 setOpen={setCreateDialog}
+                copyRecord={copyRecord}
+                onClose={() => setCopyRecord(null)}
             />
 
             <PageDrawer

--
Gitblit v1.9.1