跨端对齐:授权栏 navigator_only + 组件按页拆分 + 服务器补 permission_options

用户两项裁定落地(均为 ask_user 明确选择):

① 授权栏口径 = navigator_only(照 WebUI 架构)
   · 新建 pages/PermissionPanel.ets —— 详情页的决策面板,
     对应 MailView.tsx:693 的 PermissionPanel(审批型 / 主动提问 / 已处理 三态)
   · 决策入口从授权栏移到 MailDetailPage;MailDetailPage 原来只显示一个
     「权限请求」小标签、根本没有决策入口(比 WebUI 少一整块,且反了:
     栏里能决策、点进详情反而不能)
   · PermissionTab 删掉内联「同意/拒绝」+ 备注框 + decide():
     整卡可点 → onOpenMail(对齐 WebUI PermissionList.tsx:81 的 pick())
   · PermissionRequest 补 source_account_id(客户端侧记来源,跳详情要定位网关)

② 服务器补 permission_options —— 修一条真实的、跨端共有的缺口
   · mails.permission_options 从 INSERT 起就写进去,但**从来没有任何读路径
     选过它** ⇒ 详情端点永远返回空。WebUI 的决策面板读 mail.permission_options,
     所以提问型的预设选项**两端全部落空**(审批型靠 ['同意','拒绝'] 兜底蒙混)
   · GetMailByID 补选该列 + JSON 反序列化(与 cc_list 同款)

③ 组件按页封装(用户要求「以便与 WebUI 一一对应」)
   MainPage.ets 4592 → 3192 行
   · pages/PermissionTab.ets    720 行  ↔ PermissionList.tsx
   · pages/ContactsTab.ets      796 行  ↔ ContactPanel.tsx
   · pages/NavDestinations.ets  181 行  ↔ Navigation 壳
   · pages/NavShared.ets         65 行  ↔ 跨栏共用件

④ 判据跟着组件搬家(否则静默失效,不是红)
   harmony-logic 的 pageCode / harmony-nav 的 navSrc 改为显式文件名单;
   harmony-appearance 的 PANE_SOURCES 补 ContactsTab;harmony-contacts 三个
   test 并入 ContactsTab;harmony-logic 的决策断言改指 PermissionPanel,
   并新增「授权栏不许再有内联决策」两条(navigator_only 的正形状)。

   animation-audit:共享元素转场判据从「同文件共址」改为「按 id 找驱动」。
   旧形状把 in/out 端必须在同一文件当成代理,而两端**天然在两处**;
   抽出写信页(NavDestinations 持有 in 端)后误报。新判据仍要求每个 id
   都有 Motion.morph 驱动 —— 变异实测:把驱动换成裸 animateTo 仍判红。

判据:files=34 checks=556 red=1(仅 build-stamp,产物待重构建)
This commit is contained in:
2026-09-24 10:10:32 +08:00
parent 487c1c222b
commit 65de1c3884
31 changed files with 4147 additions and 1684 deletions

View File

