与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
6.6 KiB

1 month ago
1 month ago
1 month ago
  1. <wxs module="tool" src="/utils/tool.wxs"></wxs>
  2. <view class="diagnosis-container">
  3. <!-- 医生信息卡片 -->
  4. <view class="doctor-card">
  5. <view class="doctor-avatar">
  6. <image class="avatar-img" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  7. </view>
  8. <view class="doctor-info">
  9. <text class="doctor-name">AI健康助手</text>
  10. <text class="doctor-title">智能诊断专家</text>
  11. <view class="doctor-tags">
  12. <view class="tag">24小时在线</view>
  13. <view class="tag">专业诊断</view>
  14. <view class="tag">快速响应</view>
  15. </view>
  16. </view>
  17. <view class="online-status online">在线</view>
  18. </view>
  19. <!-- 聊天区域 -->
  20. <scroll-view
  21. id="chatScroll"
  22. class="chat-container"
  23. scroll-y
  24. scroll-into-view="{{scrollIntoView}}"
  25. scroll-with-animation="{{scrollAnimation}}"
  26. bindscroll="onScroll"
  27. enhanced
  28. show-scrollbar="{{false}}"
  29. lower-threshold="100"
  30. bindscrolltolower="onScrollToLower"
  31. >
  32. <!-- 欢迎消息 -->
  33. <view class="message-wrapper assistant" id="welcome-message">
  34. <view class="message-avatar">
  35. <image class="avatar" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  36. </view>
  37. <view class="message-content">
  38. <view class="message-bubble assistant-bubble">
  39. <text class="message-text">您好!我是AI健康助手,有什么可以帮您?\n\n请描述你的牲畜的健康状况,我会为你提供专业的分析和建议。</text>
  40. </view>
  41. <view class="message-time">{{currentTime}}</view>
  42. </view>
  43. </view>
  44. <!-- 消息列表 -->
  45. <view wx:for="{{messages}}" wx:key="id" id="msg-{{index}}" class="message-item">
  46. <!-- 用户消息 -->
  47. <view wx:if="{{item.type === 'user'}}" class="message-wrapper user">
  48. <view class="message-content">
  49. <view class="message-bubble user-bubble">
  50. <text class="message-text">{{item.content}}</text>
  51. </view>
  52. <view class="message-time">{{item.time}}</view>
  53. </view>
  54. <view class="message-avatar">
  55. <image class="avatar" src="/pages/images/tx.png" mode="aspectFit"></image>
  56. </view>
  57. </view>
  58. <!-- AI助手消息 -->
  59. <view wx:if="{{item.type === 'assistant'}}" class="message-wrapper assistant">
  60. <view class="message-avatar">
  61. <image class="avatar" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  62. </view>
  63. <view class="message-content">
  64. <view class="message-bubble assistant-bubble">
  65. <text class="message-text">{{item.content}}</text>
  66. <!-- 诊断结果卡片 -->
  67. <view wx:if="{{item.diagnosis}}" class="diagnosis-card">
  68. <view class="diagnosis-header">
  69. <text class="diagnosis-title">🤖 智能诊断结果</text>
  70. </view>
  71. <view class="diagnosis-item">
  72. <text class="diagnosis-label">可能病症:</text>
  73. <text class="diagnosis-value">{{item.diagnosis.possibleDiseases || item.diagnosis.title}}</text>
  74. </view>
  75. <view class="diagnosis-item">
  76. <text class="diagnosis-label">严重程度:</text>
  77. <view class="severity-level {{tool.ztLevel(item.diagnosis.severityLevel)}}">
  78. {{item.diagnosis.severityLevel || '中等'}}
  79. </view>
  80. </view>
  81. <view class="diagnosis-item">
  82. <text class="diagnosis-label">建议措施:</text>
  83. <text class="diagnosis-value">{{item.diagnosis.suggestions || '请咨询专业兽医'}}</text>
  84. </view>
  85. <view class="diagnosis-footer">
  86. <text class="disclaimer">* 本结果仅供参考,请及时咨询专业兽医</text>
  87. </view>
  88. </view>
  89. </view>
  90. <view class="message-time">{{item.time}}</view>
  91. </view>
  92. </view>
  93. </view>
  94. <!-- AI正在输入 -->
  95. <view wx:if="{{isAIThinking}}" class="message-wrapper assistant" id="ai-thinking">
  96. <view class="message-avatar">
  97. <image class="avatar" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  98. </view>
  99. <view class="message-content">
  100. <view class="message-bubble assistant-bubble typing">
  101. <view class="typing-indicator">
  102. <view class="typing-dot"></view>
  103. <view class="typing-dot"></view>
  104. <view class="typing-dot"></view>
  105. <text class="typing-text">AI正在思考中...</text>
  106. </view>
  107. </view>
  108. </view>
  109. </view>
  110. <!-- 底部占位,确保滚动到底部 -->
  111. <view class="scroll-bottom-placeholder" id="scrollBottom"></view>
  112. </scroll-view>
  113. <!-- 快捷症状选择 -->
  114. <view class="symptom-quick-select">
  115. <text class="section-title">快速选择症状</text>
  116. <scroll-view class="symptom-tags" scroll-x>
  117. <view class="symptom-tag" wx:for="{{quickSymptoms}}" wx:key="id" bindtap="selectQuickSymptom" data-symptom="{{item}}">
  118. <text class="tag-text">{{item.keywords}}</text>
  119. </view>
  120. </scroll-view>
  121. </view>
  122. <!-- 输入区域 -->
  123. <view class="input-area" id="inputArea">
  124. <view class="input-wrapper" style="min-height: {{inputHeight}}rpx; height: auto;">
  125. <textarea
  126. class="message-input"
  127. value="{{inputValue}}"
  128. placeholder="描述您或牲畜的症状..."
  129. placeholder-class="placeholder"
  130. bindinput="onInput"
  131. bindlinechange="onInputLineChange"
  132. bindconfirm="sendMessage"
  133. confirm-type="send"
  134. focus="{{autoFocus}}"
  135. auto-height
  136. maxlength="-1"
  137. show-confirm-bar="{{false}}"
  138. cursor-spacing="30"
  139. adjust-position="false"
  140. bindfocus="onInputFocus"
  141. bindblur="onInputBlur"
  142. />
  143. </view>
  144. <button class="send-btn" bindtap="sendMessage" hover-class="send-btn-hover">
  145. <text class="send-icon">↑</text>
  146. </button>
  147. </view>
  148. <!-- 症状选择器组件 -->
  149. <symptom-selector
  150. id="symptomSelector"
  151. show="{{showSymptomSelector}}"
  152. selectedSymptoms="{{selectedSymptoms}}"
  153. bind:select="onSymptomSelect"
  154. bind:confirm="confirmSymptoms"
  155. bind:close="closeSymptomSelector"
  156. />
  157. <!-- 加载动画 -->
  158. <view class="loading-overlay" wx:if="{{isLoading}}">
  159. <view class="loading-content">
  160. <view class="pulse-animation">
  161. <view class="pulse-circle"></view>
  162. <view class="pulse-circle"></view>
  163. <view class="pulse-circle"></view>
  164. </view>
  165. <text class="loading-text">{{loadingText}}</text>
  166. </view>
  167. </view>
  168. </view>