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:
@@ -1,63 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* 纪念日模块的「设置」下拉(v24 用户 2026-10-03 第 9 条)
|
||||
* 纪念日模块的「设置」下拉(v24 用户 2026-10-03 第 9 条;🔴 v62 改成菜单)。
|
||||
*
|
||||
* 用户原话:「在新建纪念日和右侧,也增加设置按钮,可以设置纪念日的分类。」
|
||||
* v24 原话:「在新建纪念日和右侧,也增加设置按钮,可以设置纪念日的分类。」
|
||||
* —— 当时做成了"下拉里直接铺一张分类增删表单"。
|
||||
*
|
||||
* 分类清单是**家庭级**的(settings.anniv_kinds)—— 全家共用一套叫法,
|
||||
* 不然「结婚纪念日」在两个人屏幕上是两套名字,看的时候对不上。
|
||||
* 所以这里跟「模块主题色」一样:**能改的是所有人**,但改的是同一份。
|
||||
* 🔴 v62(用户 2026-10-18 第 2 条):「设置按钮,点击后弹菜单,**第一个菜单是分类设置**,
|
||||
* 进去之后可以设置分类,每一类纪念日都有不同的图标……」
|
||||
* ⇒ 与日程/观影/任务三个模块**统一手感**(☰ → 一串列表 → 点进独立页):
|
||||
* 下拉里**不放表单**,只放一条条目的链接;分类的增删改与图标选择都在
|
||||
* `days/settings` 那一页上(见 templates/days/settings.php)。
|
||||
*
|
||||
* 为什么必须这么改(与日程那条同一个理由,别丢):分类是**家庭级**的,
|
||||
* 一个家能有十几二十个分类,每个分类还要选图标 —— 全铺在下拉里,
|
||||
* 下拉会被撑到屏幕外,而"设置"按钮点开本来就该是"一个目录"。
|
||||
*
|
||||
* 用法(require 前 set 好):
|
||||
* $kinds 当前分类清单
|
||||
* $kindCounts 每个分类用了几条(显示"这个分类有没有在用")
|
||||
* $setCurrent 当前页 key('kinds')用来高亮;'' 也行(从别处挂过来时没有当前项)
|
||||
*/
|
||||
$daySetKinds = (array)($kinds ?? \App\Anniversary::PRESET_KINDS);
|
||||
$daySetCounts = (array)($kindCounts ?? []);
|
||||
$daySetCanWrite = \App\Auth::canWrite();
|
||||
$setCurrent = (string)($setCurrent ?? '');
|
||||
$setOn = static function (string $key) use ($setCurrent): string {
|
||||
return $setCurrent === $key ? ' class="on"' : '';
|
||||
};
|
||||
$setIcon = static function (string $name): string {
|
||||
$paths = [
|
||||
// 分类:三个小方块("一格一类")
|
||||
'kinds' => '<rect x="2" y="2.2" width="5" height="5" rx="1.2"/>'
|
||||
. '<rect x="9" y="2.2" width="5" height="5" rx="1.2"/>'
|
||||
. '<rect x="2" y="9" width="5" height="5" rx="1.2"/>'
|
||||
. '<rect x="9" y="9" width="5" height="5" rx="1.2"/>',
|
||||
];
|
||||
$d = $paths[$name] ?? '';
|
||||
if ($d === '') {
|
||||
return '';
|
||||
}
|
||||
return '<svg class="mi" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"'
|
||||
. ' fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"'
|
||||
. ' stroke-linejoin="round">' . $d . '</svg>';
|
||||
};
|
||||
?>
|
||||
<details class="movie-set menu ann-set">
|
||||
<summary class="btn btn-icon" title="纪念日设置" aria-label="纪念日设置"><svg viewBox="0 0 16 16" width="18" height="18" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/></svg></summary>
|
||||
<div class="menu-list ann-set-list">
|
||||
<div class="cal-set-h">纪念日分类(全家共用一套)</div>
|
||||
|
||||
<?php if (!$daySetKinds): ?>
|
||||
<p class="small muted" style="margin:0 0 8px">一个分类都没有。下面加一个。</p>
|
||||
<?php else: ?>
|
||||
<ul class="ann-kind-list">
|
||||
<?php foreach ($daySetKinds as $k): ?>
|
||||
<li>
|
||||
<span class="ann-kind-name"><?= e((string)$k) ?></span>
|
||||
<span class="small muted"><?= (int)($daySetCounts[(string)$k] ?? 0) ?> 条在用</span>
|
||||
<?php if ($daySetCanWrite): ?>
|
||||
<form method="post" action="<?= e(url('days/kinds')) ?>" class="res-inline">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="del" value="<?= e((string)$k) ?>">
|
||||
<button class="btn btn-ghost btn-sm" type="submit"
|
||||
title="删掉这个分类(已用它的纪念日不变)">删</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($daySetCanWrite): ?>
|
||||
<form method="post" action="<?= e(url('days/kinds')) ?>" class="led-set-form-in" style="margin-top:8px">
|
||||
<?= csrf_field() ?>
|
||||
<input class="input" name="add" maxlength="20" placeholder="新分类,如:相识纪念日">
|
||||
<button class="btn btn-sm" type="submit">加分类</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
|
||||
<p class="small muted" style="margin:8px 0 0">
|
||||
删掉一个分类**不会**改已用过它的纪念日 —— 只是新建时不再出现在下拉里。
|
||||
</p>
|
||||
<?php /* 第一项(也是目前唯一一项):分类设置 —— 名称 + 图标 + 删除 + 排序 */ ?>
|
||||
<a href="<?= e(url('days/settings')) ?>"<?= $setOn('kinds') ?>><?= $setIcon('kinds') ?><span>分类设置</span></a>
|
||||
</div>
|
||||
</details>
|
||||
<?php
|
||||
// ⚠️ 只 unset **本片段自己定义**的那三个前缀变量。
|
||||
// 绝不能再写 `unset($kinds, $kindCounts, $canWrite)` —— days/index.php 里
|
||||
// 同样有 $canWrite(还有 $kinds),那样会把宿主模板的变量一起干掉,
|
||||
// 后面每一处用到的地方都变成 Undefined variable(账本那个片段刚这么炸过一次)。
|
||||
unset($daySetKinds, $daySetCounts, $daySetCanWrite);
|
||||
// ⚠️ 只 unset **本片段自己定义**的变量,绝不碰宿主的 $setCurrent / $kinds / $canWrite。
|
||||
unset($setCurrent, $setOn, $setIcon);
|
||||
|
||||
Reference in New Issue
Block a user