diff --git a/client/electron/test/cross-client-theme.test.mjs b/client/electron/test/cross-client-theme.test.mjs index 2b76ea9..f0ada7e 100644 --- a/client/electron/test/cross-client-theme.test.mjs +++ b/client/electron/test/cross-client-theme.test.mjs @@ -114,6 +114,31 @@ test('权限档位徽标两边同一套色(plan=蓝 / workspace=绿 / full=琥 assert.equal(token('approveFg'), cssVar('c-green-700', web), 'workspace 字色应与 green-700 一致'); assert.equal(token('warnBg'), cssVar('c-amber-50', web), 'full 底色应与 amber-50 一致'); assert.equal(token('warnFg'), cssVar('c-amber-700', web), 'full 字色应与 amber-700 一致'); + + /* + * 往返预算条的三个档位(P2a 新加)。 + * + * WebUI 的 `BudgetChip` 用的是 gray-100/gray-500(普通)、red-100/red-700(用尽)、 + * orange-100/orange-700(将尽);鸿蒙的卡片视图要显示同一条预算, + * 就得取**同一批值** —— 而且这批值只在这条判据里和 WebUI 对齐, + * 否则"鸿蒙那边自己挑了个接近的红"没人会发现。 + * + * ⚠️ 注意:index.css 里 `--c-gray-100` 等变量在 `.dark` 段里还有第二处定义, + * 上面的 cssVar 取的是**第一处**(`:root`,浅色主题)—— 与 `Theme.ets` 是浅色一套对应。 + */ + assert.equal(token('chipNeutralBg'), cssVar('c-gray-100', web), '预算普通档底色应与 gray-100 一致'); + assert.equal(token('chipNeutralFg'), cssVar('c-gray-500', web), '预算普通档字色应与 gray-500 一致'); + assert.equal(token('chipSpentBg'), cssVar('c-red-100', web), '预算用尽底色应与 red-100 一致'); + assert.equal(token('chipSpentFg'), cssVar('c-red-700', web), '预算用尽字色应与 red-700 一致'); + assert.equal(token('chipWarnBg'), cssVar('c-orange-100', web), '预算将尽底色应与 orange-100 一致'); + assert.equal(token('chipWarnFg'), cssVar('c-orange-700', web), '预算将尽字色应与 orange-700 一致'); + // 反向对照:判据要真能抓到"自己挑了个接近的颜色" + const off = harmony.replace("chipSpentBg: string = '#FEE2E2'", "chipSpentBg: string = '#FEE3E3'"); + assert.notEqual( + hex(off.match(/chipSpentBg: string = '(#[0-9A-Fa-f]{6})'/)[1]), + cssVar('c-red-100', web), + '自检:差一个色阶判据却还是绿的' + ); }); test('鸿蒙的遮罩是「色 + 透明度」两段式(照 WebUI 的 --bg-scrim + --bg-dim)', () => { diff --git a/docs/HARMONY-ALIGN-PLAN.md b/docs/HARMONY-ALIGN-PLAN.md index 45fbde5..aedef62 100644 --- a/docs/HARMONY-ALIGN-PLAN.md +++ b/docs/HARMONY-ALIGN-PLAN.md @@ -314,3 +314,22 @@ WebUI 侧完全不读这个字段(`mailStore` 里没有 `total`),所以这 - **视觉与点击仍未验**(无设备 / 模拟器起不来):折叠展开的手感、卡片间距、 组头命中区是否够大,这些**没有**任何自动判据能代替人眼 —— 交付时按"结构/逻辑已验证、 观感未验"写。下一轮:P2b 通信页签(收件箱/发件箱/授权 + 徽标)。 + +### 7.6 模拟器为什么仍然起不来:权限门是"无人可批准" + +7.5 的"无设备"这次查到根上了。DevEco CLI 的说明(`deveco-cli` skill)确认本机 +**有**一个按需启动的模拟器实例 `HarmonyPhone`(KVM,`harmony-emu start` 即可, +起来后 `devecocli ui layout / click / screenshot` 能做**真正的点击级验证**)。 +但 `harmony-emu start` 要把 PID/日志写到 `/run` 与 `/root/.Huawei`(工作区之外), +在 workspace-write 沙箱下被拒;按规矩用 `sandbox_permissions` 升级重试一次,得到的是: + + 无法执行 bash:权限询问无法送达:该任务链上没有人类用户 + +也就是说:**鸿蒙的点击级验证在这条链上不是"还没做",而是"当前做不到"** —— +需要人类在命令行里跑一次 `harmony-emu start`,之后 `devecocli ui` 就能自动点。 +在那之前,鸿蒙侧任何界面改动的验收口径只能是 +「逻辑有可执行判据 + 页面接线有判据 + 观感未验」,**不能**写"已完成"。 + +(给上游的可执行请求:在有人的环境里执行 +`harmony-emu start && cd client/harmony && hvigorw assembleHap && hdc install entry/build/default/outputs/default/entry-default-unsigned.hap`, +即可让 P2a 之后所有阶段的"点击级判据"落地。)