diff --git a/employee-app/weight-management/body-fat-report.html b/employee-app/weight-management/body-fat-report.html new file mode 100644 index 0000000..d0232a5 --- /dev/null +++ b/employee-app/weight-management/body-fat-report.html @@ -0,0 +1,272 @@ + + + + + +详细报告 - 员工端 | 健康CQ原型 + + + +
+
+ 9:41 + + + + + +
+ +
+ +
+ +
+
+
+
+ + + diff --git a/employee-app/weight-management/doc/PRD.md b/employee-app/weight-management/doc/PRD.md index a5f8c05..971ad9c 100644 --- a/employee-app/weight-management/doc/PRD.md +++ b/employee-app/weight-management/doc/PRD.md @@ -17,7 +17,7 @@ │ ├── 吃动平衡 │ ├── 饮食记录 → 饮食录入 → 拍照识别 │ ├── 运动记录 → 运动录入 -│ ├── 体重记录 → 详细报告 +│ ├── 体重记录 → 详细报告 / 体脂仪报告 │ ├── 今日饮食建议 / 膳食偏好设置 │ ├── 智能运动计划 │ ├── 排行榜 @@ -87,18 +87,19 @@ stateDiagram-v2 |------|-----------|------|------| | 18 | 体重记录 | weight-detail-v2.html | 页面 | | 19 | 详细报告 | report-detail.html | 页面 | -| 20 | 体重报告 | weight-report.html | 页面 | -| 21 | 数据明细 | weight-record-detail-v2.html | 页面 | -| 22 | 排行榜 | weight-ranking.html | 页面 | +| 20 | 体脂仪报告 | body-fat-report.html | 页面 | +| 21 | 体重报告 | weight-report.html | 页面 | +| 22 | 数据明细 | weight-record-detail-v2.html | 页面 | +| 23 | 排行榜 | weight-ranking.html | 页面 | ### 四、蓝牙体脂秤 | 序号 | 页面/弹窗 | 文件 | 类型 | |------|-----------|------|------| -| 23 | 蓝牙称 | bluetooth-scale-v2.html | 页面 | -| 24 | 搜索设备 | bluetooth-search-v2.html | 页面 | -| 25 | WiFi 连接 | bluetooth-wifi-v2.html | 页面 | -| 26 | 用户管理 | bluetooth-device-members-v2.html | 页面 | +| 24 | 蓝牙称 | bluetooth-scale-v2.html | 页面 | +| 25 | 搜索设备 | bluetooth-search-v2.html | 页面 | +| 26 | WiFi 连接 | bluetooth-wifi-v2.html | 页面 | +| 27 | 用户管理 | bluetooth-device-members-v2.html | 页面 | --- @@ -524,7 +525,14 @@ stateDiagram-v2 **食谱建议 Tab:** - 今日饮食注意事项(可折叠):当日饮食概述 + 慢病注意提醒条(红色"高血压注意"与橙色"高尿酸提醒"两档,展示对应慢病的饮食禁忌要点,样式同智能运动计划页) -- 早/午/晚/加餐建议卡片:各含建议时间、热量、菜品列表(emoji + 名称 + "食堂提供/AI推荐"标签 + 推荐理由 + 热量) +- 早/午/晚/加餐建议卡片:各含建议时间、热量、菜品列表(图片 + 名称 + "食堂提供/AI推荐"标签 + 份量 + 热量),点击菜品打开详情弹窗 +- 菜品列表的食堂推荐标签取决于后台“食谱记录”菜单是否有录入该菜品 +- 餐品详情弹窗(点击菜品打开):emoji + 名称 + 来源标签 + 份量 + 热量 + 推荐理由 + 底部"不喜欢"按钮 + + ![餐品详情弹窗](screenshots/diet-advice-detail.jpg) +- 不再推荐弹窗(点击"不喜欢"打开):标题"不再推荐XXX" + 选填不喜欢的原因(口味不喜欢 / 吃腻了 / 会过敏·不耐受 / 热量太高 / 分量不合适,可多选)+ "确定"按钮 + + ![不再推荐弹窗](screenshots/diet-advice-dislike.jpg) **营养分析 Tab:** - 饮食分析卡片:营养评分 + 结论 + 概述 + 今日亮点 + 饮食建议(AI 生成) @@ -537,13 +545,16 @@ stateDiagram-v2 - 点击 Tab 切换食谱建议/营养分析 - 点击周历日期切换查看当日数据;点击周历标题打开月历弹窗,可在弹窗内切换月份并点选日期 - 点击注意事项标题折叠/展开 +- 点击菜品打开餐品详情弹窗,查看推荐理由;点击弹窗内"不喜欢"关闭详情弹窗并打开"不再推荐"弹窗 +- 在"不再推荐"弹窗中选填不喜欢的原因(可多选、可跳过),点击"确定"提交并弹出"已记录"提示;点击"取消"或遮罩关闭 - 点击"修改偏好"跳转到膳食偏好设置页(diet-questionnaire.html) - 点击返回按钮返回来源页 **业务规则:** - 食谱建议 Tab 无记录时展示默认示例内容 - 营养分析 Tab 无记录时显示缺省提示 -- 高血压/高尿酸人群在注意事项卡片内展示对应饮食禁忌提醒条(样式与智能运动计划页慢病提示一致,慢病标签随用户健康档案展示对应项;原型中固定演示两条) +- 高血压/高尿酸/等慢病人群在注意事项卡片内展示对应饮食禁忌提醒条 +- "不喜欢"原因为选填,提交后记录该餐品为不推荐(原型中仅做本地提示,不实际过滤推荐) --- @@ -566,7 +577,7 @@ stateDiagram-v2 **业务规则:** - 休息日以低强度恢复活动为主 -- 高血压/高尿酸人群展示对应运动禁忌提示(原型中恒显演示两条) +- 高血压/高尿酸/等慢病人群展示对应运动禁忌提示 - 无运动计划日期显示"该日期暂无运动计划"空状态 --- @@ -611,7 +622,7 @@ stateDiagram-v2 - 顶部栏:关闭按钮、"拍照识别"标题、闪光灯按钮 - 拍照入口:取景框 + "将餐品对准框内"提示 + 底部"相册/拍照"按钮 - 分析中视图:照片 + AI 识别进度条 + 分析阶段文案 + 取消按钮 -- 识别结果弹窗:餐品(emoji + 名称 + 每100g热量)、餐次下拉(早/午/晚/加餐)、饮食建议、录入克数(+/- 步进)、预估热量、"一键录入"按钮 +- 识别结果弹窗:餐品(图片 + 名称 + 每100g热量)、餐次下拉(早/午/晚/加餐)、饮食建议、录入克数(+/- 步进)、预估热量、"一键录入"按钮 ![识别结果弹窗](screenshots/scan-checkin-result.jpg) @@ -650,14 +661,14 @@ stateDiagram-v2 - 点击周历日期切换查看当日数据;点击周历标题打开月历弹窗,可在弹窗内切换月份并点选日期 - 点击指标 Tab(体重/体脂/腰围变化)切换趋势图表;点击时间范围 Tab 切换记录明细列表的时间范围 - 点击折线数据点显示悬浮提示 -- 点击非自记记录行跳转到详细报告页(report-detail.html,按来源携带 device 参数) +- 点击非自记记录行跳转到详细报告页(蓝牙称/身高秤跳 report-detail.html,体脂仪跳 body-fat-report.html) - 点击"记录体重"打开记录弹窗 - 点击返回按钮返回上一页 **业务规则:** - 无记录日期显示空状态("立即称重"按钮) - BMI 分档:<18.5 偏瘦 / 18.5-24 正常 / 24-28 超重 / ≥28 肥胖 -- 非自记来源(蓝牙称/身高秤/体脂仪)记录可点击查看详细报告,自记不可点击;身高秤来源记录跳转时复用体重秤(scale)报告模板 +- 非自记来源(蓝牙称/身高秤/体脂仪)记录可点击查看详细报告,自记不可点击;身高秤来源记录跳转时复用体重秤(scale)报告模板,体脂仪来源记录跳转至独立体脂仪报告页(body-fat-report.html) - 当日最新记录与上一次记录对比显示变化,无历史记录时显示"首次记录" --- @@ -668,7 +679,7 @@ stateDiagram-v2 **功能说明:** 展示单次体重测量的完整身体成分报告,根据设备来源(体重秤/蓝牙秤/体脂仪)动态展示不同指标分类与节段数据。 -**页面状态:** 通过 URL 参数 device 切换设备类型(scale 体重秤 / bluetooth 蓝牙秤 / fat 体脂仪),默认 fat。 +**页面状态:** 通过 URL 参数 device 切换设备类型(scale 体重秤 / bluetooth 蓝牙秤 / fat 体脂仪),默认 fat。体脂仪(fat)模式已由独立页面 body-fat-report.html 承接,体重记录页中体脂仪来源的记录改跳转至该页。 **通用UI元素:** - 报告头部(渐变卡片):测量日期时间、设备标签(体重秤/蓝牙秤/体脂仪)、当前体重(大字)、BMI 状态标签、较上次变化;蓝牙秤模式为绿色渐变,体重秤/体脂仪为紫色渐变 @@ -682,7 +693,7 @@ stateDiagram-v2 | 蓝牙秤(device=bluetooth) | 基础指标、身体成分、脂肪分析、体态管理、体重管控、细胞液分析(8电极)、进阶成分(8电极)、躯干/四肢脂肪(8电极)、躯干/四肢肌肉(8电极) | | 体脂仪(device=fat) | 基础指标、体脂分析、体成分、体重管理、节段脂肪、节段肌肉 | -注:体重记录页中"身高秤"来源的记录跳转本页时复用体重秤(scale)模板。 +注:体重记录页中"身高秤"来源的记录跳转本页时复用体重秤(scale)模板;"体脂仪"来源的记录已改跳转至独立页面 body-fat-report.html,本页 device=fat 模式保留用于兼容。 **交互说明:** - 点击返回按钮返回来源页 @@ -690,7 +701,31 @@ stateDiagram-v2 --- -### 20. 体重报告(weight-report.html) +### 20. 体脂仪报告(body-fat-report.html) + +![页面截图](screenshots/body-fat-report.jpg) + +**功能说明:** 展示体脂仪单次测量的完整身体成分报告,含各指标测量值与标准判断,并展示四肢与躯干的节段肌肉量、节段体脂肪量。 + +**页面状态:** 从体重记录页(weight-detail-v2.html)记录明细列表中体脂仪来源的记录跳转进入,页面只读。 + +**主要UI元素:** +- 报告头部(紫色渐变卡片):测量时间、设备标签「体脂仪」、当前体重(大字)、BMI 状态标签、较上次变化 +- 基础指标:体重 / BMI / 体脂率 / InBody评分(含 BMI 指示条:消瘦/正常/超重/肥胖四段色轨 + 指针) +- 身体成分:体水分 / 蛋白质 / 无机盐 / 体脂肪 / 去脂体重 / 骨骼肌量 / 骨骼肌指数 +- 脂肪分析:内脏脂肪等级 / 肥胖度 +- 节段肌肉量:右上肢 / 左上肢 / 躯干 / 右下肢 / 左下肢(表格) +- 节段体脂肪量:右上肢 / 左上肢 / 躯干 / 右下肢 / 左下肢(表格) +- 体重管理:目标体重 / 体重控制 / 脂肪控制 / 肌肉控制 / 腰臀比 +- 指标状态标签:带标准范围的指标自动判断并显示 标准(绿)/ 偏低(橙)/ 偏高(红) + +**交互说明:** +- 点击返回按钮返回体重记录页 +- 页面为只读展示,无编辑操作 + +--- + +### 21. 体重报告(weight-report.html) ![页面截图](screenshots/weight-report.jpg) @@ -721,7 +756,7 @@ stateDiagram-v2 --- -### 21. 数据明细(weight-record-detail-v2.html) +### 22. 数据明细(weight-record-detail-v2.html) ![页面截图](screenshots/weight-record-detail.jpg) @@ -740,7 +775,7 @@ stateDiagram-v2 --- -### 22. 排行榜(weight-ranking.html) +### 23. 排行榜(weight-ranking.html) ![页面截图](screenshots/weight-ranking.jpg) @@ -778,7 +813,7 @@ stateDiagram-v2 ## 四、蓝牙体脂秤 -### 23. 蓝牙称(bluetooth-scale-v2.html) +### 24. 蓝牙称(bluetooth-scale-v2.html) ![页面截图](screenshots/bluetooth-scale.jpg) @@ -805,7 +840,7 @@ stateDiagram-v2 --- -### 24. 搜索设备(bluetooth-search-v2.html) +### 25. 搜索设备(bluetooth-search-v2.html) ![页面截图](screenshots/bluetooth-search.jpg) @@ -827,7 +862,7 @@ stateDiagram-v2 --- -### 25. WiFi 连接(bluetooth-wifi-v2.html) +### 26. WiFi 连接(bluetooth-wifi-v2.html) ![页面截图](screenshots/bluetooth-wifi.jpg) @@ -847,7 +882,7 @@ stateDiagram-v2 --- -### 26. 用户管理(bluetooth-device-members-v2.html) +### 27. 用户管理(bluetooth-device-members-v2.html) ![页面截图](screenshots/bluetooth-device-members.jpg) diff --git a/employee-app/weight-management/doc/screenshots/body-fat-report.jpg b/employee-app/weight-management/doc/screenshots/body-fat-report.jpg new file mode 100644 index 0000000..f8984fc Binary files /dev/null and b/employee-app/weight-management/doc/screenshots/body-fat-report.jpg differ diff --git a/employee-app/weight-management/doc/screenshots/report-detail-bluetooth.jpg b/employee-app/weight-management/doc/screenshots/report-detail-bluetooth.jpg index e304c51..9c034e2 100644 Binary files a/employee-app/weight-management/doc/screenshots/report-detail-bluetooth.jpg and b/employee-app/weight-management/doc/screenshots/report-detail-bluetooth.jpg differ diff --git a/employee-app/weight-management/doc/screenshots/report-detail-fat.jpg b/employee-app/weight-management/doc/screenshots/report-detail-fat.jpg index 858f688..e8a7dc1 100644 Binary files a/employee-app/weight-management/doc/screenshots/report-detail-fat.jpg and b/employee-app/weight-management/doc/screenshots/report-detail-fat.jpg differ diff --git a/employee-app/weight-management/doc/screenshots/report-detail-scale.jpg b/employee-app/weight-management/doc/screenshots/report-detail-scale.jpg index b876501..4ad4786 100644 Binary files a/employee-app/weight-management/doc/screenshots/report-detail-scale.jpg and b/employee-app/weight-management/doc/screenshots/report-detail-scale.jpg differ diff --git a/employee-app/weight-management/report-detail.html b/employee-app/weight-management/report-detail.html index 436efca..9a3e0da 100644 --- a/employee-app/weight-management/report-detail.html +++ b/employee-app/weight-management/report-detail.html @@ -145,7 +145,7 @@ var lefuData8 = [ { bodyParamName:"体脂率", bodyParamKey:"ppFat", currentValue:25.5, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, { bodyParamName:"骨量", bodyParamKey:"ppBoneKg", currentValue:2.3, standardTitle:"偏低", standColor:"#F5A623", unit:"kg" }, { bodyParamName:"内脏脂肪", bodyParamKey:"ppVisceralFat", currentValue:6, standardTitle:"标准", standColor:"#14CCAD", unit:"" }, - { bodyParamName:"BMR", bodyParamKey:"ppBMR", currentValue:1270, standardTitle:"标准", standColor:"#14CCAD", unit:"kcal/天" }, + { bodyParamName:"基础代谢率", bodyParamKey:"ppBMR", currentValue:1270, standardTitle:"标准", standColor:"#14CCAD", unit:"kcal/天" }, { bodyParamName:"肌肉量", bodyParamKey:"ppMuscleKg", currentValue:38.8, standardTitle:"偏低", standColor:"#F5A623", unit:"kg" }, { bodyParamName:"蛋白质率", bodyParamKey:"ppProteinPercentage", currentValue:10, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, { bodyParamName:"蛋白质量", bodyParamKey:"ppProteinKg", currentValue:8.2, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, @@ -163,7 +163,7 @@ var lefuData8 = [ { bodyParamName:"脂肪控制量", bodyParamKey:"ppFatControlKg", currentValue:-0.5, standardTitle:"", standColor:"", unit:"kg" }, { bodyParamName:"肌肉控制量", bodyParamKey:"ppBodyMuscleControl", currentValue:4.4, standardTitle:"", standColor:"", unit:"kg" }, { bodyParamName:"肌肉率", bodyParamKey:"ppMusclePercentage", currentValue:69.2, standardTitle:"", standColor:"", unit:"%" }, - { bodyParamName:"脂肪量", bodyParamKey:"ppBodyfatKg", currentValue:14.3, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, + { bodyParamName:"体脂肪", bodyParamKey:"ppBodyfatKg", currentValue:14.3, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, { bodyParamName:"水分量", bodyParamKey:"ppWaterKg", currentValue:30.6, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, { bodyParamName:"水分率", bodyParamKey:"ppWaterPercentage", currentValue:50, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, { bodyParamName:"皮下脂肪量", bodyParamKey:"ppBodyFatSubCutKg", currentValue:12.6, standardTitle:"", standColor:"", unit:"kg" }, @@ -330,8 +330,8 @@ var deviceData = { scale: [ { title:'基础指标', type:'grid', fields:[ { label:'身高', value:'175', unit:'cm' }, { label:'体重', value:'72.5', unit:'kg' }, - { label:'BMI', value:'23.7', status:'正常' }, { label:'基础代谢', value:'1,680', unit:'kcal' }, - { label:'体脂肪量', value:'15.2', unit:'kg' }, { label:'体脂肪率', value:'21.0', unit:'%', status:'正常' } + { label:'BMI', value:'23.7', status:'正常' }, { label:'基础代谢率', value:'1,680', unit:'kcal' }, + { label:'体脂肪', value:'15.2', unit:'kg' }, { label:'体脂率', value:'21.0', unit:'%', status:'正常' } ], bmi:true }, { title:'水分与蛋白质', type:'rows', fields:[ { label:'体水分量', value:'38.6', unit:'kg' }, { label:'体水分率', value:'53.2', unit:'%' }, @@ -353,11 +353,11 @@ var deviceData = { fat: [ { title:'基础指标', type:'grid', fields:[ { label:'身高', value:'175', unit:'cm' }, { label:'体重', value:'72.5', unit:'kg' }, - { label:'BMI', value:'23.7', status:'正常' }, { label:'基础代谢', value:'1,680', unit:'kcal' }, + { label:'BMI', value:'23.7', status:'正常' }, { label:'基础代谢率', value:'1,680', unit:'kcal' }, { label:'InBody评分', value:'62', unit:'分' } ], bmi:true }, { title:'体脂分析', type:'rows', fields:[ - { label:'体脂肪量', value:'15.2', unit:'kg' }, { label:'体脂肪率', value:'21.0', unit:'%', status:'正常' }, + { label:'体脂肪', value:'15.2', unit:'kg' }, { label:'体脂率', value:'21.0', unit:'%', status:'正常' }, { label:'内脏脂肪等级', value:'6', status:'正常' }, { label:'肥胖度', value:'147', unit:'%' }, { label:'去脂体重', value:'59.6', unit:'kg' } ]}, diff --git a/employee-app/weight-management/weight-detail-v2.html b/employee-app/weight-management/weight-detail-v2.html index 0252517..8eb9558 100644 --- a/employee-app/weight-management/weight-detail-v2.html +++ b/employee-app/weight-management/weight-detail-v2.html @@ -1404,8 +1404,12 @@ function renderRecordList(range) { } var srcMap = { manual: '自记', bluetooth: '蓝牙称', stadiometer: '身高秤', bodyanalyzer: '体脂仪' }; - // 来源 → report-detail.html 的 device 参数映射 - var deviceParamMap = { bluetooth: 'bluetooth', stadiometer: 'scale', bodyanalyzer: 'fat' }; + // 来源 → 详细报告页跳转地址(体脂仪跳转独立报告页,其余复用 report-detail.html) + var reportUrlMap = { + bluetooth: 'report-detail.html?device=bluetooth', + stadiometer: 'report-detail.html?device=scale', + bodyanalyzer: 'body-fat-report.html' + }; var html = ''; allRecords.forEach(function(rec) { @@ -1413,11 +1417,11 @@ function renderRecordList(range) { var dateShort = parseInt(parts[1]) + '-' + parseInt(parts[2]); var srcLabel = srcMap[rec.source] || '自记'; var isSelf = rec.source === 'manual'; - var deviceParam = deviceParamMap[rec.source]; + var reportUrl = reportUrlMap[rec.source]; - // 非自记来源:用 包裹,可点击跳转 report-detail.html - if (!isSelf && deviceParam) { - html += ''; + // 非自记来源:用 包裹,可点击跳转对应报告页 + if (!isSelf && reportUrl) { + html += ''; } else { html += '
'; } @@ -1442,7 +1446,7 @@ function renderRecordList(range) { } // 闭合标签 - if (!isSelf && deviceParam) { + if (!isSelf && reportUrl) { html += ''; } else { html += '
';