Add topology maps with LLDP discovery and React Flow canvas.

Includes map CRUD, graph save, neighbor discover, and UI controls for labels, sidebar, and edge flow.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-07-29 23:53:06 +08:00
parent 3b8342acfb
commit dc805c2086
18 changed files with 3084 additions and 4 deletions

View file

@ -28,6 +28,8 @@ const en = {
collectDesc: "Run custom CLI commands on connected NEs and save logs",
webcrt: "WebCRT",
webcrtDesc: "Interactive browser login to connected NEs (SSH/Telnet)",
topology: "Topology",
topologyDesc: "Drag NE topology maps; discover links via LLDP/CDP",
},
},
layout: {
@ -36,6 +38,7 @@ const en = {
titleManagedNe: "NE Management",
titleCollect: "Batch Collect",
titleWebcrt: "WebCRT",
titleTopology: "Topology",
navUme: "UME",
netxApi: "netx api",
oclawBridge: "oclaw WSS",
@ -588,6 +591,49 @@ const en = {
connectFailed: "Device login failed: {{detail}}",
},
},
topology: {
title: "Topology",
maps: "Maps",
newMap: "New",
newMapName: "New topology",
rename: "Rename",
renamePrompt: "Topology map name",
renameHint: "Double-click to rename",
renamed: "Topology map renamed",
deleteMap: "Delete map",
deleteMapConfirm: "Delete map \"{{name}}\"? Nodes and edges will be removed.",
emptyMaps: "No maps yet. Create one to start.",
palette: "NE library",
paletteHint: "Click to add to canvas",
filterPh: "Filter name / IP",
save: "Save",
saving: "Saving…",
saved: "Topology saved",
discover: "Discover links",
discovering: "Discovering…",
discovered: "Discovery done: +{{added}} updated {{updated}}",
discoverFail: "Discovery failed: {{detail}}",
selectMap: "Select or create a topology map",
canvasHint: "Add NEs from the left, drag and connect; dashed edges are LLDP/CDP",
selected: "Selected",
openWebcrt: "Open terminal",
openNe: "NE details",
removeNode: "Remove from canvas",
noNeLink: "Not linked to a managed NE",
edgeManual: "Manual",
edgeDiscovered: "Discovered",
fit: "Fit view",
display: "Display",
hideIp: "Hide IP",
hideVendor: "Hide vendor",
hidePorts: "Hide ports",
edgeFlow: "Edge flow",
collapseSidebar: "Collapse sidebar",
expandSidebar: "Expand sidebar",
hideAdded: "Hide added",
paletteEmpty: "No matching NEs.",
paletteHiddenAll: "Added NEs are hidden; uncheck to show them again.",
},
};
export default en;

View file

@ -28,6 +28,8 @@ const zh = {
collectDesc: "对已连通网元执行定制 CLI 命令并保存日志",
webcrt: "WebCRT",
webcrtDesc: "浏览器内交互登录已连通网元(SSH/Telnet)",
topology: "拓扑管理",
topologyDesc: "拖拽编排网元拓扑,支持 LLDP/CDP 发现链路",
},
},
layout: {
@ -36,6 +38,7 @@ const zh = {
titleManagedNe: "网元管理",
titleCollect: "批量采集",
titleWebcrt: "WebCRT",
titleTopology: "拓扑管理",
navUme: "UME 对接",
netxApi: "netx api",
oclawBridge: "oclaw WSS",
@ -586,6 +589,49 @@ const zh = {
connectFailed: "登录设备失败:{{detail}}",
},
},
topology: {
title: "拓扑管理",
maps: "拓扑图",
newMap: "新建",
newMapName: "新拓扑图",
rename: "重命名",
renamePrompt: "拓扑图名称",
renameHint: "双击可重命名",
renamed: "拓扑图已重命名",
deleteMap: "删除图",
deleteMapConfirm: "删除拓扑图「{{name}}」?节点与链路会一并删除。",
emptyMaps: "还没有拓扑图,先新建一张。",
palette: "网元库",
paletteHint: "点击添加到画布",
filterPh: "筛选名称 / IP",
save: "保存",
saving: "保存中…",
saved: "拓扑已保存",
discover: "发现链路",
discovering: "发现中…",
discovered: "发现完成:新增 {{added}},更新 {{updated}}",
discoverFail: "发现失败:{{detail}}",
selectMap: "请选择或新建一张拓扑图",
canvasHint: "从左侧添加网元,拖动节点并连线;虚线为 LLDP/CDP 发现链路",
selected: "已选节点",
openWebcrt: "打开终端",
openNe: "网元详情",
removeNode: "从画布移除",
noNeLink: "未关联托管网元",
edgeManual: "人工",
edgeDiscovered: "发现",
fit: "适应画布",
display: "显示选项",
hideIp: "隐藏 IP",
hideVendor: "隐藏厂商",
hidePorts: "隐藏端口",
edgeFlow: "链路流动",
collapseSidebar: "折叠侧栏",
expandSidebar: "展开侧栏",
hideAdded: "隐藏已添加",
paletteEmpty: "没有匹配的网元。",
paletteHiddenAll: "已添加网元已隐藏;取消勾选可重新显示。",
},
};
export default zh;