' . \App\AnnivIcon::svg(\App\Anniversary::iconOf($famId, $k), 13, 'kind-ic') . '' . e($k) . ''; }; $srcWord = static function (array $r): string { $src = (string)($r['source'] ?? 'custom'); if ($src === 'birthday_solar') { return '名册生日(阳历)'; } if ($src === 'birthday_lunar') { return '名册生日(农历)'; } return \App\Anniversary::repeatWord((string)($r['repeat_type'] ?? 'solar')); }; /* 关联人(用户第 2 条:「再加一列,关联人。列表中,人的前面,都加头像。」) —— 用全站统一的 person_chip()(它自带头像 + 我对他/她的称呼 + 本人底色)。 ⚠️ chips 一律**不传 href**:这一格在一张表格里,`` 套 `` 是非法 HTML, 浏览器会把外层结构切开(person_chip 的注释里记过这个坑)。 ⚠️ $peopleMap 由路由层传进来(一次查全,避免逐行查库);缺失时退化成"有几个显示几个"。 */ $peopleMap = $peopleMap ?? []; $peopleCell = static function (array $r) use ($peopleMap): string { $ids = (array)($r['person_ids'] ?? []); if (!$ids) { return '—'; } $out = ''; $n = 0; foreach ($ids as $pid) { $pid = (int)$pid; $p = $peopleMap[$pid] ?? null; if ($p === null) { continue; } // 一个人时正常画;多人时最多画 4 个 + 「+N」,免得一行被撑爆 if ($n >= 4) { $rest = count($ids) - 4; $out .= '+' . $rest . ''; break; } $out .= person_chip($p); $n++; } return $out === '' ? '—' : $out; }; /* 画一张纪念日表。两块(手动 / 派生)共用同一个渲染 —— 复制一遍迟早改漏一处。 */ $renderTable = function (array $rows, bool $editable) use ($canWrite, $kindBadge, $srcWord, $peopleCell): void { if (!$rows) { return; } ?>
`** 上 (`.ann-people` / `.ann-acts`)。`display` 一改成 flex,这个元素 **就不再是 table-cell** —— 它从表格的列算法里脱了出来, 于是整行的列宽/基线全乱(同一行里有的格按表格排、有的格按 flex 排)。 ⇒ `
日期纪念日关联人分类重复
月 日 (闰月) 年起 第 个 ` 恢复成普通单元格,flex 放到**里面一层 div** 上。 ② **内容错位(本次修)**:表头写的是「关联人 | 分类 | 重复」, 但行里依次塞的是「分类 | 重复 | 关联人」—— 三列的内容整体往左挪了一格,用户看到的"关联人"那一栏里其实是分类。 ⇒ **表头保持原顺序不动**(「关联人」在「分类」前是用户当初指定的), 把**行里的顺序**改成跟表头一致: 日期 | 纪念日 | **关联人** | **分类** | 重复。 */ ?>
修改
来自名册

纪念日

生日本身就是一种纪念日 · 阳历与农历都能记

接下来的日子

未来 60 天里没有纪念日。

  • 岁 第 个

与我相关()

还没有与你相关的纪念日。 结婚纪念日、忌日、相识的日子…点右上角「新建纪念日」加一条。

0): ?>

另有 条是别人记的、与你无关,这里不列;日历里照旧能看到。

来自名册()

名册里还没有人填过生日。到「名册 → 编辑成员」把生日填上,这里就会自动出现。

`), 收尾也只能有一次。曾经这一行被复制成两行 ⇒ 整个页面的 div 深度变成 -1, 元素跑到容器外(流水线的"div 嵌套"检查抓到的就是这个)。 */ ?>