石头不问 · 源文件说明 ════════════════════════════════════════════════════════════ 这个文件夹是「图纸」,不是成品。成品在 01–08 各栏里。 改字只改这里的 .html,改完跑一次 重出图.py,成品和资源中心会一起更新。 【一条命令管到底】 python 重出图.py 全部重出(约 3 分钟) python 重出图.py A 只重出海报 A python 重出图.py M01 T05 重出指定的几件 python 重出图.py --center 只重建资源中心,不出图 python _mk7.py 只重建手册站(site/ 那 13 页) 为什么必须走脚本:PDF 里直接改字,下次重出会被覆盖; 而且海报 A 的印刷版是从 3508×4961 的 PNG 包进 PDF 的, 手动改 PDF 会把 300dpi 弄丢。 【文件都在管什么】 重出图.py 唯一的入口。海报走这里,物料/屏幕/表单也走这里。 _render.py 物料 M/大件 V/屏幕 S/表单 T 的出图引擎(被 重出图.py 调用) _mk1.py 现场物料 M01–M13 的 HTML 生成脚本 _mk2.py 大件 V01–V04 与屏幕 S01–S07 的生成脚本 _mk3.py 台账 xlsx、播放列表 m3u、M14–M16 的生成脚本 _mk4.py 表单 T01–T12 的生成脚本 _mk5.py 资源中心 00_资源中心.html 与 00_资源清单.csv 的生成脚本 _mk6.py 手册 12 章的渲染函数(c1–c12,只管排版,数据读 _hand.py) _mk7.py 把 12 章切成一个站:外壳、侧栏、面包屑、翻页、页脚 → site/ _hand.py 手册的内容数据:岗位、cue、台账、审计 21 条、待定 12 项 _lib.py 公共底座:色板、字体、24 行歌词、12 月份生辰石表、三手势 SVG _pages.py 把每个 PDF 的每一页导成 JPG,放进 ../_预览/(两个页面的预览都用它) _verify.py 校验资源中心每一条下载链接、缩略图、逐页预览是否指向真实文件 _shot.py 截资源中心桌面/移动两版,看版式有没有塌 _pvtest.py 回归测试:起一个「只放行 html/图/音频」的本地服务模拟预览面板, 逐类点开弹层,断言每张图都加载、每段文本都真的在页面里 _t6.py 旧单页手册的回归测试(保留,改了 _mk6.py 后仍可跑一遍) _t7.py 多页站静态检查:387 条链接、结构完整性、翻页链、章节顺序 _t8.py 多页站动态检查:13 页 × 三种环境(本地/预览面板/手机)+ 4 个交互件 _dump2.py 把执行案 V12 按二级章节导成纯文本(取事实用,别靠记忆写) 【三个入口怎么分工】 site/index.html 给人看:什么时候做什么、站在哪、绝不做什么、哪几处在等人拍板。 13 页的站,12 章各占一页,可以只把某一章发给某个人。 第 11 章是反向审计(21 条,用「一个没见过方案的人能不能照做」查出来的), 不属于原方案,是本轮新增。 00_资源中心.html 给文件:123 个成品,按 T-21 → T+30 取件表索引,可预览可下载。 01_主方案/…V12 给评审:为什么这么设计、哪些做法被否掉了。 改手册内容只改 _hand.py,然后跑 _mk7.py;改章节排版改 _mk6.py 的 c1()–c12(); 改侧栏/面包屑/翻页改 _mk7.py;改颜色间距改 site/assets/css/*.css。 00_执行手册.html 现在是跳转页(旧单文件版已退役),别在它上面改东西。 【站的结构(site/)】 index.html 封面、三类读者入口、总目录、活动日换算 pages/01…12.html 12 章,一页一章 assets/css/tokens.css 重置、字体栈、色板 assets/css/layout.css 侧栏、面包屑、翻页、打印 assets/css/components.css KPI、闸门、时间轴、岗位卡、审计卡… assets/js/shell.js 全站:进度条、回顶、抽屉目录、打印展开 assets/js/dates.js index + 03:活动日换算(localStorage 跨页记忆) assets/js/roles.js 05:岗位卡批量展开 assets/js/audit.js 11:P0/P1/P2 筛选 没有构建步骤,改完直接刷新。这是刻意的——十年后还要能打开。 【预览是怎么做的】 页面内嵌一个 dialog 弹层,点击时按文件类型分别处理: · PDF → **逐页图**上下排(滚动看图,页数标在每页下面) · PNG / JPG → 原图放大,按比例装进屏幕 · MP3 → 不弹层,行内直接给播放器(preload=none,不点不加载) · LRC / SRT / TXT / CSV / M3U → 构建期把正文读进页面,弹层里直接排 · XLSX → 不给预览按钮,只给下载(13 个 sheet 塞进弹层看不清) 为什么 PDF 不用 iframe 直接内嵌——这是踩过的坑,别再改回去: 这一页会被三种环境打开:本地双击(file://)、WorkBuddy 预览面板(http 静态服务)、 微信内置浏览器。其中**预览面板只提供 html/css/js/png/jpg/mp3**, PDF、txt、csv、xlsx 一律返回 404。iframe 塞 PDF 得到的就是一张 Not Found; 手机(iOS、微信)也不内嵌 PDF 阅读器,同样是一块空白。 图片在哪儿都能开,所以预览统一落到 JPG 上:_pages.py 导 1000px 宽、q80, 88 页共约 5.6 MB。这份图是自动生成的,删了重跑 _pages.py 即可。 dialog 的 margin 也要注意:样式里 `*{margin:0}` 会把 dialog 默认的 margin:auto 干掉,弹层会贴在左上角、遮罩点击失效。必须显式写回 margin:auto。 【三条不能碰的规矩】 1. 字体名在 HTML 的 style 属性里必须用单引号包裹: font-family:'Source Han Serif SC Heavy',serif 用双引号会把 style 属性的值提前截断,后面所有字号全部失效, 而且不报错——只是排版静默塌掉。 2. 歌词在 _lib.py 的 LYRICS 里,24 行,与执行案 9.7.2 逐字一致。 改词要同时改:_lib.py、执行案 9.7.2、03_主题曲/你几月的_歌词.txt。 3. 单位不要混。印刷件用 mm(出矢量),屏幕件用 px(出位图)。 M11 月份牌是 148×105mm 的母版,印 45 张是印数,不是页数。 【已知缺口】 03_主题曲/04_你几月的_A器乐版_76bpm.mp3 不存在。 P01(入场)与 P12(收尾)要求同一个文件逐字节相同, 在它补上之前,这个闭环不成立。只能从生成平台导出,0 元,当天可得。 不要把「完整版」改名冒充器乐版——人声还在,第 14 分钟进场的人会听出来。 上海恩三青年发展促进中心 ·「石头不问」项目组 2026.10.24