Skip to content

MongoDB 工作台:整宽索引编辑器、查询执行目标、标签关闭与服务器监控布局 - #52

Merged
joesdu merged 4 commits into
mainfrom
dev
Oct 3, 2026
Merged

joesdu merged 4 commits into
mainfrom
dev

Conversation

@joesdu

@joesdu joesdu commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

概要

MongoDB 工作台插件的一轮交互与布局改进(4 个提交)。

集合设计 · 新建索引(a3f157c)

  • 原先挤在右侧 340px 面板里的新建索引,改为 Navicat 设计表的做法:点「新建索引」后下半部分换成整宽三栏编辑器
    (字段表 / 类型与选项 / 命令预览与预估),索引表末尾钉一行「新建」草稿,跟着表单实时变。
  • 字段表有序号、上移 / 下移 / 删除按钮(也可按住序号列拖动),底栏写明「将在 库.集合 上执行 createIndexes」。

查询编辑器 · 执行目标(a3f157c)

  • 工具行改为 Navicat 式两行,下行「连接 ▾ 数据库 ▾ | 运行 / 运行当前语句 / 停止 | 执行计划 … 在 X / Y 上执行」。
  • 切换连接原位换成新连接上的查询标签(文本、未保存状态、光标、maxTimeMS 带过去);没连着的连接安静地连上。
  • 集合按生效的库解析(语句前最后一条 use,否则下拉的库);库里没有的集合标橙,右侧字段页写明「集合 @库」。

GridFS(a3f157c)

  • 拖放区整块可点(选择文件),框内另有「选择文件… · 选择文件夹…」两个链接。

有未保存修改的标签可以关闭(ccd606c)

  • 之前有修改时 × 被橙点替换、无处可点。现在悬停标签换出 ×,点 × / Ctrl+W 先确认「放弃未保存的修改?」。

服务器监控布局(ca52388)

  • 两行图表 1:1 分高度、中间可拖,窗口一高不再把连接数拉成一面墙。
  • 采样初期柱子保持最终宽度、靠右排;横轴标签挨不下时跳过中间的。
  • 存储 Top:加列头;集合名列默认按最长的名字自适应、可拖、双击重新自适应;跨库时库名淡色、集合名亮色;前 10 个、表内滚动。

设计稿(258d05a)

  • velashell-plugin-mongo.pen:07 去掉右侧面板、新增 07b(整宽索引编辑器)、06 拖放区、03 / 14 两行工具行。

配套文档

测试

  • dotnet build VelaShell.Plugins.slnx 通过,0 警告。
  • dotnet test tests/VelaShell.Plugin.Mongo.Tests(一次性 MongoDB 容器):421 个中 420 个通过。
    • 唯一失败的 Explain_FindAndAggregateParse 在本 PR 之前的提交上同样失败:测试用的 bitnami/mongodb:latest 已是 9.0.2,
      aggregate 的 explain 输出形状变了,与本 PR 的改动无关。
  • 新增测试:执行目标切换(原位换标签、安静连接、集合缺失诊断、use 优先)、索引编辑器字段表与草稿行、
    有修改的标签悬停出 × 后确认关闭、服务器监控大窗口(1990×1360)两行等高且集合名不被省略。
  • headless 截图逐屏对照过 03 / 06 / 07 / 11。

joesdu added 4 commits October 3, 2026 17:57
- 本地化:新增/更新大量 Loc 键(Design_*, Fs_*, Query_* 等)用于索引编辑器提示、GridFS 拖放区、查询目标与连接/数据库下拉文案。
- 设计页(DesignIndexesView / DesignModels / DesignTabViewModel.NewIndex):
  - 索引编辑器由侧栏改为下半部三栏全宽编辑器(字段表 / 类型与选项 / 命令预览),支持 IsCreateOpen 开关。
  - 在索引表尾钉入实时同步的草稿行(DraftIndex/HasDraft)并显示预估大小与“待创建”列。
  - 字段行改为序号列、上移/下移/删除按钮,行距 RowPitch 调整为 28。
  - 新增 NewKeyRow 字段(Number、CanMoveUp/Down、IsLast、KindText),SwatchToken 改为 OptionOf,多属性刷新支持。
  - 增加 MoveKeyUp/MoveKeyDown 命令与重编号逻辑(RenumberKeys);抽样结果改用 OptionOf,UpdateImpact 返回预估大小并构建 DraftIndex;Create 流程与可用性、错误、预估显示整合到新 UI。
- GridFS(GridFsTabView):
  - 拖放区改为整块可点击区域,新增文本与两个链接按钮(选择文件/选择文件夹),样式区分 pointerover 与 over。
  - 添加 DropZone.Tapped 处理:空白点击触发 UploadFilesCommand,按钮分别处理选文件与选文件夹以避免重复弹窗。
