Files
MailUI4Agents/client/electron
JianFeeeee 962df62801 feat(harmony): P4b 预设档画法 + 壁纸真的渲染出来(并更正我上一轮"未验渲染"的说法)
pi 复核时问了一个比上传入口更基础的问题:WebUI 的背景有**预设渐变**,
鸿蒙拿到 preset 名画得出来吗?只支持 image/none 的话,"换账号后外观跟随"
对预设档就是**不成立**的(用户设了预设,在鸿蒙看到的是没有背景)—— 信息对等缺口。

查下来比他说的更糟:**P4 第一版没有任何东西去画背景** —— `AppearanceStore` 取回了
`PixelMap`、算好了快照,但没有组件渲染它(预设更是完全没实现)。
上一轮我在文档里写的是"壁纸在真机上的**渲染**效果未验",听着像"已经画出来了只是没上真机看"——
那是**说得比证据强**。取回像素这件事是真的(提交信息没写错),但"渲染未验"把"没做"说成了"没验"。
已在 §7.16 更正,并把这条记进文档以免后来人当成回归。

## 改了什么

- `model/Wallpaper.ts`(纯逻辑,判据直接跑):6 个预设(id/中文标签/归一化)、色板、
  每个预设由哪些层叠出来、`resolveBackground()` 决定画什么(`image` 档但图没取回来 → 什么都不画)。
- `MainPage`:`WallpaperLayer` —— 预设用**系统原语** `radialGradient`/`linearGradient`;
  **网格档**(CSS 的 `repeating-linear-gradient`)系统没有对应原语 → 用系统 `Canvas` 画线
  (线色/间隔照抄 CSS),理由写在模块注释里;图片档 `Image(pixelMap)` + 系统遮罩色按服务端浓度压暗。
- **页面底让出**(这条不做,"画出来了"就是假的):每个页面自己会刷一层**不透明**的系统页面底,
  壁纸会被全盖住。WebUI 侧的原话是「页面底 → 完全透明,让出背景;不改 27 个组件的 class,
  逐个加 class 必然漏(漏掉的那块就是一张不透明卡片浮在背景上)」。
  现在 `bgActive` 从主界面 → 通信页 + 联系人页 → 三个 pane,五个页面底全部让出。

## 判据(harmony-appearance 11 → 18 条)

预设 id/顺序/标签与 WebUI `PRESETS` 逐字一致;**预设色值与 CSS 调色板变量逐个对照**;
色板反向检查(登记了没用 → 红);透明用关键字而非 8 位色值;三档 resolve 行为;
页面真的画了(三种系统原语 + 图片 + 压暗 + 铺在内容之下);**页面底没有一处还在用不透明底**
+ 开关必须真的传到每个页面;模糊归属的互斥形式(壁纸层零模糊 / 导航条必须有系统材质)。

变异:预设少一档 → 红 2 条;preset 档不画东西 → 红;image 档图没取回来照样画 → 红;
色值写错两位 → 红;壁纸层加模糊 → 红;**五个页面里只漏一个没让出页面底 → 红**;
联系人页没收到开关 → 红。

## 判据抓到的真 bug

`--c-blue-200`(CSS:191 219 254 = `#BFDBFE`)我写成了 `#BFDCFE` —— 两位字母顺序反了。
"照 CSS 读出来比"才拦得住这类错。另外判据自己有两处切片毛病(用 `indexOf('build() {')`
两头夹会跨到别的成员上 / 断"注释里写了理由"却读了剥注释的源码),已改。

## 另外两件

- pi 撤回了他"模糊只由壁纸层负责"那句(那是 WebUI 的架构结论),按他给的两条性质
  (同一张底只糊一次 / 模糊该出现在背后是可变内容的层)写成互斥形式判据,记在 §7.18;
  并写明 WebUI 的"壁纸模糊度(px)"与鸿蒙的"材质档次"**不是同一个物理量**(§7.18 末)。
- **重打包**:pi 的 WebUI 补丁(c9717da / 2e42aac)重建了 `dist`(14:30),
  而安装包是 13:49 的 —— `packaging` 判据正确地判红。已按 BUILD.md 的写法重打 deb
  (`-c.electronDownload.isVerifyChecksum=false`;第一次不带这个参数时 electron-builder
  卡在下载校验上超时,失败原因如实记在这里)。

## 验证 / 未验

`hvigorw assembleHap` BUILD SUCCESSFUL;`npm test` 退出码 0(11 个判据文件全绿 + vitest 258/258)。
**未验**:预设渐变与图片壁纸在真机上的观感(尤其**深色模式**下预设的表现 ——
色板取的是 CSS 浅色档,深色档要不要另给一套,等真机看过再定);
卡片面(系统 `surface`,不透明)盖在壁纸上是否该半透明 —— 也留到真机看,
但它不影响"背景可见"这条(页面底已让出)。
**未做**:P4c 壁纸上传入口(pi 定:算 P4 范围、不阻塞别的阶段,
做时按 WebUI 三条约束:先压缩再上传 / 失败必须给原因 / 上传后仍以服务端为权威)。
2026-09-14 14:48:30 +08:00
..