返回首页

JMatrixPlatform UI 导航命令面板

本文描述了 JMatrixPlatform 中受 VSCode 启发的命令面板实现。使用现有的带 hashtags 的 JCommand 进行搜索和过滤。该方法加速多模块系统中的导航,而无需更改 UI 结构。

命令面板如何解决 JMatrixPlatform 中的 UI 混乱
Advertisement 728x90

JMatrixPlatform 命令面板:多模块系统导航优化

像 JMatrixPlatform 这样的多模块系统常常面临 UI 过载问题:数百个命令、按钮和标签页让导航变得异常繁琐,即便是管理员也深感头疼。我们借鉴 VSCode 的命令面板理念,推出通用解决方案——一个统一的搜索栏,覆盖所有用户可访问命令。这大大减少了对嵌套菜单的依赖,加速功能访问。

传统导航痛点

在拥有数十个模块的系统中,仪表板充斥着快捷方式、分类和子菜单。用户访问 10+ 工作流时,往往要费时搜索:首页 -> 我的操作 -> 需求管理 -> 指派。步步为营的指引必不可少:“展开 A 分类,进入 B,点击 C”。

管理员任务(如缓存刷新、同步、报表)尤其棘手——难以定位且不易记忆。所有解决方案都归结为分组,这只是将功能藏得更深。

Google AdInline article slot

借鉴 VSCode

VSCode 的命令面板通过名称搜索,提供键盘驱动的 IDE 功能即时访问。它消除了 UI 布局争议,实现一键调用。

在 JMatrixPlatform 中,架构已就位:每个 UI 操作都是 JCommand,包含 href、标签、描述和访问权限。命令驱动仪表板、工具栏和面板。

Projects 命令示例:

Google AdInline article slot
@JModelPart
public final class ACDProjectsDesk extends JCommand {
  public static ACDProjectsDesk COMMAND = new ACDProjectsDesk();

  @Override
  public JHref getHref(JContext ctx, JRequestParams requestParams) {
    return new JHrefTable(
        ATBProjectsDesk.TABLE,
        JTarget.CONTENT,
        Actions.TOOLBAR,
        null,
        AIQProjectsAll.INQUIRY,
        JHrefTable.RowSelection.MULTI);
  }
}

本地化文件 messages_en.properties

en.demo.matrix.schema.ui.command.ACDProjectsDesk=Projects

标签实现

命令面板使用标签实现访问过滤和语义搜索(如“companies” -> “organizations”)。

@Override
public Set<String> getHashTags() {
  return Set.of(
    "document-management",
    "demo",
    "projects",
    "kits");
}

控制器返回可用命令:

Google AdInline article slot
@GetMapping("/navigator/paletteCommands")
public ResponseEntity<List<JDTOCommand>> getCommands(
    @JPathContextVariable JContext ctx,
    @RequestParam Map<String, String> requestParamsMap) {
  
  JRequestParams requestParams = new JRequestParams(requestParamsMap);

  Set<JCommand> commands = JModel.getAdminListByClass(JCommand.class);

  List<JDTOCommand> results = commands
      .stream()
      .filter(cmd -> cmd.getHashTags() != null && !cmd.getHashTags().isEmpty() && cmd.show(ctx, requestParams))
      .map(cmd -> new JDTOCommand(ctx, requestParams, cmd))
      .toList();

  return ResponseEntity.ok(results);
}

客户端过滤确保速度(支持至多 1000 个命令)。JSON 示例:

[
   {
      "name":"ACPersonDesk",
      "description":"平台用户注册表",
      "label":"用户",
      "icon":null,
      "settings":{},
      "href":{
         "url":"../table/ATBPersonDesk",
         "requestParams":{
            "toolbar":"AMPersonDeskTableActions",
            "rowSelection":"MULTI",
            "inquiry":"AIQPersonsDesk",
            "target":"CONTENT"
         }
      },
      "hashTags":["users", "org-structure"]
   }
]

搜索“projects”即可瞬间打开对应 href,无论菜单嵌套多深。

核心优势

  • 即时访问:按标签、描述、哈希标签搜索。
  • 上下文感知:标签提供同义词并过滤相关命令。
  • 多功能:适用于查看组件和直接操作。
  • 高扩展性:独立于 UI 结构,完美适配 100+ 模块。
  • 高性能:服务器发送列表,客户端实时过滤。

命令面板补充菜单而非取代。管理员可快速访问罕见功能,无需手册。

关键收获

  • JCommand 架构让面板实现轻松,无需重构。
  • 标签一举搞定过滤和语义搜索。
  • 客户端过滤确保 1000+ 命令下仍响应迅捷。
  • 面板降低多模块生态的认知负担。
  • 适合保守型用户的工程系统。

— Editorial Team

Advertisement 728x90

继续阅读