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。