v82: 首页卡片补「新建日程 / 新增成员」+ 两处红线

用户原话:「日程,没有新建日程按钮,名册,也没有新增成员这个按钮。
另外,首页上的日程,红色线不对,变短了左侧缺了一块。在日程模块中,
那个红线左侧是不是还有一个红点?如果有,去掉。」

首页卡片就地操作(不用进模块):
- HomeCards.php 的 agenda/contacts 补 add + add_modal 元数据
- templates/calendar/_add_modal.php:从 calendar/index.php 抽出的
  「新建日程」弹框片段(首页与日程页共用;片段自读变量一律加 cal 前缀,
  避免 require 共享作用域覆盖宿主变量)
- templates/people/form.php:加弹框形态(pfModalOnly / pfModal),
  弹框形态下「取消」走 data-fb-add-close
- index.php:首页 agenda/contacts 两个 $homeAddModals 分支;
  calendar/event_add 支持 back=home 白名单跳转(不采信任意 POST 字符串)

红线(左端缺一块 / 多余红点):
- .ag-now 原来写 left: var(--ag-gutter,50px),但 v80 起它已经在
  .ag-lines 内部(那层自己已有同样缩进)⇒ 左沿跑到 100px、比车道多
  出一整份刻度宽。改成 left: 0
- .tg-now::before 整条删除(日程模块页那个 8px 红点)

涉及共用件(HomeCards/index.php),已跑全量:e2e 1572/0、
v82 正向 20/0、v82 反向 15/0、流水线全绿并已部署。
This commit is contained in:
2026-10-24 04:25:02 +08:00
parent fd90e33d94
commit 4b58fec796
7 changed files with 502 additions and 185 deletions
+60
View File
@@ -286,6 +286,66 @@
require __DIR__ . '/days/form.php';
unset($anModalOnly, $anOpen, $anModal, $anEmbed, $anShell,
$editing, $people, $kindsFull, $kinds);
} elseif ($hcAddKey === 'agenda') {
/* 🔴 v82(用户 2026-10-23):「日程,没有新建日程按钮……」
⇒ 首页「今天的日程」卡片右上角一颗「新建日程」,点开的是**与日程页同一张**
弹框(`templates/calendar/_add_modal.php`,v82 从 calendar/index.php 抽出来的)。
⚠️ `$calCtx['back'] = 'home'` 是这个分支**唯一**与日程页不同的地方:
提交完回首页(`calendar/event_add` 里认这个白名单值),
用户不用离开首页就能看见刚建的那条。
⚠️ `ym`/`anchor` 用"今天"——首页卡片本来就只显示今天,
新建的日程默认落在今天才符合直觉(日程页那边才用页面锚点)。 */
$calCanNew = true; // 进到这里已经过了 Auth::canWrite()
$calWritable = (array)($hcAddData['writable'] ?? []);
$calCtx = [
'ym' => date('Y-m'),
'view' => 'day', // 首页日程卡就是"日视图那样"
'anchor' => date('Y-m-d'),
'new_at' => '',
'back' => 'home',
];
require __DIR__ . '/calendar/_add_modal.php';
/* ⚠️ 🔴 v82 再修:这段 unset 清单**必须与片段真实赋过的名字一致**。
第一版抄的是模块页的老变量名(`$writable/$ym/$view/$anchor/$newAt`)——
那是片段改用 `$cal*` 前缀**之前**的清单,抄过来有两个问题:
① 那五个名字**片段已经不再赋值**,unset 它们等于**误杀宿主** ——
首页后面还有别的卡片在用(尤其 `$writable`);
② 片段真正留下的 `$cal*` 反而没清干净。
⇒ 现在按片段的真实输出逐个清:`$calCanNew/$calWritable/$calCtx`
三个入参 + 片段内部那 7 个 `$cal*` + `_event_fields.php` 那 8 个。
⚠️ 加新变量时**先回片段末尾那段清单对一遍**再往这里抄。 */
unset($calCanNew, $calWritable, $calCtx,
$calYm, $calView, $calAnchor, $calNewAt, $calBack, $calThisYm, $calBooks,
$firstCal, $hasPersonal, $defDay, $defHM, $defEndH, $evFields,
$evAllDay, $evMvStyle,
/* ⚠️ 片段自己会设 `$fbAddModalAttr`(按 `$calBack` 判定);
外层循环每轮也要设它,不清掉会让第二轮拿到上一轮的值。 */
$fbAddModalAttr);
} elseif ($hcAddKey === 'contacts') {
/* 🔴 v82(用户 2026-10-23):「名册,也没有新增成员这个按钮。」
⇒ 首页「联系人」卡片右上角一颗「新增成员」,点开的是**与名册页同一张**
表单(`templates/people/form.php` 新加的弹框形态)。
⚠️ 这套开关(`$pfModalOnly` / `$pfModal` / `$pfOpen`)是 v82 才加到
people/form.php 的,之前那页只能整页打开 —— 所以这里**必须**逐个给全,
漏一个就会退回"整页表单塞进卡片里"那种坏形态。
⚠️ `$person = null` + `$isEdit = false` 是新增态的判据(模板第一行按
`$person['id']` 算 $isEdit),不要靠"不传"来默认。 */
$pfModalOnly = true;
$pfModal = true;
$pfOpen = false;
$person = null;
$errors = [];
$canEditAll = true;
$isSelf = false;
$jobRows = [[]]; // 工作经历先给一行空白(与 people/new 一致)
$myNote = '';
$myTags = [];
$tagChoices = (array)($hcAddData['tagChoices'] ?? []);
$myNick = '';
$contacts = [];
require __DIR__ . '/people/form.php';
unset($pfModalOnly, $pfModal, $pfOpen, $person, $errors, $canEditAll, $isSelf,
$jobRows, $myNote, $myTags, $tagChoices, $myNick, $contacts);
}
unset($fbAddModalAttr);
?>