Files
FamilyBook_harmonyos/entry
laoyang 8f38cfa98b 联系人详情卡:点手机号直接拨号 (#89)
用户:点开以后的弹窗,点击手机号可以直接拨打电话。

事实核查:详情卡一直没有这个能力。手机号是一行纯 Text
(this.infoRow("phone", ...) 无 onClick)。而 FbPersonSheet 文件头
注释里写着它"自带手机号拨号入口"—— 那句是错的,实测点了没反应。

对照:名册的简要卡(FbPersonQuickSheet)v59e 就做了可点即拨,
详情卡一直缺 —— 同一份数据两处体验不一致。

① FbPersonSheet 加 @Event onCall,默认实现为空
   (TopBar.myDetailPanel 等宿主没接时仍可点、只是不拨,不崩不误触发)。
   卡片**不自己拨号**:call.makeCall 需要 UIAbilityContext,
   组件自己拿容易在浮层销毁瞬间拿到 undefined。

② 手机号那一行改成 phoneRow(不复用 infoRow)
   纯展示行加 onClick 会出现"整行看着一样、只有手机号能点",
   用户不知道点哪。新行给明确交互外观:整行浅主题底 + 号码主题色加粗
   + 右侧「拨打」胶囊,与 FbPersonQuickSheet.phoneRow 同一套语言。
   补充电话(逗号拼接的多个号)仍是普通展示行 —— 没法一次拨、也不该猜拨哪个。

③ 两个宿主接上:FbHomePage 新增 dial()、FbPeoplePage 复用已有 dial()。
   实现刻意与名册页一致(不另写一套),并抄上关键约束:
   必须 call.makeCall 而非 startAbility(tel:) —— 后者是隐式 Intent 会弹
   「选择打开方式」(2026-10-15 真机误点进"同步日历");上下文必须是
   UIAbilityContext;call.makeCall 不需要权限、只填号不代拨。

验证(真机 5NC0225B27004718,详情卡「爸爸/杨培振」):
- UI 树:手机号[208,772]、号码 17706392406[208,818]、拨打胶囊[837,795];
- 点号码文字(342,842) → 拉起拨号盘 177 0639 2406 / 山东青岛 电信 / 老爸;
- 点「拨打」胶囊(893,819) → 同样拉到该号码;
- 全程**没有**「选择打开方式」框,证明走的是 call.makeCall 而非 tel: 隐式 Intent;
- 返回 App 后详情卡状态保持。
hvigorw assembleHap BUILD SUCCESSFUL。
2026-11-06 11:47:47 +08:00
..