diff --git a/employee-app/weight-management/report-detail.html b/employee-app/weight-management/report-detail.html index 7849805..981704a 100644 --- a/employee-app/weight-management/report-detail.html +++ b/employee-app/weight-management/report-detail.html @@ -18,6 +18,7 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .scroll-content::-webkit-scrollbar { display: none; } /* 头部 */ .report-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 16px; padding: 20px; color: #fff; margin-bottom: 12px; position: relative; overflow: hidden; } +.report-header--bluetooth { background: linear-gradient(135deg, #07c160, #06ad56); } .report-header::after { content: ''; position: absolute; top: -30px; right: -30px; width: 100px; height: 100px; background: rgba(255,255,255,0.08); border-radius: 50%; } .report-header__top { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; } .report-header__time { font-size: 13px; opacity: 0.8; display: flex; align-items: center; gap: 6px; } @@ -38,6 +39,10 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .data-section__title { font-size: 15px; font-weight: 700; color: #1a1a1a; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; } .data-section__title::before { content: ''; width: 3px; height: 16px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 2px; } .data-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; } +.data-grid--3col { grid-template-columns: 1fr 1fr 1fr; } +.data-grid--3col .data-cell { border-right: 1px solid #f5f5f5; } +.data-grid--3col .data-cell:nth-child(3n) { border-right: none; } +.data-grid--3col .data-cell:nth-last-child(-n+3) { border-bottom: none; } .data-cell { padding: 12px; border-bottom: 1px solid #f5f5f5; } .data-cell:nth-child(odd) { border-right: 1px solid #f5f5f5; } .data-cell:nth-last-child(-n+2) { border-bottom: none; } @@ -47,6 +52,9 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items: .data-cell__status { display: inline-block; font-size: 10px; padding: 1px 6px; border-radius: 4px; margin-left: 4px; } .data-cell__status--normal { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; } .data-cell__status--high { background: #fff2f0; color: #ff4d4f; border: 1px solid #ffccc7; } +.data-cell__tag { display: inline-block; font-size: 10px; padding: 1px 6px; border-radius: 4px; margin-left: 4px; font-weight: 500; } +.data-row__tag { display: inline-block; font-size: 10px; padding: 1px 6px; border-radius: 4px; margin-left: 4px; font-weight: 500; } +.data-section__badge { font-size: 10px; font-weight: 500; padding: 2px 7px; border-radius: 4px; background: #e6f7ff; color: #1890ff; border: 1px solid #91d5ff; margin-left: 4px; } .data-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid #f5f5f5; } .data-row:last-child { border-bottom: none; } .data-row__label { font-size: 14px; color: #666; } @@ -85,7 +93,7 @@ body { background: #f0f2f5; display: flex; justify-content: center; align-items:
-
+
@@ -124,167 +132,298 @@ var t = tagMap[device] || tagMap.fat; tagEl.textContent = t[0]; tagEl.classList.add(t[1]); -/* 各设备的数据配置 */ +/* ======================================================================== + * 蓝牙秤:8电极数据 + * ======================================================================== */ +var lefuData8 = [ + { bodyParamName:"BMI", bodyParamKey:"ppBMI", currentValue:19.6, standardTitle:"标准", standColor:"#14CCAD", unit:"" }, + { bodyParamName:"体重", bodyParamKey:"ppWeightKg", currentValue:56, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, + { 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:"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" }, + { bodyParamName:"皮下脂肪率", bodyParamKey:"ppBodyFatSubCutPercentage",currentValue:22.5, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, + { bodyParamName:"身体得分", bodyParamKey:"ppBodyScore", currentValue:73, standardTitle:"", standColor:"", unit:"" }, + { bodyParamName:"身体年龄", bodyParamKey:"ppBodyAge", currentValue:20, standardTitle:"", standColor:"", unit:"" }, + { bodyParamName:"身体类型", bodyParamKey:"ppBodyType", currentValue:"缺乏运动型",standardTitle:"缺乏运动型",standColor:"", unit:"" }, + { bodyParamName:"去脂体重", bodyParamKey:"ppLoseFatWeightKg", currentValue:41.7, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, + { bodyParamName:"心率", bodyParamKey:"ppHeartRate", currentValue:69, standardTitle:"", standColor:"", unit:"次/分" }, + { bodyParamName:"理想体重", bodyParamKey:"ppBodyStandardWeightKg", currentValue:62.1, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"健康评估", bodyParamKey:"ppBodyHealth", currentValue:2, standardTitle:"一般", standColor:"#F5A623", unit:"" }, + { bodyParamName:"骨骼肌量", bodyParamKey:"ppBodySkeletalKg", currentValue:22.5, standardTitle:"不足", standColor:"#F5A623", unit:"kg" }, + { bodyParamName:"骨骼肌率", bodyParamKey:"ppBodySkeletal", currentValue:40, standardTitle:"偏低", standColor:"#F5A623", unit:"%" }, + { bodyParamName:"控制体重", bodyParamKey:"ppControlWeightKg", currentValue:3.9, standardTitle:"", standColor:"", unit:"kg" }, + { 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:"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" }, + { bodyParamName:"身体细胞量", bodyParamKey:"ppCellMassKg", currentValue:27.4, standardTitle:"偏低", standColor:"#F5A623", unit:"kg" }, + { bodyParamName:"建议卡路里摄入量", bodyParamKey:"ppDCI", currentValue:1651, standardTitle:"", standColor:"", unit:"kcal/天" }, + { bodyParamName:"无机盐量", bodyParamKey:"ppMineralKg", currentValue:2.9, standardTitle:"标准", standColor:"#14CCAD", unit:"kg" }, + { bodyParamName:"骨骼肌质量指数", bodyParamKey:"ppSmi", currentValue:7.2, standardTitle:"", standColor:"", unit:"kg/m²" }, + { bodyParamName:"肥胖度", bodyParamKey:"ppObesity", currentValue:93, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, + { bodyParamName:"细胞外水量", bodyParamKey:"ppWaterECWKg", currentValue:11.4, standardTitle:"偏低", standColor:"#F5A623", unit:"kg" }, + { bodyParamName:"细胞内水量", bodyParamKey:"ppWaterICWKg", currentValue:19.1, standardTitle:"偏低", standColor:"#F5A623", unit:"kg" }, + { bodyParamName:"推测腰臀比", bodyParamKey:"ppWHR", currentValue:0.8, standardTitle:"标准", standColor:"#14CCAD", unit:"%" }, + { bodyParamName:"左腿脂肪量", bodyParamKey:"ppBodyFatKgLeftLeg", currentValue:1.9, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"左臂脂肪量", bodyParamKey:"ppBodyFatKgLeftArm", currentValue:0.8, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"右臂脂肪量", bodyParamKey:"ppBodyFatKgRightArm", currentValue:0.8, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"右腿脂肪量", bodyParamKey:"ppBodyFatKgRightLeg", currentValue:1.8, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"躯干脂肪量", bodyParamKey:"ppBodyFatKgTrunk", currentValue:7.2, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"左臂脂肪率", bodyParamKey:"ppBodyFatRateLeftArm", currentValue:80, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"左腿脂肪率", bodyParamKey:"ppBodyFatRateLeftLeg", currentValue:73, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"右臂脂肪率", bodyParamKey:"ppBodyFatRateRightArm", currentValue:80, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"右腿脂肪率", bodyParamKey:"ppBodyFatRateRightLeg", currentValue:69.2, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"躯干脂肪率", bodyParamKey:"ppBodyFatRateTrunk", currentValue:128.5, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"左臂肌肉量", bodyParamKey:"ppMuscleKgLeftArm", currentValue:2, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"左腿肌肉量", bodyParamKey:"ppMuscleKgLeftLeg", currentValue:6.5, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"右臂肌肉量", bodyParamKey:"ppMuscleKgRightArm", currentValue:2.1, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"右腿肌肉量", bodyParamKey:"ppMuscleKgRightLeg", currentValue:6.6, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"躯干肌肉量", bodyParamKey:"ppMuscleKgTrunk", currentValue:18.4, standardTitle:"", standColor:"", unit:"kg" }, + { bodyParamName:"左臂肌肉率", bodyParamKey:"ppMuscleRateLeftArm", currentValue:90.9, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"左腿肌肉率", bodyParamKey:"ppMuscleRateLeftLeg", currentValue:100, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"右臂肌肉率", bodyParamKey:"ppMuscleRateRightArm", currentValue:95.4, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"右腿肌肉率", bodyParamKey:"ppMuscleRateRightLeg", currentValue:101.5, standardTitle:"", standColor:"", unit:"%" }, + { bodyParamName:"躯干肌肉率", bodyParamKey:"ppMuscleRateTrunk", currentValue:97.8, standardTitle:"", standColor:"", unit:"%" } +]; + +/* ===== 蓝牙秤渲染引擎 ===== */ +function buildMap(data) { + var map = {}; + data.forEach(function(item) { map[item.bodyParamKey.trim()] = item; }); + return map; +} + +function formatVal(v) { + if (typeof v === 'number') { + return v % 1 === 0 ? v.toLocaleString() : v.toLocaleString(undefined, { minimumFractionDigits:1, maximumFractionDigits:1 }); + } + return String(v); +} + +function displayVal(item) { + if (item.bodyParamKey === 'ppBodyHealth') { return item.standardTitle || String(item.currentValue); } + return formatVal(item.currentValue); +} + +function needsStatusTag(item) { + var noTag = ['ppBodyHealth','ppBodyScore','ppWeightKg','ppFat']; + if (noTag.indexOf(item.bodyParamKey) !== -1) return false; + return !!(item.standardTitle); +} + +function getBMITag(bmi) { + if (bmi < 18.5) return { label:'消瘦', color:'#1890ff' }; + if (bmi < 24) return { label:'正常', color:'#52c41a' }; + if (bmi < 28) return { label:'超重', color:'#fa8c16' }; + return { label:'肥胖', color:'#ff4d4f' }; +} + +function statusTag(item) { + if (!needsStatusTag(item)) return ''; + var label, color; + if (item.bodyParamKey === 'ppBMI') { + var t = getBMITag(parseFloat(item.currentValue)); + label = t.label; color = t.color; + } else { + label = item.standardTitle; color = item.standColor || '#999'; + } + return '' + label + ''; +} + +function statusTagRow(item) { + if (!needsStatusTag(item)) return ''; + var color = item.standColor || '#999'; + return '' + item.standardTitle + ''; +} + +var sectionConfig = [ + { id:'basic', title:'基础指标', layout:'grid', keys:['ppWeightKg','ppBMI','ppFat','ppBodyScore','ppBodyHealth'] }, + { id:'composition', title:'身体成分', layout:'row', keys:['ppWaterPercentage','ppWaterKg','ppProteinPercentage','ppProteinKg','ppBodyfatKg','ppMuscleKg','ppMusclePercentage','ppBodySkeletalKg','ppBodySkeletal','ppBoneKg'] }, + { id:'fat', title:'脂肪分析', layout:'row', keys:['ppVisceralFat','ppBodyFatSubCutPercentage','ppBodyFatSubCutKg'] }, + { id:'management', title:'体态管理', layout:'row', keys:['ppBodyStandardWeightKg','ppLoseFatWeightKg','ppBodyAge','ppBodyType','ppFootLen'], keys8:['ppWHR'] }, + { id:'control', title:'体重管控', layout:'row', keys:['ppControlWeightKg','ppFatControlKg','ppBodyMuscleControl'] }, + { id:'fluid', title:'细胞液分析', layout:'row', only8:true, badge:'8电极', keys:['ppWaterICWKg','ppWaterECWKg'] }, + { id:'advanced', title:'进阶成分', layout:'row', only8:true, badge:'8电极', keys:['ppMineralKg','ppCellMassKg','ppSmi'] }, + { id:'limbFat', title:'躯干/四肢脂肪', layout:'limb', only8:true, badge:'8电极', massUnit:'kg', rateUnit:'%', + limbs:[ + { label:'左臂', massKey:'ppBodyFatKgLeftArm', rateKey:'ppBodyFatRateLeftArm' }, + { label:'右臂', massKey:'ppBodyFatKgRightArm', rateKey:'ppBodyFatRateRightArm' }, + { label:'左腿', massKey:'ppBodyFatKgLeftLeg', rateKey:'ppBodyFatRateLeftLeg' }, + { label:'右腿', massKey:'ppBodyFatKgRightLeg', rateKey:'ppBodyFatRateRightLeg' }, + { label:'躯干', massKey:'ppBodyFatKgTrunk', rateKey:'ppBodyFatRateTrunk' } + ] }, + { id:'limbMus', title:'躯干/四肢肌肉', layout:'limb', only8:true, badge:'8电极', massUnit:'kg', rateUnit:'%', + limbs:[ + { label:'左臂', massKey:'ppMuscleKgLeftArm', rateKey:'ppMuscleRateLeftArm' }, + { label:'右臂', massKey:'ppMuscleKgRightArm', rateKey:'ppMuscleRateRightArm' }, + { label:'左腿', massKey:'ppMuscleKgLeftLeg', rateKey:'ppMuscleRateLeftLeg' }, + { label:'右腿', massKey:'ppMuscleKgRightLeg', rateKey:'ppMuscleRateRightLeg' }, + { label:'躯干', massKey:'ppMuscleKgTrunk', rateKey:'ppMuscleRateTrunk' } + ] } +]; + +function renderSection(section, map, type) { + var keys = (section.keys || []).slice(); + if (type === '8' && section.keys8) keys = keys.concat(section.keys8); + var items = []; + if (section.layout !== 'limb') { + keys.forEach(function(k) { var item = map[k]; if (item) items.push(item); }); + if (items.length === 0) return ''; + } + var badgeHtml = (type === '8' && section.badge) ? '' + section.badge + '' : ''; + var titleHtml = '
' + section.title + badgeHtml + '
'; + var bodyHtml = ''; + if (section.layout === 'grid') { + var gridClass = 'data-grid' + (section.id === 'basic' ? ' data-grid--3col' : ''); + bodyHtml = '
'; + items.forEach(function(item) { + bodyHtml += '
' + item.bodyParamName + '
' + displayVal(item) + (item.unit ? '' + item.unit + '' : '') + statusTag(item) + '
'; + }); + bodyHtml += '
'; + if (section.id === 'basic') { + var bmiItem = map['ppBMI'], bmi = bmiItem ? parseFloat(bmiItem.currentValue) : 22; + var bmiPct = Math.min(Math.max((bmi - 14) / 26 * 100, 2), 98); + bodyHtml += '
BMI<18.5 消瘦18.5≤BMI<24 正常24≤BMI<28 超重BMI≥28 肥胖
'; + } + } else if (section.layout === 'limb') { + bodyHtml = '
'; + (section.limbs || []).forEach(function(lb) { + var massItem = map[lb.massKey], rateItem = map[lb.rateKey]; + var massVal = massItem ? formatVal(massItem.currentValue) : '--'; + var rateVal = rateItem ? formatVal(rateItem.currentValue) : '--'; + bodyHtml += '
' + lb.label + '
' + massVal + '' + section.massUnit + '|' + rateVal + '' + section.rateUnit + '
'; + }); + bodyHtml += '
'; + } else { + items.forEach(function(item) { + bodyHtml += '
' + item.bodyParamName + '
' + displayVal(item) + '' + (item.unit ? '' + item.unit + '' : '') + statusTagRow(item) + '
'; + }); + } + return '
' + titleHtml + bodyHtml + '
'; +} + +function renderAll(type) { + var map = buildMap(lefuData8); + var html = ''; + sectionConfig.forEach(function(section) { + if (section.only8 && type !== '8') return; + html += renderSection(section, map, type); + }); + document.getElementById('reportContent').innerHTML = html; +} + +/* ======================================================================== + * 其他设备数据 + * ======================================================================== */ 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:'正常' } - ], bmi: true }, - { title: '水分与蛋白质', type: 'rows', fields: [ - { label:'体水分量', value:'38.6', unit:'kg' }, - { label:'体水分率', value:'53.2', unit:'%' }, - { label:'蛋白质量', value:'8.5', unit:'kg' }, - { label:'蛋白质率', value:'11.7', unit:'%' } + { 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:'正常' } + ], bmi:true }, + { title:'水分与蛋白质', type:'rows', fields:[ + { label:'体水分量', value:'38.6', unit:'kg' }, { label:'体水分率', value:'53.2', unit:'%' }, + { label:'蛋白质量', value:'8.5', unit:'kg' }, { label:'蛋白质率', value:'11.7', unit:'%' } ]}, - { title: '肌肉与骨骼', type: 'rows', fields: [ - { label:'肌肉率', value:'42.6', unit:'%' }, - { label:'肌肉量', value:'30.9', unit:'kg' }, + { title:'肌肉与骨骼', type:'rows', fields:[ + { label:'肌肉率', value:'42.6', unit:'%' }, { label:'肌肉量', value:'30.9', unit:'kg' }, { label:'体骨骼量/骨量', value:'3.1', unit:'kg' } ]}, - { title: '脂肪分析', type: 'rows', fields: [ - { label:'皮下脂肪率', value:'16.8', unit:'%' }, - { label:'内脏脂肪等级', value:'6', status:'正常' }, + { title:'脂肪分析', type:'rows', fields:[ + { label:'皮下脂肪率', value:'16.8', unit:'%' }, { label:'内脏脂肪等级', value:'6', status:'正常' }, { label:'去脂体重', value:'57.3', unit:'kg' } ]}, - { title: '其他', type: 'rows', fields: [ - { label:'无机盐量/矿物质量', value:'3.52', unit:'kg' }, - { label:'细胞内液', value:'24.1', unit:'kg' }, - { label:'细胞外液', value:'14.5', unit:'kg' }, - { label:'健康评分', value:'82', unit:'分' } + { title:'其他', type:'rows', fields:[ + { label:'无机盐量/矿物质量', value:'3.52', unit:'kg' }, { label:'细胞内液', value:'24.1', unit:'kg' }, + { label:'细胞外液', value:'14.5', unit:'kg' }, { label:'健康评分', value:'82', unit:'分' } ]} ], - /* ========== 蓝牙秤 ========== */ - bluetooth: [ - { 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:'正常' } - ], bmi: true }, - { title: '水分与蛋白质', type: 'rows', fields: [ - { label:'体水分量', value:'37.8', unit:'kg' }, - { label:'体水分率', value:'52.1', unit:'%' }, - { label:'蛋白质量', value:'8.2', unit:'kg' }, - { label:'蛋白质率', value:'11.3', unit:'%' } - ]}, - { title: '肌肉与骨骼', type: 'rows', fields: [ - { label:'体肌肉量', value:'30.5', unit:'kg' }, - { label:'体肌肉率', value:'42.1', unit:'%' }, - { label:'体骨骼量', value:'3.0', unit:'kg' } - ]}, - { title: '脂肪分析', type: 'rows', fields: [ - { label:'皮下脂肪量', value:'12.8', unit:'kg' }, - { label:'皮下脂肪率', value:'17.7', unit:'%' }, - { label:'除脂肪量', value:'57.3', unit:'kg' } - ]}, - { title: '细胞液', type: 'rows', fields: [ - { label:'细胞外液量', value:'14.2', unit:'L' }, - { label:'细胞外液率', value:'37.6', unit:'%' }, - { label:'细胞内液量', value:'23.6', unit:'L' }, - { label:'细胞内液率', value:'62.4', unit:'%' } - ]}, - { title: '其他', type: 'rows', fields: [ - { label:'矿物质量', value:'3.48', unit:'kg' } - ]} - ], - /* ========== 体脂仪 ========== */ 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' }, + { 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:'InBody评分', value:'62', unit:'分' } - ], bmi: true }, - { title: '体脂分析', type: 'rows', fields: [ - { label:'体脂肪量', value:'15.2', unit:'kg' }, - { label:'体脂肪率', value:'21.0', unit:'%', status:'正常' }, - { label:'内脏脂肪等级', value:'6', status:'正常' }, - { label:'肥胖度', value:'147', unit:'%' }, + ], bmi:true }, + { title:'体脂分析', type:'rows', fields:[ + { 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' } ]}, - { title: '体成分', type: 'rows', fields: [ - { label:'体水分', value:'43.7', unit:'L' }, - { label:'蛋白质', value:'11.8', unit:'kg' }, - { label:'无机盐', value:'4.11', unit:'kg' }, - { label:'骨骼肌量', value:'33.6', unit:'kg' }, + { title:'体成分', type:'rows', fields:[ + { label:'体水分', value:'43.7', unit:'L' }, { label:'蛋白质', value:'11.8', unit:'kg' }, + { label:'无机盐', value:'4.11', unit:'kg' }, { label:'骨骼肌量', value:'33.6', unit:'kg' }, { label:'骨骼肌指数', value:'8.8', unit:'kg/m²' } ]}, - { title: '体重管理', type: 'rows', fields: [ - { label:'目标体重', value:'70.2', unit:'kg' }, - { label:'体重控制', value:'-2.3', unit:'kg' }, - { label:'脂肪控制', value:'-3.1', unit:'kg' }, - { label:'肌肉控制', value:'+0.8', unit:'kg' }, + { title:'体重管理', type:'rows', fields:[ + { label:'目标体重', value:'70.2', unit:'kg' }, { label:'体重控制', value:'-2.3', unit:'kg' }, + { label:'脂肪控制', value:'-3.1', unit:'kg' }, { label:'肌肉控制', value:'+0.8', unit:'kg' }, { label:'腰臀比', value:'0.88' } ]}, - { title: '节段脂肪', type: 'segment', cols:['部位','测量值(kg)'], - rows: [ - ['左上肢','2.7'], ['右上肢','2.6'], - ['左下肢','4.7'], ['右下肢','4.8'], - ['躯干','17.5'] - ] - }, - { title: '节段肌肉', type: 'segment', cols:['部位','测量值(kg)'], - rows: [ - ['左上肢','3.35'], ['右上肢','3.50'], - ['左下肢','9.11'], ['右下肢','9.40'], - ['躯干','26.9'] - ] - } + { title:'节段脂肪', type:'segment', cols:['部位','测量值(kg)'], rows:[ + ['左上肢','2.7'], ['右上肢','2.6'], ['左下肢','4.7'], ['右下肢','4.8'], ['躯干','17.5'] + ]}, + { title:'节段肌肉', type:'segment', cols:['部位','测量值(kg)'], rows:[ + ['左上肢','3.35'], ['右上肢','3.50'], ['左下肢','9.11'], ['右下肢','9.40'], ['躯干','26.9'] + ]} ] }; -/* 渲染 */ -var sections = deviceData[device] || deviceData.fat; -var html = ''; -sections.forEach(function(sec) { - html += '
'; - html += '
' + sec.title + '
'; - if (sec.type === 'grid') { - html += '
'; - sec.fields.forEach(function(f) { - html += '
' + f.label + '
'; - html += '
' + f.value; - if (f.unit) html += '' + f.unit + ''; - if (f.status) html += '' + f.status + ''; - html += '
'; - }); - html += '
'; - if (sec.bmi) { - html += '
'; - html += '
BMI<18.5 消瘦18.5≤BMI<24 正常24≤BMI<28 超重BMI≥28 肥胖
'; +/* ===== 渲染 ===== */ +if (device === 'bluetooth') { + // 蓝牙秤:8电极绿色主题 + document.getElementById('reportHeader').classList.add('report-header--bluetooth'); + var map = buildMap(lefuData8); + var wt = map['ppWeightKg']; var bmiItem = map['ppBMI']; + var bmiVal = bmiItem ? parseFloat(bmiItem.currentValue) : 22; + var bmiTag = getBMITag(bmiVal); + document.getElementById('reportHeader').innerHTML = + '
' + + '
2026-07-16 08:32
' + + '蓝牙秤' + + '
' + + '
' + + '
' + formatVal(wt.currentValue) + 'kg
' + + '
BMI ' + bmiTag.label + '较上次 -0.3kg
' + + '
'; + renderAll('8'); +} else { + // 其他设备:原有渲染 + var sections = deviceData[device] || deviceData.fat; + var html = ''; + sections.forEach(function(sec) { + html += '
' + sec.title + '
'; + if (sec.type === 'grid') { + html += '
'; + sec.fields.forEach(function(f) { + html += '
' + f.label + '
' + f.value + (f.unit ? '' + f.unit + '' : '') + (f.status ? '' + f.status + '' : '') + '
'; + }); + html += '
'; + if (sec.bmi) { + html += '
BMI<18.5 消瘦18.5≤BMI<24 正常24≤BMI<28 超重BMI≥28 肥胖
'; + } + } else if (sec.type === 'rows') { + sec.fields.forEach(function(f) { + html += '
' + f.label + '
' + f.value + '' + (f.unit ? '' + f.unit + '' : '') + (f.status ? '' + f.status + '' : '') + '
'; + }); + } else if (sec.type === 'segment') { + html += ''; + sec.cols.forEach(function(c) { html += ''; }); + html += ''; + sec.rows.forEach(function(r) { html += ''; r.forEach(function(v) { html += ''; }); html += ''; }); + html += '
' + c + '
' + v + '
'; } - } else if (sec.type === 'rows') { - sec.fields.forEach(function(f, i) { - html += '
'; - html += '' + f.label + ''; - html += '
' + f.value + ''; - if (f.unit) html += '' + f.unit + ''; - if (f.status) html += '' + f.status + ''; - html += '
'; - }); - } else if (sec.type === 'segment') { - html += ''; - sec.cols.forEach(function(c) { html += ''; }); - html += ''; - sec.rows.forEach(function(r) { - html += ''; - r.forEach(function(v, i) { html += ''; }); - html += ''; - }); - html += '
' + c + '
' + v + '
'; - } - html += '
'; -}); -document.getElementById('reportContent').innerHTML = html; + html += '
'; + }); + document.getElementById('reportContent').innerHTML = html; +} diff --git a/other-module/bluetooth-scale-miniprogram/add-member.html b/other-module/bluetooth-scale-miniprogram/add-member.html index 210ea8f..c76408c 100644 --- a/other-module/bluetooth-scale-miniprogram/add-member.html +++ b/other-module/bluetooth-scale-miniprogram/add-member.html @@ -210,7 +210,6 @@