Unify manual topology roots with UME World: auto root map, and fix empty UME canvas.

Top-level folders are nav-only with a unique system root map; UI drops custom/extra L2 creates. Batched dock-to-Fabric apply avoids PG lock OOM so World NEs can render, with subtree region counts restored.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-08-07 02:22:58 +08:00
parent edfa3f8756
commit 48b10656d2
9 changed files with 867 additions and 366 deletions

View file

@ -1385,7 +1385,11 @@ const zh = {
maps: "拓扑图",
tree: "拓扑树",
treeLoading: "加载拓扑树…",
treeHint: "区域下为画布列表;点图打开设备画布(区域本身不自动建图)。",
graphLoading: "正在加载拓扑图…",
graphRefreshing: "刷新中…",
canvasEmpty: "这张图上还没有网元",
canvasEmptyHint: "可用「添加网元」上图,或从左侧换到有设备的区域。",
treeHint: "顶级为「根」(导航);其下唯一「根图」为画布。点根图或子区域打开设备画布。",
treeSearch: "全拓扑搜索网元",
treeSearchPh: "名称 / IP",
treeSearchEmpty: "没有匹配的网元",
@ -1393,47 +1397,47 @@ const zh = {
treeSearchNotOnMap: "该网元尚未出现在任何拓扑图上",
treeSearchViewCount: "{{count}} 张图",
treeSearchTruncated: "仅显示前 30 条(共 {{total}})",
rootName: "区域",
selectRegion: "请选择区域",
rootName: "根",
selectRegion: "请选择根或区域",
openMap: "打开本图",
openRegion: "打开区域",
openRegion: "打开",
kindPhysical: "物理拓扑",
kindCustom: "自定义图",
regionNodeHint: "{{count}}P",
layerNodeHint: "{{count}} 个网元",
layerNodeEmpty: "点击创建并打开",
rootCanvasHint: "从左侧选择区域进入目录。",
regionCanvasHint: "点击图打开设备画布,或新建自定义图。",
regionBrowseHint: "区域目录:自行添加的画布。点击打开。",
rootCanvasHint: "从左侧选择根进入目录。",
regionCanvasHint: "点击根图打开设备画布;可在根图上新建子区域。",
regionBrowseHint: "根目录:下方为唯一根图。点击打开。",
browserTitle: "拓扑目录",
browserRegionSub: "共 {{count}} 张拓扑图",
browserRegionsSub: "共 {{count}} 个区域",
browserEmptyMaps: "此区域还没有拓扑图。",
browserRegionsSub: "共 {{count}} 个",
browserEmptyMaps: "此根下还没有根图。",
addNe: "添加网元",
backUp: "返回区域",
newRegion: "新建区域",
newRegionName: "新区域",
newRegionPrompt: "区域名称",
backUp: "返回",
newRegion: "新建根",
newRegionName: "新根",
newRegionPrompt: "根名称",
newSubRegion: "新建子区域",
newSubRegionName: "新子区域",
newSubRegionPrompt: "子区域名称",
subRegionNotOnFlat: "完整世界地图不支持子区域,请在 World 或下级区域画布上创建。",
worldMapNoDirectNes: "世界地图不能直接添加网元,请到某个子区域画布上添加。",
subRegionNeedParent: "请先打开一个区域画布,再新建子区域。",
regionCreated: "区域已创建",
regionDeleted: "区域已删除",
deleteRegion: "删除区域",
deleteRegionConfirm: "删除区域「{{name}}」?其下画布将一并删除。",
renameRegion: "重命名区域",
renameRegionPrompt: "区域名称",
regionRenamed: "区域已重命名",
collapseRegion: "折叠区域",
expandRegion: "展开区域",
subRegionNeedParent: "请先打开根图或区域画布,再新建子区域。",
regionCreated: "已创建",
regionDeleted: "已删除",
deleteRegion: "删除",
deleteRegionConfirm: "删除「{{name}}」?其下画布将一并删除。",
renameRegion: "重命名",
renameRegionPrompt: "名称",
regionRenamed: "已重命名",
collapseRegion: "折叠",
expandRegion: "展开",
newCustom: "自定义图",
newCustomName: "自定义拓扑",
newCustomPrompt: "自定义拓扑图名称",
folderHint: "区域用于分组。新建区域后请自行添加物理拓扑或自定义图。",
folderHintShort: "区域目录",
folderHint: "新建根时自动创建唯一「根图」。子区域请在根图画布上创建。",
folderHintShort: "根目录",
outsidePeers: "图外对端 {{count}} 个(有链路未上图)",
projectNeighbors: "投影邻居上图",
projectedNeighbors: "已投影 {{count}} 个邻居上图",
@ -1457,7 +1461,7 @@ const zh = {
renamed: "拓扑图已重命名",
deleteMap: "删除图",
deleteMapConfirm: "删除拓扑图「{{name}}」?节点与链路会一并删除。",
emptyMaps: "还没有区域,先点「新建区域」。",
emptyMaps: "还没有根,先点「新建根」。",
palette: "网元库",
paletteHint: "勾选后批量添加;也可拖到画布添加单台",
paletteDragHint: "拖到画布添加",