App Spec

表达应用壳(App Shell)的定义语义。一个 App 包含一组 PageView,并通过 homePageRoute 指定首页路由。

定位与自然键

  • 自然键:name。Bundle 与投影框架均以 name 定位或创建 App。
  • App 不存在时,安装器/投影服务会自动创建:
    • 通过 AppShellDomainProjectionAdapter.project 显式声明 App 时,按 name 创建并同步 displayName、description、icon。
    • 通过 PageView 隐式引用时,AppDefinitionWriteService.upsertPageView 会在 App 不存在时自动创建同名 App(默认 description="Auto-generated by bundle installer"、icon="Layout")。

AppSpecDTO

字段类型说明
namestring应用名称,自然键
displayNamestring应用显示名称;写入定义层 spec_json,同时投影到 fd_app.display_name
descriptionstring应用描述;写入定义层 spec_json,同时投影到 fd_app.description
iconstring应用图标;写入定义层 spec_json,同时投影到 fd_app.icon
homePageRoutestring首页路由。投影时匹配 pages 中的页面 route 并写入 fd_app.home_page_id;未指定时默认取第一个页面
pagesList<PageViewSpecDTO>应用当前草稿页面快照列表。投影时按此列表对 App 下页面做 upsert,缺失的草稿页面会被删除

导航

App 的导航菜单由运行时快照(fd_app.runtime_snapshot_json)中的 pages 推导生成:

  • 每个页面的 showInMenu 控制是否出现在导航中(默认 true)。
  • 页面按 sortOrder 与 id 升序排列。
  • 导航项包含 name、displayName、route、icon。

详细页面字段与 widget 归一化规则参见 PageView Spec。

示例

name: Manufacturing
displayName: 智能制造
description: 生产运营中心
icon: Factory
homePageRoute: /production/dashboard
pages:
  - appRef:
      name: Manufacturing
    name: production_dashboard
    route: /production/dashboard
    displayName: 生产概览
    showInMenu: true
    icon: LayoutDashboard
    root:
      widgetId: root
      type: CONTAINER
      children:
        - total_output_card
    widgets:
      - widgetId: total_output_card
        type: STAT_CARD
        props:
          title: 今日产量

消费位置

  • foundry-app-biz: AppShellDomainProjectionAdapter.project 按 name 创建/更新 App,同步 displayName、description、icon,并写入 home_page_id。
  • foundry-app-biz: AppDefinitionWriteService.upsertPageView 在 App 不存在时按 appRef.name 自动创建 App。
  • foundry-definition/foundry-definition-biz: BundleInstallPlanBuilder.resolveApps 合并显式声明的 apps;旧格式包按 pageViews 中的 appRef 自动合成 App。
  • foundry-definition/foundry-definition-biz: BundleDefinitionUpsertExecutor 将解析后的 AppSpecDTO 写入定义层。

相关文档