v81:首页卡片「新增电影」「新建纪念日」弹框(不离开首页就把事办了)
用户 2026-10-22:
「首页上的其他卡片也应该有这些基本功能。比如电影观影,它有一个"新增电影"的功能;
如果是纪念日,就有一个"新增纪念日"。实际上,就是把原来模块里弹的那个框,现在拿到
这边来。目的就是为了在首页上就能快速完成一定工作,而不用进到模块里面。」
做法:复用模块页**同一份**表单,不另写。
- app/HomeCards.php:TYPES 每张卡多登记 add(按钮文案)/ add_modal(弹框容器 id)。
- templates/home.php:按登记表挂 data-fb-add-open="#<id>"(没登记的仍用 v78 的
data-tk-add-open,两种写法并存但各有唯一来源);页尾 require 模块的表单模板。
- assets/js/add_modal.js(新):通用开关,只认 [data-fb-add-modal] /
data-fb-add-open / data-fb-add-close;幂等闸门;Esc 先让 antd 收面板;
打开那一刻才 boot 日期控件(hidden 时尺寸为 0,antd 会定位到屏幕左上角)。
- templates/{movies,days}/form.php:只在首页内嵌时($fbAddModalAttr)挂通用属性
并输出 back=home,模块页行为一字不变。
- index.php:days/save 与 movies/create 加 back=home 白名单(取 POST 再比字面量,
不把 POST 当跳转地址)。
过程中修掉两个真问题:
- 登记表第一版写 anAddCard,而 days/form.php 实际是 anNewCard ⇒ 按钮属性写对了、
DOM 也不报错,点下去毫无反应。已加「按钮指向的容器真的存在」判据与部署静态
断言里的交叉校验(拿登记表 id 去 templates/ 里逐个找 id="...")。
- 探针判「提交后回首页」原本读 pg.url,而 wait_for_load_state(networkidle) 在
点击那一刻本就 idle 时立刻返回 ⇒ 读到提交前的地址,恒绿。改成拦那次 POST 的
响应看 (状态码, Location),拆成 ⑭a 提交真发生 / ⑭b 302 指向 home / ⑭c 浏览器停在 home。
验证:正向探针 23/0 · 反向验证 14/0(七注入各自变红)· e2e 1572/0 · 几何 428/0。
This commit is contained in:
+13
-3
@@ -56,6 +56,11 @@ $anModalOnly = !empty($anModalOnly);
|
||||
$anOpen = !empty($anOpen);
|
||||
$anEmbed = !empty($anEmbed);
|
||||
$anShell = !isset($anShell) ? !$anEmbed : (bool)$anShell;
|
||||
/* 🔴 v81:首页内嵌时挂通用开关属性(`assets/js/add_modal.js`)。
|
||||
⚠️ **只在首页设**(`$fbAddModalAttr` 由 `templates/home.php` 传):
|
||||
纪念日列表页有一套自己的内联开关脚本(还要管"编辑后替换卡片"那套 AJAX),
|
||||
再挂通用属性就是两套同时绑 —— 按需挂,模块页行为不变。 */
|
||||
$fbAdd = !empty($fbAddModalAttr);
|
||||
|
||||
$backUrl = url('days');
|
||||
?>
|
||||
@@ -79,12 +84,15 @@ $backUrl = url('days');
|
||||
if (!$anModalOnly) {
|
||||
echo ' data-an-standalone="1" data-an-back="' . e($backUrl) . '"';
|
||||
}
|
||||
if ($fbAdd) {
|
||||
echo ' data-fb-add-modal';
|
||||
}
|
||||
} ?>>
|
||||
<?php if ($anModal): ?>
|
||||
<div class="cal-modal-panel mv-panel">
|
||||
<div class="cal-modal-head">
|
||||
<b><?= $editing ? '编辑纪念日' : '新建纪念日' ?></b>
|
||||
<button type="button" class="cal-modal-x" id="anNewX" aria-label="关闭">✕</button>
|
||||
<button type="button" class="cal-modal-x" id="anNewX" aria-label="关闭"<?= $fbAdd ? ' data-fb-add-close' : '' ?>>✕</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
@@ -93,7 +101,9 @@ $backUrl = url('days');
|
||||
<?= csrf_field() ?>
|
||||
<?php if ($editing): ?><input type="hidden" name="id" value="<?= (int)$e0['id'] ?>"><?php endif; ?>
|
||||
<?php if ($anModal && !$editing): ?>
|
||||
<input type="hidden" name="back" value="days">
|
||||
<?php /* 🔴 v81:首页内嵌时提交完回**首页**(`back=home`,服务端白名单见
|
||||
index.php 的 days/save)。模块页内嵌仍回列表页 `days` —— 原样不动。 */ ?>
|
||||
<input type="hidden" name="back" value="<?= $fbAdd ? 'home' : 'days' ?>">
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mv-form-inner">
|
||||
@@ -204,7 +214,7 @@ $backUrl = url('days');
|
||||
<div class="cal-modal-foot">
|
||||
<span class="cal-modal-tip" id="anNewTip"></span>
|
||||
<button class="btn btn-sm" type="submit" form="anForm" id="anNewSubmit">确定</button>
|
||||
<button class="btn btn-ghost btn-sm" type="button" id="anNewCancel">取消</button>
|
||||
<button class="btn btn-ghost btn-sm" type="button" id="anNewCancel"<?= $fbAdd ? ' data-fb-add-close' : '' ?>>取消</button>
|
||||
</div>
|
||||
</div><?php /* /.cal-modal-panel */ ?>
|
||||
<?php elseif ($anEmbed): ?>
|
||||
|
||||
Reference in New Issue
Block a user