# 实施说明 — 浏览器网站导航(收藏) > 设计:`docs/design/specs/2026-06-11-browser-nav-bookmarks-design.md` ## 涉及文件(计划) | 文件 | 动作 | |------|------| | `server/utils/browser_ui_state.py` | ✅ `nav_links` 解析与上限 | | `server/api/browser.py` | ✅ `BrowserNavLinkState` / PUT 字段 | | `tests/test_browser_ui_state.py` | ✅ `test_parse_nav_links` | | `frontend/src/composables/useGlobalBrowser.ts` | `navLinks` + add/update/remove + persist | | `frontend/src/components/GlobalBrowserPanel.vue` | 侧栏 Tab、列表、添加/编辑对话框、空白页快捷入口 | | `docs/changelog/2026-06-11-browser-nav-bookmarks.md` | 完成后记录 | ## 前端步骤 1. `BrowserNavLink` 类型与 `applyServerState` / `persistState` 带上 `nav_links` 2. `addNavLink(title, url)` · `updateNavLink(id, …)` · `removeNavLink(id)` 3. `addCurrentPageToNav()` — 取 `activeTab.url` 或 `addressDraft` 4. 侧栏:`sidebarMode: 'nav' | 'history' | null` 5. 对话框:`v-dialog` 名称 + URL,`normalizeBrowserUrl` 校验 6. 空白页:`v-chip` / 列表展示 `navLinks`,点击 `openUrl` ## 测试要点 ```bash pytest tests/test_browser_ui_state.py -q cd frontend && npm run type-check ``` - 添加 3 条导航 → PUT → GET 往返一致 - 超 64 条截断;非法 URL 过滤 - UI:编辑后刷新仍显示 ## 回滚 - 前端未发版:仅后端多返回空 `nav_links`,兼容 - 回滚前端:导航 UI 消失,DB 中 JSON 保留无害 ## 依赖 - 全局浮动浏览器(`GlobalBrowserPanel` + `/api/browser/state`)已上线