diff --git a/docs/HARMONY-ALIGN-PLAN.md b/docs/HARMONY-ALIGN-PLAN.md index 8d0006e..63a730c 100644 --- a/docs/HARMONY-ALIGN-PLAN.md +++ b/docs/HARMONY-ALIGN-PLAN.md @@ -175,7 +175,7 @@ WebUI 侧 `npm test` 在 **HEAD 上就是红的**(`test/background.test.mjs` | P2b ✅ | 发件箱页:`GET /me/mail/sent`,复用列表项 | 判据:接口路径、行上主角是收件人、空态有说明(主句与 WebUI 逐字一致) | | P3 ⚠️ 主体完成 | 授权页:`GET /permission/pending` + `POST /permission/decide` | 未决口径与 WebUI 一致(无 `permission_result`)✅;拒绝可填备注且备注送出 ✅;`expired` 当场说清"这次批准不会恢复原调用" ✅。**未验**:真机上点同意/拒绝后状态是否"立刻变"(判据只钉到"决策后重新拉列表"这一层) | | P4 ✅(P4c 上传除外) | 主题/壁纸(`/me/appearance`) | 换账号外观跟随 ✅(缓存键带账号);服务端无记录时以本地为准 ✅(§7.16);**预设 6 档都能画出来** ✅、图片壁纸渲染 ✅(§7.17 —— 这一版补的,第一版只有数据没有画面)。**未做**:P4c 上传入口。**未验**:真机观感(配色/对比) | -| P5 ⬜ 未做 | 悬浮玻璃导航(取代系统 TabBar) | 模糊只由壁纸层负责;列表项每项一张卡;命中区 ≥44vp。现状:底栏仍是系统 `Tabs`,只有自绘的 tabBar builder 带了 `backgroundBlurStyle`(§7.10) | +| P5 ✅ 主体完成 | 悬浮玻璃导航(取代系统 TabBar) | **已换**:自绘浮动玻璃条 `NavBar`(留白 + 胶囊圆角 + 系统材质),内容按 `currentIndex` 挂载;命中区 ≥44vp(数值在 `NavItems.ts`,判据直接 import);内容底部让出 76vp(不让位则最后一行压在条底下:看得见、点不到)—— §7.21。判据 6 条全绿、4 种变异都能红。**未验**:玻璃条在真机上的观感(材质浓度/圆角/阴影)、深色主题下的表现、字形图标渲染 —— **原因是环境硬约束**(模拟器要写工作区外 + 审批无人可送 + 许可协议不接受代签),见 §7.21 末节的「视觉验收的实测阻塞」 | | P6 ⬜ 未做 | 日历(`/calendar/events`,含 ics 导入导出) | 手势阈值与 WebUI 一致(水平 ≥40px、≥1.5× 垂直、<600ms)。**有意排序**:入口与内容一起上,不留空页签(§7.15) | **视觉/交互怎么验**:本机有 `harmony-emu`(实例 `HarmonyPhone`,hdc 在 @@ -773,6 +773,47 @@ pi 指出"邻接不是结构"这条已经在同一个仓库露头**三次**( 判据要点用户真正会点的那一层。另外补了一条本仓刚踩的:**验证要按真实入口跑** (`node --test test/run-all.mjs` 会把 runner 内部的 `process.exit(1)` 吞掉)。 +### 7.21 P5 悬浮玻璃导航(dsh,2026-09-14):换条不换信息架构 + +**改了什么**:底栏从系统 `Tabs` 的 bar 换成**自绘的悬浮玻璃条**。 + +- 新增 `model/NavItems.ts`:平级项清单(通信/联系人)+ 归一化 `normalizeNavIndex` + + **尺寸常量**(命中区下限 44vp、条高 56、左右留白 16、离底 12、圆角 28、内容让位 76)。 + 放 `.ts` 是为了让判据能 `import` 这些**数值**(判"命中区 ≥44vp"时判的是数,不是拿正则去源码里猜)。 +- `MainPage.ets`:内容改为 `if (this.currentIndex === 0) CommPage else ContactsTab`(不再 `TabContent`), + `TabBarBuilder` → `NavBar`(`Row` + `ForEach` + 四周留白 + 胶囊圆角 + `backgroundBlurStyle(Theme.navMaterial)`)。 +- **内容底部让出 76vp**:条浮在内容之上,不让位则列表最后一行永远压在条底下 —— + **看得见、点不到**。这是"点得到"的问题,不是美观问题。 + +**判据 6 条**(新增第 14 个判据文件 `test/harmony-nav.test.mjs`):点击**配对**(每项必须落到 +自己的 index 并过归一化 —— 不写"存在 onClick",那东西全赋 0 也能过)、index 决定挂载、 +命中区 ≥44vp、悬浮 + 让位、根导航里不再有系统 `Tabs`/`TabContent`/`tabBar`(旧 builder 不留死代码)、 +玻璃分工(壁纸层零材质 + 这一处是"背后有可变内容"的放行且指名 GLASS_REGISTRY)。 + +**变异 4 种都能红**:点哪项都落到第 0 项 / 点击改状态但内容写死挂第一个页面 / +命中区降到 32vp / 内容不让位。 + +**判据自己也修了两处**(都是本仓规范里已经写过的老毛病复发):非贪婪正则切 `if/else` 时 +在**对象字面量的 `}`** 上收尾(改成按花括号配对切片);"条上无手写色值"读了**原文**, +而注释里正好写着"原来那两个手写色值"(改成读剥注释的源码)。 + +#### 视觉验收的**实测阻塞**(这一条要人来解,不是"还没做") + +P5 的观感(材质浓度、圆角、深色下的表现、字形图标渲染)现在**验不了**,原因已逐层测出来: + +1. 模拟器需要写**工作区之外**的路径 —— `/root/.Huawei/Emulator/deployed/HarmonyPhone/Log/qemu.log`; + 本会话的文件策略是 workspace-write,实测报 + `Emulator: Error opening logfile …: Permission denied`。 +2. 放宽权限需要审批,而**这条链上没有人类**(全程是 Agent 之间的邮件),审批无法送达 → + 工具明确拒绝,并提示"换用不需要权限的方式,或让上游转达给人类"。 +3. 试了"把 HOME 挪进工作区"这条不需要权限的路(复制实例 + 符号链接系统镜像,2.7 GB 暂存): + 写入问题绕过了,但卡在**许可协议** —— 接受记录在原来的 HOME 里,重放 `y` 等于由我替用户 + 同意一份法律协议,**这个我不做**。已停止模拟器、删除暂存副本。 + +→ 结论:**没有设备/模拟器可用是这个环境的硬约束**(`hdc list targets` 为空是它的表象)。 +要解除,需要人有二选一:给这条链放行工作区外写入(或提供可写的 HOME + 已接受许可的实例), +或者由人在本机跑 `harmony-emu start` 后把画面/操作结果交回。在此之前,**所有观感类结论一律"未验"**。 + ### 7.20 接手 pi 的两个 WebUI 开项(dsh,2026-09-14):两个实缺陷 + 途中踩到的三个坑 pi 明确说他那条链上**没有 shell**,而挂着的两个开项虽然读得出精确修法却没人执行;