mirror of
https://github.com/hansjone/netx.git
synced 2026-10-15 17:13:21 +08:00
Optimize topology canvas per the 2026-10-12 plan.
Save path: one atomic POST /views/{id}/commit (edges, ports, styles, node
add/remove, positions) replaces the multi-request save. Edge styles and
manual-edge port edits now go through dirty/undo/save instead of writing
immediately; non-manual edge ports are read-only.
Data safety: UI saves no longer clear MCP node locks or freeze the device
name into the placement label (label_override + omit-means-keep semantics,
also applied to the MCP positions tool). Adding NEs/neighbors with unsaved
edits now saves first instead of silently dropping them. Positions no longer
bypass membership caps, except persisting synthesized child-region icons.
Fixes found in acceptance: nodes added in the same commit kept (40,40)
under autoflush=False; edits on edges deleted in the same save 404'd the
whole save; box-selection drags and arrow-key moves were not marked dirty;
large canvases far from the origin opened blank and locate did nothing
because fitView waits for measurement that onlyRenderVisibleElements never
does (now fitBounds from known geometry).
Also: batch N+1 lookups in graph/positions, deterministic truncation,
outside-peer scan excludes internal edges, split TopologyPage into hooks,
fix flaky UME/LLDP port test, add scripts/topology_clear_frozen_labels.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
60a0ea6021
commit
f301544b99
40 changed files with 5587 additions and 1916 deletions
|
|
@ -115,9 +115,12 @@ const topology = {
|
|||
save: "Save",
|
||||
saveDirty: "Save *",
|
||||
unsavedConfirm: "You have unsaved changes. Discard and switch maps?",
|
||||
unsavedSaveBeforeAdd: "You have unsaved changes. Save and continue adding?",
|
||||
saving: "Saving…",
|
||||
saved: "Topology saved",
|
||||
savedLockedSkipped: "Topology saved ({{count}} locked node(s) skipped)",
|
||||
saveFailed: "Save failed: {{detail}}",
|
||||
renameNodeClearHint: "Leave empty to follow the device name",
|
||||
readOnlyBanner: "Read-only (ne:write scope required to edit)",
|
||||
readOnlyHint: "Read-only — no write permission",
|
||||
discoverTimeout: "Discovery timed out; check LLDP tasks for progress",
|
||||
|
|
|
|||
|
|
@ -112,9 +112,12 @@ const topology = {
|
|||
save: "保存",
|
||||
saveDirty: "保存 *",
|
||||
unsavedConfirm: "有未保存的更改,确定丢弃并切换吗?",
|
||||
unsavedSaveBeforeAdd: "当前有未保存修改,保存后继续添加?",
|
||||
saving: "保存中…",
|
||||
saved: "拓扑已保存",
|
||||
savedLockedSkipped: "拓扑已保存({{count}} 个锁定节点未移动)",
|
||||
saveFailed: "保存失败:{{detail}}",
|
||||
renameNodeClearHint: "留空则恢复跟随设备名",
|
||||
readOnlyBanner: "只读模式(需要 ne:write 权限才能编辑)",
|
||||
readOnlyHint: "只读模式,无编辑权限",
|
||||
discoverTimeout: "发现任务超时,请稍后在 LLDP 任务页查看进度",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue