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('