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`)已上线
|