44 lines
1.6 KiB
Markdown
44 lines
1.6 KiB
Markdown
|
|
# 实施说明 — 浏览器网站导航(收藏)
|
|||
|
|
|
|||
|
|
> 设计:`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`)已上线
|