From f9e30bd7d8f9480393666957a9d12a4e0dbfd90d Mon Sep 17 00:00:00 2001 From: laoyang Date: Sat, 10 Oct 2026 22:13:20 +0800 Subject: [PATCH] =?UTF-8?q?v40=20=E7=AC=AC=2040=20=E6=89=B9=EF=BC=9A?= =?UTF-8?q?=E8=A7=82=E5=BD=B1=E4=B9=9D=E6=9D=A1=20+=20=E4=BF=AE=E6=8E=89?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E3=80=8C=E7=BC=96=E8=BE=91=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E5=B0=B1=E6=8A=8A=E8=A7=82=E5=BD=B1=E6=97=B6=E9=97=B4=E5=BC=84?= =?UTF-8?q?=E6=88=90=20NULL=E3=80=8D=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户原话(九条): ①「观影详情页面左上角的观影记录,应该和观影的列表页面里面保持一致」 ②「观影详情页面的编辑,还有返回观影的按钮,应该和观影列表页面里面的记一场电影保持一致」 ③「删除按钮就用红色背景颜色」 ④「观影详情里面的编辑按钮应该也是弹出的,和新增是一样的,编辑完以后,页面动态更新」 ⑤「影院管理部分,注意控制列的宽度…最右侧的操作、编辑和删除两个按钮,已经被挤成两行了, 尝试让编辑和删除排在一行,宽度给它留够」 ⑥「编辑使用蓝色的背景,删除使用红色的背景」 ⑦「高级搜索里面的日期范围,也使用我们最新的控件」 ⑧「观影统计里面,如果这个人在名册里面,但是他一部电影的记录也没有,就不要在下面的这个 按观影人统计里面出现了,太长了」 ⑨「观影统计里面,月份分布和星期分布,12 个月用 12 种不同的颜色,星期 7 天用 7 种不同的颜色」 🔴🔴 **本轮最重:修掉一个数据丢失级的真 bug**(v37 引入、**影响所有 `.dt-range` 页面**) · 现象:任何带已存时间的编辑表单,只要 JS 跑起来,日期在用户**什么都没动**时 就被抹掉 ⇒ 提交后库里 `starts_at` 变 **NULL**。 · 根因:`assets/js/app.js` 的 `bindParts()` 首屏写成 `rebuildDays(false)` —— 那个参数是"保留已选日吗",传 false 会**清空"日"下拉**;紧接着的 `sync()` 看到 y/mo 有值而 d 空 ⇒ 算出 '' ⇒ **把隐藏的 `*_date` 写成空串**。 · 修:改成 `rebuildDays(true)`。 · ⚠️ 为什么一直没被发现:e2e 是**服务端**驱动的(直接 POST 字段、不经过 JS); 真机探针只验"控件可见可点"与"改值能写回",**没验"什么都不动时值还在不在"**。 ⇒ 补了回归断言 + 反向验证(把 true 改回 false 必须红)。 · ⚠️ 影响面大于观影:**日程 / 任务 / 旅程**的起止同样走 `.dt-range`, 修在共用件等于顺手修了四个模块。 ① 详情页头部与列表页统一:`观影记录` → **`

观影记录

` + sub=片名**。 ②③ 详情页「编辑」「返回观影」用**裸 `.btn`**(= 列表页「记一场电影」的模块品牌实心); 「删除」用 `.btn-del`(**红色实心**,原来是淡红描边的 `.btn-danger`)。 ⚠️ 用户那句"编辑用蓝色"是**影院管理**的(见 ⑥),详情页要的是"与列表页一致" —— 第一版理解错、把详情页编辑也刷成蓝色,**反向验证当场抓住**。 ④ 详情页「编辑」改**弹框** + AJAX + 保存后**动态更新**: · 内嵌**同一份** `form.php`;新增 `$mvModalForce`(`$isEdit` 也强制弹框壳) 与可显式传的 `$mvOpen`;新增 `View::renderPartial()` 供校验失败时把弹框整块重画回 JSON。 · 保存成功:`fetch` 跟 302 → **只换正文容器**(保留滚动位置),并重跑页内内联 JS。 · 🔴 实测踩到并解决的四件事: 1. 模板里裸类名 `Person::roster()` 会**致命**(全局命名空间)⇒ 页面从此中断输出、 且不报给用户 ⇒ 弹框整块消失。必须 `\App\Person::`。 2. `