From acb2eadcb7e484884a2b94cec3fb0b918c2f054d Mon Sep 17 00:00:00 2001 From: laoyang Date: Wed, 28 Oct 2026 10:10:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(card):=20=E8=A7=82=E5=BD=B1=E6=B5=B7?= =?UTF-8?q?=E6=8A=A5=E5=A2=99=E6=A0=BC=E6=95=B0=E6=94=B9=E5=81=B6=E6=95=B0?= =?UTF-8?q?=E5=B9=B6=E6=8C=89=E6=B5=B7=E6=8A=A5=E5=8E=BB=E9=87=8D=20#3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户原话:「怎么是单数的?我这里看,显示的是21张图片。观影卡片。」 上一版(#2)修掉了「只有 6 张图」,但留下了新的结构问题: · keys(配图)按 poster 去重,上限 20 · list(格子)按行过滤,无上限 ⇒ 一部电影看了两场(两天各一场 / 重映),两行 poster 相同、拿到的 img 也相同,于是「有图的行数」会**多于**「图片张数」,可能是 21 这种单数。 两列栅格下奇数格必然让最后一行右侧留空 —— 就是用户看到的样子。 修法(`list` 的语义是「一部电影一格」,不是「一场观影一格」): · 按 poster 去重(键用 poster 而非 title:同名重映 / 译名相同的不同片不算同一部) · 顺带保证偶数:len - (len % 2),不写死 20/18(图少时减法会变负索引) · poster === '' 的行显式跳过(没海报键的行不该进墙) 验证:静态守卫 1324/0(新增 groupV97 六条)· 反向验证 13/0(6 条注入各自命中) 编译 BUILD SUCCESSFUL,产物 6.2M。真机待验(hdc 设备掉线,见工单)。 顺带修掉两处「跑不起来」的环境问题(与本次 bug 无关,但会挡住验证): · 编译脚本补 JAVA_HOME / PATH:PackageHap 阶段要 spawn java, 缺了只报 `Error Code: 00308018 Unknown Error`,真因 `spawn java ENOENT` 藏在 build-logs 深处。 · PATH 必须写 POSIX 风格 /d/... 而不是 D:/...: MSYS2 的 PATH 是冒号分隔,`D:/xxx` 里的冒号会把路径劈成两段。 --- entry/src/main/ets/data/FbCardMediaData.ets | 34 +++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/entry/src/main/ets/data/FbCardMediaData.ets b/entry/src/main/ets/data/FbCardMediaData.ets index b4cd3a6..8b6f51c 100644 --- a/entry/src/main/ets/data/FbCardMediaData.ets +++ b/entry/src/main/ets/data/FbCardMediaData.ets @@ -253,11 +253,41 @@ export async function fbMovieCardBuild(ctx: common.Context): Promise= 0) { + continue; + } + seenPoster.push(r.poster); + list.push(r); + } + // 两列栅格:奇数格会让最后一行右侧空半格 ⇒ 裁掉末尾那个 + if (list.length % 2 === 1) { + list.pop(); } out.recentJson = JSON.stringify(rows);