Преглед изворни кода

随访管理以及小程序UI修改

张田田 пре 1 година
родитељ
комит
750b194cdc
100 измењених фајлова са 757 додато и 144 уклоњено
  1. 8 7
      miniprogram/app.json
  2. 1 0
      miniprogram/app.scss
  3. BIN
      miniprogram/assets/bg/bg_dialog@2x.png
  4. BIN
      miniprogram/assets/bg/bg_home.png
  5. BIN
      miniprogram/assets/bg/bg_interview.png
  6. BIN
      miniprogram/assets/bg/bg_records.png
  7. BIN
      miniprogram/assets/bg/bg_user@2x.png
  8. BIN
      miniprogram/assets/bg/bg_wave@3x.png
  9. BIN
      miniprogram/assets/bg/body-model-frame.bg-1.png
  10. BIN
      miniprogram/assets/bg/body-model-frame.bg.png
  11. BIN
      miniprogram/assets/bg/body-model.bg.png
  12. BIN
      miniprogram/assets/bg/button-block-1.bg.png
  13. BIN
      miniprogram/assets/bg/button-block-2.bg.png
  14. BIN
      miniprogram/assets/bg/button-line-1.bg.png
  15. BIN
      miniprogram/assets/bg/button-line-2.bg.png
  16. BIN
      miniprogram/assets/bg/health-file.bg.png
  17. BIN
      miniprogram/assets/bg/home-banner.bg.png
  18. BIN
      miniprogram/assets/bg/icon_diet@3x.png
  19. BIN
      miniprogram/assets/bg/icon_file@3x.png
  20. BIN
      miniprogram/assets/bg/icon_notice@3x.png
  21. BIN
      miniprogram/assets/bg/icon_tea@3x.png
  22. BIN
      miniprogram/assets/bg/icon_warning@3x.png
  23. BIN
      miniprogram/assets/bg/pic_body@2x.png
  24. BIN
      miniprogram/assets/bg/user-info.bg.png
  25. BIN
      miniprogram/assets/icon/fab.png
  26. BIN
      miniprogram/assets/icon/location.icon.png
  27. 17 4
      miniprogram/components/button/button.scss
  28. 52 2
      miniprogram/components/button/button.ts
  29. 10 3
      miniprogram/components/button/button.wxml
  30. 11 9
      miniprogram/components/form-picker/form-picker.scss
  31. 2 1
      miniprogram/components/form-ruler/form-ruler.scss
  32. 7 0
      miniprogram/components/tabbar/tabbar.json
  33. 0 0
      miniprogram/components/tabbar/tabbar.scss
  34. 105 0
      miniprogram/components/tabbar/tabbar.ts
  35. 5 0
      miniprogram/components/tabbar/tabbar.wxml
  36. 4 2
      miniprogram/module/article/components/diet-card/diet-card.scss
  37. 5 3
      miniprogram/module/article/components/science-card/science-card.scss
  38. 25 6
      miniprogram/module/article/pages/diet-info/diet-info.scss
  39. 4 1
      miniprogram/module/article/pages/diet-info/diet-info.wxml
  40. 2 2
      miniprogram/module/article/pages/diet-list/diet-list.ts
  41. 20 12
      miniprogram/module/article/pages/science-info/science-info.wxml
  42. 15 1
      miniprogram/module/article/pages/science-list/science-list.scss
  43. 2 2
      miniprogram/module/article/pages/science-list/science-list.ts
  44. 6 3
      miniprogram/module/article/searc-list.scss
  45. BIN
      miniprogram/module/chats/assets/button-1.bg.png
  46. BIN
      miniprogram/module/chats/assets/button-report.bg.png
  47. BIN
      miniprogram/module/chats/assets/face-1.png
  48. BIN
      miniprogram/module/chats/assets/robot.png
  49. BIN
      miniprogram/module/chats/assets/tongue-1.png
  50. BIN
      miniprogram/module/chats/assets/tongue-2.png
  51. BIN
      miniprogram/module/chats/assets/upload-picture.bg.png
  52. 11 7
      miniprogram/module/chats/common.scss
  53. 1 0
      miniprogram/module/chats/components/guide/guide.json
  54. 40 2
      miniprogram/module/chats/components/guide/guide.scss
  55. 1 0
      miniprogram/module/chats/components/guide/guide.ts
  56. 47 7
      miniprogram/module/chats/components/guide/guide.wxml
  57. 34 9
      miniprogram/module/chats/components/message-again/message-again.scss
  58. 0 2
      miniprogram/module/chats/components/message-again/message-again.ts
  59. 2 4
      miniprogram/module/chats/components/message-again/message-again.wxml
  60. 8 0
      miniprogram/module/chats/components/message-analysis/message-analysis.scss
  61. 3 4
      miniprogram/module/chats/components/message-analysis/message-analysis.wxml
  62. 11 0
      miniprogram/module/chats/components/message-count/message-count.json
  63. 12 0
      miniprogram/module/chats/components/message-count/message-count.scss
  64. 25 0
      miniprogram/module/chats/components/message-count/message-count.ts
  65. 14 0
      miniprogram/module/chats/components/message-count/message-count.wxml
  66. 2 1
      miniprogram/module/chats/components/message-follow/message-follow.wxml
  67. 28 2
      miniprogram/module/chats/components/message-report/message-report.scss
  68. 5 2
      miniprogram/module/chats/components/message-report/message-report.wxml
  69. 25 5
      miniprogram/module/chats/components/message-select/message-select.scss
  70. 0 1
      miniprogram/module/chats/components/message-select/message-select.ts
  71. 2 4
      miniprogram/module/chats/components/message-select/message-select.wxml
  72. 1 1
      miniprogram/module/chats/components/message-text/message-text.wxml
  73. 2 1
      miniprogram/module/chats/components/questionnaire/questionnaire.json
  74. 2 1
      miniprogram/module/chats/components/questionnaire/questionnaire.scss
  75. 17 4
      miniprogram/module/chats/components/questionnaire/questionnaire.ts
  76. 1 0
      miniprogram/module/chats/components/questionnaire/questionnaire.wxml
  77. 5 4
      miniprogram/module/chats/pages/analysis/analysis.json
  78. 6 3
      miniprogram/module/chats/pages/analysis/analysis.scss
  79. 82 2
      miniprogram/module/chats/pages/analysis/analysis.ts
  80. 5 5
      miniprogram/module/chats/pages/analysis/analysis.wxml
  81. 1 0
      miniprogram/module/chats/pages/index/index.json
  82. 31 2
      miniprogram/module/chats/pages/index/index.scss
  83. 5 0
      miniprogram/module/chats/pages/index/index.ts
  84. 27 13
      miniprogram/module/chats/pages/index/index.wxml
  85. BIN
      miniprogram/module/health/assets/icon/health-index.icon.png
  86. BIN
      miniprogram/module/health/assets/icon/health-patient.icon.png
  87. BIN
      miniprogram/module/health/assets/icon/health-report.icon.png
  88. BIN
      miniprogram/module/health/assets/icon/health-status-1.icon.png
  89. BIN
      miniprogram/module/health/assets/icon/health-status-2.icon.png
  90. BIN
      miniprogram/module/health/assets/icon/icon_assess@2x.png
  91. BIN
      miniprogram/module/health/assets/icon/icon_face@2x.png
  92. BIN
      miniprogram/module/health/assets/icon/icon_health@2x.png
  93. BIN
      miniprogram/module/health/assets/icon/icon_index@2x.png
  94. BIN
      miniprogram/module/health/assets/icon/icon_physique@2x.png
  95. BIN
      miniprogram/module/health/assets/icon/icon_record@2x.png
  96. BIN
      miniprogram/module/health/assets/icon/icon_scheme@2x.png
  97. BIN
      miniprogram/module/health/assets/icon/icon_tongue@2x.png
  98. BIN
      miniprogram/module/health/assets/icon/icon_zhengsu@2x.png
  99. BIN
      miniprogram/module/health/assets/icon/icon_zhengxing@2x.png
  100. BIN
      miniprogram/module/health/assets/image/bg_interview@2x.png

+ 8 - 7
miniprogram/app.json

