From f0437e6c938bc91467c853ef42f93f50f52a6ef6 Mon Sep 17 00:00:00 2001 From: laoyang Date: Tue, 6 Oct 2026 12:08:40 +0800 Subject: [PATCH] =?UTF-8?q?v24=20=E7=AC=AC=2021=20=E6=89=B9=EF=BC=9A?= =?UTF-8?q?=E6=97=A0=E5=88=B7=E6=96=B0=E5=88=A0=E9=99=A4=E4=B8=8E=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E6=97=A5=E7=A8=8B=20/=20=E5=AE=9E=E9=99=85=E8=A1=8C?= =?UTF-8?q?=E7=A8=8B=E4=B8=8D=E5=9B=9E=E9=80=80=20/=20=E8=A1=8C=E7=A8=8B?= =?UTF-8?q?=E6=8C=89=E6=97=B6=E9=97=B4=E6=8E=92=20/=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=A1=86=20/=20=E6=97=B6=E9=97=B4=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E6=8E=A7=E4=BB=B6=E4=BF=AE=E5=A4=8D=EF=BC=88=E7=94=A8?= =?UTF-8?q?=E6=88=B7=208=20=E6=9D=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 8 条原话要点: ①「名册页面,删除一个联系人后,能否不刷新页面,删除成功后,直接把这个人, 从当前页面的 dom 中删除,页面保持不动。」 ②「观影模块,海报和票根以及照片都带进来了,但是没有缩放,把页面撑破了, 应该缩放成缩略图。」 ③「个人设置页面,天气设置那里,把:只影响你自己首页上的那一格 / 填个城市名就行 (如「青岛」)… 这些提示,都删除。把城市单独放一行,精度维度放在一行。」 ④「旅程模块,实际行程编辑后,点击保存,竟然又变成计划行程了,这个不合理, 实际行程永远是实际行程,不会再变回计划行程了。」 ⑤「旅程模块,旅程列表,行程列表,都是按照行程的开始时间排序的,最新的在最上面, 而不是按照编辑修改时间。」 ⑥「旅程的详情页面,右上角的按钮,设置在最右侧,和其他模块保持统一。」 ⑦「所有上传图片等附件的地方,都不再放按钮,而是放一个框,点击这个框实现点击上传 按钮的功能,拖动图片进这个框里,实现拖动多个上传功能。框里面写一句话: 点击或拖动进行上传,其他的功能和现在保持一致。」 ⑧「日历中新建日程,无论是点击按钮还是点击日历中间,都是采用弹框的形式进行添加, 这样不影响当前日历的显示,添加完成后,动态修改当前视图,不要刷新。添加日历日程, 开始时间和结束时间那里,用我们统一的时间范围选择器重做,现在功能无法使用。 选择日历本,带上颜色。」 🔴 五个真根因(全都不像 bug): ① 🔴 **④「实际行程变回计划」= 表单字段同名合并**(本批最要紧的一条) 暂存上传的令牌字段原叫 `stage[]`,与行程表单里那个隐藏的 `stage`(plan/actual) **同名**。PHP 解析表单时同名会**合并进同一个键**: `stage=actual` + `stage[]=tok` → `$_POST['stage'] = ['actual','tok']` (`[]` 只是"往同一个键追加"的记号,**不构成另一个键名**。) 于是路由里 `(string)($_POST['stage'] ?? 'plan')` 得到 `"Array"` → `in_array('Array', ['plan','actual'])` 为假 → **静默回落成 'plan'**。 ⚠️ 只有"拖过图片的行程"会犯(没拖就没有 `stage[]`)→ 症状是"时好时坏"。 修法:令牌字段改名成 `stage_token[]`(改的是**字段名本身**,不是"是数组就取第一个" 绕过去 —— 同名合并是 PHP 的表单语义,绕过去只会把坑留给下一次加字段)。 **另加一道语义保险**:编辑路径**一律沿用库里那条自己的 stage**,不读表单 —— 编辑表单里根本没有改阶段的控件(改阶段走详情页那几个显式动作)。 这样即便将来又冒出某个字段名冲突,也不可能把「实际」悄悄变回「计划」。 ② 🔴 **⑧「时间范围选择器无法使用」= 三道门叠在一起** ① `_event_fields.php` 的**结束端默认带 `hidden`**(要点「+ 添加结束时间」才出现); ② `app.js` 的 `upgradeRange()` 有「**两端都得可见**才升级」的判断 → 永远不成立 (实测 `data-semi-range-done` 恒为 `null`); ③ CSS `html.js .dt-range:not(.is-semi-range) .dt-input { visibility: hidden }` → 未升级时原生控件**也是不可见的** ⇒ 屏幕上一片空白、点哪儿都没反应。 修法:两端**始终可见**("没有结束"由清空后半段表达,不再靠开关); 并把旧的「+ 添加结束时间 / 去掉结束时间」开关整套删掉。 ⚠️ 顺带挖出:`upgradeRange()` 里 `group.insertBefore(host, a)` 在"两端各自被 `.field` 包着"时 `a` 不是 `group` 的子节点 → 直接抛 `Failed to execute 'insertBefore' on 'Node'`。这个异常**以前从没触发过** (被 ② 的提前 return 挡住了)—— 一旦放出来就炸。修成插在"端点最外层包装"之前。 ⚠️ 观察器加了 `attributes: true, attributeFilter: ['hidden']`(并把 childList 分支的 `return` 去掉):弹框/折叠面板/tab 里"稍后才露出来"的日期控件从此都能自动升级。 ③ 🔴 **⑧「新建日程默认建出观影记录」= 产品缺口,不只是显示问题** `Calendar::DEFAULT_KINDS` 原来只有 6 本**派生**本(观影/旅行/农历/节假日/传统节日/ 节气),**一本可写的普通本都没有**。于是"放在哪本"里全是派生本、默认选中排最前的 **观影** → 用户直接打字点「加上」,建出来的是一条**观影记录** (日历里看着是多了条日程,观影列表里莫名多一条)。这是"建错东西",事后极难发现。 → ① 默认本补成「我的日程」(kind='custom'),模板里默认选中也改成**优先 custom 本**; ② 选择器里把**纯派生只读本**禁用并标「(自动生成)」 (直接不列会让人以为本子丢了;列为可选又会白选一次再吃错误)。 ⚠️ 顺带发现 `Calendar::READONLY_KINDS` 把 `movie`/`trip` 也算进去了,而 `event_add` 里**紧跟着**就有两段专门处理它们的分支(「已加进观影」/「已加进旅程」) —— 那两段**永远走不到**(校验先一步把请求打回去了)。判据要按**能不能写**分, 不是按"是不是派生"。 ④ 🔴 **②「观影编辑页图片撑破」= `.mv-slot` 这个类在样式表里根本不存在** 第 21 批加模板时只写了结构没写样式 → `` 按**原始像素**渲染:600×900 的海报 在 236px 宽的格子里撑出 942px 高,还把整页横向顶破(实测 docW 1297 > vw 1280)。 → 补 `.mv-slot` 规格:固定 108×162 缩略图 + `object-fit: cover`。 ⚠️ **高度必须写死** —— 不写死就又会由原图比例决定,等于没修。 ⑤ **⑤行程列表排序 = `category, position` 主导** `position` 默认同一个数(旧迁移给的多是 0/100),于是顺序被 position 挤乱。 实测线上 #222 渲染成「返回青岛(10-5) → 出发去菏泽(9-30) → 去姥姥家(10-2)」。 → 改成 `ORDER BY (starts_at IS NULL), starts_at, id`。 ⚠️ 方向是**正序**(早的在前,已跟用户确认);旅程列表仍是 DESC(最新在最上)。 两者方向不同是**刻意的**:一个是"挑哪趟旅行",一个是"读这趟旅行的行程"。 ⚠️ 详情页**按阶段分三组**渲染(计划/实际/未成行),排序只需在**组内**有序。 本批新增能力: - **统一上传框**(⑦):`templates/_stage_drop.php` 现在**同时**负责 「sr-only 的真文件框 + 看得见的上传框 + 暂存清单」,调用方只 require 一行。 框是 `role="button" tabindex="0"`,JS 转发 `input.click()`(键盘 Enter/Space 也通), 拖文件进框走既有的暂存上传(拖一个立刻传、可续拖、失败标红、未传完拦住保存)。 ⚠️ 框用 `
` 不是 ` - 不填就表示没有明确的结束(只占开始那一刻/那一天) -
+ + 结束留空就表示没有明确的结束(只占开始那一刻/那一天)。 +
- - + +