Files
FamilyBook/templates/movies/_settings_menu.php
T
laoyang 4060c18f86 fix(kin,movies): 家谱连线重构为单一网格 + 观影设置统一页头
需求三点:
1. 观影模块「⚙ 设置」与「记一场电影」按钮高度不一致 → 统一页头动作区
   四个选择器的 padding/font-size(.btn 与 .btn-sm 混用是根因);并把设置
   下拉推广到观影全部页面(详情/影院/搜索/统计/报告/表单),落在返回按钮旁。
2. 家谱连线「线乱」→ 根因三条:每代各建一个网格(列宽最小值由内容决定,
   各代不一致,窄屏实测 93.5px vs 164/78/78/78px);落点用百分比算而 grid
   间距不参与百分比;连线行与卡片行不是同一套列。
   改法:整棵树只留一个网格,辈分行/卡片行/连线行全是它的行,连线元素本身
   也是网格项(靠 justify-self 落位);列宽固定为一卡之宽(不用 minmax/1fr,
   否则宽屏卡片中心 ≠ 列中心)。
3. 亲属关系接口改白名单(parent/child/spouse)——原先未知 kind 被静默记成
   配偶,夹具传 kind=sibling 让家谱断言长期拿错数据自证。

设置下拉抽成可复用片段 _settings_menu.php($setCurrent 高亮当前页、
$setCanWrite 控「影院管理」显隐),六七个页头不再各抄一份。

验证:e2e 456/0、桌面几何 268/0、移动端几何 504/0、交互 97/0、
家谱连线诊断 0 失败、静态空跑 exit=0、静态断言证伪 13/13、
反向验证 68/68 全抓住。
2026-10-01 17:42:15 +08:00

38 lines
1.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 观影模块的「⚙ 设置」下拉 —— 影院管理 / 高级搜索 / 统计 / 年度报告。
*
* 为什么抽成片段:v11 这个下拉只长在观影列表页一个地方;用户随后要求
* 「设置这个按钮,在观影详情等页面也都要出现,就出现在返回等按钮的旁边」。
* 与其把同一段 <details> 复制到六七个页头(改一处就得改六处、迟早漏),
* 不如让所有观影页 require 同一个片段。
*
* 用法(include 前 set 好):
* $setCurrent 当前页的 key('list' | 'cinemas' | 'search' | 'stats' | 'report' | 'show' | 'form')
* —— 用来高亮菜单里对应的那一项。空串表示都不高亮。
* $setCanWrite 是否显示「影院管理」(只有能写的人才有管理入口)
*
* ⚠️ 高亮用 `a.on`(.movie-set .menu-list a.on 已有样式)。**不做「隐藏当前页那一项」**:
* 隐藏会让菜单在不同页面长短不一,用户更难认出「这是同一套入口」。
*/
$setCurrent = (string)($setCurrent ?? '');
$setCanWrite = (bool)($setCanWrite ?? false);
$setOn = static function (string $key) use ($setCurrent): string {
return $setCurrent === $key ? ' class="on"' : '';
};
?>
<details class="movie-set menu">
<summary class="btn btn-ghost" title="观影设置">⚙ 设置</summary>
<div class="menu-list">
<?php if ($setCanWrite): ?>
<a href="<?= e(url('movies/cinemas')) ?>"<?= $setOn('cinemas') ?>>影院管理</a>
<?php endif; ?>
<a href="<?= e(url('movies/search')) ?>"<?= $setOn('search') ?>>高级搜索</a>
<a href="<?= e(url('movies/stats')) ?>"<?= $setOn('stats') ?>>统计</a>
<a href="<?= e(url('movies/report')) ?>"<?= $setOn('report') ?>>年度报告</a>
</div>
</details>
<?php
// 用完即清,避免残留在后续 include 里(与 _datetime.php 同一纪律)
unset($setCurrent, $setCanWrite, $setOn);
?>