Files
laoyang 864e281265 v24 第 8 条:凡「选人」都走同一套弹窗 + 拼音首字母(补上唯一漏做的一条)
用户原话:「名册详情页面,添加关系那里,选择一个人,应该也是和观影人一样,
点击弹窗,用拼音首字母选择,否则人多的时候,这个选择起来太麻烦了。」

- 成员详情页:①「添加关系 → 对方」 ②「分享他的名片给…」→ 全局选人组件(单选)
- 任务:③ 列表页「共享给(多选)」 ④ 列表页「负责人」 ⑤ 详情页「负责人」
  (共享候选人先把自己过滤掉 —— 共享给自己是空操作)
- 纪念日:「与谁相关」→ 单选,且保留原下拉第一项「不指定」(ppAllowEmpty)
- 「对方」是必填,但组件里是原生 radio(HTML 没有"必选一个 radio"的可靠约束)
  → 页面补一道 submit 拦截,否则用户点了按钮会静默无反应

顺带修一个用户没提、我自己抓到的真 bug:
_person_picker.php 原用**文件顶层**的 `static $ppSeq` 做 id 计数 —— PHP 里被
include 的文件,顶层 static 初值**每次 include 都重新绑定**(与函数体内的
static 不同)→ 同一页 include 两次都拿 pp1 → DOM id 撞车(getElementById /
<label for> 全抓到第一个)。实测 include 三次得到 pp1,pp1,pp1。改用
$GLOBALS['ppSeq']。这个坑只有同一页出现两个组件时才暴露,且资源页第二个组件
只有真有资源时才渲染 —— 所以写成**单元级**探针(同一请求 include 两次)。

另修一个构建层隐患(本轮部署时踩到,白查了一轮):
本机 core.autocrlf=true,一次 git stash 往返就把 6 个文件全改成 CRLF;而部署
打包取的是工作树 → 包里带 CRLF 上去 → 部署脚本里 grep -qxF '<整行 CSS 选择器>'
的校验在 Linux 上一条都匹配不到(报错却指向"CSS 少了某条规则",极易误诊)。
→ .gitattributes 加 `* text=auto eol=lf`(必须排在 -text 那几条之前),
  并在打包前加一道行尾体检 _fb_eol_check.py(失败时点名文件)。

验证:反向验证对着 git stash 出来的真·改动前状态跑 → 11 通过 / 17 失败;
新增 _fb_picker_unify.py 28/0;e2e 785/0;几何 428/0;移动端 688/0;交互 97/0;
升级 126/0;家谱 34/0;专项 91/0;导入 21/0;豆瓣 22/0;行尾体检 + 两道新静态
门禁均实测可失败。线上 6 文件 md5 一致、CR=0。
2026-10-03 21:19:34 +08:00

21 lines
1.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 行尾规则(2026-10-03)
#
# 🔴 默认:所有文本文件一律 **LF**,且**检出/还原时也不许转成 CRLF**。
#
# 为什么必须写死:本机 `core.autocrlf=true`。不写这条的话,任何一次 git 检出/还原
# (`git stash pop`、`git checkout`、`git restore`…)都会把源码变成 CRLF。
# 而部署打包取的是**工作树**,于是包里带着 CRLF 上去,部署脚本里那些
# `grep -qxF '<整行 CSS 选择器>'` 的校验在 Linux 上一条都匹配不到 ——
# 症状是「本地全绿、部署却卡在一条莫名其妙的 CSS 断言上」,代码本身完全没问题。
# (本轮实测踩到:一次 git stash 往返就把 6 个文件全变成了 CRLF。)
* text=auto eol=lf
# 第三方库原样保存:不做任何行尾转换(字节与上游一致,便于日后核对是否原版)。
# ⚠️ 这几条**必须排在 `*` 之后** —— gitattributes 是"后面的规则覆盖前面的",
# 写在前面会被上面那条 `* text=auto eol=lf` 顶掉(本轮当场抓到一次)。
# ⚠️ 除了 -text 还要**显式 unset eol**:-text 只关掉"文本规范化",
# 上面那条 `*` 里设的 `eol=lf` 仍会挂着(`git check-attr` 可见),
# 换行策略由哪个属性说了算会变得含糊。
assets/vendor/** -text -eol
*.min.js -text -eol
*.min.css -text -eol