799140f6c4
Co-authored-by: Cursor <cursoragent@cursor.com>
1.5 KiB
1.5 KiB
终端页 SPA 迭代设计
日期: 2026-06-01
路由: /app/#/terminal(?server_id=&path=)
背景
Vue TerminalPage 已具备多标签 WebSSH、重连、快捷命令等能力,但存在:
v-main未限定高度,终端区域在部分视口下高度为 0 或过小- 从服务器页带
server_id跳转时,若已在终端路由则不会新建/切换会话(无watch) - WebSocket URL 与
useWebSocket构建方式不一致,VITE_API_BASE=/api时 dev 可能异常 - 无「连接中」态,失败时仅禁用发送按钮
path查询参数仅全局生效,多标签会重复 cd- Ctrl+L 向 shell 发送
clear\r非标准清屏
方案
| 项 | 做法 |
|---|---|
| 布局 | App.vue 对 /terminal 路由给 v-main 增加 nexus-terminal-main(100dvh - app-bar + flex) |
| WS URL | 新增 utils/wsUrl.ts,与告警 WS 同源规则 |
| 路由 | watch(route.query):server_id / path / new_tab |
| 会话 | TermSession.pendingPath、status(connecting/connected/error) |
| 空状态 | 无会话时内嵌服务器列表 +「选择服务器」 |
| 清屏 | Ctrl+L 仅 term.clear() + 可选 \x0c |
验收
#/terminal?server_id=8首屏终端区域占满内容区且可输入- 已在
#/terminal时从服务器点「终端」能切换/新建会话 #/terminal?server_id=8&path=/var/log首包后自动 cd- 断线显示重连 overlay;手动断开不自动重连
- 生产
wss://host/ws/terminal/{id}?token=…可连