v30 第 30 批(3 条):ICS 导入读完即弃 / 导航联想词根因修复 / 导航设置改纯图标
三条都是「静态检查与 e2e 恒绿、只有真机才现形」的,每条先写真机诊断探针 拿到真根因再改,并逐条反向验证(改回旧行为必须被抓住)。 1. 日程 ICS 导入:文件已上传仍提示「请选择一个文本」 真根因:_stage_drop.php 是"拖进来即刻上传到暂存区"的唯一形态—— 拖放时文件走 upload_stage.php 落到 uploads/_staging/,而 <input>.files 始终是空的;两个导入框(ics/通讯录)都带 required → 浏览器原生校验把提交 拦下,弹它自己的文案。就算绕过校验,路由只读 $_FILES['ics']、从不看 stage_token[],暂存文件永远没人认领。 改:片段新增 $sdStage(默认 true)。导入型传 false → 框上不带 data-drop-stage → app.js 走"写回 input.files、随表单提交"的老路,文件走 PHP 临时文件,路由读完即弃;不落存储、不建附件行、不进 OSS。 同时把 app.js 找框的选择器从 [data-drop-stage][data-sd-for=…] 放宽成 [data-sd-for=…]——否则这些框点不开也接不住拖动。 2. 导航联想词"还是不好用" 真根因:nav_show.php 给出的 suggest 地址已带 ?p=<短语>,而 nav-show.js 又 硬拼 '?slug=…' → 实际是 …?p=abc?slug=bing&q=…;PHP 认为第一个 ? 之后整串 都是查询值 → p 匹配不上短语 → 403 → 下拉永远空。服务端一直是对的(直连 200 + 10 条词),e2e 探针自己拼对了参数,所以 HTTP 层恒绿、只有真页面能抓。 改:nav-show.js 新增 withQuery(),按 base 里有没有 ? 决定分隔符; nav_suggest.php 加短语容错(切掉第一个 ?/& 之后的内容,救缓存里的旧 JS)。 3. 导航设置按钮改纯图标 ☰ v29 只改成了下拉菜单,summary 仍是 btn-ghost btn-sm + 文字「设置」+ 一个 向下箭头。改:换成与其他七个模块逐字节相同的 btn-icon + 三条横线。 验证:e2e 1464/0(新增 2 条)、升级 153/0、vCard 40 项、城市 32/0、 桌面几何全过、移动 680/0、交互 92/0、窄屏 30/0、b24_nav 41/0、b24_ui 26/0、 b28 39/0、b29 38/0、b27 34/0;新真机探针 _b30 22/0、反向验证 11/0; 部署静态断言新增 8 条守卫并逐条证伪通过(本轮抓到 2 条恒真守卫 + 1 处 _code_only 的 locale 差异)。线上 7 个文件 SHA256 与本地一致。
This commit is contained in:
+13
-9
@@ -100,16 +100,20 @@ $setItems = [
|
||||
<?php /* 🔴 v29 用户第 5 条:右上角「设置」点开是**下拉菜单**,四项分设。
|
||||
⚠️ 用项目已有的 `.movie-set.menu`(任务/观影模块同款):
|
||||
外观、点击外部收起、键盘可达全都是现成的,
|
||||
这里再手写一套 `<details>` 样式,迟早跟那边不一致。 */ ?>
|
||||
这里再手写一套 `<details>` 样式,迟早跟那边不一致。
|
||||
|
||||
🔴🔴 v30 用户第 3 条:「导航模块的设置按钮,右上角,不要用文字,
|
||||
和其他的模块一样,三个横线那个图标。」
|
||||
⇒ summary 换成与其他七个模块**逐字节相同**的形态:
|
||||
`class="btn btn-icon"` + 一个 path 里的三条横线(☰)。
|
||||
⚠️ 三处必须一起改,少一处就是"看着像改了、其实没改":
|
||||
`btn-ghost btn-sm` → **`btn-icon`**(纯图标方形,高度取 --act-h);
|
||||
删掉「设置」二字(文字会把方块撑成一行,`.btn-icon` 的 width 形同虚设);
|
||||
图标换成 ☰(原来是单个向下的箭头,那是"展开"的意思,不是"设置")。
|
||||
⚠️ 宽度固定为 --act-h 之后,`.btn-icon` 的 `padding:0 !important` 才会生效 ——
|
||||
仍带 `.btn-sm` 会让它在页头动作区里矮一截(部署脚本有一条专门守这个)。 */ ?>
|
||||
<details class="movie-set menu">
|
||||
<summary class="btn btn-ghost btn-sm" title="导航设置" aria-label="导航设置">
|
||||
设置
|
||||
<svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true" fill="none"
|
||||
stroke="currentColor" stroke-width="1.8" stroke-linecap="round"
|
||||
stroke-linejoin="round" style="margin-left:2px;vertical-align:-1px">
|
||||
<path d="M4 6.5l4 4 4-4"/>
|
||||
</svg>
|
||||
</summary>
|
||||
<summary class="btn btn-icon" title="导航设置" aria-label="导航设置"><svg viewBox="0 0 16 16" width="18" height="18" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M2.5 4.5h11M2.5 8h11M2.5 11.5h11"/></svg></summary>
|
||||
<div class="menu-list">
|
||||
<?php foreach ($setItems as $k => $it): ?>
|
||||
<a href="<?= e(url('nav', ['set' => $k])) ?>"<?= $setKey === $k ? ' class="on"' : '' ?>>
|
||||
|
||||
Reference in New Issue
Block a user