张田田 9 месяцев назад
Родитель
Сommit
1113ae0a39

+ 0 - 0
miniprogram/components/media-carousel/media-carousel.wxss → miniprogram/components/media-carousel/media-carousel.scss


+ 23 - 16
miniprogram/components/media-carousel/media-carousel.js → miniprogram/components/media-carousel/media-carousel.ts

@@ -1,14 +1,23 @@
-// components/media-carousel/media-carousel.js
+// components/media-carousel/media-carousel.ts
+
+// 定义微信小程序组件的类型
+interface IComponentInstance {
+  setData: (data: any) => void;
+  triggerEvent: (name: string, detail: any) => void;
+  data: any;
+  properties: any;
+}
+
+interface IComponentOptions {
+  properties: Record<string, any>;
+  data: any;
+  methods: Record<string, Function>;
+}
+
+// 声明全局的 Component 函数
+declare function Component(options: IComponentOptions): void;
+
 Component({
-  lifetimes: {
-    attached: function() {
-      console.log(this.properties.mediaList, "mediaList");
-      console.log('组件被添加到页面中');
-    },
-    detached: function() {
-      console.log('组件从页面中移除');
-    }
-  },
   /**
    * 组件的属性列表
    */
@@ -17,7 +26,7 @@ Component({
     mediaList: {
       type: Array,
       value: [],
-      observer: function(newVal) {
+      observer: function(this: IComponentInstance, newVal: any[]) {
         this.setData({
           totalCount: newVal.length
         });
@@ -73,13 +82,12 @@ Component({
     totalCount: 0
   },
 
-
   /**
    * 组件的方法列表
    */
   methods: {
     // 图片加载成功
-    onImageLoad(e) {
+    onImageLoad(this: IComponentInstance, e: any) {
       const { index } = e.currentTarget.dataset;
       this.triggerEvent('imageload', {
         index: index,
@@ -89,7 +97,7 @@ Component({
     },
 
     // 图片加载失败
-    onImageError(e) {
+    onImageError(this: IComponentInstance, e: any) {
       const { index } = e.currentTarget.dataset;
   
       this.triggerEvent('imageerror', {
@@ -99,9 +107,8 @@ Component({
       });
     },
 
-
     // 视频播放错误
-    onVideoError(e) {
+    onVideoError(this: IComponentInstance, e: any) {
       const { index } = e.currentTarget.dataset;
       this.triggerEvent('videoerror', {
         index: index,

+ 25 - 8
miniprogram/module/care/pages/careDetail/careDetail.scss

@@ -79,6 +79,7 @@ border-top: 1px solid white;
   color: #999;
   min-width: 90rpx;
   display: inline-block;
+  font-size: 28rpx;
 }
 .address-block {
   background: #EBEEF4;
@@ -94,7 +95,7 @@ border-top: 1px solid white;
   margin: 24px auto;
   width: 95%;
 
-  background: -webkit-linear-gradient(top,#D6E4F5,#D6E4F5,white);
+  background: linear-gradient( 176deg, rgba(207,191,255,0.8) -1%, rgba(209,196,254,0.7) 0%, rgba(221,229,251,0.3) 20%);
 
   // background: linear-gradient(180deg, #d6e4f5 0%, #f3f4f6 100%);
   padding: 15px 10px 10px 10px;
@@ -128,7 +129,7 @@ border-top: 1px solid white;
   padding: 6rpx;
 }
 .header-title {
-  font-size: 30rpx;
+  font-size: 32rpx;
   font-weight: 600;
   color: #222;
   margin-left: 12rpx;
@@ -141,11 +142,12 @@ border-top: 1px solid white;
   // box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
 }
 .scheme-title {
-  font-size: 28rpx;
+  font-size: 32rpx;
   font-weight: 600;
   color: #222;
   text-align: center;
-  margin-bottom: 12rpx;
+  margin-bottom: 20rpx;
+  margin-top: 15rpx;
 }
 .divider {
   height: 1rpx;
@@ -172,7 +174,7 @@ border-top: 1px solid white;
   justify-content: space-between;
 }
 .scheme-row.light {
-  color: #999;
+  // color: #999;
   font-size: 14px;
 }
 .success {
@@ -185,7 +187,7 @@ border-top: 1px solid white;
   color: #1976d2;
   margin-left: 16rpx;
   font-weight: 500;
-  font-size: 26rpx;
+  font-size: 28rpx;
 
 }
 .text-gray{
@@ -202,7 +204,7 @@ border-top: 1px solid white;
   margin-bottom: 8rpx;
 }
 .desc-label {
-  font-weight: bold;
+  // font-weight: bold;
   color: #222;
   margin-right: 8rpx;
   font-size: 26rpx;
@@ -589,4 +591,19 @@ ec-canvas {
   align-items: center;
   margin: 20rpx;
 }
-
+.complete-box{
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  
+}
+.bottom-box{
+  background-color: #D6E4F5;
+  border-radius: 16px;
+}
+.care-box{
+  background: linear-gradient(176deg, rgba(207, 191, 255, 0.8) 0%, rgba(209, 196, 254, 0.7) 0%, rgba(221, 229, 251, 0.3) 8%);
+}
+.result-box{
+  background: linear-gradient(176deg, rgba(207, 191, 255, 0.8) 0%, rgba(209, 196, 254, 0.7) 0%, rgba(221, 229, 251, 0.3) 8%);
+}

+ 30 - 13
miniprogram/module/care/pages/careDetail/careDetail.wxml

@@ -24,7 +24,8 @@
                  {{careDetail.provinceName}}{{careDetail.cityName}}{{careDetail.areaName}}{{careDetail.detailAddress}}
                   </view>
                   <view>
-                  <text style="margin-right:10px" wx:if="{{careDetail.patientName}}"> {{careDetail.patientName}}</text>
+                  <text style="margin-right:10px" wx:if="{{careDetail.patientName || careDetail.liaison}}">
+                   {{careDetail.patientName || careDetail.liaison}}</text>
                   <text wx:if="{{careDetail.phone}}">{{careDetail.phone}}</text>
                   </view>
                 </view>
@@ -33,6 +34,8 @@
             </view>
           </view>
         </view>
+
+        <view class="bottom-box">
         <!-- 健康状况卡片 -->
         <view class="info-card status-card">
           <view class="row">
@@ -47,8 +50,10 @@
             <view class="row"><text class="label">证型:</text>{{careDetail.healthAnalysisReport.diagnoseSyndromeSummary}}</view>
           </view>
         </view>
+           </view>
         <!-- 调养方案 -->
-        <view class="info-card status-card">
+           <view class="bottom-box">
+        <view class="info-card status-card care-box">
           <view class="row">
             <image class="icon" src="../../assets/icon/icon_scheme@2x.png" mode="heightFix" />
             <text class="card-title">调养方案</text>
@@ -93,7 +98,7 @@
               </view>
               <view class="scheme-row">
                 <text class="text-gray">频次:</text>
-                每 {{item.frequencyType}}天{{item.frequencyMeasure}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit || '次'}}
+                每{{item.frequencyType}}  {{item.frequencyMeasure}} {{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit || '次'}}
               </view>
               <view class="scheme-row">
                 <text class="text-gray">机构:</text>
@@ -134,21 +139,25 @@
                 </view>
               <view class="scheme-row light">
                 <text class="text-gray">数量:</text>
-                {{item.totalMeasure}}
+                <text>{{item.totalMeasure}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit}}</text>
+             
               </view>
               <view class="scheme-row between">
                 <text>
                   <text class="label between">频次:</text>
                   <text>每{{item.frequencyType}}天{{item.frequencyMeasure}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit}}</text>
                 </text>
-              <text class="link" bindtap="onCardRecord" data-id="{{item.id}}" wx:if="{{item.conditioningProgramDetail.isOffline && item.conditioningProgramDetail.isOffline==='N'}}">打卡记录</text>
+              <view class="link" bindtap="onCardRecord" data-id="{{item.id}}" wx:if="{{item.conditioningProgramDetail.isOffline && item.conditioningProgramDetail.isOffline==='N'}}">打卡记录</view>
 
               </view>
-              <view class="desc-row">
+              <view class="desc-row" wx:if="{{item.remark}}">
+              <text class="label between">说明:</text>
                 <text class="desc-label">{{item.remark || ''}}</text>
               </view>
             </view>
+  </view>
             <!-- 健康评估-->
+               <view class="bottom-box">
             <view class="scheme-card" wx:if="{{item.conditioningProgramDetail.conditioningProgramType && item.conditioningProgramDetail.conditioningProgramType==='健康评估'}}">
               <view class="scheme-title">{{item.conditioningProgramDetail.name}}</view>
               <view class="divider"></view>
@@ -178,33 +187,37 @@
                 </view>
                 </view>
               <view class="scheme-row between" style="margin-top:15px">
-                <text>
+                <view>
                   <text class="text-gray">已完成:</text>
                   <text class="success">
                     <text> {{item.finishCount}}次</text>
                     <text style="margin:0 5px;color:black">/</text>
                     <text style="color:black">{{item.totalMeasure}}次</text>
                   </text>
-                </text>
-                <text class="link" bindtap="onReport" data-id="{{item.id}}" wx:if="{{item.conditioningProgramDetail.conditioningProgramType && item.conditioningProgramDetail.conditioningProgramType==='健康评估'}}">健康分析报告</text>
+                </view>
+                <view class="link" bindtap="onReport" 
+                data-id="{{item.id}}" 
+                wx:if="{{item.conditioningProgramDetail.conditioningProgramType && item.conditioningProgramDetail.conditioningProgramType==='健康评估'}}">
+                健康分析报告</view>
               </view>
               <view class="scheme-row">
                 <text class="text-gray">频次:</text>
                 <view wx:if="{{item.frequencyType==='不限'}}">{{item.frequencyType}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit}}</view>
                 <view wx:else>
-                  每 {{item.frequencyType}}天{{item.frequencyMeasure}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit}}
+                  每{{item.frequencyType}}天{{item.frequencyMeasure}}{{item.conditioningProgramDetail.cpFixedPricingRule.convertUnit}}
                 </view>
-              
               </view>
-              <view class="desc-row" wx:if="{{item.remark && item.remark !== ''}}">
+              <view class="desc-row" wx:if="{{item.remark}}">
                 <text class="text-gray">操作指南:</text>
                 <text class="desc-label">{{item.remark}}</text>
               </view>
             </view>
           </view>
         </view>
+          </view>
         <!--调养效果  -->
-        <view class="info-card status-card">
+        <view class="bottom-box">
+        <view class="info-card status-card result-box">
           <view class="row">
             <image class="icon" src="../../assets/icon/icon_effect@3x.png" mode="heightFix" />
             <text class="header-title">调养效果</text>
@@ -304,6 +317,10 @@
              <record-index></record-index>
           </view>
         </view>
+
+
+
+        </view>
       </block>
   </scroll-view>
 </view>

+ 4 - 2
miniprogram/module/health/pages/scheme/scheme.scss

@@ -19,14 +19,16 @@
   align-items: center;
   width: 100%;
 }
-
+.t-cell__note, .t-cell__title {
+  margin-left: 0px !important;
+}
 .date-text {
   display: flex;
   align-items: center;
 }
 .recuperate-btn {
   display: inline-block;
-  padding: 6px 12px;
+  padding: 9px 12px;
   background-color: #1d6ff6;
   color: white;
   border-radius: 4px;

+ 2 - 2
miniprogram/module/health/pages/scheme/scheme.wxml

@@ -4,12 +4,12 @@
 
 <scroll-view class="page-scroll__container" type="list" scroll-y style="{{containerStyle}}">
   <view class="card-wrapper">   
-    <t-cell t-class="card-header no-body" bordered="{{false}}" style="background:transparent" >
+    <view class="card-header no-body" bordered="{{false}}" style="background:transparent;padding-right: 6px;padding-left: 6px;" >
      <view slot="title" class="header-row">
        <view class="date-text"><text style="color:#8C8C8C">方案日期:</text><text style="color:black">{{dataset.reportTime}}</text></view>
         <view class="recuperate-btn" bind:tap="toReportPage">健康分析报告</view>
         </view>
-    </t-cell>
+    </view>
   </view>
 
 

+ 10 - 2
miniprogram/pages/home/home.scss

@@ -547,7 +547,10 @@ $scale: 0.5;
 .verify-record{
   cursor: pointer;
   color:#1976d2;
-  margin-left:20px
+  margin-left:20px;
+  border: 1px solid #1976d2;
+  padding: 5rpx 20px;
+  border-radius: 10rpx;
 }
 
 // 轮播组件样式
@@ -600,4 +603,9 @@ $scale: 0.5;
   0% { transform: rotate(0deg); }
   100% { transform: rotate(360deg); }
 }
-
+.healthyAnalyze{
+  font-size: 40rpx;
+  text-align: center;
+  color: #1976d2;
+  margin-bottom: 15px;
+}

+ 37 - 13
miniprogram/pages/home/home.ts

@@ -113,8 +113,6 @@ Page({
         // 确保 id 是数字类型
         item.id = Number(item.id);
 
-       
-
         // 添加photo
         if (item.photo) {
           item.carouselMediaList.push({
@@ -142,17 +140,14 @@ Page({
             title: "操作视频",
           });
         }
-
+    
         // 如果没有媒体内容,直接标记为已加载,避免一直显示加载状态
         if (item.carouselMediaList.length === 0) {
           item._mediaLoaded = true;
-        
         } else {
-        
           // 模拟加载过程,3秒后自动标记为已加载(防止一直显示加载状态)
           setTimeout(() => {
             if (!item._mediaLoaded) {
-           
               this.setData({
                 [`careList[${index}]._mediaLoaded`]: true,
               });
@@ -170,12 +165,35 @@ Page({
         }
       });
 
+      // 先设置 careList
       this.setData({
         careList: res,
       });
-      console.log(this.data.careList, "careList");
-
+      
+      // 然后更新 displayList,确保 carouselMediaList 的变化能被监听到
       await this.updateDisplayList();
+      
+      // 强制触发一次 carouselMediaList 的更新,确保 observer 被调用
+      setTimeout(() => {
+        res.forEach((item: any, index: number) => {
+          if (item.carouselMediaList && item.carouselMediaList.length > 0) {
+            // 通过 setData 重新设置 carouselMediaList,触发 observer
+            this.setData({
+              [`careList[${index}].carouselMediaList`]: [...item.carouselMediaList]
+            });
+            
+            // 同时更新 displayList
+            const displayIndex = this.data.displayList.findIndex(
+              (displayItem: any) => displayItem.id === item.id
+            );
+            if (displayIndex !== -1) {
+              this.setData({
+                [`displayList[${displayIndex}].carouselMediaList`]: [...item.carouselMediaList]
+              });
+            }
+          }
+        });
+      }, 100);
     }
   },
   async onLoad(options) {
@@ -392,6 +410,10 @@ Page({
             title: "程度",
             value: data?.willillDegreeName ? `${data?.willillDegreeName}` : "",
           },
+          {
+            title: "表现",
+            value: data?.willillFunctionName ? `${data?.willillFunctionName}` : "",
+          },
         ],
         [
           {
@@ -411,11 +433,6 @@ Page({
       this.setData({
         statusList: arr2,
       });
-      // [`健康状态:${data?.willillStateName}`,`程度:${data?.willillDegreeName}`],[`中医症型:${data?.factorItemSummary}`,],[`体质:${data?.constitutionGroupName}`]];
-
-      // this.setData({
-      //   statusList: arr,
-      // });
     } catch (error) {
       this.setData({
         "healthReport.data": [],
@@ -758,4 +775,11 @@ Page({
       this.updateMediaLoadedState(item);
     }
   },
+  // 没有健康分析去做健康分析
+  goHealthAnalyze() {
+    wx.redirectTo({
+      url: `/module/chats/pages/index/index?component=guide&isShowGuide=true`,
+    });
+    wx.setStorageSync("isAnalysis", 3);
+  }
 });

+ 12 - 6
miniprogram/pages/home/home.wxml

@@ -1,4 +1,3 @@
-v
 <!--pages/home/home.wxml-->
 <view class="fullscreen-bg">
 
@@ -35,9 +34,12 @@ v
         </view>
       </view>
 
-      <view class="steps-container">
-        <vertical-steps statusList="{{statusList}}" dataset="{{healthReport.data}}" bind:position="onBodyModel" />
 
+
+
+
+      <view class="steps-container" wx:if="{{statusList.length>0}}">
+        <vertical-steps statusList="{{statusList}}" dataset="{{healthReport.data}}" bind:position="onBodyModel" />
         <view class="warn-box" wx:if="{{healthIndex.data.length>0}}">
           <image src="../../assets/bg/icon_warning@3x.png" class="warn-img" />
           <view class="right-box" bind:tap="tabValue">
@@ -45,7 +47,9 @@ v
           </view>
         </view>
       </view>
-
+       <view class="healthyAnalyze" bindtap="goHealthAnalyze" wx:else >
+   请完成健康评估
+     </view>
       <view class="report-container" bind:tap="toReportPage" wx:if="{{healthReport.data.reportTime}}">
         <view class="report-box">
           <view>
@@ -78,7 +82,7 @@ v
               <!-- 这里放详细内容 -->
               <view class="item-detail" wx:if="{{item.expanded}}">
                 <!-- 轮播媒体容器 -->
-                <view class="carousel-container" wx:if="{{(item.carouselMediaList && item.carouselMediaList.length > 0) || !item._mediaLoaded}}">
+                <view class="carousel-container" wx:if="{{item.carouselMediaList && item.carouselMediaList.length > 0}}">
                   <!-- 轮播组件 -->
                   <media-carousel 
                     wx:if="{{item.carouselMediaList && item.carouselMediaList.length > 0}}"
@@ -105,7 +109,9 @@ v
                   <text wx:if="{{item.isOffline==='Y'}}">已完成:<text style="color:#2ec4b6">{{item.finishCount}}次</text><text style="margin:0 5px">/</text>
                   {{item.totalMeasure}}次</text>
                     <view catchtap="onRecord" data-id="{{item.id}}" wx:if="{{item.isOffline==='Y'}}" class="verify-record">核销记录</view>
-                    <view catchtap="pushCard" data-id="{{item.id}}" wx:else class="verify-record">打卡记录</view>
+                    <view  data-id="{{item.id}}" wx:else class="verify-record">{{
+                      item.signinTime?'已打卡':'打卡'
+                    }}</view>
                   </view>
                   <view>频次:每{{item.frequencyType}}天{{item.frequencyMeasure}}{{item.convertUnit}}</view>
                   <view>开具医生:{{item.operateBy}}</view>

+ 4 - 0
miniprogram/pages/home/request.ts

@@ -92,6 +92,10 @@ export function healthReportMethod() {
 
 export function healthIndexMethod() {
   const transform = ({ data }: AnyObject) => {
+    // console.log(data, "healthIndexMethod",Array.isArray(data), data.map((item: any) => ({
+    //   ...item,
+    //   ...item.patientQuotaRecordDTOS?.slice(-1)[0],
+    // })));
     return Array.isArray(data)
       ? data.map((item) => ({
           ...item,