docs(audit): UI 还原 + 性能审计报告;修登录假动画延迟

- 新增 UI 还原对比报告 / 性能审计报告(2026-06-19,14 块页面 + 6 块性能,逐项 file:line)
- auth-screen: 删除登录成功后 ~1.5s 人为进度动画延迟,凭证验过即进

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-19 02:07:44 +08:00
co-authored by Claude Opus 4.8
parent 5cfee715a2
commit 856a93b8a9
3 changed files with 475 additions and 18 deletions
+2 -18
View File
@@ -5,25 +5,13 @@ import { api, getRemember, setRemember as persistRemember } from "../api";
import type { Team, User } from "../types";
import type { AuthMode } from "./route-config";
const LOGIN_PROGRESS_STAGE_MS = 520;
type LoginProgress = "checking" | "verified" | "entering";
type LoginProgress = "checking" | "entering";
const LOGIN_PROGRESS_COPY: Record<LoginProgress, string> = {
checking: "正在验证用户名和密码…",
verified: "验证成功,正在登录…",
entering: "登录成功,正在进入 Airshelf"
};
function wait(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function completeProgressStage(startedAt: number) {
const remaining = LOGIN_PROGRESS_STAGE_MS - (Date.now() - startedAt);
if (remaining > 0) await wait(remaining);
}
type FieldErrors = {
username?: string;
password?: string;
@@ -92,15 +80,11 @@ export function AuthScreen({
setError("");
setLoginProgress("checking");
try {
const checkingStartedAt = Date.now();
const payload = await api.login({ username: username.trim(), password });
// 记住我:勾选则存用户名 + 7 天有效期,token 落 localStorage;否则只存当前会话
persistRemember(username.trim(), remember);
await completeProgressStage(checkingStartedAt);
setLoginProgress("verified");
await wait(LOGIN_PROGRESS_STAGE_MS);
// 凭证验过即进:不再做任何人为延迟动画。"进入"态由真实的 onAuthed(身份+数据水合)驱动。
setLoginProgress("entering");
await wait(LOGIN_PROGRESS_STAGE_MS);
await onAuthed({ ...payload, remember });
} catch (err) {
setLoginProgress(null);