1. 页面概览

情报工作台是 LightGotham 的总览入口,路由 /gotham,对应源码 action/web/src/views/GothamPage.vue(约 1344 行)。核心是一块 SVG 自绘知识图谱画布:节点为圆形、按类型分色(person 蓝 / org 橙 / ship 绿 / custom 紫),边为带箭头直线;点击节点高亮其直接邻居(/graph/nodes/:id/neighbors),拖拽画布可平移。

除可视化外还有两类操作:图分析——通过「图分析」卡片执行 1-3 度展开、最短路径、中心度、社群着色、PageRank、紧密中心度、标签传播、强连通分量、图统计、子图过滤,结果以表格/标签/着色叠加到画布;图编辑——「新增节点 / 边」表单直接写入图谱(POST),「图谱元素管理」列表提供节点/边删除DELETE /graph/nodes/:idDELETE /graph/edges/:id,二次确认,节点删除级联清理关联边)。页面顶部另有「默认中心节点」配置卡(localStorage 持久化,key gotham.defaultNode),控制加载时默认展开中心与最短路径起点,未配置回退 graph:person:zhy。一句话总结:情报工作台是图谱总览、图算法分析、节点边增删三位一体入口。

2. 访问入口

3. 界面布局

+-------------------------------------------------------------+
| 页头:Gotham 情报工作台  节点<n> 边<n>  [刷新图谱]             |
+-------------------------------------------------------------+
| 操作结果提示 alert(有消息时显示,可关闭)                       |
+-------------------------------------------------------------+
| 默认中心节点(card):输入 rid [保存][恢复默认] 当前生效 rid      |
+-------------------------------------------------------------+
| 图分析(card)                                                |
|   展开(深度▾/limit/中心rid) 最短路径(from/to)                 |
|   中心度/社群:[中心度][社群着色][清除高亮]                     |
|   高级:[PageRank][紧密中心度][标签传播][强连通分量][图统计]     |
|   子图过滤:types rootIds depth [子图过滤]                     |
|   └ 结果面板:中心度/社群/PageRank/紧密中心度/标签传播/SCC/      |
|     子图/图统计                                                 |
+-------------------------------------------------------------+
| 图谱可视化(card):SVG 画布(节点/边/箭头/标签),空态提示      |
+-------------------------------------------------------------+
| 图谱元素管理(card):节点列表/边列表,每行 [删除] + 二次确认弹窗 |
+-------------------------------------------------------------+
| 新增节点 / 边(card):左新增节点表单,右新增边表单              |
+-------------------------------------------------------------+

各板块职责:

4. 交互元素

