3f6e2bffc6
补充快捷指令动态变量解析与编辑弹窗一键插入, 统一列表执行、粘贴到终端和批量发送的处理链路 扩展快捷命令右键菜单动作,并为文件面板新增 多根目录资源管理器式侧栏浏览体验 为首页 dashboard 增加当前用户与系统总览双视角的 实时会话指标展示,并同步更新相关知识库记录
142 lines
6.2 KiB
Markdown
142 lines
6.2 KiB
Markdown
# 变更提案: quickcommands-context-menu-actions
|
|
|
|
## 元信息
|
|
```yaml
|
|
类型: 优化
|
|
方案类型: implementation
|
|
优先级: P1
|
|
状态: 已完成
|
|
创建: 2026-03-26
|
|
完成: 2026-03-26
|
|
```
|
|
|
|
---
|
|
|
|
## 1. 需求
|
|
|
|
### 背景
|
|
当前快捷命令列表项虽然支持右键菜单,但菜单中只有“发送到全部会话”一个动作,和用户提供的参考图不一致。用户希望在快捷命令部分的右键菜单中补齐常用动作,包括立即执行、粘贴到终端输入框、复制命令、粘贴到快捷输入框、编辑和删除。
|
|
|
|
### 目标
|
|
- 将快捷命令右键菜单扩展为与参考图接近的多动作菜单。
|
|
- 保持“立即执行”为对当前活动 SSH 会话直接发送命令。
|
|
- 将“粘贴到终端”实现为写入底部命令输入框但不发送。
|
|
- 将“粘贴到快捷输入框”实现为写入快捷命令顶部搜索输入框,便于二次筛选或编辑。
|
|
|
|
### 约束条件
|
|
```yaml
|
|
时间约束: 本轮内完成前端菜单扩展与基础验证
|
|
性能约束: 不引入新依赖,沿用现有视图、store 和事件总线
|
|
兼容性约束: 保持现有快捷命令执行、复制、编辑、删除和“发送到全部会话”能力不回退
|
|
业务约束: “粘贴到终端”必须只写入命令输入框,不回车发送;菜单样式尽量贴近参考图
|
|
```
|
|
|
|
### 验收标准
|
|
- [ ] 快捷命令右键菜单包含“立即执行 / 粘贴到终端 / 复制命令 / 粘贴到快捷输入框 / 编辑 / 删除”
|
|
- [ ] “立即执行”继续向当前活动 SSH 会话发送处理后的命令
|
|
- [ ] “粘贴到终端”仅写入底部命令输入框,不自动发送
|
|
- [ ] “粘贴到快捷输入框”写入快捷命令顶部搜索输入框并刷新筛选
|
|
- [ ] `packages/frontend` 的构建验证通过
|
|
|
|
---
|
|
|
|
## 2. 方案
|
|
|
|
### 技术方案
|
|
继续在 `QuickCommandsView.vue` 内扩展现有右键菜单,不新拆组件。将快捷命令处理逻辑抽成“解析命令内容”和“执行菜单动作”两个层级:命令变量替换等公共处理复用给“立即执行”和“粘贴到终端”,复制/编辑/删除则复用现有函数。菜单模板改为图标 + 文案列表,并保留“发送到全部会话”作为扩展动作。文案统一写入 locale。
|
|
|
|
### 影响范围
|
|
```yaml
|
|
涉及模块:
|
|
- frontend: `QuickCommandsView.vue` 的右键菜单结构与动作逻辑
|
|
- frontend: 快捷命令 locale 文案
|
|
预计变更文件: 3-4
|
|
```
|
|
|
|
### 风险评估
|
|
| 风险 | 等级 | 应对 |
|
|
|------|------|------|
|
|
| 右键菜单新增动作后与现有点击、hover 按钮行为冲突 | 中 | 仅在现有 context menu 状态机上扩展,不改列表项主点击路径 |
|
|
| “粘贴到终端”与“立即执行”语义混淆,导致误发送 | 中 | 将终端输入框写入逻辑单独封装,明确不触发 `terminal:sendCommand` |
|
|
| locale 文案分散,容易遗漏多语言同步 | 低 | 同轮同步 zh-CN / en-US / ja-JP |
|
|
|
|
---
|
|
|
|
## 3. 技术设计(可选)
|
|
|
|
### 架构设计
|
|
```mermaid
|
|
flowchart LR
|
|
A[QuickCommandsView context menu] --> B[resolveProcessedCommand]
|
|
A --> C[executeCommand]
|
|
A --> D[pasteToTerminalInput]
|
|
A --> E[pasteToQuickCommandsSearch]
|
|
A --> F[copy/edit/delete]
|
|
```
|
|
|
|
### 数据模型
|
|
| 字段 | 类型 | 说明 |
|
|
|------|------|------|
|
|
| `quickCommandContextTargetCommand` | `QuickCommandFE \| null` | 当前右键命中的快捷命令 |
|
|
| `quickCommandContextMenuVisible` | `boolean` | 右键菜单显示状态 |
|
|
| `activeSessionId` | `string \| undefined` | 当前活动 SSH 会话,用于“立即执行”和“粘贴到终端” |
|
|
|
|
---
|
|
|
|
## 4. 核心场景
|
|
|
|
### 场景: 右键快捷命令后立即执行
|
|
**模块**: frontend
|
|
**条件**: 用户在快捷命令列表中右键某条命令,且当前存在活动 SSH 会话。
|
|
**行为**: 点击“立即执行”后,对命令完成变量替换并发送到当前活动会话。
|
|
**结果**: 用户无需左键执行即可从右键菜单直接运行命令。
|
|
|
|
### 场景: 右键快捷命令后粘贴到终端输入框
|
|
**模块**: frontend
|
|
**条件**: 用户在快捷命令列表中右键某条命令,且当前存在活动 SSH 会话。
|
|
**行为**: 点击“粘贴到终端”后,将处理后的命令写入底部命令输入框,但不触发发送。
|
|
**结果**: 用户可以继续手动修改命令,再自行决定何时发送。
|
|
|
|
### 场景: 右键快捷命令后回填到快捷输入框
|
|
**模块**: frontend
|
|
**条件**: 用户在快捷命令列表中右键某条命令。
|
|
**行为**: 点击“粘贴到快捷输入框”后,将命令内容写入快捷命令顶部搜索框,并触发筛选。
|
|
**结果**: 用户可基于命令内容快速筛选、比对或继续编辑快捷命令。
|
|
|
|
---
|
|
|
|
## 5. 技术决策
|
|
|
|
### quickcommands-context-menu-actions#D001: 继续在 `QuickCommandsView.vue` 内扩展菜单逻辑,而不是新建独立上下文菜单组件
|
|
**日期**: 2026-03-26
|
|
**状态**: ✅采纳
|
|
**背景**: 当前右键菜单已经在 `QuickCommandsView.vue` 内实现了显示、定位和关闭逻辑,只是动作过少。
|
|
**选项分析**:
|
|
| 选项 | 优点 | 缺点 |
|
|
|------|------|------|
|
|
| A: 直接扩展现有右键菜单 | 改动集中,复用现有状态和依赖,交付速度快 | 菜单逻辑继续留在单文件内 |
|
|
| B: 抽离独立菜单组件 | 结构更分明 | 需要额外抽 props / emits,当前收益不高 |
|
|
**决策**: 选择方案A
|
|
**理由**: 这是一次局部交互增强,现有右键菜单基础已经足够,直接扩展更符合最小改动原则。
|
|
**影响**: frontend
|
|
|
|
---
|
|
|
|
## 6. 成果设计
|
|
|
|
### 设计方向
|
|
- **美学基调**: 延续当前深色工作台菜单风格,接近参考图的紧凑右键菜单
|
|
- **记忆点**: 图标与文案并列的多动作菜单,删除项保留危险色强调
|
|
- **参考**: 用户提供的右键菜单截图
|
|
|
|
### 视觉要素
|
|
- **配色**: 常规动作使用前景色与 hover 高亮,删除项使用错误色
|
|
- **字体**: 沿用当前界面菜单字号和字体体系
|
|
- **布局**: 单列垂直菜单项,图标左对齐,文字紧凑排列
|
|
- **动效**: 保持现有 hover 颜色过渡
|
|
- **氛围**: 保持工具型菜单克制感,不过度装饰
|
|
|
|
### 技术约束
|
|
- **可访问性**: 菜单项文案明确区分“立即执行”和“粘贴到终端”
|
|
- **响应式**: 保持现有防越界定位逻辑
|