3f6e2bffc6
补充快捷指令动态变量解析与编辑弹窗一键插入, 统一列表执行、粘贴到终端和批量发送的处理链路 扩展快捷命令右键菜单动作,并为文件面板新增 多根目录资源管理器式侧栏浏览体验 为首页 dashboard 增加当前用户与系统总览双视角的 实时会话指标展示,并同步更新相关知识库记录
6.2 KiB
6.2 KiB
变更提案: quickcommands-context-menu-actions
元信息
类型: 优化
方案类型: implementation
优先级: P1
状态: 已完成
创建: 2026-03-26
完成: 2026-03-26
1. 需求
背景
当前快捷命令列表项虽然支持右键菜单,但菜单中只有“发送到全部会话”一个动作,和用户提供的参考图不一致。用户希望在快捷命令部分的右键菜单中补齐常用动作,包括立即执行、粘贴到终端输入框、复制命令、粘贴到快捷输入框、编辑和删除。
目标
- 将快捷命令右键菜单扩展为与参考图接近的多动作菜单。
- 保持“立即执行”为对当前活动 SSH 会话直接发送命令。
- 将“粘贴到终端”实现为写入底部命令输入框但不发送。
- 将“粘贴到快捷输入框”实现为写入快捷命令顶部搜索输入框,便于二次筛选或编辑。
约束条件
时间约束: 本轮内完成前端菜单扩展与基础验证
性能约束: 不引入新依赖,沿用现有视图、store 和事件总线
兼容性约束: 保持现有快捷命令执行、复制、编辑、删除和“发送到全部会话”能力不回退
业务约束: “粘贴到终端”必须只写入命令输入框,不回车发送;菜单样式尽量贴近参考图
验收标准
- 快捷命令右键菜单包含“立即执行 / 粘贴到终端 / 复制命令 / 粘贴到快捷输入框 / 编辑 / 删除”
- “立即执行”继续向当前活动 SSH 会话发送处理后的命令
- “粘贴到终端”仅写入底部命令输入框,不自动发送
- “粘贴到快捷输入框”写入快捷命令顶部搜索输入框并刷新筛选
packages/frontend的构建验证通过
2. 方案
技术方案
继续在 QuickCommandsView.vue 内扩展现有右键菜单,不新拆组件。将快捷命令处理逻辑抽成“解析命令内容”和“执行菜单动作”两个层级:命令变量替换等公共处理复用给“立即执行”和“粘贴到终端”,复制/编辑/删除则复用现有函数。菜单模板改为图标 + 文案列表,并保留“发送到全部会话”作为扩展动作。文案统一写入 locale。
影响范围
涉及模块:
- frontend: `QuickCommandsView.vue` 的右键菜单结构与动作逻辑
- frontend: 快捷命令 locale 文案
预计变更文件: 3-4
风险评估
| 风险 | 等级 | 应对 |
|---|---|---|
| 右键菜单新增动作后与现有点击、hover 按钮行为冲突 | 中 | 仅在现有 context menu 状态机上扩展,不改列表项主点击路径 |
| “粘贴到终端”与“立即执行”语义混淆,导致误发送 | 中 | 将终端输入框写入逻辑单独封装,明确不触发 terminal:sendCommand |
| locale 文案分散,容易遗漏多语言同步 | 低 | 同轮同步 zh-CN / en-US / ja-JP |
3. 技术设计(可选)
架构设计
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 颜色过渡
- 氛围: 保持工具型菜单克制感,不过度装饰
技术约束
- 可访问性: 菜单项文案明确区分“立即执行”和“粘贴到终端”
- 响应式: 保持现有防越界定位逻辑