# Visual Parity QA

这个目录用于逐页校对 `电商AI平台` 设计稿代码和 `core/frontend` 实现页的像素差。

## 原则

1. 每开发完一个页面,先截设计稿,再截实现页。
2. 两张图使用同一浏览器、同一视口、同一 deviceScaleFactor。
3. 输出 `design.png`、`implementation.png`、`diff.png` 和 `report.json`。
4. `diffPixels` 必须逐轮下降; 页面验收目标是 0,如字体渲染造成非业务差异,必须在报告里单独记录。
5. 视频生成真实测试不进入这个阶段,只校对页面和普通交互。

## 实现层

`core/frontend/public/exact/` 是从 `电商AI平台/` 同步到 `core` 内的精确镜像实现层,用于保证每个设计稿页面都能在当前前端服务中以真实 URL 打开并进行像素验收。

已 React 化并直接接入主 SPA 的页面:

- 登录: `/`
- 注册: `/#register`
- 工作台: `?visual=dashboard` / `/#dashboard`

其余页面先通过 `/exact/*.html` 达成 1:1 视觉还原,后续再按功能模块逐步替换为真实接口驱动的 React/Django 页面。替换时必须继续跑同名 visual parity 项,直到 `diffPixels=0`。

## 页面比对命令

先启动前端:

```bash
cd /Users/maidong/Desktop/zyc/qiyuan_gitea/AirShelf/core/frontend
npm run dev
```

再执行像素比对:

```bash
cd /Users/maidong/Desktop/zyc/qiyuan_gitea/AirShelf/core/qa/visual-parity
npm install
npm run compare:login
npm run compare:register
npm run compare:dashboard
npm run compare:all
```

输出目录:

```text
core/qa/visual-parity/output/
```

## 页面复刻队列

| 优先级 | 页面 | 设计稿 | 关键子页面/交互 | 实现入口 | 状态 |
| --- | --- | --- | --- | --- | --- |
| P0 | 登录 | `电商AI平台/login.html` | 密码可见、忘记密码 toast、SSO toast、注册入口 | `/` 未登录态 | `1440x900 diffPixels=0` |
| P0 | 注册 | `电商AI平台/register.html` | 团队注册、返回登录 | `/#register` 未登录态 | `1440x900 diffPixels=0` |
| P0 | 工作台 | `电商AI平台/index.html` | 侧栏、顶部余额/消息、快捷入口、最近项目 | `?visual=dashboard` / `/#dashboard` | `1440x900 diffPixels=0` |
| P0 | 商品库 | `电商AI平台/products.html` | 列表/卡片、新建商品 drawer、删除/筛选 | `/exact/products.html` | `1440x900 diffPixels=0` |
| P0 | 商品详情 | `电商AI平台/product-detail.html` | 编辑、素材区、创建视频项目入口 | `/exact/product-detail.html` | `1440x900 diffPixels=0` |
| P0 | 上传创建商品 | `电商AI平台/product-create-upload.html` | 跳转商品库并自动打开新建商品 drawer | `/exact/product-create-upload.html` | `1440x900 diffPixels=0` |
| P0 | 视频项目 | `电商AI平台/projects.html` | 表格/卡片视图、删除确认 modal、进入 pipeline | `/exact/projects.html` | `1440x900 diffPixels=0` |
| P0 | 新建视频项目 | `电商AI平台/projects-new.html` | 商品选择、模板选择、素材库 modal、创建确认 | `/exact/projects-new.html` | `1440x900 diffPixels=0` |
| P0 | 生产管线 | `电商AI平台/pipeline.html` | Stage 1-5、资产详情、演员/场景库、额度预检、视频详情、导出 | `/exact/pipeline.html#stage-1..5` | `5/5 stages diffPixels=0`,不测真实生视频 |
| P1 | 资产库 | `电商AI平台/library.html` | 上传、筛选、预览/删除 | `/exact/library.html` | `1440x900 diffPixels=0` |
| P1 | 账户/额度 | `电商AI平台/account.html` | 充值、交易流水、充值 modal | `/exact/account.html` | `1440x900 diffPixels=0` |
| P1 | 团队 | `电商AI平台/team.html` | 成员、角色、月限额 modal | `/exact/team.html` | `1440x900 diffPixels=0` |
| P1 | 消息中心 | `电商AI平台/messages.html` | 消息详情、日志展开、通知设置跳转 | `/exact/messages.html` | `1440x900 diffPixels=0` |
| P1 | 图片工具入口 | `电商AI平台/asset-factory.html` | 三类工具入口、任务列表 | `/exact/asset-factory.html` | `1440x900 diffPixels=0` |
| P1 | 图片创作 | `电商AI平台/image-optimize.html` | 参数面板、重复任务 modal、返回 | `/exact/image-optimize.html` | `1440x900 diffPixels=0` |
| P1 | 模特上身图 | `电商AI平台/model-photo.html` | 模特选择、方案入口、生成参数 | `/exact/model-photo.html` | `1440x900 diffPixels=0` |
| P1 | 模特方案 A | `电商AI平台/model-photo-demo-a.html` | 方案预览/采用 | `/exact/model-photo-demo-a.html` | `1440x900 diffPixels=0` |
| P1 | 模特方案 B | `电商AI平台/model-photo-demo-b.html` | 方案预览/采用 | `/exact/model-photo-demo-b.html` | `1440x900 diffPixels=0` |
| P1 | 平台套图 | `电商AI平台/platform-cover.html` | 平台规格、批量生成 | `/exact/platform-cover.html` | `1440x900 diffPixels=0` |
| P1 | 设置 | `电商AI平台/settings.html` | 资料、安全、通知策略 `#sec-notify` | `/exact/settings.html#sec-profile/security/notify/pref/display` | `5/5 sections diffPixels=0` |

`电商AI平台/design-system.html` 作为 token/component 参考,不作为业务页面验收目标。`电商AI平台/_archive` 下旧稿默认不纳入复刻,除非后续明确要求恢复旧版本。
