From 66807b16601013ae9e4f9807d300db57a61f667e Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Mon, 23 Mar 2026 10:40:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BF=9C=E7=A8=8B=E5=A4=87=E4=BB=BD):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=9E=E6=8E=A5=E6=B5=8B=E8=AF=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E5=8D=8F=E8=AE=AE=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端添加连接测试功能,使用 getFieldsValue 获取完整表单值并打印日志 后端实现 /remote/test 接口,支持协议自动推断和连接测试 优化协议切换时的表单重置逻辑,清空相关字段并设置默认路径 --- backend/routes/backup.js | 53 +++++++++++++++++++++ frontend/src/pages/RemoteBackupSettings.jsx | 21 ++++++-- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/backend/routes/backup.js b/backend/routes/backup.js index 2cce834..b6e7bfa 100644 --- a/backend/routes/backup.js +++ b/backend/routes/backup.js @@ -798,6 +798,59 @@ router.delete('/remote/targets/:id', (req, res) => { } }); +// 直接测试远端连接(不保存,用于添加节点前的测试) +router.post('/remote/test', async (req, res) => { + try { + const config = req.body; + console.log(`[RemoteBackup] 收到连接测试请求:`, JSON.stringify(config)); + + if (!config.host || !config.port || !config.username) { + return res.status(400).json({ + success: false, + message: '请提供完整的连接信息(主机、端口、用户名)', + }); + } + + if (!config.protocol) { + const port = parseInt(config.port); + if (port === 22 || port === 2222) { + config.protocol = 'sftp'; + } else if (port === 445 || port === 139 || port === 443) { + config.protocol = 'smb'; + } else if (port === 80 || port === 443 || config.url) { + config.protocol = 'webdav'; + } else { + config.protocol = 'ftp'; + } + console.log(`[RemoteBackup] 推断协议类型: ${config.protocol} (基于端口 ${config.port})`); + } + + const result = await testRemoteConnection(config); + console.log(`[RemoteBackup] 连接测试结果:`, JSON.stringify(result)); + + if (result.success) { + res.json({ + success: true, + message: '连接测试成功', + data: result, + }); + } else { + res.status(500).json({ + success: false, + message: result.message, + error: result.error, + }); + } + } catch (error) { + console.error('[RemoteBackup] 测试远端连接失败:', error); + res.status(500).json({ + success: false, + message: '测试远端连接失败', + error: error.message, + }); + } +}); + // 测试远端连接 router.post('/remote/targets/:id/test', async (req, res) => { try { diff --git a/frontend/src/pages/RemoteBackupSettings.jsx b/frontend/src/pages/RemoteBackupSettings.jsx index cd4d51f..003ba74 100644 --- a/frontend/src/pages/RemoteBackupSettings.jsx +++ b/frontend/src/pages/RemoteBackupSettings.jsx @@ -293,8 +293,10 @@ const RemoteBackupSettings = () => { try { setTesting(true); setTestStatus('testing'); - - const values = await form.validateFields(); + + await form.validateFields(); + const values = form.getFieldsValue(true); + console.log('[TestConnection] getFieldsValue(true):', JSON.stringify(values)); const response = await api.post('/backup/remote/test', values); if (response?.success) { @@ -832,7 +834,20 @@ const RemoteBackupSettings = () => { placeholder="选择协议类型" size="large" onChange={() => { - form.setFieldsValue({}); + form.setFieldsValue({ + host: undefined, + port: undefined, + username: undefined, + password: undefined, + secure: undefined, + privateKey: undefined, + passphrase: undefined, + share: undefined, + domain: undefined, + url: undefined, + authType: undefined, + rootPath: '/', + }); setTestStatus(null); }} >