From fd90e33d946a0e814c9b5597e2fae1d809be4b58 Mon Sep 17 00:00:00 2001 From: laoyang Date: Thu, 22 Oct 2026 22:05:17 +0800 Subject: [PATCH] =?UTF-8?q?v81=EF=BC=9A=E9=A6=96=E9=A1=B5=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E3=80=8C=E6=96=B0=E5=A2=9E=E7=94=B5=E5=BD=B1=E3=80=8D?= =?UTF-8?q?=E3=80=8C=E6=96=B0=E5=BB=BA=E7=BA=AA=E5=BF=B5=E6=97=A5=E3=80=8D?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=EF=BC=88=E4=B8=8D=E7=A6=BB=E5=BC=80=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=B0=B1=E6=8A=8A=E4=BA=8B=E5=8A=9E=E4=BA=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 2026-10-22: 「首页上的其他卡片也应该有这些基本功能。比如电影观影,它有一个"新增电影"的功能; 如果是纪念日,就有一个"新增纪念日"。实际上,就是把原来模块里弹的那个框,现在拿到 这边来。目的就是为了在首页上就能快速完成一定工作,而不用进到模块里面。」 做法:复用模块页**同一份**表单,不另写。 - app/HomeCards.php:TYPES 每张卡多登记 add(按钮文案)/ add_modal(弹框容器 id)。 - templates/home.php:按登记表挂 data-fb-add-open="#"(没登记的仍用 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。 --- app/HomeCards.php | 13 +++++ assets/js/add_modal.js | 117 ++++++++++++++++++++++++++++++++++++++ index.php | 53 +++++++++++++++++ templates/days/form.php | 16 +++++- templates/home.php | 75 +++++++++++++++++++++--- templates/layout.php | 7 +++ templates/movies/form.php | 20 ++++++- 7 files changed, 288 insertions(+), 13 deletions(-) create mode 100644 assets/js/add_modal.js diff --git a/app/HomeCards.php b/app/HomeCards.php index 64e8af9..558e569 100644 --- a/app/HomeCards.php +++ b/app/HomeCards.php @@ -108,11 +108,24 @@ final class HomeCards 'name' => '纪念日', 'desc' => '接下来 60 天的纪念日与生日', 'w' => 4, 'h' => 4, 'route' => 'days', 'more' => '全部纪念日', 'n' => 0, 'mod' => 'days', + /* 🔴 v81(用户 2026-10-22):「如果是纪念日,就有一个"新增纪念日"。」 + ⇒ 首页卡片右上角直接开新建弹框(与纪念日页**同一张** `days/form.php`)。 + `add_modal` = 那张弹框在首页里的容器 id,`home.php` 拼成 + `data-fb-add-open="#anNewCard"`;掉进 `assets/js/add_modal.js` 的通用逻辑。 + 🔴 这个 id 必须与 `days/form.php` 里真实的容器 id **逐字一致**: + 第一版我按"an + AddCard"的规律写成 `anAddCard`,而实际是 `anNewCard` + ⇒ 按钮指向了一个不存在的元素 ⇒ **点下去毫无反应**(探针⑥当场抓到)。 + 这正是"点了没反应最难查"的那一类:属性在、DOM 也没报错。 */ + 'add' => '新建纪念日', 'add_modal' => 'anNewCard', ], 'movies' => [ 'name' => '观影', 'desc' => '最近看过的片子', 'w' => 4, 'h' => 4, 'route' => 'movies', 'more' => '观影记录', 'n' => 0, 'mod' => 'movies', + /* 🔴 v81(同一条):「比如电影观影,它有一个"新增电影"的功能。」 + ⚠️ 文案按用户说的「新增电影」,但弹框标题仍是模块里的「记一场电影」—— + 不为了统一而改模块文案(那是模块自己的措辞,用户没要求动)。 */ + 'add' => '新增电影', 'add_modal' => 'mvAddCard', ], 'books' => [ 'name' => '读书', 'desc' => '在读与最近加进书架的书', diff --git a/assets/js/add_modal.js b/assets/js/add_modal.js new file mode 100644 index 0000000..3e421ba --- /dev/null +++ b/assets/js/add_modal.js @@ -0,0 +1,117 @@ +/* ============================================================================ + 通用「新建弹框」开关(v81) + ---------------------------------------------------------------------------- + 用户原话(2026-10-22): + 「首页上的其他卡片也应该有这些基本功能。比如电影观影,它有一个"新增电影"的 + 功能;如果是纪念日,就有一个"新增纪念日"。实际上,就是把原来模块里弹的那个框, + 现在拿到这边来。目的就是为了在首页上就能快速完成一定工作,而不用进到模块里面。」 + + v78 给「近期任务」写过一份 `task_add.js`(只能管那一张弹框)。这一批要把 + 观影、纪念日也搬上来 ⇒ 三份几乎一样的脚本 = 三处迟早不同步。所以抽这一份**通用的**: + 每张弹框只需声明自己的「容器 id / 开按钮 / 关按钮」三个名字。 + + 用法(在弹框模板里给容器加两个属性即可,不需要改 JS): +