diff --git a/frontend/src/components/FileSystem/components/Sidebar.vue b/frontend/src/components/FileSystem/components/Sidebar.vue
index b04244e..710e980 100644
--- a/frontend/src/components/FileSystem/components/Sidebar.vue
+++ b/frontend/src/components/FileSystem/components/Sidebar.vue
@@ -19,26 +19,49 @@
内存
···
-
-
+
onSrvCtxVisible(idx, v)"
>
- {{ p.name }}
- {{ sysInfo(p.id)?.diskUsage || '-' }}
- {{ sysInfo(p.id)?.cpuUsage || '-' }}
- {{ sysInfo(p.id)?.memUsage || '-' }}
- ···
-
-
+
+ {{ p.name }}
+ {{ sysInfo(p.id)?.diskUsage || '-' }}
+ {{ sysInfo(p.id)?.cpuUsage || '-' }}
+ {{ sysInfo(p.id)?.memUsage || '-' }}
+ ···
+
+
+
+
+
+ 连接
+
+
+
+
+ 编辑
+
+
+
+ 删除
+
+
+
+
@@ -268,6 +291,7 @@ function toggleSettings(e: MouseEvent) {
return
}
moreOpenId.value = null
+ srvCtxMenuIndex.value = -1
const btn = (e.target as HTMLElement).closest('.settings-btn')
if (!btn) return
settingsPanelStyle.value = calcPopupStyle(btn)
@@ -281,6 +305,7 @@ function toggleMore(p: { id: string; name: string }, e: MouseEvent) {
return
}
settingsOpen.value = false
+ srvCtxMenuIndex.value = -1
moreOpenId.value = p.id
moreProfile.value = p
const target = (e.target as HTMLElement).closest('.more-btn') as HTMLElement
@@ -611,6 +636,18 @@ function handleDelete(p: { id: string; name: string }) {
// 删除的是活跃服务器时连接已回落本地,补发切换让视图加载本地根目录
if (wasActive) emit('serverSelect', 'local-default')
}
+
+// 服务器项右键菜单(与行内「...」菜单互斥:一方展开强制收起另一方)
+const srvCtxMenuIndex = ref(-1)
+
+function onSrvCtxVisible(index: number, visible: boolean) {
+ srvCtxMenuIndex.value = visible ? index : -1
+ if (visible) {
+ moreOpenId.value = null
+ moreProfile.value = null
+ settingsOpen.value = false
+ }
+}