@ -13,20 +13,47 @@
## 一、现在的差距(有据可查)
| 能力 | WebUI | 鸿蒙 | 差距性质 |
> ★★ **2026-09-23 更正:这张表曾严重过期,已重写。**
>
> 原来的表把发件箱/授权/日历/管理/主题壁纸全部标成 **「❌ 缺页面」** ——
> 而它们**在那之后全都做完了**(日历 2101 行、我的页 1496 行、写信 968 行、
> 管理 682 行;导航也早在 P5 换成了自绘浮动玻璃条)。
>
> **为什么这是缺陷而不只是"文档旧了"**:这是本文件的**第一节** ——
> 任何接手的人(或下一次的我)读到的第一件事就是"还缺一大半",
> 而真实进度在四百行之后的 §5.4 分期表里(那里大多是 ✅)。
> 照这张表干活会**重做已经做完的东西**。
>
> 判据:下面每一行都对着**现存代码**重新核过(文件/行数/组件名),不是照印象改的。
| 能力 | WebUI | 鸿蒙 | 现状 |
|---|---|---|---|
| 收件箱 | ✅ | ✅ | — |
| 会话 | ✅(通信页签) | ✅(独立 tab) | 交互不同 |
| 会话 | ✅(收件箱按会话折叠) | ✅(同:收件箱按会话折叠) | **已统一**(平级「会话」tab 已撤,见 §7.15) |
| 联系人 | ✅ | ✅ | — |
| **发件箱** | ✅(通信页签) | ❌ | 缺页面(数据现成) |
| **授权(权限决策)** | ✅(通信页签 + 详情内决策) | ❌ | 缺页面(API 现成) |
| **日历** | ✅ | ❌ | 缺页面(最大一块) |
| **管理(用户管理)** | ✅(我的页底部,管理员可见) | ❌ | 缺页面 + 权限判定 |
| **写信** | ✅ 共用 Composer | ✅ 独立实现 | 组件未统一 |
| 底部/侧边导航 | ✅ 悬浮玻璃条 | ⚠️ 系统 TabBar | 观感不同 |
| 主题 / 壁纸(账号级) | ✅ 服务端同步 | ❌ | 未接 |
| 发件箱 | ✅(通信页签) | ✅(通信页签 `SentTab`) | **已完成**(P2b) |
| 授权(权限决策) | ✅(通信页签 + 详情内决策) | ✅(通信页签 `PermissionTab`,**栏内直接决策**) | **已完成**(P3);★ 会话行形状仍在对齐中(见 §一·补) |
| 日历 | ✅ | ✅(`CalendarPage` 2101 行,月/周/日 + 农历 + ics 导入导出 + 左右滑翻页) | **已完成**(P6) |
| 管理(用户管理) | ✅(我的页底部,管理员可见) | ✅(`AdminUsersPage` 682 行) | **已完成** |
| 写信 | ✅ 共用 Composer | ✅ 独立实现(`ComposePage` 968 行) | 组件未统一(**有意**:ArkTS 无法直接复用 React 组件) |
| 底部/侧边导航 | ✅ 悬浮玻璃条 | ✅ 自绘浮动玻璃条(**无**系统 `Tabs`/`TabContent`,用系统材质 `Theme.navMaterial`) | **已完成**(P5) |
| 主题 / 壁纸(账号级) | ✅ 服务端同步 | ✅(`AppearanceStore` + `/me/appearance`,预设 6 档 + 图片壁纸) | **已完成**(P4;P4c 上传入口未做) |
| 设计令牌 | ✅ `:root` | ✅ `Theme.ets` | **已对齐**(判据钉住) |
### 一·补、现在真正剩下的差距(2026-09-23 实核)
上面那张表只回答"有没有"。**真正的差距在形状层** —— 以下都是对着两边源码
**逐行读出来**的,不是印象:
| 项 | WebUI | 鸿蒙 | 状态 |
|---|---|---|---|
| 授权栏·会话行 | 机器人图标 + `agent@path.alias` + 组头时间 + 待决策/已处理胶囊 + `历史 {n}` | 同上(2026-09-23 补齐) | ✅ 已对齐 |
| **授权栏·展开层** | 点组头展开 → 逐条 `PermissionRow`(含 `permission_result` 绿√/红✗、**「可能已失效」告警**) | 无展开层(待决已由内联卡片给出**更全**信息) | ⏳ **未做**,见 §5.4 的说明与 `docs/DEBTS.json` |
| P4c 外观上传入口 | ✅ | ❌ | ⏳ 未做 |
| 视觉观感(配色/材质/动画手感) | — | — | ⚠️ **两端都未逐项验**(需真机上手) |
★ **没有"缺页面"这一类了。** 剩下的全是**形状/交互细节**与**观感验收**。
## 二、已经做完的(本轮之前)
- **设计令牌共用**:`common/Theme.ets` 与 WebUI 的 `:root` 一一对应