用户两项裁定落地(均为 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,产物待重构建)
51 lines
2.4 KiB
JSON
51 lines
2.4 KiB
JSON
[
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/pages/MainPage.ets",
|
||
"pat": "\\.backgroundBlurStyle\\(Theme\\.navMaterial\\)",
|
||
"repl": ".backgroundBlurStyle(BlurStyle.COMPONENT_THIN)",
|
||
"test": "nav",
|
||
"why": "★ 导航条绕过 Theme.navMaterial 写死档位(判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/pages/MainPage.ets",
|
||
"pat": "\\.backgroundBlurStyle\\(Theme\\.navMaterial\\)",
|
||
"repl": ".backgroundBlurStyle(NAV_MATERIAL[this.bgPlan.blurPx])",
|
||
"test": "nav",
|
||
"why": "★ 导航条又开始跟随 bg_blur(方案 (b) 复发,判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/common/Theme.ets",
|
||
"pat": "static readonly navMaterial: BlurStyle = BlurStyle\\.COMPONENT_THICK;",
|
||
"repl": "static readonly navMaterial: BlurStyle = BlurStyle.NONE;",
|
||
"test": "nav",
|
||
"why": "★ navMaterial 变成 NONE(导航条没有材质,判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/common/Theme.ets",
|
||
"pat": "static readonly durRise: number = 200;",
|
||
"repl": "static readonly durRise: number = 150;",
|
||
"test": "nav",
|
||
"why": "★ 入场时长退回 150ms(低于鸿蒙官方 200-300 建议下限,判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/common/Theme.ets",
|
||
"pat": "static readonly durRise: number = 200;",
|
||
"repl": "static readonly durRise: number = 800;",
|
||
"test": "nav",
|
||
"why": "★ 入场时长写到区间外(800ms 拖沓,判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/common/Theme.ets",
|
||
"pat": " return TransitionEffect\\.opacity\\(0\\)\\.combine\\(\\n TransitionEffect\\.translate\\(\\{ y: Theme\\.riseInOffset \\}\\)\\n \\)\\.animation\\(Motion\\.effectAnim\\(Theme\\.springIn\\)\\);",
|
||
"repl": " return TransitionEffect.asymmetric(TransitionEffect.opacity(0).combine(TransitionEffect.translate({ y: Theme.riseInOffset })).animation(Motion.effectAnim(Theme.springIn)), 0, 0, 0, 0);",
|
||
"test": "nav",
|
||
"why": "★ paneRiseIn 改回 asymmetric(与 WebUI 的 both 不一致,判据该红)"
|
||
},
|
||
{
|
||
"file": "client/harmony/entry/src/main/ets/entryability/EntryAbility.ets",
|
||
"pat": "setKeyboardAvoidMode\\(KeyboardAvoidMode\\.RESIZE\\)",
|
||
"repl": "setKeyboardAvoidMode(KeyboardAvoidMode.OFFSET)",
|
||
"test": "admin",
|
||
"why": "★ 键盘避让退回 OFFSET(内联底栏的按钮会被顶出屏幕,判据该红)"
|
||
}
|
||
] |