From 66790f8fb83be8783427308c2d3db7eb98951d50 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 25 二月 2026 15:27:03 +0800
Subject: [PATCH] 站点初始化,复制改为当前

---
 rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx      |   58 +++++++++++++++++-----------
 rsf-admin/src/page/basicInfo/basStation/BasStationInitModal.jsx |   39 +++++++++++++++++--
 2 files changed, 69 insertions(+), 28 deletions(-)

diff --git a/rsf-admin/src/page/basicInfo/basStation/BasStationInitModal.jsx b/rsf-admin/src/page/basicInfo/basStation/BasStationInitModal.jsx
index 30feaaf..d967b43 100644
--- a/rsf-admin/src/page/basicInfo/basStation/BasStationInitModal.jsx
+++ b/rsf-admin/src/page/basicInfo/basStation/BasStationInitModal.jsx
@@ -30,7 +30,7 @@
 
 const defaultPair = () => ({ stationName: '', stationId: '' });
 
-const BasStationInitModal = ({ open, setOpen }) => {
+const BasStationInitModal = ({ open, setOpen, initialData = null, onClose }) => {
   const translate = useTranslate();
   const notify = useNotify();
   const refresh = useRefresh();
@@ -81,19 +81,48 @@
     request.post('/dictData/page', { dictTypeCode: 'sys_container_type', current: 1, pageSize: 100 })
       .then((res) => {
         if (res?.data?.code === 200 && res?.data?.data?.records) {
-          setContainerTypeOptions(res.data.data.records.map((item) => ({
+          const options = res.data.data.records.map((item) => ({
+            id: item.id,
             value: item.value,
             label: item.label ?? item.value ?? item.id,
-          })));
+          }));
+          setContainerTypeOptions(options);
+          if (initialData?.common?.containerTypes?.length) {
+            const list = initialData.common.containerTypes;
+            const mapped = list.map((item) => {
+              const byId = options.find((o) => Number(o.id) === Number(item) || String(o.id) === String(item));
+              if (byId) return String(byId.value);
+              const byVal = options.find((o) => String(o.value) === String(item) || o.value == item);
+              if (byVal) return String(byVal.value);
+              return item;
+            });
+            setCommon((prev) => ({ ...prev, containerTypes: mapped }));
+          }
         }
       })
       .catch(() => {});
   }, [open]);
-
+  useEffect(() => {
+    if (!open) return;
+    if (initialData?.pairs?.length) {
+      setPairs(initialData.pairs);
+    }
+    if (initialData?.common) {
+      setCommon({
+        type: initialData.common.type ?? 0,
+        useStatus: initialData.common.useStatus ?? '',
+        areaIds: Array.isArray(initialData.common.areaIds) ? [...initialData.common.areaIds] : [],
+        containerTypes: Array.isArray(initialData.common.containerTypes) ? [...initialData.common.containerTypes] : [],
+        inAble: initialData.common.inAble ?? 0,
+        outAble: initialData.common.outAble ?? 0,
+      });
+    }
+  }, [open, initialData]);
   const handleClose = (event, reason) => {
     if (reason !== "backdropClick") {
       setOpen(false);
       setPairs([defaultPair()]);
+      if (typeof onClose === 'function') onClose();
     }
   };
 
@@ -299,7 +328,7 @@
                 onChange={(e) => setCommon((c) => ({ ...c, containerTypes: e.target.value }))}
                 renderValue={(selected) =>
                   (selected || [])
-                    .map((val) => containerTypeOptions.find((c) => c.value === val)?.label ?? val)
+                    .map((val) => containerTypeOptions.find((c) => String(c.value) === String(val))?.label ?? val)
                     .join(', ')
                 }
               >
diff --git a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
index 882fcc8..ec224ff 100644
--- a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
+++ b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
@@ -96,28 +96,37 @@
         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 CopyButton = ({ setInitCopyData, setInitDialogOpen }) => {
+  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 pairs = [{ stationName: record.stationName ?? '', stationId: record.stationId ?? '' }];
+        const areaIds = Array.isArray(record.areaIds) ? [...record.areaIds] : [];
+        const containerTypes = Array.isArray(record.containerTypes) ? [...record.containerTypes] : [];
+        setInitCopyData({
+          pairs,
+          common: {
+            type: record.type ?? 0,
+            useStatus: record.useStatus ?? '',
+            areaIds,
+            containerTypes,
+            inAble: record.inAble ?? 0,
+            outAble: record.outAble ?? 0,
+          },
+        });
+        setInitDialogOpen(true);
+      }}
+    >
+      {translate('toolbar.copy')}
+    </Button>
+  );
 };
 const BasStationList = () => {
     const translate = useTranslate();
@@ -128,6 +137,7 @@
     const [areaFieldDialog2, setAreaFieldDialog2] = useState(false);
     const [copyRecord, setCopyRecord] = useState(null);
     const [initDialogOpen, setInitDialogOpen] = useState(false);
+    const [initCopyData, setInitCopyData] = useState(null);
     return (
         <Box display="flex">
             <List
@@ -238,7 +248,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} />
+                        <CopyButton setInitCopyData={setInitCopyData} setInitDialogOpen={setInitDialogOpen} />
                         <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                     </WrapperField>
@@ -254,6 +264,8 @@
             <BasStationInitModal
               open={initDialogOpen}
               setOpen={setInitDialogOpen}
+              initialData={initCopyData}
+              onClose={() => setInitCopyData(null)}
             />
             <PageDrawer
                 title='BasStation Detail'

--
Gitblit v1.9.1