医心交互 · 医学心理健康交互课件
把一门医学院心理健康课,做成单文件 HTML 交互课件,并部署成课堂可扫码互动的在线版本。
- 设计骨架:4 模块 × (引入 → 方法 → 仿真 → 中测) + 前测 + 后测 + 总结 = 18 页
- 交互设施:翻页系统、测验引擎(含自评量表模式)、3 类仿真、点击卡片弹窗、图片灯箱
- 课堂能力:每页二维码徽章、统一提交、每题统计、教师端翻页同步(MQTT)
- 交付:
https://workbuddy.link/p/<node_id>+ 教师必看说明页
先读对应文件再动手,不要凭记忆写:
| 阶段 | 必读 |
|---|---|
| Step 1/2 设计 | references/course-design.md(18 页骨架 + 4 模块知识 + 教师会退回的 10 条) |
| 出题 / 量表 | references/quiz-survey.md(survey vs graded、tips 写法、数据契约) |
| 做仿真 | references/sim-patterns.md(滑块 / 情境决策 / 情绪—回应) |
| Step 4 部署 | references/deployment.md(4A 注入 + 4B 发布 + 线上核验) |
| 内容把关 | references/content-medical.md(知识口径 + SPIKES 例句 + 安全红线) |
| 出问题 | references/pitfalls.md(症状 → 原因 → 修法 → 验证) |
何时用 / 何时不用
用:医学院(含护理、中医、影像、公卫)心理健康教育课;医患沟通与坏消息告知;临床适应与生命教育;需要课堂扫码答题与教师端同步翻页的课件。
不用:K12 学科课件(用通用 courseware 技能);纯文档/PPT 交付;不需要扫码的静态讲义。
硬规约(12 条,违反任一条都会被退回或线上出事)
| # | 规则 | 后果 |
|---|---|---|
| 1 | 前测必须是自评量表(survey:true + 每题 tips[],无 answer),提交只记录不判分 |
一进课就被判错,学生受挫、教师退回 |
| 2 | 图文同屏:引文与配图在同一 section,图下不加说明文字 | 图文脱节 |
| 3 | 一次点击出全部:需要"文字+图"的板块,点一次同时出现 | 两次点击被视为设计缺陷 |
| 4 | 交互区内不写操作说明("选错不直接给答案""只保留最后一次") | 居高临下,教师点名删除 |
| 5 | 情境导航由 renderSimNav(idx,total) 生成,禁止手写按钮 |
最后一个情境还显示"下一个" |
| 6 | 注入时常量先于 mqtt-framework 发射,CLASS_ID 保持派生式 |
CLASS_ID 恒为 'wb-',全班数据串台 |
| 7 | 提交先写 xmnAgg 再 xmnPublish |
broker 抖动时教师端看不到刚交的卷 |
| 8 | 每页一个二维码徽章;自评量表 hasAvg:false |
量表均分变 NaN / 0.0 |
| 9 | 页面内零"连点页码进教师模式"提示 | 学生自己抢控制权,课堂翻页失控 |
| 10 | 交付链接裸链、独占一行 | 客户端把后文 URL-encode 进链接 |
| 11 | 答案位置必须打散(同一测验内不得全 A/全 B) | 学生蒙对、测验失效 |
| 12 | teach-title 不进 reveal 队列;测验/仿真页不调 setupReveal |
标题被藏、交互被破坏 |
Step 1 — 框架设计(先给方案,不写代码)
产出 6 项,逐项给用户确认:
- 学情画像:医学生经验域(考试周、小组作业、见习、第一次面对死亡、被患者质疑)+ 情感触发点
- 18 页规划表(含每页"经验锚点"列)——直接套
course-design.md§1 - 测验清单:前测 4 题(survey)+ 中测 3×3 + 后测 6(含 1 道迁移题)
- 仿真清单:3 个(滑块 / 情境决策 / 情绪—回应)
- 图片计划:场景图用网络图片或 AI 生图;机制图一律内联 SVG
- 总结页框架:V4 模块卡片
> 用户已明确"按这个骨架做"时,用一段话复述上述 6 项即可,不再逐项追问。
门控:AskUserQuestion 确认后才进 Step 2;禁止用纯文本提问代替组件。
Step 2 — 逐页设计(写到能直接粘进 HTML 的程度)
每页给:线框 + 全部文字(一字不改即可用)+ 图片位 + 交互 + 仿真 spec。
- 仿真 spec 六字段:情境数 / 每情境选项与定性 / 反馈文案 / 状态机 / 导航 / 初始态
- 量表每题:4 个真实选项 + 4 条
tips(tag+ 具体到分钟或句子的advice) - 判分题:
answer+explain,答案位置打散 - 举例必须具体到人/数/场景(58 岁、胃癌术后肝转移、女儿求"别告诉我爸")
门控:AskUserQuestion 确认后进 Step 3。
Step 3 — 开发(装配顺序固定,别乱)
cp assets/templates/courseware-skeleton.html <课件>.html
按此顺序装配,每步跑一次 node scripts/syntax-check.js <课件>.html:
- 配色:疗愈青蓝 ——
--primary:#15616D; --primary-light:#2A9D8F; --accent:#F4A261; --paper:#F7F6F2; --paper-2:#EAF4F4; --line:#CFE3E3; --green:#2A9D8F; --red:#E76F51 - 翻页系统:
assets/templates/page-flip-system.js(var curPage = 0;固定命名) - 页面骨架:p0 封面 → p1 前测 → 四模块(引入/方法/仿真/中测)→ p16 后测 → p17 总结
- 测验引擎:
quiz-engine.js+survey-engine.js(量表四处改动,缺一处就出错) - 测验页标记:
quiz-page-survey.html/quiz-page-graded.html(id 契约见 quiz-survey.md) - 仿真:
sim-scenario-nav.js、sim-empathy.js;滑块仿真按sim-patterns.md§2 写 Canvas - 样式:
quiz-and-sim.css(含picked-neutral与survey-fb) - 总结页:V4 四卡展开(
toggleCardV4/expandAllV4/collapseAllV4) - 图片:场景图同屏、机制图内联 SVG、图下无说明文字、全部支持点击放大
Step 3 收尾:跑完"验证命令"表;人工过一遍 course-design.md §3 的 10 条退回清单。
结尾发红字警示「⚠ 当前生成的是静态 HTML 文件,不支持学生扫码互动」,门控放下一轮。
Step 4 — 注入与发布(4A + 4B 一次做完)
cp <课件>.html <课件>.html.bak_step4
cp assets/templates/step4-template.json ./step4.json # 改页号 / quizId / hasAvg
python scripts/step4_inject.py --config step4.json --html <课件>.html --probe # ALL OK
python scripts/step4_inject.py --config step4.json --html <课件>.html --apply
然后:发布拿 node_id → 回填 NODE_ID / PUBLISH_BASE → 带 --node-block-id 重导 → publish。
命令、线上核验、教师必看页、交付消息结构见 references/deployment.md。
验证命令(改完就跑,判据是 ALL PASS 不是数字)
| 命令 | 期望 |
|---|---|
node scripts/syntax-check.js <html> |
SYNTAX_OK |
python scripts/scan_braces.py <html> |
BALANCED |
node scripts/quiz-answer-check.js <html> |
RESULT: PASS |
node scripts/deploy-state-test.js <html> --config step4.json --node-id <id> |
ALL PASS(约 106 项) |
node scripts/pagesync-test-mqtt.js <html> |
40 ALL PASS |
node scripts/jsdom-smoke-test.js <html> |
47 ALL PASS |
python scripts/prepublish-check.py <html> --node-id <id> |
PASS |
行为级两条(deploy-state-test 的 C 组、jsdom-smoke-test)依赖 jsdom;缺失会报 Cannot find module 'jsdom':
npm i jsdom --prefix .deps --no-audit --no-fund
NODE_PATH="$PWD/.deps/node_modules" node scripts/jsdom-smoke-test.js <html>
跑完删掉 .deps(勿提交进课件目录)。若只做语法/结构校验,前四条不依赖 jsdom。
交付话术(逐字)
三条教师须知 + 红色提示卡 + 独立 教师必看_<课件名>.html(用 assets/templates/teacher-guide.html 填 __URL__ / __PAGES__),顺序与配色见 deployment.md「交付消息结构」。页面内不得出现同样内容。
资产清单
assets/templates/
- 起步:
courseware-skeleton.html·page-flip-system.js·quiz-engine.js·page-templates.html - 测验:
quiz-page-survey.html·quiz-page-graded.html·survey-engine.js·survey-data.js·quiz-and-sim.css - 仿真:
sim-scenario-nav.js·sim-empathy.js - 部署:
step4-template.json·teacher-guide.html
scripts/:step4_inject.py(含 CLASS_ID 顺序修正)· scan_braces.py · syntax-check.js · deploy-state-test.js(含 survey 分支)· pagesync-test-mqtt.js · jsdom-smoke-test.js(含 picked-neutral)· quiz-answer-check.js · prepublish-check.py
> 这些脚本是打过补丁的版本,不要用通用技能目录里的同名文件覆盖。