`。 ⚠️ 抽成闭包是为了**不在下面每处 if/else 手抄两遍结构** —— 抄两遍必然有一天两边不同步(v37 那种"改了 A 忘了 B"的坑)。 ⚠️ 「必填星号」作为**参数**传(不要用 `use` 捕获 —— 闭包定义时那个变量还没赋值, 捕获到的是 null,星号永远不出现)。 */ $evRowOpen = static function (string $full = '') use ($evMv): string { return '
'; }; $evLab = static function (string $text, string $for = '', bool $star = false) use ($evMv): string { if ($evMv) { // 观影式:标签是 ,冒号由 CSS ::after 给 return '' . $text . ($star ? '*' : '') . ''; } return '' . $text . ($star ? ' *' : '') . ''; }; ?>
`:后者在手机上要"按住再点", 几乎没法用(任务共享那个 multiple 下拉就是因此被换掉的)。 ⚠️ 字段名必须是 `reminder_minutes[]` —— Calendar::reminderMinutes() 认得数组。 写成 `reminder_minutes`(不带 [])会让 PHP 只留最后一个勾选。 🔴 v43(用户第 5 条):他要求把这一栏底下那句「多选与不提醒」的说明去掉 ⇒ 这里删掉那个 `.tip`(多选语义由复选框本身表达)。 */ $curReminders = \App\Calendar::reminderList($evF['reminder_minutes'] ?? null); ?>
$word): ?>
bx.offsetParent !== null)`)。而这一版**结束那一端默认 带 `hidden`**(要点「+ 添加结束时间」才出现)→ 判断永远不成立 → 范围控件**从来没被挂上去过**(实测 data-semi-range-done 恒为 null)。 更糟的是 CSS 还有 `html.js .dt-range:not(.is-semi-range) > .dt-input { visibility: hidden }` —— 两端于是都是**不可见**的: 屏幕上一片空白、点哪儿都没反应。这就是「无法使用」的全部。 修法:**结束那一端不再默认藏起来**,范围控件一次性就挂上。 起止成对本来就该一起填。想表达"只有一个时刻"的话,范围控件 clear 一下即可。 ⚠️ 顺带删掉「+ 添加结束时间 / 去掉结束时间」那套开关: 它切换显隐会让范围控件反复重挂;范围控件自己就能表达"没有结束"。 🔴🔴 v43(用户 2026-10-11 第 5 条):「开始和结束时间也没有用我们最新的控件, 直接就是四个字"时间范围"。」 —— 两处真缺陷一起修: ① 这个字段块**没传 `$dtPlugin='antd'`** ⇒ 用户看到的还是年/月/日 + 时/分 五个原生下拉,而不是他点名要的 Ant Design 控件; ② 标签写的是「时间范围」四个字,没告诉人"这是开始 / 结束"。 ⇒ `$dtPlugin='antd'`(与观影/行程同一套:面板有可点的时/分列、中文「确定」), 标签改「开始 / 结束」(并去掉那颗必填星号的位置歧义 —— 只标在开始上)。 ⚠️ 契约一字未改:隐藏字段仍是 `*_date/_hour/_minute`;antd 拉不动时 自动退回自建下拉(渐进增强)。 */ ?>
开始 / 结束* 开始 / 结束 *