1. 页面概览

多视图联动是 LightGotham 的跨视图筛选联动演示页,路由 /gotham/views,对应源码 action/web/src/views/GothamViewsPage.vue。页面围绕视图会话(Session)联动关系(Link)提供五块能力:创建视图会话POST /views/sessions,类型 graph/map/timeline/list/entity)、会话列表GET /views/sessions)、编辑视图会话PUT /views/sessions/:id,仅 name/description/view_type/config 可改)、联动演示(对会话应用筛选 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|源会话|目标会话|类型|启用|操作                    |
+-------------------------------------------------------------+
| 编辑会话弹窗(点行内「编辑」):name / view_type / description  |
|   / config(JSON) + 不可改字段说明 [取消][保存]                  |
+-------------------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
刷新按钮页头并行重拉 /views/sessions/views/links
创建会话表单创建视图会话名称必填;类型下拉(graph/map/timeline/list/entity);成功提示「会话创建成功(id=N)」
编辑按钮会话列表行openEdit(s) 打开弹窗并回填 name/view_type/description/config;PUT /views/sessions/:id 成功后 loadAll 刷新
编辑弹窗保存按钮编辑会话弹窗name 必填;config 留空=不发送(后端保留原值),填写则须为合法 JSON;保存失败展示后端 error
联动操作按钮会话列表行选中会话到联动演示并清空旧状态,提示可应用筛选
联动地图 / 联动图按钮会话列表行loadLinked(s, 'map'/'graph') 按当前筛选查目标命中
应用筛选并广播按钮联动演示会话必选、field 与 value 必填;body {exprs: [{field, op, value}], source: 'frontend', publish: true},返回 target_count
删除按钮会话列表行DELETE /views/sessions/:id,级联删除关联联动关系
建立联动关系按钮联动关系管理源/目标会话必选;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}
PUT/views/sessions/:id更新会话 {name, description, view_type, config}(空值保留原值;name 跨会话唯一);返回 {id}
DELETE/views/sessions/:id删除会话(级联删除关联联动关系)
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 状态码。

问题 5:编辑会话保存后描述没被清空

现象:把描述删成空串保存,列表里描述仍在。

原因:后端 UpdateSessionRequest 为「空值保留原值」语义(views/service.go:252-254),空串不会覆盖。

处理:属后端既定语义,无法清空描述;如需重置只能删除重建会话。

问题 6:编辑会话保存提示重名

现象:弹窗内红色 alert,提示视图会话已存在。

原因:后端对 name 做跨会话唯一性校验(views/service.go:242-248)。

处理:换一个未被占用的名称再保存。

8. 已知缺陷与边界

说明
仅暴露两个联动目标前端只支持 target=map|graph,后端 entity/list/timeline 未暴露
单条件筛选前端一次只发一条 exprs,多条件需接口层扩展
无广播感知页面未订阅 gotham:ws,其他端广播不实时刷新
会话编辑字段受限已支持编辑 name/view_type/description/config(PUT /views/sessions/:id,2026-09-13 补齐);filters/created_by/id/时间戳后端不可改,description 因「空串保留原值」无法清空

注:会话编辑入口已于 2026-09-13 补齐(弹窗只放后端真实接受的 4 个字段并标注不可改项);会话/联动删除按钮已于 2026-09-06 修复。