feat(harmony)★★: 背景档与预设改用官方 Chip,删掉重复的同步指示器

承接 2026-09-29 的反馈,本批改动是那一轮工作的收尾。

## 1. 自绘 Text → 官方 `Chip`

背景档与预设两排原来是**自绘 `Text`**,而且与设置页主题那排
**圆角/内边距不一致**(预设那排 `borderRadius(4)`,另两处是
`radiusControl`)。改用 `import { Chip, AccessibilitySelectedType,
LengthMetrics } from '@kit.ArkUI'`。

## 2. 删掉 `@Prop statusText`(一个数两个指示器)

它原来是「外观」卡右上角那个「已同步」的**第二份**:页面把同一个
`statusLabel(this.appearanceStatus)` 既画在卡片级标题行、又透传进来
画在「背景」小标题右边 ⇒ 同一屏两个「已同步」,永远同值。

删掉透传这一份,值只从页面进、只画一处。

## 3. Surface.ets(32 行)/ Theme.ets(51 行)/ ContactsTab.ets(21 行)

配套:Chip 的尺寸档、主题色取用、联系人页的调用点。

## 判据

- `test/harmony-appearance.test.mjs`:外观判据随实现更新
- `test/mutants/baseline.sha`:变异体自证底本同步

### ⚠️ 设备端判据本机跑不了(不是代码问题)

    node --test test/harmony-appearance.test.mjs
      pass 26 / fail 3

失败的 3 条**全部**是设备端断言:

    ★ 设备:打开背景开关后,壁纸上真的出现了
      AssertionError: 要能拉起我们的应用并等到它到前台
    ★ 设备:窗格内容不得超出屏幕
      AssertionError: 要能拉起应用
    ★ 设备:切换主题后界面真的整体换色了
      AssertionError: 设备连续 10 轮拉不起应用(本条已连续 3 轮没真跑)

即**本机没有接 Harmony 设备**,不是断言挂在代码上。
判据文本本身断言「设备连续 10 轮拉不起」——它自己在如实报告
「这条从未在真机上跑过」。**需要真机补验**,这里不假装它通过了。

## docs

API.md / GUI-PLAN-HARMONY.md / PLAN.md 同步上述改动。
This commit is contained in:
2026-10-05 09:26:30 +08:00
parent a8d6811cd7
commit 8dc714cb62
9 changed files with 442 additions and 59 deletions

View File

@ -168,10 +168,40 @@
# 这两个文件**不在** jobs.manifest.json 里(已实测),而底本覆盖的是**清单内**
# 被变异过的文件 => 它们不会被变异,哈希变了只可能是**有意编辑**。
# 若哪天它们被加进变异清单,本条推理作废,须重新核对有无变异残留。
#
# 2026-09-29 baseline 重算(第 12 次)—— 用户:「设置界面更是重灾区」「尽量使用官方组件而不是自绘」。
# ① 两个文件漂移:`common/BackgroundPicker.ets`、`pages/SettingsPage.ets`。
# ② 取证(照本文件那条纪律逐条做,**这次比上次更硬**):
# · `sha256sum -c baseline.sha` → 恰好这 2 个 FAILED(其余 OK)
# · `git diff --quiet HEAD -- <f>` → **非空** ⇒ 工作树有改动
# · 并且**逐文件比对三方哈希**,证明漂移**只**来自工作树:
# 底本 == HEAD(两者逐字节相同),工作树 != 两者
# ⇒ 既然底本与 HEAD 完全相同,"哈希对不上"就**只可能**是我的改动,
# 排除了"底本过期"与"变异残留"两种混淆。命令:
# base=$(grep " $f\$" baseline.sha | awk '{print $1}')
# [ "$base" = "$(git show HEAD:$f | sha256sum | awk '{print $1}')" ] && echo SAME
# · 再逐块读过 `git diff`:只有 chip 迁移/文案/布局,**无半截替换、无占位**。
# ③ ★ 顺带更正第 11 次(2026-09-28)留在这里的一句**过期推理**:
# 那条说「这两个文件**不在** jobs.manifest.json 里」—— **现在不成立了**。
# `SettingsPage.ets` 被 `jobs/jobs-arkts.json`、`jobs-arkts2.json`、`jobs-all.json`
# 引用,`BackgroundPicker.ets` 被 `jobs1.json`、`jobs2.json`、`jobs-all.json` 引用。
# ⇒ 它们是**会被变异**的。所以"不在清单⇒必是有意编辑"这条捷径**不适用于本文件**,
# 本次改用上面那条更强的"底本==HEAD"证明。
# ★ 这正是那句"若哪天它们被加进变异清单,本条推理作废"的**兑现**:
# 推理的失效前提真的发生了,且是被**主动核对**发现的,不是它自己报警的。
# ④ 本次有意编辑的内容(用户:「设置界面更是重灾区」):
# · 「吹销」→「吊销」错别字(3 处:注释/错误文案/界面按钮)
# · 密钥行:`token_hint` 定宽 + 备注 `maxLines(1)` 截断 —— 修"长备注把行高撑成 2 倍"
# (设备 dump 实测 90px vs 45px)
# · 去掉重复的「已同步」:`BackgroundPicker` 不再收 `@Prop statusText`,
# 状态只留页面卡片级一处(同一屏原先印两遍)
# · 补「主题」子段标题 + 子段标题统一 11px muted(原来"背景"是 14px,与父级同重)
# · 自绘 chip → 官方 `Chip`(主题/背景档/预设三处统一;`allowClose: false` 去掉默认 ✕)
# ⑤ 重算后 `sha256sum -c baseline.sha` 应全 OK。
4f3e0802346ba93740d7a6989fa6a9ef7dce16d1db59ea7402ff554127b07e3e client/harmony/entry/src/main/ets/model/AdminUsers.ts
c465b178ec1853ba66ac619e0d5614f48aef66db2ed2fecba25a4ae10e3dd13b client/harmony/entry/src/main/ets/model/ImagePrep.ts
7f05d4efd12ac686f6600befd2c07d52567550d5e43d0dbc81d22e43594b6919 client/harmony/entry/src/main/ets/pages/AdminUsersPage.ets
a41ffefd6c4ba383075ccfcc8c80d8cb1fadb2cb03177601d81061a03f6c2b6e client/harmony/entry/src/main/ets/common/BackgroundPicker.ets
015ae779192bd63e4137e155b48703fe172be5f002d0a415596bb31102da92a6 client/harmony/entry/src/main/ets/pages/SettingsPage.ets
38e59b35c57dc0aeb29adb7fd31191892a86051b9b971b2fb11fa28c599a10b9 client/harmony/entry/src/main/ets/common/BackgroundPicker.ets
4faccade481d5958e5e0ab9a5362dae1eb864c8880b151aa73171d07338cd48c client/harmony/entry/src/main/ets/pages/SettingsPage.ets
f3c7c3de22acaa94c8c3603fdd387547090807ee13e1e9fe35514d2028f5647e client/harmony/entry/src/main/ets/api/ApiClient.ets
6550e1892d1ebea82fb75a3d2cf8eaf826186199ff4a0ecf0430b1e3517d8681 client/harmony/entry/src/main/ets/api/AppearanceApi.ets