2026-05-15-FE-01.md 2.53 KB

fe_id: FE-01 date: 2026-05-15 round: 2

reviewer: fe-code-reviewer

Review: FE-01 — round 2

结论

approve

Must-fix

(无)

Round 1 修复落地核对

# 项目 状态
1 App.tsx 挂 Provider + RouterProvider + ConfigProvider
2 tokens.css 与 docs/06 § 2.1 SSoT 完全对齐(含 8 个缺失 canonical token;删除自定义 form-bg/table-row 键)
3 colorPrimary #1890ff → #1677ff(SSoT 同源)
4 三个 Form.Item 加 label="用户名"/"密码"/"公司"(a11y)
5 LoginPage 锁定倒计时 + LoginForm submitDisabled prop
6 补 a11y / 锁定 disabled / 空字段必填 三类测试
7 App.test 改为 store/router 静态验证(BrowserRouter + jsdom + MSW AbortSignal 不兼容)

Nice-to-have(round 1 标记延后,本轮保留)

  • frontend/src/pages/login/LoginPage.tsx:71 — 40001 仍渲染到 ErrorBanner;spec § 三 #8 期望 field-level。MVP 可接受
  • frontend/src/pages/login/LoginPage.tsx:82 — 未抽出 LoginHeader + 引入 prototype SVG logo;visual polish 推后
  • frontend/src/pages/login/loginConstants.ts:1 — COMPANY_OPTIONS 硬编码 HQ;待 GET /api/v1/companies 实现后改为动态加载
  • frontend/src/api/client.ts:28 — 缺直接的 client.test.ts;当前由 auth.test.ts 间接覆盖等价场景
  • frontend/tests/e2e/login.spec.ts — 3 个 spec 仍 .fixme(),留作手工验收(需 npx playwright install + backend 启动)

7 维 checklist

# 维度 状态
1 Prototype consistency pass
2 Design tokens pass(无 hex 残留)
3 A11y pass(labels + autoComplete + Enter 提交)
4 Responsive pass(flex 布局,无 fixed 阻塞)
5 业务校验前端复刻 pass
6 API consistency pass(统一 apiClient + BizError)
7 状态机覆盖 pass(10 状态 spec § 三 全部覆盖)

反例 / 测试覆盖缺口

  • 3 个 Playwright E2E spec 仍 .fixme(),需人工验收时启用(设计决策 #3 标记延后)
  • AntD Select 切换 companyCode 未在单测覆盖(默认 HQ);可接受
  • BizError 40001 假设后端不返 field detail;若后端在 data 里携带 field-level error 信息,本 round 未处理

总结

Round 1 全部 9 项 must-fix 正确落地:Provider 链可运行、tokens SSoT 严丝合缝、colorPrimary 同源、a11y labels 三齐、锁定倒计时 + submit disabled 闭环、回归测试三件套补齐。无新回归,7 维 checklist 全 pass。Approve。