a + div,**不能写成 a > form**: * 表单套在链接里是非法 HTML,浏览器会把 DOM 拆开(本仓踩过)。 */ $canMove = \App\Auth::canWrite(); $pickable = $pickable ?? 0; // ⚠️ v54(用户 2026-10-16 第 2 条):两个变量**不是一个东西**,别合并: // · $tagCloud —— **真有人的**标签(筛选条用;人的数为 0 的词不上筛选条) // · $tagChoices —— **打标签的候选**(词表 ∪ 用过的词;浮层里的 checkbox 用它) $tagCloud = $tagCloud ?? []; $tagChoices = $tagChoices ?? []; $tagFilter = $tagFilter ?? ''; // v28:平铺列表,人数直接数行数(不再按分组累加) $total = count($people ?? []); /** * 画一栏人。用闭包是因为"分好组的各栏"和"未分类"两处要画同一套卡片, * 复制一遍迟早会改漏一处。 * * ⚠️ `$groups` 必须写进 `use (...)`:卡片里的「分组」按钮要用它(见下)。 * (历史:这个下拉原来长在卡片里,漏掉它会让下拉只剩「未分类」一项, * 看着像"分组功能没做",其实是变量没传进来。) * * 🔴🔴 v24 第 10 批 #6:**卡片里不再内联弹层与表单**。 * * 用户报「名册列表页面仍然很慢,Firefox 提示这个页面和 Bitwarden 插件有冲突」。 * 线上真实数据实测(1184 人)把这件事量出来是什么样: * · 全页 `
` **2369 个**、`` **27234 个**、`radio` **22496 个**; * · 单张卡片 83 个 DOM 节点,其中**分组菜单独占 64 个**; * · 于是总 DOM 98100 个、解压后 7.7 MB。 * 密码管理器(Bitwarden/1Password/LastPass…)会**逐个 form/input 去判定是不是登录框**, * 2369 个表单足够把主线程占住 —— 这就是"和 Bitwarden 冲突"的真实来源, * 也是"明明没报错却卡得没法用"的原因。 * * 修法(不是调 CSS 缓存,而是**把节点数砍掉一个数量级**): * ① 每卡的「分组」按钮只留一个 ** 编辑 `(闭合 `.person`)在 v29 重写平铺列表时**漏掉了**。 浏览器遇到"卡片没闭合"会**把下一张卡塞进上一张里**(DOM 修复行为), 于是每张卡的宽度被前一张的按钮吃掉 —— 实测第一张的 `.person-main` 只剩 24~151px(本该 ~800px),姓名与徽标全被挤碎, 整页看起来就是"错乱"。 ⚠️ 这类"少一个闭合标签"的 bug,`php -l` 与静态断言**全绿** (PHP 语法没错、PHP 的 if/endif 也平衡),只有真机量 DOM 才现形。 定位手法:量 `.person` 的 `children`,发现里面**有另一个 `.person`** —— 嵌套的同类元素 = 上一张没收尾。 */ ?>

家庭名册

(加 data-roster-total 供 JS 定位)。 v28:原来后面跟着「,分 6 个关系分组」—— 分组已成标签, 改成说"打了几个标签"(情报更贴近新模型)。 */ ?> 共 人

没有匹配的人 换个词试试。 名册还是空的 把家里人加进来,之后观影、旅行的同行人就可以直接从名册里选。
家里已经有的人(别人先录的)不用重录 —— 录入时填上姓名或手机号, 系统会认出来并问你要不要直接加进你的名册。
添加成员 导入联系人
等家里人把你加进来,或者让管理员给你开个账号。
标签 全部 # 清除筛选

这个标签下暂时没有人。

通讯录同步(CardDAV) 把这 个人放进手机通讯录

在 iOS「通讯录」、安卓 DAVx⁵、Thunderbird、群晖 Contacts 里填下面这个地址 + 你的姓名或手机号 + DAV 口令,就能把这份名册同步过去。
同步的就是你在这一页看到的这些人( 个)—— 谁加进你的名册、谁就会出现在手机通讯录里。
目前是只读同步:在手机上改的联系人不会写回岁月家,要改请回到本站来改。

填这一条即可;点进去之后 iOS/DAVx⁵ 会自动发现这本通讯录。
clientW 360,越界元素就是它)。 页面变宽在手机上是最刺眼的问题(整页可以左右拖), 所以文案压到八个字以内、并允许在窄屏折行。 */ ?> 日历与通讯录共用一把