feat: 详细报告接入 v3 测量历史接口,设备列表接入设备接口

- 详细报告按 scaleType 区分 4/8 电极渲染,节段卡片 8 电极专属
- 设备列表改为接口驱动并新增空态
- 登录后统一跳首页,请求层兼容 code 0 返回风格

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
17792275749
2026-08-20 17:20:07 +08:00
co-authored by Claude Opus 4.7
parent fce9701254
commit d6e59df4e9
11 changed files with 581 additions and 392 deletions
@@ -23,13 +23,13 @@
</view>
<view class="header-bottom">
<view class="header-weight">
<view class="weight-num1">88</view>
<view class="weight-num2">.88</view>
<view class="weight-num1">{{ header.weightInt }}</view>
<view class="weight-num2">{{ header.weightDecimal }}</view>
<view class="weight-unit">kg</view>
</view>
<view class="header-info">
<view class="header-bmi">{{ header.bmi }}</view>
<view class="header-change">{{ header.change }}</view>
<view class="header-bmi" wx:if="{{ header.bmiText }}">{{ header.bmiText }}</view>
<view class="header-change" wx:if="{{ header.changeText }}">{{ header.changeText }}</view>
</view>
</view>
</view>
@@ -41,43 +41,16 @@
<view class="basicIndicatorsTitleText">基础指标</view>
</view>
<view class="basicIndicatorsGrid">
<view class="basicIndicatorsRow">
<view class="basicIndicatorsCell">
<view class="basicIndicatorsLabel">体重</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">172</view>
<view class="basicIndicatorsUnit">kg</view>
</view>
<view class="basicIndicatorsRow" wx:for="{{ basicRows }}" wx:for-item="row" wx:key="index">
<view class="basicIndicatorsCell" wx:for="{{ row }}" wx:for-item="cell" wx:key="label">
<block wx:if="{{ cell.label }}">
<view class="basicIndicatorsLabel">{{ cell.label }}</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">{{ cell.value }}</view>
<view class="basicIndicatorsUnit" wx:if="{{ cell.unit }}">{{ cell.unit }}</view>
</view>
</block>
</view>
<view class="basicIndicatorsCell">
<view class="basicIndicatorsLabel">BMI</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">22.4</view>
</view>
</view>
<view class="basicIndicatorsCell">
<view class="basicIndicatorsLabel">体脂率</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">22.1</view>
<view class="basicIndicatorsUnit">%</view>
</view>
</view>
</view>
<view class="basicIndicatorsRow">
<view class="basicIndicatorsCell">
<view class="basicIndicatorsLabel">身体得分</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">73</view>
<view class="basicIndicatorsUnit">分</view>
</view>
</view>
<view class="basicIndicatorsCell">
<view class="basicIndicatorsLabel">健康评估</view>
<view class="basicIndicatorsValueRow">
<view class="basicIndicatorsValue">一般</view>
</view>
</view>
<view class="basicIndicatorsCell"></view>
</view>
</view>
<view class="basicIndicatorsScale">
@@ -86,7 +59,7 @@
<view class="basicIndicatorsBlock basicIndicatorsBlock--normal"></view>
<view class="basicIndicatorsBlock basicIndicatorsBlock--over"></view>
<view class="basicIndicatorsBlock basicIndicatorsBlock--obese"></view>
<view class="basicIndicatorsCircle"></view>
<view class="basicIndicatorsCircle" style="left: {{ bmiCircleLeft }}%;"></view>
</view>
<view class="basicIndicatorsScaleRow">
<view>消瘦</view>
@@ -107,58 +80,13 @@
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">身体成分</view>
<view class="metricCardTitleText">{{ bodyComposition.title }}</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">水分率</view>
<view class="metricCardValue">50%</view>
<view class="metricCardStatus metricCardStatus--low">不足</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">水分量</view>
<view class="metricCardValue">30.6kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">蛋白质率</view>
<view class="metricCardValue">10%</view>
<view class="metricCardStatus metricCardStatus--high">超量</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">蛋白质量</view>
<view class="metricCardValue">8.2kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">脂肪量</view>
<view class="metricCardValue">14.3kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">肌肉量</view>
<view class="metricCardValue">38.8kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">肌肉率</view>
<view class="metricCardValue">69.2%</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">骨骼肌量</view>
<view class="metricCardValue">22.5kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">骨骼肌率</view>
<view class="metricCardValue">40%</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">骨量</view>
<view class="metricCardValue">2.3kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
<view class="metricCardRow" wx:for="{{ bodyComposition.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
@@ -167,23 +95,13 @@
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">脂肪分析</view>
<view class="metricCardTitleText">{{ fatAnalysis.title }}</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">内脏脂肪</view>
<view class="metricCardValue">6</view>
<view class="metricCardStatus metricCardStatus--low">不足</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">皮下脂肪率</view>
<view class="metricCardValue">22.5%</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">皮下脂肪量</view>
<view class="metricCardValue">12.6kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
<view class="metricCardRow" wx:for="{{ fatAnalysis.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
@@ -192,33 +110,13 @@
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">体态管理</view>
<view class="metricCardTitleText">{{ physique.title }}</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">理想体重</view>
<view class="metricCardValue">62.1kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">去脂体重</view>
<view class="metricCardValue">41.7kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">身体年龄</view>
<view class="metricCardValue">20岁</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">身体类型</view>
<view class="metricCardValue">缺乏运动型</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">推测腰臀比</view>
<view class="metricCardValue">0.8%</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
<view class="metricCardRow" wx:for="{{ physique.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
@@ -227,203 +125,94 @@
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">体重管控</view>
<view class="metricCardTitleText">{{ weightControl.title }}</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">控制体重</view>
<view class="metricCardValue">3.9kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">脂肪控制量</view>
<view class="metricCardValue">-0.5kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">肌肉控制量</view>
<view class="metricCardValue">4.4kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
<view class="metricCardRow" wx:for="{{ weightControl.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
<!-- 细胞液分析 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">细胞液分析</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">细胞内水量</view>
<view class="metricCardValue">19.1kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">细胞外水量</view>
<view class="metricCardValue">11.4kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
</view>
</view>
<block wx:if="{{ isEightElectrode }}">
<!-- 进阶成分 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">进阶成分</view>
</view>
<view class="metricCardList">
<view class="metricCardRow">
<view class="metricCardLabel">无机盐量</view>
<view class="metricCardValue">2.9kg</view>
<view class="metricCardStatus metricCardStatus--low">不足</view>
<!-- 细胞液分析 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">{{ cellWater.title }}</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">身体细胞量</view>
<view class="metricCardValue">27.4kg</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
</view>
<view class="metricCardRow">
<view class="metricCardLabel">骨骼肌质量指数</view>
<view class="metricCardValue">7.2kg/m²</view>
<view class="metricCardStatus metricCardStatus--normal">标准</view>
<view class="metricCardList">
<view class="metricCardRow" wx:for="{{ cellWater.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
</view>
<!-- 躯干/四肢脂肪 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">躯干/四肢脂肪</view>
</view>
<view class="bodyPartsList">
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">左臂</view>
<view class="bodyPartValue">
<view class="bodyPartNum">2.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">80.9</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<view class="bodyPartCell">
<view class="bodyPartLabel">右臂</view>
<view class="bodyPartValue">
<view class="bodyPartNum">2.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">80.9</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<!-- 进阶成分 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">{{ advancedComposition.title }}</view>
</view>
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">左腿</view>
<view class="bodyPartValue">
<view class="bodyPartNum">6.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">100</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<view class="bodyPartCell">
<view class="bodyPartLabel">右腿</view>
<view class="bodyPartValue">
<view class="bodyPartNum">6.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">100</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
</view>
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">躯干</view>
<view class="bodyPartValue">
<view class="bodyPartNum">18.4</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">97.8</view>
<view class="bodyPartUnit">%</view>
</view>
<view class="metricCardList">
<view class="metricCardRow" wx:for="{{ advancedComposition.rows }}" wx:key="label">
<view class="metricCardLabel">{{ item.label }}</view>
<view class="metricCardValue">{{ item.value }}{{ item.unit }}</view>
<view class="metricCardStatus" wx:if="{{ item.status }}" style="background-color: {{ item.color }};">{{ item.status }}</view>
</view>
</view>
</view>
</view>
<!-- 躯干/四肢肌肉 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">躯干/四肢肌肉</view>
</view>
<view class="bodyPartsList">
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">左臂</view>
<view class="bodyPartValue">
<view class="bodyPartNum">2.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">80.9</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<view class="bodyPartCell">
<view class="bodyPartLabel">右臂</view>
<view class="bodyPartValue">
<view class="bodyPartNum">2.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">80.9</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<!-- 躯干/四肢脂肪 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">{{ bodyFat.title }}</view>
</view>
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">左腿</view>
<view class="bodyPartValue">
<view class="bodyPartNum">6.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">100</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
<view class="bodyPartCell">
<view class="bodyPartLabel">右腿</view>
<view class="bodyPartValue">
<view class="bodyPartNum">6.3</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">100</view>
<view class="bodyPartUnit">%</view>
</view>
</view>
</view>
<view class="bodyPartsRow">
<view class="bodyPartCell">
<view class="bodyPartLabel">躯干</view>
<view class="bodyPartValue">
<view class="bodyPartNum">18.4</view>
<view class="bodyPartUnit">kg</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">97.8</view>
<view class="bodyPartUnit">%</view>
<view class="bodyPartsList">
<view class="bodyPartsRow" wx:for="{{ bodyFat.rows }}" wx:key="index" wx:for-item="row">
<view class="bodyPartCell" wx:for="{{ row }}" wx:key="label" wx:for-item="part">
<view class="bodyPartLabel">{{ part.label }}</view>
<view class="bodyPartValue">
<view class="bodyPartNum">{{ part.massValue }}</view>
<view class="bodyPartUnit">{{ part.massUnit }}</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">{{ part.rateValue }}</view>
<view class="bodyPartUnit">{{ part.rateUnit }}</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 躯干/四肢肌肉 -->
<view class="metricCard">
<view class="metricCardTitle">
<view class="metricCardBar"></view>
<view class="metricCardTitleText">{{ bodyMuscle.title }}</view>
</view>
<view class="bodyPartsList">
<view class="bodyPartsRow" wx:for="{{ bodyMuscle.rows }}" wx:key="index" wx:for-item="row">
<view class="bodyPartCell" wx:for="{{ row }}" wx:key="label" wx:for-item="part">
<view class="bodyPartLabel">{{ part.label }}</view>
<view class="bodyPartValue">
<view class="bodyPartNum">{{ part.massValue }}</view>
<view class="bodyPartUnit">{{ part.massUnit }}</view>
<view class="bodyPartSep">丨</view>
<view class="bodyPartNum">{{ part.rateValue }}</view>
<view class="bodyPartUnit">{{ part.rateUnit }}</view>
</view>
</view>
</view>
</view>
</view>
</block>
</view>
</view>