# 4-38 文件树 mindmap 点击后选中态闪回父页面 ## 状态 - 状态:done - 分类:04-tree-domain - 发现时间:2026-05-15 - 修复时间:2026-05-15 ## 现象 点击页面树普通页面时视觉稳定;点击文件树中的思维导图资源行时,资源行会快速闪一下,随后文件树选中态回到父页面 `.md` 行。用户体感类似“点了 mindmap 文件,但文件树又跳回对应页面/index”。 ## 根因 文件树资源点击路径先执行 `selectSidebarFileTreeRow()`,使 asset row 短暂 selected;随后 mindmap 资源通过 `tree.asset.open -> openConvexAssetFromFileTree()` 整页跳转到 `/mindmap/{documentId}/{mindmapId}`。 旧实现中 `/mindmap` 对象页重新渲染文件树时只按当前 `documentId` 计算选中态: ```text rowId === 'doc:' + activeId ``` 因此页面重建或 tree live snapshot 重绘后,选中态会从 `asset:{mindmapId}` 回落到 `doc:{documentId}`,形成快速闪烁。 ## 修复 - `mindmap_object_shell` 加载文件树时传入 active row:`asset:{mindmapId}`。 - `collect_filetree_render_rows()` 新增 `active_row_id`,当存在 active row 时优先按 row id 选中,避免父页面 fallback 抢回 selected。 - `SIDEBAR_TREE_JS` 的 live snapshot renderer 新增 `currentFileTreeActiveRowId()`,在 `/mindmap/{doc}/{asset}` 路径下保持 `asset:{asset}` 选中,防止 SSE 重绘后再次闪回。 ## 验证 Rust 定向测试: ```bash cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_filetree_runtime_uses_markdown_page_row_without_local_index_child -- --nocapture cargo test --manifest-path rust/Cargo.toml -p mnote-web mindmap_shell_returns_rust_object_shell_contract -- --nocapture cargo test --manifest-path rust/Cargo.toml -p mnote-web filetree_rows_select_active_mindmap_asset_in_object_shell -- --nocapture ``` 真实浏览器 smoke: ```bash MNOTE_UI_BASE_URL=http://127.0.0.1:3428 node scripts/task443-filetree-mindmap-click-active-row-smoke.js ``` 验证结果: - `tmp/task443-filetree-mindmap-click-active-row-smoke/result.json` - 截图:`tmp/task443-filetree-mindmap-click-active-row-smoke/after-mindmap-click.png` - 点击后 URL 为 `/mindmap/{documentId}/{mindmapId}`。 - 点击前 selected row 为 `doc:{documentId}`。 - 点击后 selected row 为 `asset:{mindmapId}`。 - 点击后不再出现父页面 `doc:{documentId}` selected。 ## 后续口径 mindmap、附件、table 等资源对象打开后,文件树 active/selected 不能只按父 `documentId` 回落到页面行;对象页或对象视图必须优先表达资源对象身份。页面正文才选中 `doc:{documentId}`。