Просмотр исходного кода

fix(frontend): report-detail.vue 缺少 blocks 时展示 payload 回退内容

修复两个问题:
1. 当 report_blocks 表无数据时,blocks 为空数组,页面显示'暂无报告内容'。
   新增 payload 回退展示区:当 blocks 为空但 payload 有数据时,展示综合评分、健康指标、疾病风险。
2. 编辑按钮 hasRiskBlocks 条件始终为 false(检查 block.riskLevel 而非 items 内 level),
   导致编辑按钮永不显示。改为 isGutFlora 条件即可,blocks 为空时按钮文案变为'查看完整数据 ›'
liaoxg 1 месяц назад
Родитель
Сommit
33546f1b74
1 измененных файлов с 28 добавлено и 5 удалено
  1. 28 5
      cfc-frontend/pages/health/report-detail.vue

+ 28 - 5
cfc-frontend/pages/health/report-detail.vue

@@ -14,9 +14,30 @@
       <!-- view mode -->
       <!-- view mode -->
       <view v-if="pageMode==='view'">
       <view v-if="pageMode==='view'">
         <report-blocks-renderer v-if="blocks && blocks.length > 0" :blocks="blocks" />
         <report-blocks-renderer v-if="blocks && blocks.length > 0" :blocks="blocks" />
+        <view v-else-if="hasPayloadData" class="payload-fallback">
+          <view class="card" v-if="payload.summary && payload.summary.overallScore">
+            <view class="card-title">综合评分</view>
+            <text class="score-text">{{ payload.summary.overallScore }}</text>
+          </view>
+          <view class="card" v-if="payload.indicators && payload.indicators.length">
+            <view class="card-title">健康指标({{ payload.indicators.length }} 项)</view>
+            <view class="indicator-item" v-for="(ind, idx) in payload.indicators" :key="'fallback-' + idx">
+              <text class="ind-name">{{ ind.indicatorName || ind.name || '' }}</text>
+              <text class="ind-value">{{ ind.indicatorValue || ind.value || '' }}{{ ind.unit || '' }}</text>
+              <text class="ind-status" :class="'status-' + _cssClass(ind.status)">{{ statusText(ind.status) }}</text>
+            </view>
+          </view>
+          <view class="card" v-if="payload.diseaseRisks && payload.diseaseRisks.length">
+            <view class="card-title">疾病风险</view>
+            <view class="risk-item" v-for="(risk, idx) in payload.diseaseRisks" :key="'risk-fb-' + idx">
+              <text class="risk-name">{{ risk.diseaseName || '' }}</text>
+              <view class="risk-level" :class="'risk-' + (risk.riskLevel || 'low')">{{ riskLevelText(risk.riskLevel) }}</view>
+            </view>
+          </view>
+        </view>
         <view class="empty-hint" v-else>暂无报告内容</view>
         <view class="empty-hint" v-else>暂无报告内容</view>
-        <view class="edit-btn" v-if="isGutFlora && hasRiskBlocks && pageMode==='view'">
-          <view class="nav-edit" @tap="enterEditMode"><text>编辑</text></view>
+        <view class="edit-btn" v-if="isGutFlora && pageMode==='view'">
+          <view class="nav-edit" @tap="enterEditMode"><text>{{ blocks && blocks.length > 0 ? '编辑' : '查看完整数据 ›' }}</text></view>
         </view>
         </view>
       </view>
       </view>
 
 
@@ -433,9 +454,9 @@ export default {
     isGutFlora() {
     isGutFlora() {
       return this.reportType === 'gut_flora'
       return this.reportType === 'gut_flora'
     },
     },
-    hasRiskBlocks() {
-      var list = this.blocks || []
-      return list.some(function(b) { return b.riskLevel === 'high' || b.riskLevel === 'medium' || b.riskLevel === 'moderate' })
+    hasPayloadData() {
+      var p = this.payload
+      return p && ((p.indicators && p.indicators.length > 0) || (p.diseaseRisks && p.diseaseRisks.length > 0) || (p.gutFlora && p.gutFlora.length > 0))
     },
     },
     totalAbnormalCount() {
     totalAbnormalCount() {
       var list = this.payload.indicators || []
       var list = this.payload.indicators || []
@@ -899,6 +920,8 @@ export default {
   font-size: 26rpx;
   font-size: 26rpx;
   padding: 60rpx 0;
   padding: 60rpx 0;
 }
 }
+.payload-fallback { padding: 0; }
+.payload-fallback .score-text { font-size: 48rpx; font-weight: bold; color: #4A9BD7; text-align: center; display: block; padding: 20rpx 0; }
 .edit-btn {
 .edit-btn {
   margin: 30rpx 0;
   margin: 30rpx 0;
   display: flex;
   display: flex;