|
|
@@ -0,0 +1,201 @@
|
|
|
+# U7 大字号/字重收口 独立核验 ❌ FAIL(需返工)
|
|
|
+
|
|
|
+## 结论
|
|
|
+
|
|
|
+**Verdict: FAIL** — 字重收口(800/900 清零、15 处大字号用令牌)已达成,但字号映射存在系统性错误(48→64 ×24、80→96/100 ×9),`$uni-font-size-6xl` 令牌被后定义覆盖(实际 100rpx 而非 96rpx),且主理人拍板 ②「300×9→400」完全未落实。存在 4 项必修项,不建议按现状合入 cfclub。
|
|
|
+
|
|
|
+核验全程只读:未改任何源码,未解决任何冲突,仅在临时 detached worktree `D:\cfc\.wt-u7v` 中检出、rebase、审查。
|
|
|
+
|
|
|
+## 核验环境
|
|
|
+
|
|
|
+| 项 | 值 |
|
|
|
+|----|----|
|
|
|
+| 核验对象 | `origin/verify/u7` = `6b5ce736c`(基于 `81190a678`,2 commits) |
|
|
|
+| rebase 目标 | `origin/cfclub` = `d74cbdb8b` |
|
|
|
+| rebase 结果 | **成功,无冲突**;新提交 `a6478891a`(U7-1)、`9e3489602`(U7-2) |
|
|
|
+| rebase 是否改动内容 | 否。`git diff 6b5ce736c HEAD -- cfc-frontend/uni.scss` 为空;U7 两提交内容原样落地 |
|
|
|
+| 改动面 | 163 文件 +390/−219(前端 162 文件 +226/−219;文档 1 文件 +164) |
|
|
|
+| 后端编译 | 跳过:本机 `mvn` 不在 PATH;且 diff 中**无任何后端/数据库改动**(改动仅 `cfc-frontend/` + 1 份文档) |
|
|
|
+| 前端构建 | 跳过:worktree 无 `node_modules`(按任务约定注明) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Q1 令牌完整性 — 部分通过(6xl 值被覆盖)
|
|
|
+
|
|
|
+| 令牌 | 要求 | 实际 | 判定 |
|
|
|
+|------|------|------|------|
|
|
|
+| `$uni-font-size-title` | 40rpx | `uni.scss:120` = 40rpx | ✅ |
|
|
|
+| `$uni-font-size-display` | 48rpx | `uni.scss:121` = 48rpx | ✅ |
|
|
|
+| `$uni-font-size-6xl` | 96rpx | `uni.scss:124` 声明 96rpx,但 `uni.scss:136` 再次声明 **100rpx** → SCSS last-wins,**实际生效 100rpx** | ❌ |
|
|
|
+| `$uni-font-weight-extra-heavy` | 800 | `uni.scss:143` = 800 | ✅ |
|
|
|
+| `$uni-font-weight-black-extra` | 900 | `uni.scss:144` = 900 | ✅ |
|
|
|
+
|
|
|
+关键证据(`cfc-frontend/uni.scss`):
|
|
|
+
|
|
|
+```
|
|
|
+122: $uni-font-size-4xl: 64rpx; /* 大数字、统计值(56rpx 收敛 +8rpx) */
|
|
|
+123: $uni-font-size-5xl: 80rpx; /* Hero 数字、封面主标(72rpx 收敛 +8rpx) */
|
|
|
+124: $uni-font-size-6xl: 96rpx; /* 极值展示(88rpx/100rpx 收敛为 96rpx) */
|
|
|
+...
|
|
|
+134: $uni-font-size-4xl: 64rpx; /* 新增:大数字、统计值(归并 60→64) */
|
|
|
+135: $uni-font-size-5xl: 80rpx; /* 新增:Hero 数字、封面主标(归并 88→80) */
|
|
|
+136: $uni-font-size-6xl: 100rpx; /* 新增:极值展示(归并 96→100) */
|
|
|
+```
|
|
|
+
|
|
|
+- 4xl/5xl 重复但值相同,无视觉影响;**6xl 重复且值冲突**:全库 35 处 `$uni-font-size-6xl` 实际渲染 **100rpx**,第二提交想表达的「100rpx→96rpx」完全没生效。
|
|
|
+- `title`/`display` 两令牌**全库 0 引用**(`git grep` 仅命中定义行),属新增死令牌;40/48 仍是裸值。
|
|
|
+
|
|
|
+## Q2 裸值清零 — 基本通过,1 处例外非本任务引入
|
|
|
+
|
|
|
+| 检查项 | 结果 |
|
|
|
+|--------|------|
|
|
|
+| `font-weight: 800/900` 字面量(`.vue/.scss/.css`) | **0 处** ✅ |
|
|
|
+| 裸写 `56rpx` 字号 | 0 处 ✅(实际 baseline 中 font-size 56rpx 仅 2 行且均非字号,见下) |
|
|
|
+| 裸写 `88rpx` 字号 | 0 处 ✅(baseline 本身无 font-size 88rpx) |
|
|
|
+| 裸写 `72rpx` 字号 | **1 处残留**:`pages/vendor/team-invite/team-invite.vue:281` `font-size: calc(72rpx * var(--font-scale, 1));` |
|
|
|
+| 40rpx 保真 | ✅ 144 → 144 处未动(但未使用 title 令牌) |
|
|
|
+| 48rpx 保真 | ❌ 116 → 92,**24 处被改成 64rpx**(见 Q3) |
|
|
|
+
|
|
|
+> `team-invite.vue` 由 cfclub 的 T38 提交(`4101e98ec`)在 U7 基线之后新增,**U7 的 diff 未触碰该文件**,属 rebase 到最新 cfclub 后新引入的裸值。若验收口径是「合入 cfclub 后全库清零」,该项需在合入前补一次。
|
|
|
+
|
|
|
+其他大字号段残留(非本次验收口径,记录备查):`42rpx`×2(`shop/cart/cart.vue:692`、`shop/checkout/checkout.vue:1690`)、`52rpx`×1(`components/report-upload-card.vue:56`)、`64rpx`×2(`components/DimensionActivities.vue:286`、`components/gate-lock.vue:102`)、`120rpx`×4(规格要求保留)。
|
|
|
+
|
|
|
+## Q3 映射正确性 — 失败(系统性错映射 + 决策②未落实)
|
|
|
+
|
|
|
+### 3.1 抽查样本(≥5 处)
|
|
|
+
|
|
|
+| # | 位置 | 改前 → 改后 | 拍板映射 | 判定 |
|
|
|
+|---|------|-------------|----------|------|
|
|
|
+| 1 | `pages/wealth/index.vue:1016` `.disc-value` | `calc(48rpx…)` → `calc($uni-font-size-4xl…)` = **64rpx** | 48 保真(display 48) | ❌ 放大 +16rpx;且第二提交称此为「误映射纠正」,方向相反 |
|
|
|
+| 2 | `pages/health/indicator-timeline.vue:556` `.single-value` | 48rpx → 4xl = **64rpx** | 48 保真 | ❌ |
|
|
|
+| 3 | `pages/health/indicator-timeline.vue:543` `.head-value` | 48rpx → 48rpx(未令牌化) | 48 保真 | ⚠️ 同文件同尺寸两种处理,不一致 |
|
|
|
+| 4 | `pages/wealth-sub/checkin.vue:562` `.energy-anim-text` | 80rpx→5xl(80) + 900→black-extra | 大字号 900 保留令牌 | ✅ |
|
|
|
+| 5 | `components/ConfigurableGuide.vue:149` | 800 → 700(32rpx 小字) | B 类降 700 | ✅ |
|
|
|
+| 6 | `components/OnboardingGuide.vue:231` | 800 → 700(32rpx 小字) | B 类降 700 | ✅ |
|
|
|
+| 7 | `pages/wishes/index.vue:648` `.points-card__value` | 72rpx→5xl(80) + 800→extra-heavy | 72→80,大字号保留 800 | ✅ |
|
|
|
+
|
|
|
+### 3.2 字重处置 — 通过
|
|
|
+
|
|
|
+- 800:19 处 → **15 处保留 800(全部字号 ≥40rpx)改用令牌**,4 处 ≤38rpx 降 700(`growth-main/index.vue`、`home-pages/child-index.vue`、`home-pages/parent-index.vue`、`wealth-sub/checkin.vue`),另加 `ConfigurableGuide`/`OnboardingGuide` 2 处降 700 = 与「B 类 6 处」一致。
|
|
|
+- 900:3 处 → 2 处降 700(`diet/meal-config.vue`、`reminder-config/index.vue`,均为 20rpx 高危糊字),1 处打卡动画保留 900 令牌(`checkin.vue:562`)。
|
|
|
+- 合计 22 处与 2026-10-31 映射表 §1.2 逐行对齐 ✅。
|
|
|
+- 注:决策①文字只写「15 处保留 800」,实现另保留 1 处 900;但 Q1 明确要求 `$uni-font-weight-black-extra(900)` 令牌存在,故判定为实现口径合理,不记缺陷。
|
|
|
+
|
|
|
+### 3.3 `300×9 → 400`(拍板②)— 未落实
|
|
|
+
|
|
|
+全库仍有 **9 处** `font-weight: 300`,与改动前数量一致(diff 中 `font-weight: 300` 仅作为上下文出现,未修改):
|
|
|
+
|
|
|
+- `pages/action-detail/octopus-effects-list.vue:224`
|
|
|
+- `pages/activity/index.vue:1281`、`:1350`
|
|
|
+- `pages/article-center/index.vue:390`、`:656`
|
|
|
+- `pages/diet/records.vue:523`
|
|
|
+- `pages/orchestration/index.vue:222`
|
|
|
+- `pages/stats/completion-rate.vue:308`
|
|
|
+- `pages/wishes/index.vue:937`
|
|
|
+
|
|
|
+### 3.4 字号映射错误清单(逐条带行号)
|
|
|
+
|
|
|
+**A. `48rpx → $uni-font-size-4xl`(=64rpx,应保真 48rpx)共 24 处**
|
|
|
+
|
|
|
+```
|
|
|
+components/MemberSelector.vue:684 (同行还合并了两条规则,见 Q4)
|
|
|
+pages/body-detail/dimension-detail.vue:379
|
|
|
+pages/cognitive-test/memory-test.vue:584
|
|
|
+pages/energy/detail.vue:184
|
|
|
+pages/growth/sleep-checkin.vue:563
|
|
|
+pages/health/indicator-timeline.vue:556
|
|
|
+pages/health/nutrition-profile.vue:362
|
|
|
+pages/home-pages/components/MilestoneCelebration.vue:73
|
|
|
+pages/membership/index.vue:265
|
|
|
+pages/mind-detail/training.vue:345
|
|
|
+pages/profile/report-detail.vue:207
|
|
|
+pages/purchase/index.vue:202
|
|
|
+pages/tianpan/annual-energy.vue:129
|
|
|
+pages/tianpan/daily-fortune.vue:88
|
|
|
+pages/tianpan/index.vue:804、:926
|
|
|
+pages/tianpan/member-detail.vue:316
|
|
|
+pages/tianpan/traditional.vue:270、:389
|
|
|
+pages/wealth-sub/insurance-planning.vue:365
|
|
|
+pages/wealth/index.vue:1016、:1233
|
|
|
+pages/wisdom-detail/index.vue:1173
|
|
|
+pages/wishes/index.vue:781、:935
|
|
|
+```
|
|
|
+
|
|
|
+**B. `80rpx → $uni-font-size-6xl`(实际 100rpx,应映射 5xl=80rpx)共 9 处**
|
|
|
+
|
|
|
+```
|
|
|
+pages/cognitive-test/language-test.vue:263、:431
|
|
|
+pages/cognitive-test/perception-test.vue:261、:426
|
|
|
+pages/cognitive-test/speed-test.vue:529
|
|
|
+pages/family/mbti-result.vue:171
|
|
|
+pages/family/self-check-entry.vue:226
|
|
|
+pages/family/self-check-result.vue:369
|
|
|
+pages/home-pages/parent-index.vue:2265
|
|
|
+```
|
|
|
+
|
|
|
+**C. `100rpx → 6xl` 共 25 处**:因 6xl 实际为 100rpx,**视觉零变化**,第二提交宣称的「100→96」未生效。
|
|
|
+
|
|
|
+> 根因提示:第二提交 message 声称「56rpx×24 / 72rpx×19 / 88rpx×10」,但基线实测 font-size **56rpx 0 处、88rpx 0 处、96rpx 0 处**(`git grep "font-size.*88rpx"` 无命中,88 仅出现在 `min-height`)。实际被改的是 **48rpx×24 与 80rpx×?**,说明实施时沿用了 2026-10-31 评估稿 §4 的旧盘点数字,而非当前代码实测值,导致 48 被当作 56、80 被当作 88 处理。
|
|
|
+
|
|
|
+## Q4 无回归 — 基本通过,1 处格式回归
|
|
|
+
|
|
|
+- 对全部 162 个前端文件做「仅归一化 `font-size`/`font-weight` 值后比对」:**160 个文件完全等价**,仅 2 个文件有差异:
|
|
|
+ - `uni.scss`:新增令牌定义 + 1 行注释(预期内);
|
|
|
+ - `components/MemberSelector.vue`:**两条 CSS 规则被合并到一行**:
|
|
|
+
|
|
|
+```diff
|
|
|
+-.empty-icon { font-size: calc(48rpx * var(--font-scale, 1)); }
|
|
|
+-.empty-title { font-size: calc(30rpx * var(--font-scale, 1)); font-weight: 600; … }
|
|
|
++.empty-icon { font-size: calc($uni-font-size-4xl * var(--font-scale, 1)); }.empty-title { font-size: calc(30rpx * var(--font-scale, 1)); font-weight: 600; … }
|
|
|
+```
|
|
|
+
|
|
|
+ 语法上仍合法,但属结构/格式回归,且 `.empty-icon` 同时命中 48→64 错映射。
|
|
|
+- 无模板、脚本、逻辑、路由、数据字段改动;无新增组件;无 DB 迁移。
|
|
|
+
|
|
|
+## Q5 边界 — 通过
|
|
|
+
|
|
|
+| 检查项 | 结果 |
|
|
|
+|--------|------|
|
|
|
+| `calc(NNrpx * var(--font-scale, 1))` 包裹形态 | ✅ 203 处令牌字号声明全部保留 calc + `var(--font-scale, 1)`(`calc($uni-font-size…` 行中不含 font-scale 的为 **0**);diff 新增的 font-size 行无一丢失 font-scale(仅 `uni.scss` 令牌定义行与注释行本身无需包裹) |
|
|
|
+| `custom-tab-bar` 是否误改 | ✅ 未在 diff 中;其 `:238 font-size: 40rpx`、`:297 calc(40rpx…)` 为历史裸值,非本任务引入 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 必修项(返工清单)
|
|
|
+
|
|
|
+1. **删除 `uni.scss:134-136` 重复令牌块**(或把 `6xl` 统一为 96rpx),确保 `$uni-font-size-6xl` 实际生效 96rpx。
|
|
|
+2. **回滚 24 处 `48rpx → 4xl`**:改为 `$uni-font-size-display`(48rpx)或保留 48rpx 裸值(与拍板「48 保真」一致),涉及 Q3-A 清单。
|
|
|
+3. **回滚 9 处 `80rpx → 6xl`**:改为 `$uni-font-size-5xl`(80rpx),涉及 Q3-B 清单。
|
|
|
+4. **落实拍板②:9 处 `font-weight: 300 → 400`**(清单见 Q3.3)。
|
|
|
+5. **恢复 `MemberSelector.vue:684` 两条规则的分行格式**。
|
|
|
+
|
|
|
+## 非阻断观察
|
|
|
+
|
|
|
+- `$uni-font-size-title` / `$uni-font-size-display` 定义后 0 引用,建议要么在 40/48 处落地,要么在注释中标注「预留」。
|
|
|
+- `docs/2026-10-31-字重令牌映射与视觉影响评估.md` 仍停留在「BLOCKED,待主理人确认」,未按 2026-11-01 拍板更新,且其 §4 的旧盘点数字正是本次错映射的来源,建议同步修订。
|
|
|
+- rebase 后 `pages/vendor/team-invite/team-invite.vue:281` 出现 U7 口径外的裸 `72rpx` 字号(T38 新增文件),合入前建议一并令牌化。
|
|
|
+- 42rpx×2、52rpx×1、64rpx×2 等大字号段裸值仍未清零(不属 U7 验收口径,可并入后续批次)。
|
|
|
+
|
|
|
+## 证据命令(可复现)
|
|
|
+
|
|
|
+```bash
|
|
|
+git fetch origin cfclub verify/u7
|
|
|
+git checkout --detach origin/verify/u7
|
|
|
+git rebase origin/cfclub # Successfully rebased,无冲突
|
|
|
+
|
|
|
+# Q1
|
|
|
+grep -n "uni-font-size-\(title\|display\|6xl\)\|uni-font-weight-\(extra-heavy\|black-extra\)" cfc-frontend/uni.scss
|
|
|
+
|
|
|
+# Q2
|
|
|
+grep -rnE "font-weight\s*:\s*(800|900)" cfc-frontend --include=*.vue --include=*.scss
|
|
|
+grep -rnE "font-size\s*:\s*(calc\()?(56|72|88)rpx" cfc-frontend --include=*.vue
|
|
|
+
|
|
|
+# Q3
|
|
|
+git diff origin/cfclub HEAD -U0 -- cfc-frontend | grep -E "^[-+].*font-(size|weight)"
|
|
|
+grep -rn "font-weight:\s*300" cfc-frontend --include=*.vue
|
|
|
+
|
|
|
+# Q4(归一化后逐文件比对,仅 uni.scss / MemberSelector.vue 有差异)
|
|
|
+# Q5
|
|
|
+grep -rn "calc(\$uni-font-size" cfc-frontend --include=*.vue | grep -v "font-scale" # 应为空
|
|
|
+git diff --name-only origin/cfclub HEAD -- cfc-frontend | grep custom-tab-bar # 应为空
|
|
|
+```
|