1. 页面概览

多视图联动是 LightGotham 的跨视图筛选联动演示页,路由 /gotham/views,对应源码 action/web/src/views/GothamViewsPage.vue。页面围绕视图会话(Session)联动关系(Link)提供四块能力:创建视图会话POST /views/sessions,类型 graph/map/timeline/list/entity)、会话列表GET /views/sessions)、联动演示(对会话应用筛选 POST /views/sessions/:id/filter 并广播,展示 target_count 与 map/graph 联动结果 GET /views/sessions/:id/linked)、联动关系管理POST /views/links,源 → 目标会话的 cross_filter 关系)。

核心语义:把一次筛选应用到源会话,沿启用的联动关系广播给目标会话,再由目标会话按同一条件联动过滤出命中数据(图节点 / 地图记录)。一句话总结:多视图联动是"会话化筛选 + cross_filter 广播 + 跨视图命中回显"的联动演示工作台。

2. 访问入口

3. 界面布局

+-------------------------------------------------------------+
| 页头:Gotham 多视图联动  [刷新]   alert                       |
+-------------------------------------------------------------+
| 创建视图会话(card):名称* 类型▾(graph/map/timeline/list/      |
|   entity) 描述 [创建]                                        |
+-------------------------------------------------------------+
| 视图会话列表(card):ID|名称|视图类型|当前筛选|创建人|操作     |
|   操作:[联动操作][联动地图][联动图]                           |
+-------------------------------------------------------------+
| 联动演示(card)                                              |
|   会话▾ field op▾(eq/ne/gt/gte/lt/lte/contains) value        |
|   [应用筛选并广播]                                            |
|   状态面板:会话/视图类型/广播联动目标 target_count/生效筛选     |
|   联动结果(图 graph)与(地图 map):target_type/命中/节点或记录|
+-------------------------------------------------------------+
| 联动关系管理(card):源会话▾ → 目标会话▾ [建立联动关系]        |
|   关系表:ID|源会话|目标会话|类型|启用                          |
+-------------------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
刷新按钮页头并行重拉 /views/sessions/views/links
创建会话表单创建视图会话名称必填;类型下拉(graph/map/timeline/list/entity);成功提示「会话创建成功(id=N)」
联动操作按钮会话列表行选中会话到联动演示并清空旧状态,提示可应用筛选
联动地图 / 联动图按钮会话列表行loadLinked(s, 'map'/'graph') 按当前筛选查目标命中
应用筛选并广播按钮联动演示会话必选、field 与 value 必填;body {exprs: [{field, op, value}], source: 'frontend', publish: true},返回 target_count
建立联动关系按钮联动关系管理源/目标会话必选;POST /views/linkslink_type: 'cross_filter'enabled: true

5. 后端关联

API 客户端gothamClient.jsaxios.create({ baseURL: '/gotham-api/v1', timeout: 30000 });请求拦截器注入 Bearer token,响应 401 自动 refresh 重放。

端点表

方法路径用途
GET/views/sessions视图会话列表
POST/views/sessions创建会话 {name, view_type, description}
POST/views/sessions/:id/filter应用并广播筛选 {exprs: [{field, op, value}], source, publish},返回 ViewState{session_id, view_type, filters, target_count}
GET/views/sessions/:id/linked联动命中查询,params target=graph|map,返回 {target_type, count, nodes/records}
GET/views/links联动关系列表
POST/views/links建立联动关系 {source_session_id, target_session_id, link_type: 'cross_filter', enabled: true}

关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:点「应用筛选并广播」提示「请选择会话」

现象:被前端拦截。

原因filterForm.sessionId 为空。

处理:先点会话行「联动操作」选中,或在下拉选会话后重试。

问题 2:广播成功但「广播联动目标」为 0

现象target_count 显示 0。

原因:当前会话没有 enabled 的 cross_filter 联动关系。

处理:在「联动关系管理」建立源 → 目标关系后重新应用筛选。

问题 3:联动结果提示「无命中节点 / 无命中记录」

现象GET /views/sessions/:id/linked 返回 count=0。

原因:当前筛选在目标数据中无命中。

处理:放宽 field/op/value 重新广播;或新建空筛选会话再查。

问题 4:提示「联动查询失败」

现象:点「联动地图 / 联动图」后红色 alert。

原因/views/sessions/:id/linked 报错(会话无效、target 非法、后端未启动)。

处理:确认会话存在、target 传 mapgraph;检查 Network 状态码。

8. 已知缺陷与边界

说明
仅暴露两个联动目标前端只支持 target=map|graph,后端 entity/list/timeline 未暴露
单条件筛选前端一次只发一条 exprs,多条件需接口层扩展
无广播感知页面未订阅 gotham:ws,其他端广播不实时刷新
会话无编辑 UI更新接口存在但未暴露(删除按钮已补)

注:会话与联动的删除按钮已补齐,已于 2026-09-06 修复(调用后端 DELETE 接口)。