Files
nexus-terminal/.helloagents/archive/2026-03/202603260156_quickcommands-context-menu-polish/proposal.md
T
yinjianm b1f036fdc6 fix(frontend): 调整工作台文件总览与快捷指令菜单
将文件管理区从单目录文件表格修正为多根目录常驻的文件夹总览,
点击目录时仅展开和聚焦,不再切换为单独目录列表。

同时修复快捷指令右键菜单的透明背景与粘贴语义,
统一为“粘贴到命令输入框”且不自动发送,并同步多语言文案。

顺带收紧快捷指令编辑弹窗的最小尺寸、初始尺寸与视口上限,
降低小分辨率下的弹窗溢出概率。
2026-03-26 02:04:07 +08:00

133 lines
5.1 KiB
Markdown

# 变更提案: quickcommands-context-menu-polish
## 元信息
```yaml
类型: 优化
方案类型: implementation
优先级: P1
状态: 草稿
创建: 2026-03-26
```
---
## 1. 需求
### 背景
上一轮已经为快捷命令补上右键菜单,但用户进一步确认了三个运行态问题:菜单背景出现透明效果;不再需要“粘贴到终端”单独菜单项;原“粘贴到快捷输入框”应改成“粘贴到命令输入框”的语义和位置,即点击后写入底部终端命令输入框但不发送。
### 目标
- 将快捷命令右键菜单改为实底不透明菜单。
- 移除“粘贴到终端”菜单项。
- 将原“粘贴到快捷输入框”改为“粘贴到命令输入框”,并执行写入底部命令输入框但不发送的行为。
### 约束条件
```yaml
时间约束: 本轮内完成右键菜单修正与前端验证
性能约束: 不新增依赖,仅调整现有菜单结构和前端逻辑
兼容性约束: 保留立即执行、复制命令、发送到全部服务器、编辑、删除等动作
业务约束: 粘贴到命令输入框必须只写入底部命令输入框,不自动发送
```
### 验收标准
- [ ] 右键菜单背景为实底不透明,不再出现透明感
- [ ] 菜单中不再显示“粘贴到终端”
- [ ] “粘贴到命令输入框”点击后写入底部命令输入框,但不发送
- [ ] locale 文案同步更新
- [ ] `packages/frontend` 构建通过
---
## 2. 方案
### 技术方案
继续在 `QuickCommandsView.vue` 上做最小修正。菜单容器改为显式深色背景与更强边框/阴影;删除“粘贴到终端” DOM 项与对应 action;把原 `pasteToQuickInput` 动作重命名并直接复用现有“写入底部命令输入框”的逻辑。同步三套 locale 文案与成功提示。
### 影响范围
```yaml
涉及模块:
- frontend: `QuickCommandsView.vue` 右键菜单结构、样式和动作映射
- frontend: 快捷命令相关 locale 文案
预计变更文件: 3-4
```
### 风险评估
| 风险 | 等级 | 应对 |
|------|------|------|
| 菜单背景样式修正后与现有主题变量冲突 | 低 | 使用更明确的深色背景与现有边框/阴影组合,避免透明变量色 |
| 删除菜单项后动作顺序与用户预期不一致 | 低 | 让“粘贴到命令输入框”顶替原位置 |
| 文案与实际行为再次不一致 | 中 | 同时修改菜单文案、动作枚举和成功提示 |
---
## 3. 技术设计(可选)
### 架构设计
```mermaid
flowchart LR
A[QuickCommandsView menu] --> B[runNow]
A --> C[pasteToCommandInput]
A --> D[copy/edit/delete]
A --> E[sendToAllSessions]
```
### 数据模型
| 字段 | 类型 | 说明 |
|------|------|------|
| `quickCommandContextMenuVisible` | `boolean` | 右键菜单显示状态 |
| `quickCommandContextTargetCommand` | `QuickCommandFE \| null` | 当前菜单目标命令 |
| `activeSessionId` | `string \| undefined` | 当前活动会话,用于写入底部命令输入框 |
---
## 4. 核心场景
### 场景: 从右键菜单回填到底部命令输入框
**模块**: frontend
**条件**: 用户右键某条快捷命令,当前存在活动 SSH 会话。
**行为**: 点击“粘贴到命令输入框”后,把处理后的命令写入底部终端输入框,但不触发发送。
**结果**: 用户可以继续手改命令,再决定是否发送。
### 场景: 右键菜单视觉贴近普通实底菜单
**模块**: frontend
**条件**: 用户在快捷命令列表中打开右键菜单。
**行为**: 菜单以实底、边框和阴影显示,不透出底层列表内容。
**结果**: 菜单可读性和层级感更接近常规上下文菜单。
---
## 5. 技术决策
### quickcommands-context-menu-polish#D001: 让“粘贴到命令输入框”直接复用已有底部命令输入框写入逻辑
**日期**: 2026-03-26
**状态**: ✅采纳
**背景**: 用户明确要求去掉“粘贴到终端”,并让替代项承担“写入底部命令输入框但不发送”的职责。
**选项分析**:
| 选项 | 优点 | 缺点 |
|------|------|------|
| A: 复用现有写入底部命令输入框逻辑 | 最小改动,行为清晰,和现有命令输入条一致 | 需要同步改菜单文案 |
| B: 保留原搜索框回填逻辑,只改文案 | 代码更少 | 行为与用户要求不符 |
**决策**: 选择方案A
**理由**: 用户语义已经非常明确,应以实际行为一致性优先,而不是保留旧实现。
**影响**: frontend
---
## 6. 成果设计
### 设计方向
- **美学基调**: 延续深色工具菜单,但强调实底层级感
- **记忆点**: 菜单不再发虚透底,操作文案与行为完全一致
- **参考**: 用户上一轮反馈的运行态问题
### 视觉要素
- **配色**: 使用稳定深色背景 + 边框 + 阴影,删除项继续使用错误色
- **字体**: 沿用现有菜单字体体系
- **布局**: 删除一项后保持紧凑垂直列表
- **动效**: 保留现有 hover 过渡
- **氛围**: 以可读性和稳定感为主,不做多余装饰
### 技术约束
- **可访问性**: 文案必须直接说明“命令输入框”,避免再混淆
- **响应式**: 保持现有防越界定位逻辑