文件
zhou yang和Claude Opus 5 2bfe308b30 初始导入:PhoneRail 五路手机直供电源板
原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。
这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。

纳入:
- 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本
- .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、
  pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源)
- 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾)
- firmware/ 的 A1 骨架与 site/ 文档站源码

.gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、
site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。

.gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存,
不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
2026-09-06 18:18:14 +08:00

23 行
1.0 KiB
JavaScript

const seek = (el) => { const out={}; for(const k of Object.keys(el)) out[k.split('$')[0]]=k; return out; };
let sel=null;
for (const el of document.querySelectorAll('[data-id^="selectOptionKey_"]'))
if (el.offsetParent!==null && el.closest('fieldset') && (el.closest('fieldset').querySelector('legend')||{}).textContent==='忽略网络') sel=el;
if(!sel) return {err:'no select'};
const keys = Object.keys(sel);
const pk = keys.find(k=>k.startsWith('__reactProps$'));
const fk = keys.find(k=>k.startsWith('__reactFiber$'));
const p = sel[pk];
let fiber = sel[fk];
// climb fiber to find one with memoizedProps having options/onChange
const found=[];
let f=fiber;
for(let i=0;i<12&&f;i++){
const mp=f.memoizedProps;
if(mp && typeof mp==='object'){
const ks=Object.keys(mp);
if(ks.some(k=>/option|onChange|value|data|list/i.test(k))) found.push({i, type: String(f.type&&(f.type.displayName||f.type.name||f.type)).slice(0,40), keys: ks.slice(0,25)});
}
f=f.return;
}
return {propKeys: p?Object.keys(p):null, found};