diff --git a/src/main/java/com/sftp/manager/controller/FileController.java b/src/main/java/com/sftp/manager/controller/FileController.java index 385cc9f..e15802c 100644 --- a/src/main/java/com/sftp/manager/controller/FileController.java +++ b/src/main/java/com/sftp/manager/controller/FileController.java @@ -55,7 +55,9 @@ public class FileController { return ApiResponse.success("查询成功", files); } catch (Exception e) { - return ApiResponse.error("列出文件失败: " + e.getMessage()); + // SftpService 已抛出带「列出文件失败:」前缀的消息,此处不再重复拼接 + String msg = e.getMessage(); + return ApiResponse.error(msg != null ? msg : "列出文件失败"); } } diff --git a/src/main/resources/static/js/app.js b/src/main/resources/static/js/app.js index d4b5b81..9bf8542 100644 --- a/src/main/resources/static/js/app.js +++ b/src/main/resources/static/js/app.js @@ -117,12 +117,16 @@ function loadFiles(panelId) { }); } -// 渲染文件列表 +// 渲染文件列表(仅当 data 为数组时渲染,避免错误数据结构被当成文件显示) function renderFileList(panelId, files) { const fileList = $(`#${panelId}-file-list`); fileList.empty(); - if (!files || files.length === 0) { + if (!Array.isArray(files)) { + fileList.html('
数据格式错误,请刷新重试
'); + return; + } + if (files.length === 0) { fileList.html('
文件夹为空
'); return; } @@ -439,7 +443,8 @@ function showConnectionStatus(panelId, sessionId) { statusDiv.show(); if (sessionId && activeConnections[sessionId]) { const conn = activeConnections[sessionId]; - updateConnectionStatus(panelId, 'connected', '已连接: ' + (conn.name || sessionId)); + // 仅显示「已连接」,具体连接名由下拉框展示,避免与下拉框重复显示 IP/名称 + updateConnectionStatus(panelId, 'connected', '已连接'); } else { updateConnectionStatus(panelId, 'disconnected', '未连接'); } @@ -465,23 +470,53 @@ function loadActiveConnections() { }); } -// 更新连接下拉框 +// 更新连接下拉框(优先显示连接名或主机,避免暴露 sftp-uuid) +// 重建选项后会恢复当前面板的选中值,保证左右面板可独立选择不同 SFTP 连接 function updateConnectionSelect(panelId) { const select = $(`#${panelId}-connection`); + const currentSessionId = panelState[panelId] && panelState[panelId].sessionId; + select.empty().append(''); $.each(activeConnections, function(sessionId, conn) { - const name = (conn && conn.name) ? conn.name : sessionId; + const name = (conn && (conn.name || conn.host)) ? (conn.name || conn.host) : ('会话 ' + (sessionId || '').substring(0, 13)); select.append('