个人健康学习管理台(日新身志录)
1. 技能定位
- 一句话:把「健康养护 + 读书研学」两套每日打卡,做成可计分、可统计、可导出的单文件在线工作台。
- 适用场景:个人每日习惯打卡与计分;健康/学习双轨数据看板;周月季复盘统计;打卡数据留档导出。
- 典型触发方式:
- "帮我做一个每天健康+学习打卡的看板"
- "把我的打卡规则改成跳绳 500 个、加一项冥想"
- "导出最近一个月打卡明细到 Excel"
- "帮我搭一个习惯养成计分表,能在手机上打开"
- 不适用:团队协作/多用户考勤、需要登录鉴权的 SaaS、医疗诊断类应用。
2. 核心能力
| 能力 | 说明 |
|---|---|
| 双轨计分 | 健康 100 分 + 学习 100 分,分组小计(健体/静心/康养/自评;输入/输出) |
| 每日打卡表单 | 是/否项默认「是」,自评默认「优秀」,支持文本填报项 |
| 实时显示 | 提交即渲染(乐观更新),随后与服务端核对 |
| 统计视图 | 今日得分环、连续天数、近 7 天走势、近 30 天达标率、本月/本年统计 |
| 知识结构分布 | 自动聚合「书籍分类+专题分类+内容分类」环形图 |
| 数据导出 | Excel(分项小计+全明细+合计均值行)与 JSON 备份 |
| 在线/离线 | 云端数据表存储,断网自动降级本地缓存 |
3. 执行步骤(标准工序)
- 确认参数:与用户确认应用名/署名/铭文、计分项与分值、文本填报项、数据表来源。附件不足时先说明假设再执行。
- 生成页面:
python scripts/build_desk.py --params my_params.json --out out/desk.html --emit-schema out/schema.json - 建/改数据表:新实例用
page/../database/create_database.py依据out/schema.json建表;已有表用add_database_field.py增量加字段(历史数据保留)。 - 本地校验:
python scripts/validate.py --html out/desk.html必须输出VALIDATE_OK;再用资料库 lint(lint_database_sdk_usage.py)复核 SDK 用法。 - 部署上线:
import_html.py --node-block-id <已有块 ID>整包更新可保持链接不变;首次部署不带该参数。 - 交付复核:下载线上产物回读关键标记,确认改动生效,再给用户链接与改动说明。
4. 输入输出规范
输入:参数 JSON(见 params.example.json),或用户的自然语言描述(由本技能转写为参数)。
输出:
- out/desk.html —— 单文件全内联 HTML 工作台(零外链,可直接部署/离线打开)
- out/schema.json —— 数据表结构(供建表/改表)
- 部署后的在线链接(WorkBuddy 资料库页面)
产出格式要求:单文件(CSS/JS/SVG 全内联)、响应式(≤767px 回落单列)、中文界面、图表用纯 SVG 手绘。
5. 关键约束(不可违反)
- 零外链:不得引用任何 CDN、字体、图片外链;所有图形用内联 SVG。
- SDK 铁律:SDK 变量必须命名为
db;databaseId必须字符串字面量内联;含addRecord的页面必须有 localStorage 草稿缓存三动作(getItem/setItem/removeItem);不得使用非契约方法。 - 数据可靠性:
db需在调用时实时解析(运行时可能晚注入);初始化链路必须有重试与失败降级;提交后先本地渲染再回查服务端。 - 渲染纪律:统一由
refreshAll()调度各渲染函数,渲染函数之间禁止互调。 - 改字段不动历史:改计分项走服务端增量加字段,禁止重建表导致历史数据丢失。
- 删除操作谨慎:不提供「清空全部数据」按钮,删除单条需二次确认。
6. 参数表(可变项)
| 参数 | 必填 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|
app.name |
否 | 韩保华 · 日新身志录 | 张三 · 每日精进 | 页面顶部标题 |
app.title |
否 | 同 name | — | 浏览器标签标题 |
app.motto |
否 | 苟日新,日日新,又日新 —— 身以健体,志以问学 | — | 副标题 |
app.banner |
否 | 大学盘铭释义 | — | 底部铭文 |
theme.main/soft/green/gold |
否 | #FFF200/#FFF9D6/#00B050/#F7C600 | #4F8CFF | 主题色 |
database.id |
是 | <你的数据表ID> | 新建表 ID | 云端数据表 |
scoring.health_full |
否 | 100 | 60 | 健康满分 |
scoring.study_full |
否 | 100 | 40 | 学习满分 |
scoring.health_items[] |
否 | 11 项(见样例) | {name:'冥想10分钟',key:'c_m1',type:'yes',points:10} |
健康计分项 |
scoring.study_items[] |
否 | 5 项(见样例) | {name:'读书30页',key:'c_r',type:'yes',points:20} |
学习计分项 |
scoring.health_groups[] |
否 | 健体/静心/康养/自评 | — | 导出小计分组 |
scoring.study_groups[] |
否 | 输入/输出 | — | 导出小计分组 |
scoring.text_fields[] |
否 | 6 项 | {name:'书名',key:'c_bookname'} |
文本填报项(不计分) |
type 说明:yes = 是否型(选「是」得 points 分);map = 多档型(按选项文本给分,如 优秀20/中10/差0)。
7. 使用示例
示例 A:默认配置快速生成
python scripts/build_desk.py --params params.example.json --out out/desk.html
python scripts/validate.py --html out/desk.html
预期输出:BUILD_OK out/desk.html (约 84 KB) → VALIDATE_OK 通过 7 项检查。
示例 B:改计分项(跳绳 500 个、新增冥想项)
在 my_params.json 中把 跳绳300个/points:5 改为 跳绳500个/points:5,并在 health_items 增加 {name:'冥想10分钟',key:'c_m1',type:'yes',points:10},同步更新 health_groups 与服务端字段。
预期:页面表单出现新项、总分口径按新分值计算、导出表列同步更新。
示例 C:只改品牌与配色
改 app.* 与 theme.* 后构建。预期:标题、铭文、主题色变化,计分逻辑不变。
8. 注意事项
- 首次部署后记录
node_block_id,后续迭代必须带它整包更新,否则会产生新链接。 - 计分项名称即数据表字段名,改名等于改表,务必走服务端字段维护流程。
- 页面依赖资料库运行时注入的数据库对象,脱离 WorkBuddy 环境打开时自动降级为本地离线模式(数据存浏览器,不同设备不互通)。
- 导出 Excel 为零依赖手写 OOXML,字段极多时列宽按参数自动分配,无需安装第三方库。
9. 参考文件
references/scoring-rules.md—— 默认计分规则完整表references/engineering-notes.md—— 实现要点、踩坑与排错references/deploy-checklist.md—— 部署与上线检查清单scripts/build_desk.py/scripts/validate.py—— 构建与校验marketplace/cover.md—— 商城展示材料