@@ -1,5 +1,5 @@
 {
-  "pages": ["pages/home/home"],
+  "pages": ["pages/home/home", "pages/mine/mine"],
   "subpackages": [
     {
       "name": "chats",
@@ -56,13 +56,14 @@
   },
   "window": {
     "navigationStyle": "custom",
-    "navigationBarTextStyle": "white",
-    "navigationBarBackgroundColor": "#0f2226",
-    "backgroundColor": "#0f2226",
-    "backgroundColorContent": "#0f2226",
-    "backgroundColorTop": "#0f2226",
-    "backgroundColorBottom": "#0f2226"
+    "navigationBarTextStyle": "black",
+    "navigationBarBackgroundColor": "#ffffff",
+    "backgroundColor": "#ffffff",
+    "backgroundColorContent": "#ffffff",
+    "backgroundColorTop": "#ffffff",
+    "backgroundColorBottom": "#ffffff"
   },
+
   "rendererOptions": {
     "skyline": {
       "defaultDisplayBlock": true,

+ 1 - 0
miniprogram/app.scss

@@ -2,4 +2,5 @@
 
 page {
   --td-cell-title-color: #111;
+  --td-navbar-bg-color: transparent;
 }

BIN
miniprogram/assets/bg/bg_dialog@2x.png


BIN
miniprogram/assets/bg/bg_home.png


BIN
miniprogram/assets/bg/bg_interview.png


BIN
miniprogram/assets/bg/bg_records.png


BIN
miniprogram/assets/bg/bg_user@2x.png


BIN
miniprogram/assets/bg/bg_wave@3x.png


BIN
miniprogram/assets/bg/body-model-frame.bg-1.png


BIN
miniprogram/assets/bg/body-model-frame.bg.png


BIN
miniprogram/assets/bg/body-model.bg.png


BIN
miniprogram/assets/bg/button-block-1.bg.png


BIN
miniprogram/assets/bg/button-block-2.bg.png


BIN
miniprogram/assets/bg/button-line-1.bg.png


BIN
miniprogram/assets/bg/button-line-2.bg.png


BIN
miniprogram/assets/bg/health-file.bg.png


BIN
miniprogram/assets/bg/home-banner.bg.png


BIN
miniprogram/assets/bg/icon_diet@3x.png


BIN
miniprogram/assets/bg/icon_file@3x.png


BIN
miniprogram/assets/bg/icon_notice@3x.png


BIN
miniprogram/assets/bg/icon_tea@3x.png


BIN
miniprogram/assets/bg/icon_warning@3x.png


BIN
miniprogram/assets/bg/pic_body@2x.png


BIN
miniprogram/assets/bg/user-info.bg.png


BIN
miniprogram/assets/icon/fab.png


BIN
miniprogram/assets/icon/location.icon.png


+ 17 - 4
miniprogram/components/button/button.scss

@@ -2,6 +2,11 @@
   position: relative;
   text-align: center;
 
+  &.disabled {
+    opacity: 0.5;
+    pointer-events: none;
+  }
+
   &.block {
     width: 100%;
     height: 62px;
@@ -13,11 +18,19 @@
 
     .button__inner,
     .button__text {
+      // position: absolute;
+      // top: 10px;
+      // left: 0;
+      // width: 100%;
+      height: 62px - 10px * 2;
       position: absolute;
       top: 10px;
       left: 0;
-      width: 100%;
-      height: 62px - 10px * 2;
+      width: 96%;
+      background: #1d6ff6;
+      color: white;
+      border-radius: 5px;
+      left: 10px;
     }
   }
 
@@ -62,6 +75,6 @@
 
   .button__inner {
     padding: 0;
-    opacity: 0;
+    transition: opacity 0.3s ease;
   }
-}
+}

+ 52 - 2
miniprogram/components/button/button.ts

@@ -3,20 +3,70 @@ Component({
   behaviors: ['wx://form-field-button'],
   lifetimes: {
     attached() {
+      console.log('[Button] attached, initializing...');
       const mode = this.data.block ? 'block' : 'line';
       const index = this.data.index;
       this.setData({ 
         src: `../../assets/bg/button-${mode}-${index}.bg.png`,
         className: this.data.block ? 'block' : `line-${index}`,
-      })
+        isDisabled: false
+      });
+      console.log('[Button] initialized with isDisabled:', this.data.isDisabled);
     }
   },
   properties: {
     block: { type: Boolean, value: false },
     index: { type: Number, value: 1 },
+    loading: { type: Boolean, value: false },
   },
   data: {
+    list: [
+      {
+        name: '保存',
+        value: 'save',
+      },
+      {
+        name: '提交',
+        value: 'cancel',
+      },
+      {
+        name: '确定',
+        value: 'confirm',
+      },
+    ],
     src: '',
+    isDisabled: false,
+    _lastResetTime: 0
   },
-  methods: {}
+  methods: {
+    handleSubmit() {
+      console.log('[Button] handleSubmit called, isDisabled:', this.data.isDisabled);
+      if (this.data.isDisabled) {
+        console.log('[Button] button is disabled, returning');
+        return;
+      }
+      
+      // 如果是刚刚重置的按钮(100ms内),不要立即禁用
+      const now = Date.now();
+      if (now - this.data._lastResetTime < 100) {
+        console.log('[Button] button was just reset, not disabling');
+        this.triggerEvent('submit');
+        return;
+      }
+      
+      console.log('[Button] setting isDisabled to true');
+      this.setData({ isDisabled: true });
+      this.triggerEvent('submit');
+    },
+    
+    resetState() {
+      console.log('[Button] resetState called');
+      console.log('[Button] current isDisabled:', this.data.isDisabled);
+      this.setData({ 
+        isDisabled: false,
+        _lastResetTime: Date.now()
+      });
+      console.log('[Button] isDisabled set to:', false);
+    }
+  }
 })

+ 10 - 3
miniprogram/components/button/button.wxml

@@ -1,9 +1,16 @@
-<view class="button {{className}}">
-  <image wx:if="{{src}}" class="button__bg" src="{{src}}" mode="aspectFit" />
+<view class="button {{className}} {{isDisabled ? 'disabled' : ''}}">
   <view class="button__text">
     <text max-lines="{{index}}" overflow="fade">
       <slot></slot>
     </text>
   </view>
-  <button class="button__inner" form-type="submit"></button>
+  <button 
+    class="button__inner" 
+    form-type="submit" 
+    bind:tap="handleSubmit" 
+    disabled="{{isDisabled}}"
+    hover-class="{{isDisabled ? '' : 'hover'}}"
+  >
+    {{list[index].name}}
+  </button>
 </view>

+ 11 - 9
miniprogram/components/form-picker/form-picker.scss

@@ -22,7 +22,8 @@
       }
 
       &--confirm {
-        color: var(--primary-color);
+        // color: var(--primary-color);
+        color: #1D6FF6;
       }
     }
   }
