# Changelog — 登录 IP 门禁 + SPA 无感切换（2026-06-08）

## 摘要

非白名单 IP 登录页仅展示提示卡（无表单）；已登录 SPA 侧栏切页通过 keep-alive、数据缓存与预取减少白屏与重复请求。

## 动机

- 白名单开启时，非授权 IP 不应闪现用户名/密码表单。
- 登录成功与侧栏导航频繁 remount 导致白屏与重复拉数，影响 2000+ 子机运维体验。

## 涉及文件

| 区域 | 文件 |
|------|------|
| P0 后端 | `server/utils/login_allowlist.py`、`server/api/auth.py`、`server/api/auth_jwt.py`、`server/application/services/auth_service.py` |
| P0 前端 | `frontend/src/pages/LoginPage.vue` |
| P1 路由壳 | `frontend/src/App.vue`、`frontend/src/constants/cachedPages.ts` |
| P2 激活刷新 | `frontend/src/composables/usePageActivateRefresh.ts`、12 页 `*Page.vue`（排除 Terminal/Login） |
| P3 缓存 | `frontend/src/composables/useCachedQuery.ts`、`useServerCategories.ts`、`DashboardPage.vue`、`ServersPage.vue` |
| P4 预取/骨架 | `frontend/src/composables/useRoutePrefetch.ts`、`DashboardPage.vue`、`ServersPage.vue` |
| 测试 | `tests/test_login_access.py` |

## 迁移 / 重启

- 无 DB 迁移。
- 需重启 API；前端需 `npm run build` 并部署 `web/app/`。

## 验证

```bash
pytest tests/test_login_access.py
bash scripts/local_verify.sh
cd frontend && npm run build
bash deploy/pre_deploy_check.sh
```

浏览器：非白名单 IP 无登录表单；白名单登录；侧栏往返 5 页无白屏。

## 回滚

Revert 本批次 commit；P0 可独立 revert，不影响已登录会话。
