# Burn_Earn **Repository Path**: Star-air/Burn_Earn ## Basic Information - **Project Name**: Burn_Earn - **Description**: 一款面向小团队的减脂积分应用,通过运动照片打卡赚取卡路里积分,并兑换美食奖励。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-20 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 燃分小队 一个给 2–3 位家人或朋友使用的轻量减脂激励应用:用照片记录运动,按预计主动消耗赚取积分,再兑换大家共同约定的美食或零食。 ## 当前功能 - 三个本机临时身份;体重、积分与运动记录按身份分别计算 - 运动必须上传照片凭证,照片在浏览器内压缩保存后积分立即到账 - 按体重、运动 MET 和实际时长估算主动消耗,并保留每次计算快照 - 可手填名称、图标、MET 与默认时长,添加自己的运动类目 - 可照着食品包装的营养成分表,手填能量数值、单位和标注口径,添加自己的兑换食品 - 支持 `kJ` / `kcal`,以及每 100 克、每 100 毫升、每份、每包装四种标注口径 - 不可变积分流水、小组排行榜和照片打卡墙 - 兑换前展示食品整包热量、所需积分和扣分前后结果,并要求再次确认 - 记录与照片保存在当前浏览器的 IndexedDB 中,刷新页面不会丢失 - 桌面与手机宽度均可使用 照片凭证用于留下可回看的运动记录,不会自动判断照片真伪,也不需要队友复核。当前版本只做包装参数的手工录入与数学换算,暂不包含拍照识别营养成分表。 ## 卡路里与积分规则 运动使用当前体重、类目 MET 和本次时长估算预计主动消耗: ```text 主动消耗 kcal = (MET - 1) × 3.5 × 体重 kg ÷ 200 × 时长 min 运动积分 = floor(主动消耗 kcal ÷ 10) ``` 食品会先把包装参数换算成整包热量;其中 `1 kcal = 4.184 kJ`。兑换积分按 `ceil(整包 kcal ÷ 10)` 计算,最低 5 分。这里的卡路里都是便于小队执行奖励规则的估算值,不代替运动设备、营养师或医疗建议。 ## 本地运行 Windows 上直接双击 `启动燃分小队.cmd`。启动器会等待应用准备完成,再自动打开浏览器;重复双击也不会重复启动服务。项目已经附带本机运行所需的 Node.js,不会修改系统环境。 开发者也可以使用 Node.js 22.13 或更高版本运行: ```bash npm install npm run dev ``` 根据终端显示的地址在浏览器打开即可。 ## 本机身份与微信小程序 当前的身份选择器只是这台电脑上的临时入口,并不是真实账号系统。同一台电脑上的人可以退出后选择其他身份,因此数据是产品逻辑上的个人归属,不具备安全隔离;照片墙等小组内容也会在这些本机身份之间共享。 迁移微信小程序时可以保留“成员、个人资料、运动类目、照片凭证、积分流水、食品奖励、兑换”的业务模型,把身份入口替换为 `wx.login`,将服务端换取并绑定的 OpenID 作为认证身份,把照片选择替换为 `wx.chooseMedia`,再将 IndexedDB 存储适配器替换为云数据库与对象存储。正式账号必须由后端签发会话,并在服务端按身份校验每次读写权限;仅在前端保存 OpenID 或成员编号不能构成安全登录。