Files
FamilyBook/templates/trips/_revise_form.php
T
laoyang 7544fb9f6a v41 第 41 批:流水线提速 + 12 项界面/交互开发 + DAV 彻底修复
DAV(用户「务必彻底解决」):
- 真根因是 home-set 层级错:CalDav::HOME_PATH 原为 /dav/calendars/、
  CardDav 原为 /carddav/addressbooks/,而日历本/通讯录的 href 在
  /dav/N.ics/ 与 /carddav/N.vcf/ —— home-set 下面一本都没有。
  Thunderbird 按 home-set 前缀认成员,于是「找不到日历本 / 找不到联系人」。
  改为 /dav/ 与 /carddav/(所有既有 URL 一字不变,老配置不作废)。
- 又发现并修掉 Depth:0 违反 RFC 4918:原实现无论 depth 都列出全部子集合,
  且第一条 response 是日历本(不含 current-user-principal)。改为按 depth 分流,
  Depth:0 只回资源自身、Depth:1 才列出子集合。

界面与交互:
- 观影:新建影院弹窗层级修正 + 详细地址;照片左右按钮悬停不再位移;
  弹框底栏改「确定 / 取消」。
- 旅程:新建旅程改弹窗并按观影式排版;详情页四个动作按钮按用户指定顺序与配色;
  编辑与新增行程弹窗化(单容器 + AJAX);行程时间控件改 AntD(精确到分);
  参与人默认带上自己;车次号/车牌号紧跟交通方式词。
- 资源:新建/编辑改弹窗 + 观影式排版 + 新建时即定共享人。
- 纪念日:新建改弹框 + 观影式排版。

验证:
- e2e 1510/0;v41 十二项真机 48/0;DAV 反向验证 8/0;
  部署断言空跑 337/0;模板 div 深度三形态穷举 33 组全配平。
- 线上 DAV 终验(--resolve 真实入口 + 真 DAV 口令)12/0;
  线上确认 Depth:0 恰好 1 个 response。
2026-10-11 10:12:11 +08:00

84 lines
4.5 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
/**
* 「修正」表单(v24 第 13 批):记录一段计划旅程的**实际**执行情况。
*
* 用户原话:「另外一个按钮,用来记录实际的情况,按钮名字就叫修正,但是记住,
* 这个实际的行程和计划行程,是一条记录,不是两条,点击这个按钮,
* 则让用户选择实际的执行时间,包括开始和结束时间,实际的参与人等信息,
* 就相当于是修改了一下这个行程,只不过,之前的计划行程数据要保留,
* 为了以后做对比。修正,是无限次数的。」
*
* ⚠️ 与「编辑」的区别:
* · 编辑 = 改**计划**本身(排错了计划就改它);
* · 修正 = 记**实际**发生了什么(计划不动,实际值进历史,供对比)。
* 两者都作用在同一条 trip_nodes 记录上(用户明确"是一条记录,不是两条")。
*
* 变量(require 前设好):
* $rvNode 被修正的这段旅程
* $rvTripId 活动 id
* $rvPeople 人名册(选实际参与人)
* $rvMembers 当前参与人 id
*/
$rvPrefix = 'rv' . (int)$rvNode['id'];
$rvN = (int)($rvNode['revision_n'] ?? 0);
?>
<form class="rev-form" method="post" action="<?= e(url('trips/node_revise')) ?>">
<?= csrf_field() ?>
<input type="hidden" name="trip_id" value="<?= (int)$rvTripId ?>">
<input type="hidden" name="id" value="<?= (int)$rvNode['id'] ?>">
<div class="nf-grid">
<?php /* 实际的起止时间:默认填计划值,方便"只改时间"这种最常见的情况 */ ?>
<div class="field dt-range full">
<label>实际的开始 / 结束</label>
<?php /* ⚠️ v41 边界说明(别以为这里漏了):用户第 7 条要求"用最新控件"的是
**添加计划行程 / 实际行程**(那是 `trips/node_new`,走 node_form.php,
已经换成 AntD)。**「修正」表单不换** ——
它内联在详情页的 `<details>` 里,一段计划行程一个实例、可能同时存在
十几个;antd 每个实例都要挂一批 React 组件与 popper 容器,
这种"N 份并存"的场景明显不划算。
它用的是自建下拉(`_datetime.php`),**本来就能精确到分**,功能不缺。 */ ?>
<?php $dtName = 'rev_starts_at'; $dtValue = $rvNode['starts_at'] ?? '';
$dtId = $rvPrefix . '-s'; $dtRange = 'start';
require __DIR__ . '/../_datetime.php'; ?>
<?php $dtName = 'rev_ends_at'; $dtValue = $rvNode['ends_at'] ?? '';
$dtId = $rvPrefix . '-e'; $dtRange = 'end';
require __DIR__ . '/../_datetime.php'; ?>
<span class="tip">默认是计划的时间,改成实际发生的即可。</span>
</div>
<?php /* 用户第 17 批 第 3 条:「参与人那里,和记录电影人一样,**弹框选择**,
不要全列出来,太多了。」——修正表单也是"选参与人",同样走统一组件。
⚠️ 本批同时**去掉了「实际地点」输入框**:用户第 1 条把"地点"这件事
收敛成了**出发地 / 到达地**(城市由它们聚合),单留一个 free-text
「实际地点」会让人分不清它和出发地是什么关系。
修正要记的就是用户第 13 批原话里那三样:实际时间 / 实际参与人 / 说明。 */ ?>
<div class="field full">
<label for="<?= e($rvPrefix) ?>-detail">这次修正的说明</label>
<input class="input" id="<?= e($rvPrefix) ?>-detail" name="detail"
placeholder="如:航班延误,改到下午才到">
</div>
<?php if (!empty($rvPeople)): ?>
<div class="field full">
<label>实际参与的人</label>
<?php
$ppName = 'members[]';
$ppPeople = $rvPeople;
$ppSelected = $rvMembers;
$ppMode = 'multi';
$ppOpenBtn = '+ 选择实际参与的人';
$ppTitle = '这次实际去的都有谁';
require __DIR__ . '/../_person_picker.php';
?>
</div>
<?php endif; ?>
</div>
<div class="btn-row">
<button class="btn btn-sm" type="submit">
<?= $rvN > 0 ? '再记一次修正' : '记录这次修正' ?>
</button>
<?php if ($rvN > 0): ?>
<span class="tip" style="align-self:center">之前已记过 <?= $rvN ?> 次;原计划数据都留着。</span>
<?php endif; ?>
</div>
</form>
<?php unset($rvPrefix, $rvN); ?>