From 8446c4dfb662df45fd24d219a3322e379c5a8bb2 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Sun, 2 Aug 2026 12:42:05 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(connection-package):=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=AF=BC=E5=87=BA=E6=97=B6=E5=A4=9A=E9=80=89?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端导出请求增加 connectionIds,仅打包所选连接 - 导出弹窗支持连接多选与未选校验 - 同步 Wails 绑定与传输测试 --- .../ConnectionPackagePasswordModal.tsx | 66 ++++++++++++++++++- frontend/src/utils/connectionExport.ts | 1 + frontend/wailsjs/go/app/App.d.ts | 4 +- frontend/wailsjs/go/app/App.js | 8 +-- frontend/wailsjs/go/models.ts | 59 +++++------------ internal/app/cloud_backup.go | 2 +- internal/app/connection_package_transfer.go | 63 ++++++++++++++++-- .../app/connection_package_transfer_test.go | 51 +++++++++++++- internal/app/connection_package_types.go | 2 + 9 files changed, 197 insertions(+), 59 deletions(-) diff --git a/frontend/src/components/ConnectionPackagePasswordModal.tsx b/frontend/src/components/ConnectionPackagePasswordModal.tsx index e91e8e40..ab4a9f41 100644 --- a/frontend/src/components/ConnectionPackagePasswordModal.tsx +++ b/frontend/src/components/ConnectionPackagePasswordModal.tsx @@ -1,12 +1,17 @@ import Modal from './common/ResizableDraggableModal'; import React from 'react'; -import { Button, Checkbox, Input, Typography } from 'antd'; +import { Button, Checkbox, Input, Select, Typography } from 'antd'; import { useI18n } from '../i18n/provider'; const { Text } = Typography; type ConnectionPackagePasswordModalMode = 'import' | 'export'; +export type ConnectionPackageExportOption = { + value: string; + label: string; +}; + export interface ConnectionPackagePasswordModalProps { open: boolean; title: string; @@ -18,6 +23,11 @@ export interface ConnectionPackagePasswordModalProps { confirmLoading?: boolean; confirmText?: string; cancelText?: string; + /** Export only: available connections for selection. */ + connectionOptions?: ConnectionPackageExportOption[]; + /** Export only: selected connection ids. Empty means none selected. */ + selectedConnectionIds?: string[]; + onSelectedConnectionIdsChange?: (ids: string[]) => void; onBack?: () => void; embedded?: boolean; onIncludeSecretsChange?: (value: boolean) => void; @@ -38,6 +48,9 @@ export default function ConnectionPackagePasswordModal({ confirmLoading, confirmText, cancelText, + connectionOptions = [], + selectedConnectionIds = [], + onSelectedConnectionIdsChange, onBack, embedded = false, onIncludeSecretsChange, @@ -59,6 +72,9 @@ export default function ConnectionPackagePasswordModal({ : (useFilePassword ? t('app.connection_package.dialog.help.share_file_password_separately') : t('app.connection_package.dialog.help.encrypted_passwords_recommend_file_password')); + const allConnectionIds = connectionOptions.map((item) => item.value); + const selectedCount = selectedConnectionIds.length; + const totalCount = connectionOptions.length; return ( {isExportMode ? (
+
+
+ + {t('app.connection_package.dialog.export_connections_label')} + +
+ + +
+
+