Merge pull request 'sync: visual-diff-pencil 增强结构检查 - 递归检查所有层级+bottomNav全局配置检查' (#35) from sync/d8d-skills-visual-diff-enhance-20260414-051824 into master

Reviewed-on: http://gitea.d8d.fun/d8dfun/bmad-method-template/pulls/35
This commit is contained in:
2026-04-14 05:33:12 +00:00
2 changed files with 28 additions and 9 deletions

View File

@@ -191,8 +191,11 @@ Epic N+1 完成
(即使上一个 Story 也是管理后台,也要确认当前视口正确)
验证小程序页面之前:
browser_resize → width: 375, height: 812
browser_resize → width: 390, height: 844, deviceScaleFactor: 2
(即使上一个 Story 也是小程序,也要确认当前视口正确)
- 390x844 = 现代 iPhone (12/13/14/15) 标准视口
- deviceScaleFactor: 2 → 像素密度 2x匹配 Pencil 设计稿导出 scale=2
- 旧款 iPhone 是 375x812现代设计稿普遍使用 390 宽度
```
### 禁止行为列表

View File

@@ -223,14 +223,27 @@ PVD-1 PER-PAGE LOOP:
```
步骤:
1. 从 Pencil MCP batch_get 获取当前设计帧的完整节点树
2. 提取所有层命名节点name 属性存在的节点)→ 得到"必须存在的组件列表"
示例: availableCard / amountInput / amountActions / withdrawMethod / recentWithdrawals / confirmBtn
3. 读取实际页面源码app/mini-program/src/pages/{page}/index.vue双向检查:
- **必需组件检查**: 节点整个区块缺失 → 直接判定为 🔴 严重差异 → critical_count += 1
2. **递归提取所有层命名节点**(任意层级只要 name 属性存在的节点)→ 得到"必须存在的组件列表"
**递归算法**:
function collectNamedNodes(node, path, resultList):
if node.name != null && node.name != "":
resultList.push({path: path + node.name, node: node})
for each child in node.children:
collectNamedNodes(child, path + node.name + ".", resultList)
结果包含所有层级topBar, topBar.topLeft, topBar.topRight, tabSection, tabSection.tabLeft, etc.
示例: topBar.topLeft / tabSection.tabLeft / availableCard / amountInput / ...
3. **检查全局配置关联**: 如果设计帧包含 name=bottomNav/BottomNav 且是 ref 组件
- 读取 app/mini-program/src/pages.json → 获取当前 tabBar 配置
- 对比设计中 bottomNav.children.length vs 实际 tabBar.list.length
- 对比每个 item 文字描述是否匹配(如果可匹配)
- 数量不匹配 → critical_count += 1底部导航结构错误是严重差异
4. 读取实际页面源码app/mini-program/src/pages/{page}/index.vue双向检查每个必需组件:
- **必需组件检查**: 按路径节点整个区块缺失 → 直接判定为 🔴 严重差异 → critical_count += 1
- **多余组件检查**: 实际页面存在设计稿中没有的顶层区块 → 🟡 中等差异 → moderate_count += 1
- **组件类型一致性检查**: 设计是 `icon_font` 但实现用纯文本字符 → 🟡 中等差异 → moderate_count += 1
- **文字样式一致性检查**: 设计文字标签(如区块标题)颜色/字体大小与实际CSS不符 → 🟡 中等差异 → moderate_count += 1
4. 结构校验通过后,使用 Read 工具分别查看设计截图和实际截图AI 综合分析视觉差异:
- **文字样式一致性检查**: **任意设计节点 type=text 且有 name** → 检查 fill 颜色 + fontSize + fontWeight 与实际CSS不符 → 🟡 中等差异 → moderate_count += 1
5. 结构校验通过后,使用 Read 工具分别查看设计截图和实际截图AI 综合分析视觉差异:
- 布局结构(网格/弹性/定位、对齐方式)
- 组件排列(导航栏、卡片、按钮、图标)
- 颜色Neon Pulse 规范:#000000 背景、#ffb3b5 粉色、#e8b3ff 紫色、#00dce5 青色)
@@ -242,6 +255,9 @@ PVD-1 PER-PAGE LOOP:
**优势**:
- 利用设计文件本身的结构信息,比纯视觉分析更可靠
- **递归检查所有层级** → 确保不会漏检顶层存在但内部子区块缺失(如 topBar 存在但 topLeft 缺失)
- **自动检查全局 tabBar 配置** → 设计稿显示的 bottomNav 结构必须与实际配置一致
- **所有文字节点都检查** → 正文/meta/操作计数等颜色不符不会漏检
- 确保不会漏检"整个区块缺失"(如支付结果页订单信息卡片整个不见了)
- 帮助 AI 聚焦到每个具体组件,差异分析更准确
@@ -260,8 +276,8 @@ PVD-1 PER-PAGE LOOP:
| 情况 | 级别 | 是否计数 |
|------|------|----------|
| 布局结构不同、关键组件缺失 | 🔴 严重 | `critical_count += 1` |
| 颜色/间距偏差、图标不一致、文本对齐方式不符、圆角尺寸差异、多余顶层区块、违反Neon Pulse设计规范、组件类型不匹配、**文字标签颜色/字体大小不符** | 🟡 中等 | `moderate_count += 1` |
| 布局结构不同、**任意层级**关键组件缺失、bottomNav 配置与设计不匹配 (Tab数量/文字) | 🔴 严重 | `critical_count += 1` |
| 颜色/间距偏差、图标不一致、文本对齐方式不符、圆角尺寸差异、多余顶层区块、违反Neon Pulse设计规范、组件类型不匹配、**任意命名文字节点颜色/字体大小不符** | 🟡 中等 | `moderate_count += 1` |
| 微小像素差异 (1-2px 偏移) | 🟢 轻微 | `minor_count += 1` |
**门禁规则再强调**