v0.8.2 头像点进我的详情 / 未读数接真实数据 / 名册圆角卡(容器要换成页面底色)

用户 2026-10-18 夜三条:

①「右上角,显示的应该是登录者的头像,点击头像进入我的详情页面。」
   头像**本来就是登录者本人的**(v59 已接 session.me.avatarUrl);
   真正缺的是**点击** —— TopBar 里那个 FbAvatar **根本没有 onClick**,
   只有一句写着"点开账号菜单"的注释,而"账号菜单"这个东西在代码里并不存在。
   ⇒ 接 openMyDetail() → bindSheet 弹 FbPersonSheet(复用名册那个人详情组件)。
   🔴 数据必须走 repo.byId(meId)(本次为它新增 byId),不能从名册列表那批里找:
      **"我"常常不在自己的名册里**(名册是"我挑出来的那一小撮"),
      从列表里查会**静默落空**、点了没反应 —— 最难查的那种失败。
   ⚠️ 三种状态都说清楚:加载中 / 拿到了 / 拿不到,绝不留空白浮层。

②「提醒按钮,明明没提醒,怎么还显示个 2?」
   🔴 真根因:`@Trace unread: number = 2;` 是**写死的占位初值**,
      而全工程只有一处给它赋值(通知页「全部已读」清 0)。
      没进过通知页的人**永远看到 2**;进了通知页又"永远 0"(把真实未读也盖掉)
      —— 两个方向都错。
   ⇒ ① 初值改 0(拿到真值前必须是"没有未读",不能凭空多出 2);
     ② 首页把 /home 的真实 unread 写进全局状态。
        (服务端 Notification::unreadCount,与通知页同源;/home 本来就返回它、
          FbParse 也早就解析了 —— 只是**没人往全局状态里写**。)

③「名册页面,不好看,太丑了,应该是每个人都是圆角矩形,往中间收一点,
   距离左右都有点距离,每个人中间都有一点空隙。」
   🔴🔴 真凶**不是卡片形状**(v51 就做了 borderRadius + margin)——
      而是**列表容器也是纯白** ⇒ 白卡压白底 ⇒ 圆角与左右收边**全看不见**,
      看上去就是一整块通栏白。这解释了"改过一轮还是丑":上次改的是卡片,
      问题在"背景没有对比"。
   ⇒ 容器 + 外层兜底改 FbColors.paper(页面底色),卡片保持白;
     圆角 radiusS(10) → 新增 radiusCard(14)(列表项专用档:16 显胖、10 显方);
     左右各 pagePad(16)、卡间 10(原 8 偏挤)、行内边距 11→12。

验证:hvigor BUILD SUCCESSFUL;_fb_arkts_guard.js 347/0(本批新增 18 条,
另**收紧 2 条**旧判据 —— M 组"圆角卡"那条原来锚"逐字相邻两行"、且**测错了对象**:
没查容器背景,所以对"白卡压白底"这个真实缺陷毫无把关能力);
_fb_v59b_falsify.py 8 项注入 ⇒ 8/0。

⚠️ 本轮反向验证头一轮漏了 3 条(都是"判据太宽"),已逐条收紧并记入 pitfalls:
  · 删掉头像 onClick 后仍绿 —— openMyDetail 这个标识符在**方法定义**里也出现;
  · 容器改回白底后仍绿 —— 本页有**两处** FbColors.paper(容器 / 兜底);
  · /home unread 改成写死 2 后仍绿 —— Notification::unreadCount 在 PHP 里也有两处。
This commit is contained in:
2026-10-18 20:58:40 +08:00
parent 77b494a274
commit 2b0401052c
6 changed files with 257 additions and 26 deletions
+14 -2
View File
@@ -42,8 +42,20 @@ export class FbAppState {
/** 当前会话(接口接上之前先用演示数据;`loggedIn=false` 时应跳登录页) */
@Trace session: FbSession = FB_DEMO_SESSION;
/** 未读通知数(顶栏铃铛角标) */
@Trace unread: number = 2;
/**
* 未读通知数(顶栏铃铛角标)。
*
* 🔴🔴 v59b(用户 2026-10-18):「提醒按钮,明明没提醒,怎么还显示个 2?」
* 这个 **写死的 2** 就是答案:它原来只是个占位初值,而全工程没有任何地方
* 用真实数据填过它(只有通知页的「全部已读」会清成 0)
* ⇒ 没进过通知页的人**永远看到 2**。
*
* ⚠️ 改成 **0**:未读数在拿到真实值之前必须是"没有未读",
* 而不是"假装有 2 条"。真实值由 `/home` 的 `unread` 写入
* (见 FbHomePage 里那段说明),进通知页后由那边继续维护。
* 宁可短暂少显示,也不能凭空多出一个用户会去追问的数字。
*/
@Trace unread: number = 0;
/**
* 状态栏高度(vp)。
+9
View File
@@ -58,6 +58,15 @@ export class FbMetric {
static readonly radius: number = 16;
/** 小圆角(内嵌块 / 输入框) */
static readonly radiusS: number = 10;
/**
* 列表项圆角(**一行一张卡**那种,如名册的人员行)。
*
* 🔴 为什么单独一档(2026-10-18 用户「名册太丑」):
* 列表项**一行一张卡**、上下密排;用 16(区块卡的圆角)会显得"胖"、
* 相邻两卡的圆角挤在一起很吵;用 10(内嵌小块的圆角)在 12vp 的行内边距下
* 又显得方、像"被裁过的白条"。14 是这两个之间的甜点。
*/
static readonly radiusCard: number = 14;
/** 胶囊圆角 */
static readonly radiusPill: number = 999;