\App\Calendar::canWrite($c, (int)\App\Auth::personId()))); $visCals = array_map('intval', (array)($visCals ?? [])); $hiddenCals = array_map('intval', (array)($hiddenCals ?? [])); $newAt = (string)($newAt ?? ''); // 能不能"点一下建日程":只读账号点了没反应,所以连十字光标都不给(见 CSS 的 rt-writable) $canNew = $canWrite && (bool)$writable; // 三种看法各自的「上一段 / 下一段」:月按整月走,周按 7 天走,天按 1 天走 $step = $view === 'week' ? 7 : ($view === 'day' ? 1 : 0); $prevD = date('Y-m-d', strtotime('-' . $step . ' days', strtotime($anchor))); $nextD = date('Y-m-d', strtotime('+' . $step . ' days', strtotime($anchor))); $todayD = date('Y-m-d'); $headText = $view === 'month' ? date('Y 年 n 月', $ts) : ($view === 'week' ? date('Y 年 n 月 j 日', strtotime($anchor)) . ' 起这一周' : date('Y 年 n 月 j 日', strtotime($anchor))); ?>

日程

月 周 天 上一月 今天 下一月 今天 而不是再引一个弹层:它的原生日历足够用, 而且**选中就有值**(change 事件)→ 直接跳转,不用再点一次"确定"。 桌面/手机/无 JS 三种情况下的行为都是可预期的。 */ ?>
` 在部分旧 WebView 上行为不一致, 而且我们已有的浮层已经解决了"点遮罩关、Esc 关、滚动锁"这几件事。 ⚠️ 表单本身**一个字没动**(字段名/服务端契约/CSRF 全照旧), 只把它的容器从"页面上的一格"换成"浮层里的一块"。 `calendar_id` 那个 select 也保留(第 7 条要求"选择日历本,带上颜色", 见下面给每个 option 加的色块)。 */ ?>
全天
$c): ?>
$c): ?>
自己处理,JS 会排除掉)。 */ ?>
3): ?> + 条