控件位置含义与作用
刷新图谱按钮页头并行加载 /graph/stats/graph/nodes 与默认 3 度展开(中心取默认中心节点配置,未配置回退 graph:person:zhy,limit 100)
默认中心节点默认中心节点输入 rid + [保存] 持久化到 localStorage['gotham.defaultNode'] 并重载图谱;[恢复默认] 清除配置
展开(BFS 1-3 度)图分析深度 + limit + 中心节点 rid,GET /analysis/graph/expand 并入新节点/边;中心默认取默认中心节点配置
最短路径图分析from/to rid 必填,GET /analysis/graph/path;不可达提示「路径不可达」,命中路径红色高亮;from 默认取默认中心节点配置,to 记忆上次使用值(localStorage['gotham.pathTo'],未使用过回退 graph:org:tianhe
删除按钮图谱元素管理节点/边每行「删除」,打开二次确认弹窗;确认调 DELETE /graph/nodes/:idDELETE /graph/edges/:id,成功后刷新列表与统计,节点删除同步剔除关联边
删除确认弹窗全局遮罩展示将删除的 RID 与标签(节点)或关系 type/source→target(边),提示不可撤销、节点删除级联边;失败按 403/404/其他分别提示
中心度 / 社群着色图分析「中心度」拉度中心度 Top 表;「社群着色」按社区换色;「清除高亮」复位
高级图分析图分析PageRank、紧密中心度(Top 20)、标签传播、强连通分量、图统计(节点/边/平均度 + 类型分布)
子图过滤图分析types/rootIds/depth 调 GET /analysis/graph/subgraph(接口无 limit、一次返回全部命中),结果表按渲染层分页(50/100/200/全部)展示节点并提供边明细折叠表,可「应用为当前视图」
节点点击图谱可视化高亮直接邻居(depth=1),邻居缺失自动并入
新增节点表单新增节点 / 边ID(如 graph:person:xx)、类型(person/org/ship/custom)、标签必填;属性 JSON 可选
新增边表单新增节点 / 边源/目标 ID、边类型(如 member_of)、方向(directed/bidirectional)、属性 JSON

5. 后端关联

API 客户端gothamClient.jsaxios.create({ baseURL: '/gotham-api/v1', timeout: 30000 });请求注入 Bearer token,响应 401 用 refresh token 调 POST /auth/refresh 换发重放,失败清 token 跳 /login

端点表

方法路径用途
GET/graph/stats图统计(节点/边数),页头芯片
GET/graph/nodes全量节点列表
POST/graph/nodes新增节点 {id, type, label, properties}
POST/graph/edges新增边 {type, source, target, direction, properties}
DELETE/graph/nodes/:id删除节点(级联删除关联边),成功 200 {code:0,data:{deleted:id}};经 abacPEP("graph.node","execute:delete"),deny 命中 403 ABAC_DENIED
DELETE/graph/edges/:id删除单条边,成功 200 {code:0,data:{deleted:id}};经 abacPEP("graph.edge","execute:delete"),deny 命中 403 ABAC_DENIED
GET/graph/nodes/:id/neighbors节点直接邻居(depth=1)
GET/analysis/graph/expandBFS 展开 node/depth/limit
GET/analysis/graph/path最短路径 from/to
GET/analysis/graph/centrality度中心度 kind=degree
GET/analysis/graph/community社群检测 {method, modularity, communities}
GET/analysis/graph/pagerankPageRank top_k=20
GET/analysis/graph/closeness紧密中心度 top_k=20
GET/analysis/graph/label-propagation标签传播社区
GET/analysis/graph/scc强连通分量 {components}
GET/analysis/graph/subgraph子图过滤 types/root_ids/depth/properties无 limit 参数,一次返回全部命中节点与边
GET/analysis/graph/stats图统计详情(含节点/边类型分布)

关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:图算法按钮报 "admin role required"

现象:点「展开」「PageRank」等报 403 AUTHZ_ERROR

原因/analysis/graph/*adminMiddleware(),当前账号非 admin。

处理:用 admin 角色账号登录重试,或确认后端 IsUserAdmin 判定通过。

问题 2:新增节点/边提示「属性 JSON 格式错误」

现象:属性框提交被前端拦截。

原因props 不是合法 JSON。

处理:按标准 JSON 填写(如 {"region":"华北"});留空默认 {}

问题 3:页面提示「加载失败」且画布为空,或访问 /gotham 报 404/白屏

现象:节点/边为 0、画布空态,或路由打不开。

原因/graph/stats/graph/nodes 请求失败或 Gotham 后端未启动(代理未分流、token 失效、路由未注册)。

处理:确认 18083 进程存活、Vite 代理把 /gotham-api 分流到 18083、router/index.js 已注册 /gotham 父布局与空子路由;401 则重新登录。

问题 4:删除节点/边提示「无权限删除(ABAC 拒绝)」或「目标不存在」

现象:图谱元素管理点「删除」并确认后,提示 无权限删除(ABAC 拒绝:...)(403)或 目标不存在(可能已被删除,请刷新列表)(404)。

原因:删除端点挂 abacPEP("graph.node"/"graph.edge","execute:delete"),deny 策略命中即 403 ABAC_DENIED;404 多为目标已被其他会话删除(节点删除会级联删边,列表未刷新)。

处理:403 时确认当前账号/ABAC 策略是否允许该资源删除(默认放行,仅 deny 命中才拒绝);404 时点「刷新列表」重新同步节点/边。

8. 已知缺陷与边界

说明
大图渲染瓶颈节点全量渲染 SVG,百节点以上拖拽/布局变慢,无虚拟化
力导向布局纯前端220 轮启发式,坐标不持久化
无节点/边字段编辑(后端缺口)后端仅 POST(幂等 upsert 返回值即已存在则为更新)与 DELETE无更新端点,故不提供字段编辑 UI;新增与删除均已支持
子图结果分页(现实边界)子图接口 GET /analysis/graph/subgraph 只接受 types / root_ids / depth / properties 四个参数,无 limit,一次返回全部命中节点与边;结果表按「节点显示条数」下拉(50/100/200/全部,默认 50)分页,分页仅为渲染层、不影响返回数据完整性,并附边明细折叠表(边 ID / 源 / 目标 / 类型)
默认展开中心可配加载默认按「默认中心节点」配置展开(localStorage['gotham.defaultNode']),未配置回退 graph:person:zhy;无该节点时补边为空
无 WebSocket 订阅实时协作推送(/gotham-api/v1/ws)在「协同动态」等页使用

注:子图结果表原先硬截断为前 50 节点(后端返回的其余节点用户不可见),已于 2026-09-13 改为渲染层分页(条数档 50/100/200/全部 + 上/下一页),并在界面注明「子图接口无 limit、一次返回全部」。因为子图接口本身无 limit 参数,故这是纯前端渲染层分页,不是服务端分页。