v62:纪念日列表修正 / 分类图标与设置菜单 / 首页卡片体系

- 纪念日列表:display:flex 从 td 移到内层 div(写在 td 上会破坏表格列算法,
  表现为关联人列与其它列高度不一致);行内列序按表头对齐;
  改完再点「新建」不再带出上次修改的数据;文案改为「与我相关」「来自名册」;
  别人记的、把我挂成关联人的条目一并显示(split() 返回 hiddenIds,
  路由层据此过滤「接下来的日子」,与两张表同一套可见性)
- 分类图标:新增 app/AnnivIcon.php(17 个行内 SVG 图标 + 同 key 的 emoji
  供日历纯文本处使用,内网无 CDN 不用 FontAwesome);去掉「看日历」按钮;
  设置按钮改为菜单,第一项进 days/settings 独立页;分类可自选图标,
  列表徽标与日历条目都按分类显示
- 首页卡片:新增 app/HomeCards.php 与 templates/home_cards.php;
  8 格宽 × 高 2/4/6/8;首页拆成 templates/home/_card_*.php 共 8 个片段;
  home/cards 可改尺寸、调顺序、开关
This commit is contained in:
2026-10-19 12:51:17 +08:00
parent ad7f43af68
commit 9a66068c33
21 changed files with 2172 additions and 685 deletions
+8 -1
View File
@@ -1487,11 +1487,18 @@ final class Calendar
// 数据是**实时派生**的(生日读 persons、农历逐年换算),所以这里不查表、直接算。
// ⚠️ 农历那一路必须按"这一年"换算 —— 同一条农历生日在不同年份落在不同公历日期。
foreach (Anniversary::between($familyId, $personId, $from, $to) as $a) {
/* 🔴 v62(用户 2026-10-18 第 2 条):「在列表中、**日历中**,都要根据分类,
显示不同的图标。」
⇒ 日历里的条目是**纯文本**(月格 / 周视图 / 日视图共用一个 title 字符串),
塞不进行内 SVG,所以这里用同一套图标的 emoji 形态(`AnnivIcon::emo`)。
图标 key 由 `Anniversary::occurrences()` 按分类算好带出来 ——
不要在日历里再判一次"这是生日还是忌日"(两处判据迟早分叉)。 */
$annIcon = AnnivIcon::emo((string)($a['icon'] ?? ''));
$out[] = [
'cal' => 0,
'color' => '#B4633C',
'calname' => '纪念日',
'title' => '🎂 ' . (string)$a['title'],
'title' => $annIcon . ' ' . (string)$a['title'],
'date' => (string)$a['date'],
'time' => '',
'end_time'=> '',