@@ -35,6 +36,7 @@
 
 
 .card {
+  position: relative;
   display: flex;
   justify-content: center;
   align-items: center;
@@ -44,12 +46,13 @@
   border-radius: 12rpx;
   overflow: hidden;
   box-sizing: border-box;
-  background-color: var(--td-bg-color-secondarycontainer);
-  border: 1px solid var(--td-bg-color-container, #fff);
-
+  // background-color: var(--td-bg-color-secondarycontainer);
+  // border: 1px solid var(--td-bg-color-container, #fff);
+  background: white;
+  border: 1px solid #EEEEEE;
+  color: #191919;
   &--active {
-    border-color: var(--td-bg-color-container, #9ea1a5);
-
+    border: 1px solid #1D6FF6;
     &::after {
       content: '';
       display: block;
@@ -60,8 +63,7 @@
       height: 0;
       border-width: 28px 28px 28px 0;
       border-style: solid;
-      border-color: var(--td-bg-color-container) transparent transparent transparent;
-      border: 14px solid var(--td-bg-color-container, #0052d9);
+      border: 14px solid #1D6FF6;
       border-bottom-color: transparent;
       border-right-color: transparent;
     }
@@ -72,7 +74,7 @@
   }
 
   &__icon {
-    color: var(--primary-color, #fff);
+    color: white;
     position: absolute;
     left: 1.5px;
     top: 1.5px;

+ 2 - 1
miniprogram/components/form-ruler/form-ruler.scss

@@ -44,7 +44,8 @@
 .form-ruler {
   --height: 56px;
   --width: 100%;
-  --active-color: #34A76B;
+  // --active-color: #34A76B;
+  --active-color:#1D6FF6;
   --tick-width: 5px;
   position: relative;
   width: calc(var(--width) + 2px);

+ 7 - 0
miniprogram/components/tabbar/tabbar.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar",
+    "t-tab-bar-item": "tdesign-miniprogram/tab-bar-item/tab-bar-item"
+  }
+}

+ 0 - 0
miniprogram/components/tabbar/tabbar.scss


+ 105 - 0
miniprogram/components/tabbar/tabbar.ts

@@ -0,0 +1,105 @@
+import props from "../../miniprogram_npm/tdesign-miniprogram/action-sheet/props";
+import Tabbar from "../../miniprogram_npm/tdesign-miniprogram/tab-bar/tab-bar";
+
+Component({
+  data: {
+    pageHeight: "100vh",
+    value: "/pages/home/home",
+    list: [
+      {
+        value: "/pages/home/home",
+        label: "首页",
+        icon: "home",
+        path: "/pages/home/home",
+      },
+      {
+        value: "/module/chats/pages/index/index",
+        label: "AI对话管家",
+        icon: "app",
+        path: "/module/chats/pages/index/index",
+      },
+      {
+        value: "/pages/mine/mine",
+        label: "我的",
+        icon: "chat",
+        path: "/pages/mine/mine",
+      },
+    ],
+  },
+  properties: {
+    tabbarValue: {
+      type: String,
+      value: "",
+    },
+    patientId: {
+      type: Number,
+      value: 0,
+    },
+  },
+  methods: {
+    calculatePageHeight() {
+      const systemInfo = wx.getSystemInfoSync();
+      const windowHeight = systemInfo.windowHeight; // 屏幕可用高度
+
+      // 获取 tabbar 高度
+      const query = wx.createSelectorQuery();
+      query
+        .select(".t-tabbar")
+        .boundingClientRect((rect) => {
+          if (rect) {
+            const tabbarHeight = rect.height;
+            const contentHeight = windowHeight - tabbarHeight;
+            this.setData({
+              pageHeight: `${contentHeight}px`,
+            });
+          }
+        })
+        .exec();
+      console.log(this.data.pageHeight, "2222");
+    },
+    toChatsPage(page: string) {
+      console.log(this.data.patientId, "patientId", page);
+      if (!this.data?.patientId) {
+        wx.showModal({
+          title: "出错了",
+          content: "错误,请重试",
+          showCancel: false,
+        });
+        return;
+      }
+      wx.redirectTo({
+        url: `${page}?component=guide&isShowGuide=true`,
+      });
+      wx.setStorageSync("isAnalysis", 3);
+    },
+    onChange(e) {
+      console.log(e, "e");
+      this.setData({
+        value: e.detail.value,
+      });
+      if (e.detail.value === "/module/chats/pages/index/index") {
+        this.toChatsPage(e.detail.value);
+      } else {
+        wx.redirectTo({
+          url: `${e.detail.value}`,
+          fail: (error) => {
+            console.error('Navigation failed:', error);
+            wx.showToast({
+              title: '页面跳转失败,请重试',
+              icon: 'none'
+            });
+          }
+        });
+      }
+    },
+  },
+  lifetimes: {
+    attached() {
+      console.log(this.data.tabbarValue, "tabbarValuetabbarValue");
+      this.setData({
+        value: this.data.tabbarValue,
+      });
+      this.calculatePageHeight();
+    },
+  },
+});

+ 5 - 0
miniprogram/components/tabbar/tabbar.wxml

@@ -0,0 +1,5 @@
+<t-tab-bar t-class="t-tab-bar" value="{{value}}" bindchange="onChange" theme="tag" split="{{false}}">
+  <t-tab-bar-item wx:for="{{list}}" wx:key="value" value="{{item.value}}" icon="{{item.icon}}" data-id="{{item.id}}">
+    {{item.label}}
+  </t-tab-bar-item>
+</t-tab-bar>

+ 4 - 2
miniprogram/module/article/components/diet-card/diet-card.scss

@@ -26,7 +26,8 @@
 
   .title {
     font-size: 16px;
-    color: #fff;
+    // color: #fff;
+    color: black;
   }
 
   .description {
@@ -35,7 +36,8 @@
 
     &-2 {
       font-size: 12px;
-      color: #34A76B;
+      // color: #34A76B;
+      color: #666;
     }
   }
 

+ 5 - 3
miniprogram/module/article/components/science-card/science-card.scss

@@ -26,7 +26,8 @@
 
   .title {
     font-size: 16px;
-    color: #fff;
+    // color: #fff;
+    color:#191919 ;
   }
 
   .description {
@@ -35,7 +36,8 @@
 
     &-2 {
       font-size: 12px;
-      color: #34A76B;
+      // color: #34A76B;
+      color: #8C8C8C;
     }
   }
 
@@ -46,6 +48,6 @@
     width: 100%;
     height: 1px;
     transform: translateY(-1px);
-    background: linear-gradient(90deg, rgba(15, 34, 38, 0) 0%, var(--primary-color, #38FF6E) 50%, rgba(15, 34, 38, 0) 100%);
+    background: linear-gradient(90deg, rgba(15, 34, 38, 0) 0%, var(--primary-color, #E7E7E7) 50%, rgba(15, 34, 38, 0) 100%);
   }
 }

+ 25 - 6
miniprogram/module/article/pages/diet-info/diet-info.scss

@@ -2,28 +2,47 @@
 @import "../../searc-list.scss";
 /* module/diet/pages/diet-info/diet-info.wxss */
 
+.diet-box{
+  background: #fff;
+  border-radius: 12px;
+  margin-top: -30px;
+}
+.diet-title{
+  font-size: 40rpx;
+  color: #040000;
+  font-weight: bold;
+  padding: 24px 12px 0;
+  margin: 0 12px;
+  border-bottom: 0.5px solid #E7E7E7;
 
+  height: 60px;
+}
 .list-wrapper {
   .list-title {
-    padding: 12px 12px 0;
+    padding: 16px 17px 0;
+    color: #000000;
+    font-size: 32rpx;
+    font-weight: bold;
   }
 
   .box-wrapper {
     margin: 6px 12px;
-    padding: 16px;
+    padding: 13px 16px 16px 2px;
     font-size: 14px;
     border-radius: 4px;
-    box-shadow: inset 0px 0px 12px * 3 0px rgba(52, 167, 107, 0.38);
+    color: #000000;
+    border-bottom: 0.5px solid #E7E7E7;
+    // box-shadow: inset 0px 0px 12px * 3 0px rgba(29,111,246,0.38);
   }
 
   .item-wrapper {
     display: flex;
     justify-content: space-between;
     align-items: center;
-    margin: 0 12px;
+    margin: 0 18px;
     min-height: 40px;
     font-size: 14px;
-    color: #E3E3E3;
-    border-bottom: 1px dotted #34A76B;
+    color: #000000;
+    border-bottom: 1px dotted #E7E7E7;
   }
 }

+ 4 - 1
miniprogram/module/article/pages/diet-info/diet-info.wxml

@@ -6,12 +6,14 @@
     <view class="list-title">食谱介绍</view>
     <view class="box-wrapper">{{dataset.book}}</view>
   </view> -->
+  <view class="diet-box">
+  <view class="diet-title">{{title}}</view>
   <view class="list-wrapper">
     <view class="list-title">中医功效</view>
     <view class="box-wrapper">{{dataset.effectText}}</view>
   </view>
   <view class="list-wrapper" wx:if="{{dataset.itemList.length}}">
-    <view class="list-title">食材</view>
+    <view class="list-title" style="margin-bottom: 15px;">食材</view>
     <view class="item-wrapper" wx:for="{{dataset.itemList}}" wx:key="ingredientName">
       <view>{{item.ingredientName}}</view>
       <view>{{item.dose || ''}}{{item.unit || ''}}</view>
@@ -25,6 +27,7 @@
     <view class="list-title">相关推荐</view>
     <diet-card wx:for="{{dataset.recommendedList}}" wx:key="id" item="{{item}}" index="{{index}}" replace="{{true}}"></diet-card>
   </view>
+  </view>
 </scroll-view>
 
 <view style="height: {{container.safeBottomOffset}}px;flex: none;"></view>

+ 2 - 2
miniprogram/module/article/pages/diet-list/diet-list.ts

@@ -20,8 +20,8 @@ Component({
     keyword: '',
     searchInputProps: {
       placeholderStyle: 'color: #929292;',
-      cursorColor: '#34A76B',
-      iconColor: '#34A76B',
+      cursorColor: '#1D6FF6',
+      iconColor: '#1D6FF6',
       focus: false,
       placeholder: '输入搜索名称',
     },

+ 20 - 12
miniprogram/module/article/pages/science-info/science-info.wxml

@@ -1,18 +1,26 @@
 <!--module/diet/pages/science-info/science-info.wxml-->
 <!-- <web-view src="https://mp.weixin.qq.com/"></web-view> -->
 
-<web-view wx:if="{{dataset.content}}" src="{{dataset.content}}"></web-view>
-<block v-else>
-  <t-navbar title="中医科普" left-arrow />
-  <scroll-view class="page-scroll__container" type="list" scroll-y style="{{containerStyle}}">
-    <image wx:if="{{dataset.briefImg}}" src="{{dataset.briefImg}}" mode="widthFix" style="width: 100%;"></image>
-    <view class="title">{{dataset.title}}</view>
-    <view class="description">
-      <view></view>
-      <view wx:if="{{dataset.readVolume}}">{{dataset.readVolume}}人阅读</view>
-    </view>
-  </scroll-view>
-</block>
+<view class="science-info-container">
+  <block wx:if="{{dataset.content}}">
+    <web-view src="{{dataset.content}}"></web-view>
+  </block>
+  <block wx:else>
+    <t-navbar title="中医科普" left-arrow />
+    <scroll-view class="page-scroll__container" type="list" scroll-y style="{{containerStyle}}">
+      <block wx:if="{{dataset.briefImg}}">
+        <image src="{{dataset.briefImg}}" mode="widthFix" style="width: 100%;"></image>
+      </block>
+      <view class="title">{{dataset.title}}</view>
+      <view class="description">
+        <view></view>
+        <block wx:if="{{dataset.readVolume}}">
+          <view>{{dataset.readVolume}}人阅读</view>
+        </block>
+      </view>
+    </scroll-view>
+  </block>
+</view>
 
 <view style="height: {{container.safeBottomOffset}}px;flex: none;"></view>
 <t-message id="{{$messageId}}" />

+ 15 - 1
miniprogram/module/article/pages/science-list/science-list.scss

@@ -1,4 +1,18 @@
 @import '../../../../themes/page.scss';
 @import '../../searc-list.scss';
 
-/* module/diet/pages/science-list/science-list.wxss */
+/* module/diet/pages/science-list/science-list.wxss */
+.list-wrapper {
+  position: relative;
+  
+  &::after {
+    content: '';
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 40px;
+    background: linear-gradient(to bottom, rgba(29, 111, 246, 0), rgba(29, 111, 246, 0.1));
+    pointer-events: none;
+  }
+}

+ 2 - 2
miniprogram/module/article/pages/science-list/science-list.ts

@@ -20,8 +20,8 @@ Component({
     keyword: '',
     searchInputProps: {
       placeholderStyle: 'color: #929292;',
-      cursorColor: '#34A76B',
-      iconColor: '#34A76B',
+      cursorColor: '#1D6FF6',
+      iconColor: '#1D6FF6',
       focus: false,
       placeholder: '输入搜索名称',
     },

+ 6 - 3
miniprogram/module/article/searc-list.scss

@@ -3,7 +3,8 @@
   align-items: center;
   margin: 12px;
   padding: 4px 8px;
-  border: 1px solid #34A76B;
+  // border: 1px solid #34A76B;
+  border: 1px solid #1D6FF6;
   border-radius: 8px;
 
   .search-icon {
@@ -13,7 +14,8 @@
 
   .search-input {
     flex: auto;
-    color: #fff;
+    // color: #fff;
+    color: #191919;
   }
 }
 
@@ -30,7 +32,8 @@ page {
 .list-wrapper {
   .list-title {
     font-size: 16px;
-    color: #34A76B;
+    // color: #34A76B;
+    color: #1D6FF6;
   }
 
 }

BIN
miniprogram/module/chats/assets/button-1.bg.png


BIN
miniprogram/module/chats/assets/button-report.bg.png


BIN
miniprogram/module/chats/assets/face-1.png


BIN
miniprogram/module/chats/assets/robot.png


BIN
miniprogram/module/chats/assets/tongue-1.png


BIN
miniprogram/module/chats/assets/tongue-2.png


BIN
miniprogram/module/chats/assets/upload-picture.bg.png


+ 11 - 7
miniprogram/module/chats/common.scss

@@ -19,7 +19,7 @@
 
     .chat-card__content {
       width: calc(90% - var(--avatar-size));
-      border-color: #1B4F34;
+      // border-color: #1B4F34;
     }
   }
 
@@ -31,7 +31,8 @@
     }
 
     .chat-card__content {
-      border-color: #38FF6E;
+      // border-color: #38FF6E;
+      border-radius: 10px 0px 10px 10px;
     }
   }
 
@@ -49,10 +50,11 @@
 
   &__content {
     max-width: calc(80% - $size);
-    background-color: rgba(255, 255, 255, 0.04);
-    border-radius: 8px;
+    // background-color: rgba(255, 255, 255, 0.04);
+    background-color: white;
+    border-radius: 0px 10px 10px 10px;
     border-width: 1px;
-    border-style: solid;
+    // border-style: solid;
     overflow: hidden;
   }
 
@@ -69,14 +71,16 @@
 
     .item {
       position: relative;
-      width: 190 * 0.5px;
+      // width: 190 * 0.5px;
+      width: 40%;
       height: 54 * 0.5px;
       display: flex;
       justify-content: center;
       align-items: center;
       text-align: center;
       font-size: 12px;
-      color: var(--primary-color);
+      // color: var(--primary-color);
+      color: #fff;
 
       image {
         position: absolute;

+ 1 - 0
miniprogram/module/chats/components/guide/guide.json

@@ -3,6 +3,7 @@
   "component": true,
   "usingComponents": {
     "t-cell": "tdesign-miniprogram/cell/cell",
+    "t-icon": "tdesign-miniprogram/icon/icon",
     "user-avatar": "../../../../components/user-avatar/user-avatar"
   }
 }

+ 40 - 2
miniprogram/module/chats/components/guide/guide.scss

@@ -3,15 +3,30 @@
 
 /* module/chats/components/guide/guide.wxss */
 .steward-wrapper {
-  --primary-color: #38FF6E;
+  // --primary-color: #38FF6E;
+  --primary-color: #1D6FF6;
   --td-cell-title-color: var(--primary-color);
+  --td-cell-hover-color: #F5F5F5;
+}
+
+.health-analysis-title {
+  color: #1D6FF6 !important;
+}
+
+.steward-wrapper .t-cell.cell-border-gradient {
+  .t-cell__title {
+    color: #1D6FF6 !important;
+  }
 }
 
 .title {
   display: flex;
   flex-direction: row;
   align-items: center;
-  color: #fff;
+  // color: #fff;
+  color: #191919;
+  font-weight: bold;
+  font-size: 16px;
 
   .icon {
     margin-left: 4px;
@@ -22,4 +37,27 @@
 
 .disabled {
   opacity: 0.5 !important;
+}
+
+.t-cell {
+  &__note {
+    color: #BBBBBB !important;
+    font-size: 32rpx !important;
+  }
+
+  &.t-cell--hover {
+    background-color: #F5F5F5 !important;
+    opacity: 1 !important;
+  }
+}
+
+// Custom hover class
+.custom-cell-hover {
+  background-color: #F5F5F5 !important;
+}
+
+// Override default hover effect
+.t-cell--hover {
+  background-color: #F5F5F5 !important;
+  opacity: 1 !important;
 }

+ 1 - 0
miniprogram/module/chats/components/guide/guide.ts

@@ -4,6 +4,7 @@ Component({
   properties: {
     id: { type: String, value: '' },
     active: { type: Boolean, value: false },
+    analysisCount: { type: Number, value: 0 },
   },
   data: {
     result: [] as string[],

+ 47 - 7
miniprogram/module/chats/components/guide/guide.wxml

@@ -9,16 +9,56 @@
     <image src="../../assets/robot.png" mode="aspectFill" />
   </view>
   <view class="chat-card__content">
-    <t-cell t-class="cell-border-gradient">
+    <t-cell t-class="cell-border-gradient" bordered="{{true}}" >
       <view slot="title" class="title">
-        <text>请点击以下内容</text>
-        <image class="icon" src="../../assets/finger.png" mode="aspectFit" />
+        <text>请选择想要操作的业务</text>
       </view>
     </t-cell>
-    <t-cell t-class="cell-border-gradient {{_.getClassName(active)}}" title="1、健康分析" hover="{{active}}" bind:tap="handleA"></t-cell>
-    <t-cell t-class="cell-border-gradient {{_.getClassName(active)}}" title="2、指标信息管理" hover="{{active}}" bind:tap="handleB"></t-cell>
-    <t-cell t-class="cell-border-gradient {{_.getClassName(active)}}" title="3、健康信息管理" hover="{{active}}" bind:tap="handleC"></t-cell>
-    <t-cell t-class="{{_.getClassName(active)}}" title="4、返回首页" bordered="{{false}}" hover="{{active}}" bind:tap="handleD"></t-cell>
+    <t-cell 
+      t-class="cell-border-gradient {{_.getClassName(active)}}" 
+      t-class-hover="custom-cell-hover"
+      t-class-title="health-analysis-title"
+      title="1、健康分析(剩余{{analysisCount<0?0:analysisCount}}次)" 
+      hover="{{active}}" 
+      bind:tap="handleA"
+      style="--td-cell-hover-color: #F5F5F5;"
+    >
+      <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
+    </t-cell>
+    <t-cell 
+      t-class="cell-border-gradient {{_.getClassName(active)}}" 
+      t-class-hover="custom-cell-hover"
+       t-class-title="health-analysis-title"
+      title="2、指标信息管理" 
+      hover="{{active}}" 
+      bind:tap="handleB"
+      style="--td-cell-hover-color: #F5F5F5;"
+    >
+      <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
+    </t-cell>
+    <t-cell 
+      t-class="cell-border-gradient {{_.getClassName(active)}}" 
+      t-class-hover="custom-cell-hover"
+       t-class-title="health-analysis-title"
+      title="3、健康信息管理" 
+      hover="{{active}}" 
+      bind:tap="handleC"
+      style="--td-cell-hover-color: #F5F5F5;"
+    >
+      <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
+    </t-cell>
+    <t-cell 
+      t-class="{{_.getClassName(active)}}" 
+      t-class-hover="custom-cell-hover"
+       t-class-title="health-analysis-title"
+      title="4、返回首页" 
+      bordered="{{false}}" 
+      hover="{{active}}" 
+      bind:tap="handleD"
+      style="--td-cell-hover-color: #F5F5F5;"
+    >
+      <t-icon name="chevron-right" color="#CCCCCC" size="40rpx" slot="note" />
+    </t-cell>
   </view>
 </view>
 

+ 34 - 9
miniprogram/module/chats/components/message-again/message-again.scss

@@ -125,13 +125,34 @@
   border-style: solid;
   border-color: var(--td-brand-color, #1B4F34) transparent transparent transparent;
 }
-
+.not-change {
+  width: 100%;
+  font-size: 14px;
+  text-align: center;
+  color: #1D6FF6;
+  background-color: #F2F3FF;
+  padding: 10px 20px;
+  border-radius: 15rpx;
+}
+.sub-btn {
+  width: 100%;
+  color: white;
+  background-color: #1D6FF6;
+  font-size: 14px;
+  text-align: center;
+  padding: 10px 20px;
+  border-radius: 15rpx;
+}
 .card__icons {
-  color: var(--td-bg-color-container, #fff);
+  // color: var(--td-bg-color-container, #fff);
   position: absolute;
-  left: 1.5px;
-  top: 1.5px;
+  // left: 1.5px;
+  // top: 1.5px;
+  left: 0px;
+  top: 0px;
   z-index: 1;
+  color: white;
+  background: #1D6FF6;
 }
 
 /* 横向布局 */
@@ -204,7 +225,8 @@
       }
 
       &--confirm {
-        color: var(--primary-color);
+        // color: var(--primary-color);
+        color: black;
       }
     }
   }
@@ -228,11 +250,13 @@
   border-radius: 12rpx;
   overflow: hidden;
   box-sizing: border-box;
-  background-color: var(--td-bg-color-secondarycontainer);
-  border: 1px solid var(--td-bg-color-container, #fff);
+  // background-color: var(--td-bg-color-secondarycontainer);
+  // border: 1px solid var(--td-bg-color-container, #fff);
+  border: 1px solid #EEEEEE;
 
   &--active {
-    border-color: var(--td-bg-color-container, #9ea1a5);
+    // border-color: var(--td-bg-color-container, #9ea1a5);
+    border: 1px solid #EEEEEE;
 
     &::after {
       content: '';
@@ -256,7 +280,8 @@
   }
 
   &__icon {
-    color: var(--primary-color, #fff);
+    // color: var(--primary-color, #fff);
+    color: black;
     position: absolute;
     left: 1.5px;
     top: 1.5px;

+ 0 - 2
miniprogram/module/chats/components/message-again/message-again.ts

@@ -418,8 +418,6 @@ Component({
           }
         });
         this.setData({ symptomsList });
-        console.log(symptomsList, "arr");
-        console.log(this.data.result, "result");
         this.triggerEvent("next", { options: this.data.options });
       }
     },

+ 2 - 4
miniprogram/module/chats/components/message-again/message-again.wxml

@@ -50,12 +50,10 @@
     </scroll-view>
     <view wx:if="{{multiple || !required}}" class="chat-card__handle {{active ? '' : 'disabled'}}">
       <view wx:if="{{!required}}" class="item {{hasSelected ? 'disabled': ''}}" bind:tap="onSkip">
-        <image src="../../assets/button-1.bg.png" mode="aspectFit" />
-        <view style="color: #d4d4d4;">无变化</view>
+        <view class="not-change">无变化</view>
       </view>
       <view wx:if="{{multiple}}" class="item" bind:tap="onSubmit">
-        <image src="../../assets/button-1.bg.png" mode="aspectFit" />
-        <view>选好了</view>
+      <view class="sub-btn">选好了</view>
       </view>
     </view>
   </view>

+ 8 - 0
miniprogram/module/chats/components/message-analysis/message-analysis.scss

@@ -2,6 +2,14 @@
 @import '../../common.scss';
 
 /* module/chats/components/message-analysis/message-analysis.wxss */
+.load-btn {
+  background-color: #1D6FF6;
+  color: #fff;
+  padding: 5px 12px;
+  border-radius: 12px;
+  font-size: 14px !important;
+  text-align: center;
+}
 .tips {
   font-size: 12px;
   color: #ff611b;

+ 3 - 4
miniprogram/module/chats/components/message-analysis/message-analysis.wxml

@@ -19,9 +19,8 @@
         <image src="../../assets/button-1.bg.png" mode="aspectFit" />
         <view>算了,不传</view>
       </view> -->
-      <view class="item" bind:tap="onConfirm">
-        <image src="../../assets/button-1.bg.png" mode="aspectFit" />
-        <view>点击上传</view>
+      <view class="item load-btn" bind:tap="onConfirm">
+        点击上传
       </view>
     </view>
   </view>
@@ -31,7 +30,7 @@
   <view class="chat-card__avatar ">
     <user-avatar></user-avatar>
   </view>
-  <view class="chat-card__content">
+  <view class="chat-card__content" style="background:#CDDDF8">
     <view class="gallery-wrapper source">
       <view class="container" wx:for="{{source}}" wx:key="src">
         <image src="{{item.src}}" mode="aspectFit" />

+ 11 - 0
miniprogram/module/chats/components/message-count/message-count.json

@@ -0,0 +1,11 @@
+{
+  "renderer": "skyline",
+  "component": true,
+  "pureDataPattern": "^_",
+  "usingComponents": {
+    "t-cell": "tdesign-miniprogram/cell/cell",
+    "t-icon": "tdesign-miniprogram/icon/icon",
+    "t-loading": "tdesign-miniprogram/loading/loading",
+    "user-avatar": "../../../../components/user-avatar/user-avatar"
+  }
+}

+ 12 - 0
miniprogram/module/chats/components/message-count/message-count.scss

@@ -0,0 +1,12 @@
+@import '../../../../themes/t.cell.scss';
+@import '../../common.scss';
+
+/* module/chats/components/message-text/message-text.wxss */
+
+.container {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  --td-loading-color: #fff;
+  --td-loading-text-font-size: 24px;
+}

+ 25 - 0
miniprogram/module/chats/components/message-count/message-count.ts

@@ -0,0 +1,25 @@
+// module/chats/components/message-text/message-text.ts
+Component({
+
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    payload: { type: Object, value: { title: '', loading: false } },
+    active: { type: Boolean, value: false },
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+
+  }
+})

+ 14 - 0
miniprogram/module/chats/components/message-count/message-count.wxml

@@ -0,0 +1,14 @@
+<!--module/chats/components/message-text/message-text.wxml-->
+<view class="chat-card left">
+  <view class="chat-card__avatar ">
+    <image src="../../assets/robot.png" mode="aspectFill" />
+  </view>
+  <view class="chat-card__content">
+    <t-cell bordered="{{false}}">
+      <view class="container" slot="title">
+        <text>{{payload.title}}</text>
+        <t-loading wx:if="{{active && payload.loading}}" theme="dots" style="margin-left: 4px;" />
+      </view>
+    </t-cell>
+  </view>
+</view>

+ 2 - 1
miniprogram/module/chats/components/message-follow/message-follow.wxml

@@ -17,7 +17,8 @@
     <t-cell t-class="cell-border-gradient" title="查看舌面象分析报告">
     </t-cell>
     <view class="chat-card__handle">
-      <view class="item" bind:tap="seeReport">
+      <view class="item health-report" bind:tap="seeReport">
+      查看健康分析报告
         <image src="../../assets/button-report.bg.png" mode="aspectFit" />
       </view>
     </view>

+ 28 - 2
miniprogram/module/chats/components/message-report/message-report.scss

@@ -3,6 +3,32 @@
 /* module/chats/components/message-report/message-report.wxss */
 
 .chat-card__handle .item {
-  width: 280px * 0.5;
+  width: 100% !important;
   height: 52px * 0.5;
-}
+}
+.report-handle{    
+  margin: 15px auto !important;
+  width: 95% !important;
+
+}
+.report-box {
+  display: flex;
+  height: 40px !important;
+  align-items: center;
+  justify-content: center;
+  border:2px solid white;
+  background: linear-gradient(to bottom, #d9e7fb, #c1d5f5); /* 渐变蓝色 */
+ width: 100% !important;
+  border-radius: 6px;
+  .report-img {
+    width: 35rpx !important;
+    height: 35rpx !important;
+    position:unset !important;
+    margin-right: 5px !important;
+  }
+
+  .text-box {
+    font-size: 24rpx;
+    color: #1f457f;
+  }
+}

+ 5 - 2
miniprogram/module/chats/components/message-report/message-report.wxml

@@ -6,9 +6,12 @@
   <view class="chat-card__content">
     <t-cell t-class="cell-border-gradient" title="{{payload.title}}" description="{{payload.description}}">
     </t-cell>
-    <view class="chat-card__handle">
+    <view class="chat-card__handle report-handle">
       <view class="item" bind:tap="handle">
-        <image src="../../assets/button-report.bg.png" mode="aspectFit" />
+   <view class="report-box">
+<view><image src="../../../../assets/bg/icon_file@3x.png" class="report-img" /> </view>
+<view class="text-box">健康分析报告</view>
+</view>
       </view>
     </view>
   </view>

+ 25 - 5
miniprogram/module/chats/components/message-select/message-select.scss

@@ -34,6 +34,24 @@
     box-sizing: border-box;
   }
 }
+.not-change {
+  width: 100%;
+  font-size: 14px;
+  text-align: center;
+  color: #1D6FF6;
+  background-color: #F2F3FF;
+  padding: 10px 20px;
+  border-radius: 15rpx;
+}
+.sub-btn {
+  width: 100%;
+  color: white;
+  background-color: #1D6FF6;
+  font-size: 14px;
+  text-align: center;
+  padding: 10px 20px;
+  border-radius: 15rpx;
+}
 
 /* module/chats/components/message-select/message-select.wxss */
 
@@ -48,11 +66,13 @@
   border-radius: 12rpx;
   overflow: hidden;
   box-sizing: border-box;
-  background-color: var(--td-bg-color-secondarycontainer);
-  border: 1px solid var(--td-bg-color-container, #fff);
+  background-color: white;
+  border: 1px solid #EEEEEE;
+  color: #191919;
 
   &--active {
-    border-color: var(--td-bg-color-container, #9ea1a5);
+    border: 1px solid #1D6FF6;
+    padding: 4px 4px 4px 22px;
 
     &::after {
       content: '';
@@ -65,7 +85,7 @@
       border-width: 28px 28px 28px 0;
       border-style: solid;
       border-color: var(--td-bg-color-container) transparent transparent transparent;
-      border: 14px solid var(--td-bg-color-container, #0052d9);
+      border: 14px solid #1D6FF6;
       border-bottom-color: transparent;
       border-right-color: transparent;
     }
@@ -76,7 +96,7 @@
   }
 
   &__icon {
-    color: var(--primary-color, #fff);
+    color: white;
     position: absolute;
     left: 1.5px;
     top: 1.5px;

+ 0 - 1
miniprogram/module/chats/components/message-select/message-select.ts

@@ -116,7 +116,6 @@ Component({
           })
           .join('; ');
         this.setData({ result })
-
         this.triggerEvent('next', { options: this.data.options });
       }
     },

+ 2 - 4
miniprogram/module/chats/components/message-select/message-select.wxml

@@ -38,12 +38,10 @@
     </scroll-view>
     <view wx:if="{{payload.multiple || !payload.required}}" class="chat-card__handle {{active ? '' : 'disabled'}}">
       <view wx:if="{{!payload.required}}" class="item {{hasSelected ? 'disabled': ''}}" bind:tap="onSkip">
-        <image src="../../assets/button-1.bg.png" mode="aspectFit" />
-        <view style="color: #d4d4d4;">都没有</view>
+        <view class="not-change">无变化</view>
       </view>
       <view wx:if="{{payload.multiple}}" class="item" bind:tap="onSubmit">
-        <image src="../../assets/button-1.bg.png" mode="aspectFit" />
-        <view>提交</view>
+        <view class="sub-btn">选好了</view>
       </view>
     </view>
   </view>

+ 1 - 1
miniprogram/module/chats/components/message-text/message-text.wxml

@@ -4,7 +4,7 @@
     <image src="../../assets/robot.png" mode="aspectFill" />
   </view>
   <view class="chat-card__content">
-    <t-cell t-class="cell-border-gradient">
+    <t-cell t-class="cell-border-gradient" bordered="{{false}}">
       <view class="container" slot="title">
         <text>{{payload.title}}</text>
         <t-loading wx:if="{{active && payload.loading}}" theme="dots" style="margin-left: 4px;" />

+ 2 - 1
miniprogram/module/chats/components/questionnaire/questionnaire.json

@@ -12,6 +12,7 @@
     "message-text": "../message-text/message-text",
     "message-report": "../message-report/message-report",
     "message-again":"../message-again/message-again",
-    "message-follow":"../message-follow/message-follow"
+    "message-follow":"../message-follow/message-follow",
+    "message-count":"../message-count/message-count"
   }
 }

+ 2 - 1
miniprogram/module/chats/components/questionnaire/questionnaire.scss

@@ -24,7 +24,8 @@
     border: 1px solid var(--td-bg-color-container, #fff);
   
     &--active {
-      border-color: var(--td-bg-color-container, #9ea1a5);
+      // border-color: var(--td-bg-color-container, #9ea1a5);
+      border: 1px solid #1D6FF6;
   
       &::after {
         content: '';

+ 17 - 4
miniprogram/module/chats/components/questionnaire/questionnaire.ts

@@ -12,7 +12,9 @@ interface Message {
     | "text"
     | "report"
     | "again"
-    | "follow";
+    | "follow" 
+    | "count";
+
   payload: AnyObject;
 }
 
@@ -114,7 +116,8 @@ Component({
             },
           }
         );
-        // console.log("count",count);
+       this.triggerEvent("count", { count });
+        console.log("count",count);
         if (count > 0) {
           // if (count < 0) {
           this.setData({
@@ -125,7 +128,16 @@ Component({
           });
           this._next();
         } else {
-          throw { errMsg: `您的健康分析次数已用完,请联系工作人员。` };
+          // throw { errMsg: `您的健康分析次数已用完,请联系工作人员。` };
+          this._createMessage({
+            id: `count-${Date.now()}`,
+            type: "count",
+            payload: {
+              date: Date.now(),
+              title: `您的健康分析次数已用完,请联系工作人员。`,
+            },
+          });
+          this._end();
         }
       } catch (error) {
         this._createMessage({
@@ -150,13 +162,14 @@ Component({
     async _next() {
       let isAnalysis: number;
       isAnalysis = wx.getStorageSync("isAnalysis");
+      console.log("isAnalysis",isAnalysis);
       if (isAnalysis === 3) {
         // 对话管家
         if (this.data._next.classify === "tongue") {
           this._createMessage({
             id: `tongue-loading.${Date.now()}`,
             type: "text",
-            payload: { title: "分析中", loading: true },
+            payload: { title: "分析中...", loading: true },
           });
           this.triggerEvent("to");
         }

+ 1 - 0
miniprogram/module/chats/components/questionnaire/questionnaire.wxml

@@ -9,6 +9,7 @@
 <!--module/chats/components/questionnaire/questionnaire.wxml-->
 <block wx:for="{{messages}}" wx:key="id">
   <message-again wx:if="{{_.show(item,'again')}}" bind:nextType="nextType" workId="{{workId}}" bind:boxBottom="boxBottom" />
+  <message-count wx:elif="{{_.show(item,'count')}}" payload="{{item.payload}}" id="{{item.id}}" active="{{_.active(lastId,item.id)}}" bind:next="handle" /> 
   <message-analysis wx:elif="{{_.show(item,'analysis')}}" active="{{_.active(lastId,item.id)}}" id="{{item.id}}" payload="{{item.payload}}" bind:next="handle" messageType="{{messageType}}" />
   <message-follow wx:elif="{{_.show(item,'follow')}}" bind:nextType="nextType" workId="{{workId}}" bind:boxBottom="boxBottom" />
   <message-select wx:elif="{{_.show(item,'select')}}" active="{{_.active(lastId,item.id)}}" id="{{item.id}}" payload="{{item.payload}}" bind:next="handle" />

+ 5 - 4
miniprogram/module/chats/pages/analysis/analysis.json

@@ -3,9 +3,10 @@
   "component": true,
   "pureDataPattern": "^_",
   "usingComponents": {
-    "t-cell": "tdesign-miniprogram/cell/cell",
-    "t-icon": "tdesign-miniprogram/icon/icon",
-    "t-loading": "tdesign-miniprogram/loading/loading",
-    "form-button": "../../../../components/button/button"
+    "t-navbar": "/components/navigation-bar/navigation-bar",
+    "t-cell": "/miniprogram_npm/tdesign-miniprogram/cell/cell",
+    "t-icon": "/miniprogram_npm/tdesign-miniprogram/icon/icon",
+    "t-loading": "/miniprogram_npm/tdesign-miniprogram/loading/loading",
+    "form-button": "/components/button/button"
   }
 }

+ 6 - 3
miniprogram/module/chats/pages/analysis/analysis.scss

@@ -6,14 +6,16 @@
   height: var(--page-container-safeHeight, 100vh);
 
   padding-top: 12px;
+  background-color: #F5F6F7;
 }
 
 .upload-card {
   margin: 0 12px;
   padding: 12px;
-  border: 1px solid var(--td-bg-color-secondarycontainer, #1B4F34);
+  // border: 1px solid var(--td-bg-color-secondarycontainer, #1B4F34);
   border-radius: 8px;
-  background-color: rgba(255, 255, 255, 0.04);
+  // background-color: rgba(255, 255, 255, 0.04);
+  background-color: white;
 
   &__header {
     display: flex;
@@ -38,6 +40,7 @@
       flex-direction: row;
       justify-content: center;
       align-items: center;
+      color: #8C8C8C;
     }
 
     .example {
@@ -46,7 +49,7 @@
 
     .picture {
       width: 126px;
-      height: 126px;
+      height: 140px;
     }
   }
 }

+ 82 - 2
miniprogram/module/chats/pages/analysis/analysis.ts

@@ -4,6 +4,39 @@ import { Post } from "../../../../lib/request/method";
 
 // module/chats/pages/analysis/analysis.ts
 
+interface IAnalysisData {
+  _lastResetTime: number;
+  uploadList: Array<{
+    target: string;
+    required: boolean;
+    label: string;
+    src: string;
+  }>;
+  thumbnail: string[];
+  original: string[];
+  status: boolean[];
+  _queue: Record<string, any>;
+  activeObj: Record<string, any>;
+  followObj: Record<string, any>;
+  workId: number;
+}
+
+interface IAnalysisProperties {
+  messageType: number;
+}
+
+type IAnalysisInstance = WechatMiniprogram.Component.Instance<
+  IAnalysisData,
+  IAnalysisProperties,
+  {
+    handle(event: WechatMiniprogram.TouchEvent): void;
+    _chooseMedia(index: number): Promise<string | null>;
+    _deleteMedia(index: number): void;
+    _uploadMedia(index: number, src?: string): void;
+    onSubmit(): Promise<void>;
+  }
+>;
+
 Component({
   behaviors: [PageContainerBehavior],
   options: {},
@@ -11,6 +44,7 @@ Component({
     messageType: { type: Number, value: 0 },
   },
   data: {
+    _lastResetTime: 0,
     uploadList: [
       {
         target: "tongueImgUrl",
@@ -27,7 +61,7 @@ Component({
       {
         target: "faceImgUrl",
         required: false,
-        label: "面部图",
+        label: "正面面部图",
         src: "../../assets/face-1.png",
       },
     ],
@@ -46,6 +80,16 @@ Component({
       followObj: wx.getStorageSync("followObj"),
       workId: wx.getStorageSync("workId"),
     });
+    // 确保按钮初始状态可用
+    setTimeout(() => {
+      console.log('[Analysis] Initializing button state...');
+      const submitBtn = this.selectComponent('#submitBtn');
+      console.log('[Analysis] Found submit button:', submitBtn);
+      if (submitBtn) {
+        console.log('[Analysis] Resetting button state');
+        submitBtn.resetState();
+      }
+    }, 100);
   },
   methods: {
     handle(event: WechatMiniprogram.TouchEvent) {
@@ -111,17 +155,51 @@ Component({
         });
     },
     async onSubmit() {
+      console.log('[Analysis] Submit started');
+      const submitBtn = this.selectComponent('#submitBtn');
+      console.log('[Analysis] Found submit button:', submitBtn);
+      
+      // Check if enough time has passed since the last reset
+      const now = Date.now();
+      if (now - this.data._lastResetTime < 100) {
+        console.log('[Analysis] Skipping disable - too soon after reset');
+        return;
+      }
+      
+      // 开始提交时禁用按钮
+      if (submitBtn) {
+        console.log('[Analysis] Disabling button');
+        submitBtn.setData({ isDisabled: true });
+      }
+
       const data = {
         thumbnail: [] as any,
         source: [] as any,
       };
+
+      // 验证前重置按钮状态
+      const resetButton = () => {
+        console.log('[Analysis] Resetting button state');
+        const btn = this.selectComponent('#submitBtn');
+        console.log('[Analysis] Found submit button:', btn);
+        if (btn) {
+          this.setData({ _lastResetTime: Date.now() });
+          console.log('[Analysis] Calling resetState');
+          btn.resetState();
+        }
+      };
+
       for (let index = 0; index < this.data.uploadList.length; index++) {
         const item = this.data.uploadList[index];
         if (this.data._queue[index]) {
+          console.log('[Analysis] Upload in progress, resetting button');
           wx.showToast({ title: `请等待图片上传完毕`, icon: "none" });
+          resetButton();
           return;
         } else if (item.required && !this.data.original[index]) {
+          console.log('[Analysis] Missing required image, resetting button');
           wx.showToast({ title: `请上传${item.label}`, icon: "none" });
+          resetButton();
           return;
         }
         if (this.data.original[index])
@@ -169,7 +247,9 @@ Component({
           this.getOpenerEventChannel().emit("update", data);
           wx.navigateBack();
         } catch (error) {
-          wx.showToast({ title: error.errMsg, icon: "error" });
+          console.log('[Analysis] Submit failed, resetting button');
+          wx.showToast({ title: error?.errMsg ?? "提交失败", icon: "none" });
+          resetButton();
         }
       } else {
         // 对话管家

+ 5 - 5
miniprogram/module/chats/pages/analysis/analysis.wxml

@@ -3,9 +3,9 @@
 <scroll-view class="page-scroll__container" type="list" scroll-y style="{{containerStyle}}">
   <t-cell title="拍摄注意事项" required bordered="{{false}}">
     <view slot="description">
-      <view style="margin-top: 8px;">光线:</view>
+      <view style="margin: 8px 0px 8px 0px;color:black;">光线:</view>
       <view>白天充足、柔和的自然光线下效果最佳,避免背光、偏暗、曝光。</view>
-      <view style="margin-top: 8px;">禁忌:</view>
+      <view style="margin: 8px 0px 8px 0px;color:black;">禁忌:</view>
       <view>不要在食用有色饮食或药物后、有色光源下、早晨起床时、饭后半小时内拍摄舌象。</view>
       <view>不要带妆拍摄面部图片。</view>
     </view>
@@ -13,7 +13,7 @@
   <view class="upload-card" wx:for="{{uploadList}}" wx:key="{{item.target}}" mark:index="{{index}}" mark:target="{{item.target}}" bind:tap="handle">
     <view class="upload-card__header">
       <text>{{item.label}}上传</text>
-      <text wx:if="{{item.required}}" style="color: #ff611b;">(必传)</text>
+      <text wx:if="{{item.required}}" style="color: #D54941;">(必传)</text>
     </view>
     <view class="upload-card__content">
       <view class="row">
@@ -27,7 +27,7 @@
         <view class="col">
           <text>(上传)</text>
           <block wx:if="{{thumbnail[index]}}">
-            <t-icon wx:if="{{original[index]}}" style="color: #ff611b;" name="delete-1" mark:handle="upload:delete" />
+            <t-icon wx:if="{{original[index]}}" style="color: #D54941;" name="delete-1" mark:handle="upload:delete" />
             <t-loading wx:else="" theme="spinner" size="40rpx" class="wrapper" />
           </block>
         </view>
@@ -37,6 +37,6 @@
 
 
   <form bind:submit="onSubmit">
-    <form-button block index="2"></form-button>
+    <form-button block index="1" id="submitBtn"></form-button>
   </form>
 </scroll-view>

+ 1 - 0
miniprogram/module/chats/pages/index/index.json

@@ -2,6 +2,7 @@
   "renderer": "skyline",
   "component": true,
   "usingComponents": {
+    "tabbar":"../../../../components/tabbar/tabbar",
     "chat-guide": "../../components/guide/guide",
     "chat-questionnaire": "../../components/questionnaire/questionnaire",
     "message-again": "../../components/message-again/message-again"

+ 31 - 2
miniprogram/module/chats/pages/index/index.scss

@@ -1,6 +1,35 @@
 @import '../../../../themes/page.scss';
 
 /* module/chats/pages/index/index.wxss */
+.chats-container {
+  position: relative;
+  height: 100vh;
+  background-color: #f7f7f7;
+}
+
+.page-scroll__container {
+  box-sizing: border-box;
+  overflow-y: auto;
+}
+
+.tabbar-container {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 100;
+  background-color: #fff;
+  padding-bottom: env(safe-area-inset-bottom);
+  box-shadow: 0 -2rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.chats-container{
+
+background-image: url("/assets/bg/bg_dialog@2x.png");
+background-size: 100% 100%;
+background-repeat: no-repeat;
+background-color: #F5F6F7;
+}
 
 .chat {
   padding: 24px 12px;
@@ -15,8 +44,8 @@
   .title {
     padding: 4px 12px;
     font-size: 12px;
-    color: #7F96A7;
-    background-color: #1B4F34;
+    color: #999999;
+    // background-color: #1B4F34;
     border-radius: 5px;
   }
 

+ 5 - 0
miniprogram/module/chats/pages/index/index.ts

@@ -53,6 +53,8 @@ Component({
     messages: {} as Record<number, Message>,
     lastId: "",
     inputBoxBottom:0,
+    tabbarValue:"/module/chats/pages/index/index",
+    analysisCount: 0,
   },
   observers: {
     "messages.**"(messages) {
@@ -69,6 +71,9 @@ Component({
     nextType(event: NextTypeEvent) {
       this.setData({ messageType: event.detail.MessageType });
     },
+    getCount(event: GetCountEvent) {
+      this.setData({ analysisCount: event.detail.analysisCount });
+    },
     handle(event: HandleEvent) {
       const index = Object.keys(this.data.messages).length;
       this.setData({

+ 27 - 13
miniprogram/module/chats/pages/index/index.wxml

@@ -7,17 +7,31 @@
   }
 </wxs>
 <!--module/chats/pages/index/index.wxml-->
-<t-navbar title="对话管家" left-arrow />
-<scroll-view id="scrollview" class="page-scroll__container" type="list" scroll-y enhanced="{{true}}" enable-passive scroll-into-view="{{lastId}}" scroll-into-view-alignment="end" style="bottom:{{inputBoxBottom}}px;" >
-  <view class="system-wrapper">
-    <view class="date">{{date}}</view>
-    <view class="title">对话管家 已进入聊天</view>
-  </view>
-  
-  <block wx:for="{{messages}}" wx:key="id">
-    <chat-guide wx:if="{{(_.show(item, 'guide') && isShowGuide)}}" id="{{item.id}}" active="{{_.active(lastId, item.id)}}" bind:next="handle" bind:to="scrollIntoView" bind:nextType="nextType" />
-    <chat-questionnaire wx:if="{{_.show(item, 'questionnaire') && messageType}}" id="{{item.id}}" active="{{_.active(lastId, item.id)}}" bind:next="handle" bind:to="scrollIntoView" bind:nextType="nextType" messageType="{{messageType}}" workId="{{id}}" bind:boxBottom="boxBottom" />
-  </block>
- 
+<view class="chats-container">
+  <t-navbar title="对话管家" />
+  <scroll-view 
+    id="scrollview" 
+    class="page-scroll__container" 
+    type="list" 
+    scroll-y 
+    enhanced="{{true}}" 
+    enable-passive 
+    scroll-into-view="{{lastId}}" 
+    scroll-into-view-alignment="end" 
+    style="height: calc(100vh - 180rpx); padding-bottom: calc(100rpx + env(safe-area-inset-bottom));"
+  >
+    <view class="system-wrapper">
+      <view class="date">{{date}}</view>
+      <view class="title">对话管家 已进入聊天</view>
+    </view>
+    
+    <block wx:for="{{messages}}" wx:key="id">
+      <chat-guide wx:if="{{(_.show(item, 'guide') && isShowGuide)}}" id="{{item.id}}" active="{{_.active(lastId, item.id)}}" bind:next="handle" bind:to="scrollIntoView" bind:nextType="nextType" bind:getCount="getCount" analysisCount="{{analysisCount}}" />
+      <chat-questionnaire wx:if="{{_.show(item, 'questionnaire') && messageType}}" id="{{item.id}}" active="{{_.active(lastId, item.id)}}" bind:next="handle" bind:to="scrollIntoView" bind:nextType="nextType" messageType="{{messageType}}" workId="{{id}}" bind:boxBottom="boxBottom" />
+    </block>
+  </scroll-view>
 
-</scroll-view>
+  <view class="tabbar-container">
+    <tabbar tabbarValue="{{tabbarValue}}"></tabbar>
+  </view>
+</view>

BIN
miniprogram/module/health/assets/icon/health-index.icon.png


BIN
miniprogram/module/health/assets/icon/health-patient.icon.png


BIN
miniprogram/module/health/assets/icon/health-report.icon.png


BIN
miniprogram/module/health/assets/icon/health-status-1.icon.png


BIN
miniprogram/module/health/assets/icon/health-status-2.icon.png


BIN
miniprogram/module/health/assets/icon/icon_assess@2x.png


BIN
miniprogram/module/health/assets/icon/icon_face@2x.png


BIN
miniprogram/module/health/assets/icon/icon_health@2x.png


BIN
miniprogram/module/health/assets/icon/icon_index@2x.png


BIN
miniprogram/module/health/assets/icon/icon_physique@2x.png


BIN
miniprogram/module/health/assets/icon/icon_record@2x.png


BIN
miniprogram/module/health/assets/icon/icon_scheme@2x.png


BIN
miniprogram/module/health/assets/icon/icon_tongue@2x.png


BIN
miniprogram/module/health/assets/icon/icon_zhengsu@2x.png


BIN
miniprogram/module/health/assets/icon/icon_zhengxing@2x.png


BIN
miniprogram/module/health/assets/image/bg_interview@2x.png


Неке датотеке нису приказане због велике количине промена