纪念日生日卡:删副标题、改文案、头像兜底 (#87)

用户 2026-11-05:
  「现在还是没有头像。」
  「来自成员资料不能在这里修改这句话去掉。」
  「要修改生日,请到名册里打开这位成员的资料。这句话改成:
    要修改生日,请到名册里修改这位成员的资料。」

① 头像为什么没出来 —— 查清了,**链路是通的,是那个人本来就没头像**
   数据库实查:
     persons #1108 高雪玉  avatar=[]  avatar_color=[]
     全家 800 人里只有 **19 人** 有头像
   而首页「最近纪念日」前三条正好是:高雪玉 / 领证纪念日 / 杨永全,
   第一条就是没头像的那位 —— 点开自然只看到色块。
   (同前三条里的「杨永全」是**有**头像的,点他就能看到真图。)

   ⇒ 兜底做稳:新增 blockColor()
     · avatar_color 有值就用它;
     · 没有就**按名字算一个稳定色**(charCode 求和取模),
       同一人每次打开颜色一致 —— 不能随机,否则每次弹出来都变一个色;
     · 调色板用纪念日模块的暖色系(8 档),避免"别人暖色、这个是荧光绿"。

② 去掉「来自成员资料,不能在这里修改」
   顶栏「生日 / 农历生日」本身已说明这是什么,再挂免责声明显得啰嗦;
   底部那句出口已经表达了边界。

③ 文案改成「要修改生日,请到名册里修改这位成员的资料。」
   (原来写的是"打开这位成员的资料",用户改成"修改";
     另外"家人"改成"名册"——与模块名叫法一致。)

编译通过,已装真机。
This commit is contained in:
2026-11-05 20:35:53 +08:00
parent 41e3354fc8
commit e1152941af
@@ -48,6 +48,40 @@ export struct FbDayBirthdaySheet {
return FB_TOKEN_STORE.get();
}
/**
* 没有头像时,色块用什么底。
*
* 🔴 #87b(用户 2026-11-05):「现在还是没有头像。」
*
* 查了数据库:首页「最近纪念日」前三条里的第一条是**高雪玉**,
* 而她在 `persons` 表里 `avatar` 和 `avatar_color` **都是空** ——
* 所以蛋是"她本来就没设过头像",不是链路断了。
* (实测:全家 800 人里只有 19 人有头像。)
*
* ⇒ 兜底要做稳:`avatar_color` 有值用它;没有就**按名字算一个稳定色**,
* 同一人每次打开颜色一致(不能随机,否则每次弹出来都变一个色)。
* ⚠️ 用名字的字符码求和取模,是"稳定但不要求好看"的常见做法;
* 真正的头像是要用户自己传的,这里只是别让人看到一片灰。
*/
private blockColor(): string {
const d: FbRecentDay | null = this.item;
if (d !== null && d.avatarColor !== '') {
return d.avatarColor;
}
/* 与模块主题色同色系的一组暖色(纪念日 = 暖橙棕),
避免出现"别人都是暖色、这一个是荧光绿"的跳脱感。 */
const palette: string[] = ['#C2703E', '#A8574F', '#B0784A', '#8E6A47',
'#A26A54', '#C08A5A', '#9C5F4A', '#B57B62'];
const nm: string = this.nameOf();
let sum: number = 0;
for (let i = 0; i < nm.length; i++) {
sum += nm.charCodeAt(i);
}
/* 没有名字(数据异常)时用 0 号色,不要除零 */
const idx: number = nm.length > 0 ? sum % palette.length : 0;
return palette[idx];
}
/**
* 头像 URL。
* ⚠️ `avatar` 是 key(`avatars/xxx.jpg`),要经 `fbImageSrc` 拼成可加载地址;
@@ -161,11 +195,10 @@ export struct FbDayBirthdaySheet {
.fontSize(FbMetric.fontBody)
.fontWeight(FontWeight.Bold)
.fontColor(this.accent)
/* ⚠️ 明确写出"来自成员资料,不能在这里改" ——
用户第 1 条要的就是这个边界,不写清楚他会以为是卡坏了。 */
Text('来自成员资料,不能在这里修改')
.fontSize(FbMetric.fontTiny)
.fontColor(FbColors.faint)
/* 🔴 #87b(用户 2026-11-05):「来自成员资料不能在这里修改
这句话去掉。」
⇒ 删掉。顶栏标题「生日 / 农历生日」本身已经说明这是什么,
再挂一行免责声明显得啰嗦,底部那行出口也够表达边界。 */
}
.alignItems(HorizontalAlign.Start)
.layoutWeight(1)
@@ -189,7 +222,7 @@ export struct FbDayBirthdaySheet {
Row({ space: 14 }) {
FbAvatar({
name: this.nameOf(),
color: this.item !== null ? this.item.avatarColor : '',
color: this.blockColor(),
imageUrl: this.avatarSrc(),
dia: 56,
fontSizeVp: 22
@@ -263,7 +296,9 @@ export struct FbDayBirthdaySheet {
/* ---- 底部:去成员资料改 ---- */
/* 用户第 1 条:「不能编辑」⇒ 不给编辑按钮,但**要给出口**:
想去改生日的人得知道该去哪儿,否则只会觉得"这卡不好用"。 */
Text('要修改生日,请到「家人」里打开这位成员的资料')
/* 🔴 #87b(用户 2026-11-05):「『要修改生日,请到名册里打开这位
成员的资料』这句话改成:要修改生日,请到名册里修改这位成员的资料。」 */
Text('要修改生日,请到名册里修改这位成员的资料')
.fontSize(FbMetric.fontTiny)
.fontColor(FbColors.faint)
.width('100%')