- 查询编辑器(QueryTabView / QueryTabViewModel):
  - 工具行拆为两行(上行为编辑操作、下行为执行目标与相关设置),连接与数据库用"target"样式选择按钮显示。
  - 右侧 Helper 区新增“集合在哪个库(@db)”展示与“集合缺失”警告。
  - 引入连接下拉交互 OpenConnectionMenu 与连接状态显示(连接中转圈、名称/小字状态)。
  - 将执行目标逻辑抽成 QueryTabViewModel.Target:新增 SwitchConnectionCommand / SwitchConnectionAsync,支持“安静连接(quiet)”——切换时不打开占位标签、不改变对象树选中、不打开对象列表。
  - 切换连接采用原位替换标签 Workspace.ReplaceTab,CarryOver 文本/未保存状态/光标/maxTimeMS 等。
  - 新增异步诊断 CheckCollectionsAsync/CheckCollectionsCoreAsync:检测脚本中 db.collection.method(...) 所指集合是否在目标库存在(排除创建类方法与 system.*),不存在时加入 Warning;支持 ForgetCollections 在脚本建删集合时清缓存。
  - QueryTabView 与 ViewModel 协同处理连接/库切换、切换过程消息与失败提示。
- 工作区/连接管理(MongoWorkspaceViewModel):
  - ConnectAsync / AttachAsync 增加 quiet 参数以支持安静连接流程;AttachAsync 在 quiet 时不改变对象树选中且不打开对象列表。
  - 新增 ReplaceTab 实现“原位替换标签”的语义。
- 测试与工具:
  - 更新/新增单元与集成测试:DesignTests(字段序号、上/下移按钮、草稿行预估与目标文案断言)、QueryTests(执行目标切换的原位替换、安静连接、带文本与未保存状态、切库后集合缺失诊断、use 优先级等场景)。
  - 增加 UI 测试辅助 WaitAsync 用于 Pump。
- 总体影响:
  - 提升索引设计器可用性(更宽编辑器、草稿行、显式序号与上下移),改进 GridFS 拖放 UX,并增强查询编辑器对“在哪个连接/哪个库上运行”的可见性与切换体验。伴随模型/VM 新字段与命令、诊断增强、安静连接与原位换标签支持以及对应本地化与测试补充。
- 标签条:有修改时 × 被橙点替换且绑死 IsVisible,导致无处可点、标签关不掉。
  改为 Ellipse.dirty / Button.tabclose 两组样式:平时显示橙点,鼠标移到标签上换成 ×(与设计稿一致)。
- 点 × 或 Ctrl+W 先过 WorkspaceTab.ConfirmCloseAsync:「放弃未保存的修改?」,确认「放弃并关闭」才关,取消则保留标签与修改。
- 确认框文案改为"未保存",说明关闭会放弃更改且无法恢复。
- QueryTests 新增 Modified_tab_closes_after_confirming_discard:真实鼠标悬停换出 ×,取消保留、确认关闭。
- README 交互约定补充:不要再给这两组元素绑 IsVisible(本地值会压过 :pointerover 样式)。
- 两行图表(操作/秒 + 副本集、连接数 + 存储 Top + 事件)由"上 282 定死、下吃剩余"改为 1:1 分高度,中间 hsplit 可拖;
  窗口一高不再把连接数拉成一面墙(900 高时与设计稿 11 一致)。
- BarChart 新增 MinSlots:刚开始采样时柱子按满窗口的根数分格、靠右排(最新贴着「现在」),不再几根柱被拉满整图;
  横轴标签挨不下时跳过中间的,首尾始终画。两张图绑 ChartSlots(= 满窗口柱数)。
- 存储 Top:
  - 加列头「集合 / 数据 + 索引 / 占用」;集合名列 Width=Auto + SharedSizeGroup,默认按最长的名字自适应、各行对齐,
    再挂 ui:TableColumns 组 storage:列头分隔线可拖、双击重新自适应。
  - MonitorStorageRow 拆成 Prefix + Collection:跨库时库名淡色、集合名亮色;悬停提示带完整命名空间与数据 / 索引各多少。
  - 由前 6 个增至前 10 个,面板矮时表内滚动;右侧给浮动滚动条留 10px,不再盖住「占用」列。
- MonitorTests:Board11 截图后放大到 1990×1360 再截一张,断言两行图表等高、每个集合名都没有被省略。
- README 交互约定补充服务器监控的布局要点(两个 Run 必须写在同一行,否则中间换行会画成空格)。
- 07 集合设计 · 索引与建议:去掉右侧 340px「新建索引」面板,索引建议卡片整宽(默认状态)。
- 新增 07b 集合设计 · 新建索引(整宽编辑器):索引表末尾钉「新建」草稿行,下半部分三栏(字段表 / 类型与选项 / 命令预览与预估),
  底栏写明执行目标。
- 06 GridFS:拖放区加图标圆底与「选择文件… · 选择文件夹…」两个链接,文案改为可点击。
- 03 查询编辑器 / 14 执行计划:工具行改为 Navicat 式两行,下行「连接 ▾ 数据库 ▾ | 运行 / 运行当前语句 / 停止 | 执行计划 … 在 X / Y 上执行 · maxTimeMS」;
  14 的编辑器高度相应收到 194。
@joesdu
joesdu merged commit 9e2e9fe into main Oct 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant