1. 页面概览
情报工作台是 LightGotham 的总览入口,路由 /gotham,对应源码 action/web/src/views/GothamPage.vue(约 1034 行)。核心是一块 SVG 自绘知识图谱画布:节点为圆形、按类型分色(person 蓝 / org 橙 / ship 绿 / custom 紫),边为带箭头直线;点击节点高亮其直接邻居(/graph/nodes/:id/neighbors),拖拽画布可平移。
除可视化外还有两类操作:图分析——通过「图分析」卡片执行 1-3 度展开、最短路径、中心度、社群着色、PageRank、紧密中心度、标签传播、强连通分量、图统计、子图过滤,结果以表格/标签/着色叠加到画布;图编辑——「新增节点 / 边」表单直接写入图谱。一句话总结:情报工作台是图谱总览、图算法分析、节点边编辑三位一体入口。
2. 访问入口
- 路由与菜单:
/gotham布局(GothamLayout)空子路由,nameGotham,标题「Gotham 情报工作台」,requiresAuth: true;侧边栏第一项「情报工作台」({ path: '/gotham', label: '情报工作台' })。 - 认证与权限:请求经
gothamClient.js(baseURL/gotham-api/v1)附aip_token,401 用gotham_refresh_token调/auth/refresh换发重放;/analysis/graph/*图算法接口仅 admin 角色可执行,非 admin 返回 403AUTHZ_ERROR。 - 端口与 API 前缀:Gotham 后端 18083,前端前缀
/gotham-api。
3. 界面布局
+-------------------------------------------------------------+
| 页头:Gotham 情报工作台 节点<n> 边<n> [刷新图谱] |
+-------------------------------------------------------------+
| 操作结果提示 alert(有消息时显示,可关闭) |
+-------------------------------------------------------------+
| 图分析(card) |
| 展开(深度▾/limit/中心rid) 最短路径(from/to) |
| 中心度/社群:[中心度][社群着色][清除高亮] |
| 高级:[PageRank][紧密中心度][标签传播][强连通分量][图统计] |
| 子图过滤:types rootIds depth [子图过滤] |
| └ 结果面板:中心度/社群/PageRank/紧密中心度/标签传播/SCC/ |
| 子图/图统计 |
+-------------------------------------------------------------+
| 图谱可视化(card):SVG 画布(节点/边/箭头/标签),空态提示 |
+-------------------------------------------------------------+
| 新增节点 / 边(card):左新增节点表单,右新增边表单 |
+-------------------------------------------------------------+
各板块职责:
- 页头:统计芯片显示节点/边数,「刷新图谱」全量重载。
- 图分析:算法工具栏 + 分区结果面板;社群/标签传播对节点按 ID 哈希换色。
- 图谱可视化:520px 高 SVG 画布,点击节点高亮邻居、拖拽平移;空态显示「图谱为空,请刷新或新建节点。」
- 新增节点 / 边:双列表单,分别 POST
/graph/nodes与/graph/edges,成功并入画布重排布局。
4. 交互元素
| 控件 | 位置 | 含义与作用 |
|---|---|---|
| 刷新图谱按钮 | 页头 | 并行加载 /graph/stats、/graph/nodes 与默认 3 度展开(中心 graph:person:zhy,limit 100) |
| 展开(BFS 1-3 度) | 图分析 | 深度 + limit + 中心节点 rid,GET /analysis/graph/expand 并入新节点/边 |
| 最短路径 | 图分析 | from/to rid 必填,GET /analysis/graph/path;不可达提示「路径不可达」,命中路径红色高亮 |
| 中心度 / 社群着色 | 图分析 | 「中心度」拉度中心度 Top 表;「社群着色」按社区换色;「清除高亮」复位 |
| 高级图分析 | 图分析 | PageRank、紧密中心度(Top 20)、标签传播、强连通分量、图统计(节点/边/平均度 + 类型分布) |
| 子图过滤 | 图分析 | types/rootIds/depth 调 GET /analysis/graph/subgraph,结果可「应用为当前视图」 |
| 节点点击 | 图谱可视化 | 高亮直接邻居(depth=1),邻居缺失自动并入 |
| 新增节点表单 | 新增节点 / 边 | ID(如 graph:person:xx)、类型(person/org/ship/custom)、标签必填;属性 JSON 可选 |
| 新增边表单 | 新增节点 / 边 | 源/目标 ID、边类型(如 member_of)、方向(directed/bidirectional)、属性 JSON |
5. 后端关联
API 客户端:gothamClient.js,axios.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} |
| GET | /graph/nodes/:id/neighbors | 节点直接邻居(depth=1) |
| GET | /analysis/graph/expand | BFS 展开 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/pagerank | PageRank 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 |
| GET | /analysis/graph/stats | 图统计详情(含节点/边类型分布) |
关键机制:
- 零依赖力导向布局(runLayout):220 轮迭代 n² 斥力 + 边引力 + 向心力,画布 ±520×±320,新节点按角度圆环初始化;并入节点/边后重跑。
- 加载即联动:
loadGraph用Promise.allSettled并行发/graph/stats、/graph/nodes与默认展开,部分失败不阻塞整体。 - 状态独立叠加:选中/高亮/路径/社区着色四类状态独立维护,选中节点后其余元素淡化;错误统一
err.response?.data?.error || err.message。
6. 权限与安全
- 认证:全部请求走
aip_tokenBearer,401 自动 refresh 换发重放;刷新失效清 token 跳/login。 - 角色限制:
/analysis/graph/*为管理能力,仅 admin 可执行(非 admin 403AUTHZ_ERROR);/graph/*无细分。 - 写操作防护:新增节点/边前端校验必填与 JSON 合法性;无删除/编辑 UI,避免误删。
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 则重新登录。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 大图渲染瓶颈 | 节点全量渲染 SVG,百节点以上拖拽/布局变慢,无虚拟化 |
| 力导向布局纯前端 | 220 轮启发式,坐标不持久化 |
| 无节点/边编辑与删除 | 页面只提供新增,删除需走接口或其他页面 |
| 子图结果截断 | 子图结果表仅展示前 50 节点 |
| 默认展开写死中心 | 加载默认按 graph:person:zhy 展开,无该节点时补边为空 |
| 无 WebSocket 订阅 | 实时协作推送(/gotham-api/v1/ws)在「协同动态」等页使用 |