v43 第 43 批:六条反馈(界面 5 + 条目详情浮层)
用户 2026-10-11 反馈六条,逐条定位真根因后修复: ① 纪念日「日期」多出一个控件 —— 只保留最新的那个 两层根因:(a)原生 `input[type=date]` 当初没包在 `.dt-native` 里, v42 那条"AntD 挂上后收起原生框"的选择器根本不命中;(b)更要命的是 `.dt-native` 基类写着 `display: contents` —— 该元素**没有盒子**, 给它 position/width 完全无效 ⇒ 必须把 display 显式改回 block 才收得起来。 ② 编辑纪念日把底层列表页弄没 —— 「修改」原来是整页跳 `days/edit` (套 layout = 一张只有弹框的空白页)。改为 `?embed=1` 只吐弹框那一块, 列表页 JS 取回来替换 `#anNewCard` 并打开 —— 与「新建」同一观感。 内嵌形态标 `$anModalOnly` 以免打 standalone 标记(关闭时不再跳页)。 ③ 拖图裁剪的层被弹框盖住 —— `.crop-overlay` 是 z-index:100 而 `.cal-modal` 是 200 ⇒ 裁剪层被整块盖住。提到 260(与 v41 的 .cn-modal 同一处理)。 ④ 行程弹框里"参与的人"弹不出选人框 —— person_picker.js 只绑定一次, 而弹框表单是 AJAX 片段 ⇒ 里面的 `.pp` 从未被 init。三件事一起: 暴露 `window.fbInitPickers()`(幂等)+ layout 暴露 `window.fbLoadPicker()` (脚本是按需加载的)+ 塞完片段后补调初始化。 ⑤ 日程新建排版/控件/文案 —— 改走观影式 `.mv-grid`(标签对齐 + 冒号); 起止补上 `$dtPlugin='antd'`(试点正式推广到日程);标签「时间范围」→「开始 / 结束」; 删三句提示(结束留空 / 多选提醒 / 全天)。 ⑥ 条目详情浮层(首页日程 / 首页近期任务 / 日程页条目)—— 点条目不再直接跳页,弹浮层显示详情;「详细信息」跳该来源详情页; 「编辑」就地换成该来源的编辑表单(四处 `?embed=1` 片段)。 新增 `templates/_entry_popup.php` + `assets/js/entry_popup.js` + `fb_entry_json()`(三个入口共用一个编码函数)。 验证:php -l 157 文件全过;div 深度 33 组合全配平;片段体检 20 片段无越界; 本地 e2e 1510/0;v43 真机 33/0;v43 反向验证 8/0;v38 36/0;v42 33/0; b31/b32 反向验证 8/0 与 5/0;部署断言本地空跑 RC=0;完整流水线 PUSH_RC=0。
This commit is contained in:
@@ -4,20 +4,31 @@
|
||||
*
|
||||
* ⚠️ 从月视图点**观影 / 旅程 / 任务**那些条会直接跳到对应模块(它们的"编辑页"在那里),
|
||||
* 这里只处理 calendar_events 里真正属于某本日历的自定义日程。
|
||||
*
|
||||
* 🔴 v43(用户 2026-10-11 第 6 条):本模板多了一种用法 —— **`?embed=1` 只吐编辑表单**。
|
||||
* 条目详情浮层里点「编辑」时用它(浮层把正文整块换成这张表单)。
|
||||
* ⇒ `$evEmbed = true` 时:不输出页头、不输出只读 dl、不输出删除表单、
|
||||
* 只保留那张编辑表单(外加已有附件)。
|
||||
* ⚠️ 与 `days/edit` / `trips/node_edit` / `movies/edit` 的 `?embed=1` 同一套约定。
|
||||
*/
|
||||
$canWrite = \App\Auth::canWrite() && !empty($ev['_can_write']);
|
||||
$evEmbed = !empty($evEmbed);
|
||||
$ym = substr((string)$ev['starts_at'], 0, 7);
|
||||
?>
|
||||
<?php if (!$evEmbed): ?>
|
||||
<div class="page-head">
|
||||
<h1><?= e((string)$ev['title']) ?></h1>
|
||||
<span class="sub"><?= e((string)($ev['starts_at'] ?? '')) ?></span>
|
||||
<div class="actions">
|
||||
<a class="btn btn-ghost" href="<?= e(url('calendar', ['ym' => substr((string)$ev['starts_at'], 0, 7)])) ?>">返回日程</a>
|
||||
<a class="btn btn-ghost" href="<?= e(url('calendar', ['ym' => $ym])) ?>">返回日程</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="card card-pad">
|
||||
<?php $ym = substr((string)$ev['starts_at'], 0, 7); ?>
|
||||
<?php if (!$canWrite): ?>
|
||||
<div class="<?= $evEmbed ? '' : 'card card-pad' ?>">
|
||||
<?php if ($evEmbed && !$canWrite): ?>
|
||||
<p class="empty-hint">这本日历你只有只读权限,不能改。</p>
|
||||
<?php elseif (!$canWrite): ?>
|
||||
<dl class="kv">
|
||||
<div class="kv-row"><dt>开始</dt>
|
||||
<dd><?= e(empty($ev['all_day']) ? (string)$ev['starts_at'] : substr((string)$ev['starts_at'], 0, 10)) ?></dd>
|
||||
@@ -60,7 +71,8 @@ $canWrite = \App\Auth::canWrite() && !empty($ev['_can_write']);
|
||||
</dl>
|
||||
<p class="empty-hint">这本日历你只有只读权限,看得到但不能改。</p>
|
||||
<?php else: ?>
|
||||
<form method="post" action="<?= e(url('calendar/event_update')) ?>" enctype="multipart/form-data">
|
||||
<form method="post" action="<?= e(url('calendar/event_update')) ?>" enctype="multipart/form-data"
|
||||
id="calEditForm">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="id" value="<?= (int)$ev['id'] ?>">
|
||||
<input type="hidden" name="ym" value="<?= e($ym) ?>">
|
||||
@@ -95,12 +107,22 @@ $canWrite = \App\Auth::canWrite() && !empty($ev['_can_write']);
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="form-grid">
|
||||
<?php $evFields = $ev; $evAllDay = false; require __DIR__ . '/_event_fields.php'; ?>
|
||||
<?php /* 🔴 v43(用户第 5 条要求"观影式排版"):浮层里编辑时也用 `.mv-grid`,
|
||||
与"新建日程"那个弹框一致(同一个字段块传 $evMvStyle 即可)。
|
||||
⚠️ 整页形态(老链接直达)保持原来的 `.form-grid` 两列 ——
|
||||
那是"页面表单"的排版习惯,不该跟着浮层一起变。 */
|
||||
$evFields = $ev; $evAllDay = false;
|
||||
if ($evEmbed) { $evMvStyle = true; echo '<div class="mv-grid">'; }
|
||||
require __DIR__ . '/_event_fields.php';
|
||||
if ($evEmbed) { echo '</div>'; unset($evMvStyle); }
|
||||
?>
|
||||
</div>
|
||||
<?php if (!$evEmbed): ?>
|
||||
<div class="btn-row">
|
||||
<button class="btn" type="submit">保存</button>
|
||||
<a class="btn btn-ghost" href="<?= e(url('calendar', ['ym' => $ym])) ?>">取消</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
<?php $as = \App\Attachment::list(\App\Calendar::ATTACH, (int)$ev['id']); ?>
|
||||
<?php if ($as): ?>
|
||||
@@ -134,7 +156,9 @@ $canWrite = \App\Auth::canWrite() && !empty($ev['_can_write']);
|
||||
*/
|
||||
$evIsRepeat = trim((string)($ev['rrule'] ?? '')) !== '';
|
||||
?>
|
||||
<?php if ($evIsRepeat && !empty($occ)): ?>
|
||||
<?php if ($evEmbed): ?>
|
||||
<?php /* 浮层形态:删除留给详情页(那里有重复日程的三档删除),这里不出。 */ ?>
|
||||
<?php elseif ($evIsRepeat && !empty($occ)): ?>
|
||||
<form method="post" action="<?= e(url('calendar/event_del')) ?>" class="ev-del ev-del-scope"
|
||||
onsubmit="return confirm('按上面选的范围删除?')">
|
||||
<?= csrf_field() ?>
|
||||
@@ -171,3 +195,4 @@ $canWrite = \App\Auth::canWrite() && !empty($ev['_can_write']);
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php unset($evEmbed, $evIsRepeat, $evIsAllDay, $evAllDay, $evFields, $evMvStyle, $ym, $occ); ?>
|
||||
|
||||
Reference in New Issue
Block a user