feat: 终端路由保持会话 + 服务器列表按创建时间倒序
keep-alive 下终端切换不 dispose SSH;列表/推送/终端默认 newest first。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# 终端页切换路由保持 SSH 会话
|
||||
|
||||
**日期**:2026-06-18
|
||||
|
||||
## 摘要
|
||||
|
||||
用户从「终端」页导航至其他 SPA 页面时,WebSSH 会话不再被主动断开;返回终端页可继续操作同一标签与会话。
|
||||
|
||||
## 动机
|
||||
|
||||
此前 `TerminalPage` 被刻意排除在 `keep-alive` 之外,且 `onBeforeUnmount` 中调用 `disposeAllSessions()`,路由切换即卸载组件并关闭全部 WebSocket/SSH 连接,与运维「开终端查问题、切页看列表、再回来继续敲命令」的工作流冲突。
|
||||
|
||||
## 方案
|
||||
|
||||
1. 将 `TerminalPage` 加入 `CACHED_PAGE_NAMES`,由 `App.vue` 现有 `<keep-alive>` 缓存实例。
|
||||
2. 生命周期调整:
|
||||
- `onDeactivated`:仅移除全局快捷键监听,**不** dispose 会话。
|
||||
- `onActivated`:恢复快捷键、refit xterm、聚焦当前标签。
|
||||
- `onBeforeUnmount`:仅在缓存淘汰或组件真正销毁时 dispose(与 `keep-alive max=12` 一致)。
|
||||
- 监听 `auth.isLoggedIn`:登出时 dispose,避免缓存中残留 SSH 连接。
|
||||
|
||||
未将会话提升到全局 store:`termNativeStore` 已是模块级单例,配合 keep-alive 即可,改动最小。
|
||||
|
||||
## 涉及文件
|
||||
|
||||
- `frontend/src/constants/cachedPages.ts`
|
||||
- `frontend/src/pages/TerminalPage.vue`
|
||||
|
||||
## 迁移 / 重启
|
||||
|
||||
无。仅前端构建/热更新。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
cd frontend && npm run build
|
||||
pytest tests/test_webssh_terminal_payload.py tests/test_terminal_quick_commands.py -q
|
||||
```
|
||||
|
||||
手动:登录 → 终端连接一台服务器 → 侧栏切「服务器」→ 再切回「终端」→ 会话仍 connected,可继续输入;登出后重进终端应为空会话。
|
||||
Reference in New Issue
Block a user