与牧同行-小程序用户端
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.

181 lines
6.7 KiB

  1. <view class="diagnosis-container">
  2. <!-- 医生信息卡片 -->
  3. <view class="doctor-card">
  4. <view class="nav-right">
  5. <view class="more-btn" bindtap="showMoreMenu">···</view>
  6. </view>
  7. <view class="doctor-avatar">
  8. <image class="avatar-img" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  9. </view>
  10. <view class="doctor-info">
  11. <text class="doctor-name">AI健康助手</text>
  12. <text class="doctor-title">智能诊断专家</text>
  13. <view class="doctor-tags">
  14. <view class="tag">24小时在线</view>
  15. <view class="tag">专业诊断</view>
  16. <view class="tag">快速响应</view>
  17. </view>
  18. </view>
  19. <view class="online-status online">在线</view>
  20. </view>
  21. <!-- 聊天区域 -->
  22. <scroll-view
  23. class="chat-container"
  24. scroll-y
  25. scroll-into-view="{{'msg-' + (messages.length - 1)}}"
  26. scroll-with-animation="true"
  27. >
  28. <!-- 欢迎消息 -->
  29. <view class="message-wrapper assistant">
  30. <view class="message-avatar">
  31. <image class="avatar" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  32. </view>
  33. <view class="message-content">
  34. <view class="message-bubble assistant-bubble">
  35. <text class="message-text">您好!我是AI健康助手,有什么可以帮您?\n\n请描述你的牲畜的健康状况,我会为你提供专业的分析和建议。</text>
  36. </view>
  37. <view class="message-time">{{currentTime}}</view>
  38. </view>
  39. </view>
  40. <!-- 消息列表 -->
  41. <view wx:for="{{messages}}" wx:key="id" id="msg-{{index}}">
  42. <!-- 用户消息 -->
  43. <view wx:if="{{item.type === 'user'}}" class="message-wrapper user">
  44. <view class="message-content">
  45. <view class="message-bubble user-bubble">
  46. <text class="message-text">{{item.content}}</text>
  47. </view>
  48. <view class="message-time">{{item.time}}</view>
  49. </view>
  50. <view class="message-avatar">
  51. <image class="avatar" src="/pages/images/tx.png" mode="aspectFit"></image>
  52. </view>
  53. </view>
  54. <!-- AI助手消息 -->
  55. <view wx:if="{{item.type === 'assistant'}}" class="message-wrapper assistant">
  56. <view class="message-avatar">
  57. <image class="avatar" src="/pages/images/aiwz.png" mode="aspectFit"></image>
  58. </view>
  59. <view class="message-content">
  60. <view class="message-bubble assistant-bubble">
  61. <text class="message-text">根据您的描述,{{item.content}}</text>
  62. <!-- 诊断结果卡片 -->
  63. <view wx:if="{{item.diagnosis}}" class="diagnosis-card">
  64. <view class="diagnosis-header">
  65. <text class="diagnosis-title">🤖 智能诊断结果</text>
  66. </view>
  67. <view class="diagnosis-item">
  68. <text class="diagnosis-label">可能病症:</text>
  69. <text class="diagnosis-value">{{item.diagnosis.disease}}</text>
  70. </view>
  71. <view class="diagnosis-item">
  72. <text class="diagnosis-label">严重程度:</text>
  73. <view class="severity-level {{item.diagnosis.severity}}">
  74. {{item.diagnosis.severityText}}
  75. </view>
  76. </view>
  77. <view class="diagnosis-item">
  78. <text class="diagnosis-label">建议措施:</text>
  79. <text class="diagnosis-value">{{item.diagnosis.suggestion}}</text>
  80. </view>
  81. <view class="diagnosis-footer">
  82. <text class="disclaimer">* 本结果仅供参考,请及时咨询专业兽医</text>
  83. </view>
  84. </view>
  85. </view>
  86. <view class="message-time">{{item.time}}</view>
  87. </view>
  88. </view>
  89. </view>
  90. <!-- AI正在输入 -->
  91. <view wx:if="{{isAIThinking}}" class="message-wrapper assistant" style="justify-content: center;">
  92. <view class="message-content">
  93. <view class="message-bubble assistant-bubble typing">
  94. <view class="typing-indicator">
  95. <view class="typing-dot"></view>
  96. <view class="typing-dot"></view>
  97. <view class="typing-dot"></view>
  98. <text class="typing-text">AI正在思考中...</text>
  99. </view>
  100. </view>
  101. </view>
  102. </view>
  103. </scroll-view>
  104. <!-- 快捷症状选择 -->
  105. <view class="symptom-quick-select">
  106. <text class="section-title">快速选择症状</text>
  107. <scroll-view class="symptom-tags" scroll-x>
  108. <view class="symptom-tag" wx:for="{{quickSymptoms}}" wx:key="id" bindtap="selectQuickSymptom" data-symptom="{{item}}">
  109. <text class="tag-text">{{item.keywords}}</text>
  110. </view>
  111. </scroll-view>
  112. </view>
  113. <!-- 输入区域 -->
  114. <view class="input-area">
  115. <view class="input-wrapper">
  116. <input
  117. class="message-input"
  118. value="{{inputValue}}"
  119. placeholder="描述您或牲畜的症状..."
  120. placeholder-class="placeholder"
  121. bindinput="onInput"
  122. bindconfirm="sendMessage"
  123. confirm-type="send"
  124. focus="{{autoFocus}}"
  125. />
  126. </view>
  127. <button class="send-btn" bindtap="sendMessage" hover-class="send-btn-hover">
  128. <text class="send-icon">↑</text>
  129. </button>
  130. </view>
  131. <!-- 症状选择器组件 -->
  132. <symptom-selector
  133. id="symptomSelector"
  134. show="{{showSymptomSelector}}"
  135. selectedSymptoms="{{selectedSymptoms}}"
  136. bind:select="onSymptomSelect"
  137. bind:confirm="confirmSymptoms"
  138. bind:close="closeSymptomSelector"
  139. />
  140. <!-- 更多菜单弹窗 -->
  141. <view class="modal-overlay" wx:if="{{showMoreMenu}}" bindtap="closeMoreMenu">
  142. <view class="more-menu" catchtap="stopPropagation">
  143. <view class="menu-item" bindtap="clearHistory">
  144. <text class="menu-icon">🗑️</text>
  145. <text class="menu-text">清空记录</text>
  146. </view>
  147. <view class="menu-item" bindtap="exportChat">
  148. <text class="menu-icon">📤</text>
  149. <text class="menu-text">导出记录</text>
  150. </view>
  151. <view class="menu-item" bindtap="contactDoctor">
  152. <text class="menu-icon">👨‍⚕️</text>
  153. <text class="menu-text">联系兽医</text>
  154. </view>
  155. <view class="menu-item" bindtap="showInstructions">
  156. <text class="menu-icon">❓</text>
  157. <text class="menu-text">使用说明</text>
  158. </view>
  159. </view>
  160. </view>
  161. <!-- 加载动画 -->
  162. <view class="loading-overlay" wx:if="{{isLoading}}">
  163. <view class="loading-content">
  164. <view class="pulse-animation">
  165. <view class="pulse-circle"></view>
  166. <view class="pulse-circle"></view>
  167. <view class="pulse-circle"></view>
  168. </view>
  169. <text class="loading-text">{{loadingText}}</text>
  170. </view>
  171. </view>
  172. </view>