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

186 lines
6.3 KiB

1 month ago
  1. <!-- 咨询页面 -->
  2. <view class="consult-page">
  3. <!-- 头部专家信息 -->
  4. <view class="consult-header">
  5. <view class="header-content">
  6. <view class="header-center">
  7. <view class="expert-info">
  8. <text class="expert-name">{{conversation.otherUserName}}</text>
  9. <view class="expert-status">
  10. <view class="status-dot online"></view>
  11. <text class="status-text">在线</text>
  12. </view>
  13. </view>
  14. </view>
  15. </view>
  16. </view>
  17. <!-- 聊天内容区域 -->
  18. <scroll-view
  19. id="chatScroll"
  20. class="chat-container"
  21. scroll-y
  22. scroll-top="{{scrollTop}}"
  23. scroll-with-animation="{{scrollAnimate}}"
  24. enable-back-to-top="true"
  25. show-scrollbar="{{false}}"
  26. bindscroll="onScroll"
  27. >
  28. <!-- 日期分隔线 -->
  29. <view class="date-divider" wx:if="{{showDateDivider}}">
  30. <text class="date-text">{{todayDate}}</text>
  31. </view>
  32. <!-- 消息列表 -->
  33. <block wx:for="{{messageList}}" wx:key="index">
  34. <!-- 对方消息 -->
  35. <view class="message-item message-left" wx:if="{{!item.isMe}}">
  36. <view class="message-avatar">
  37. <image src="{{conversation.otherUserAvatar?baseUrl+conversation.otherUserAvatar:' /pages/images/tx.png'}}" class="avatar-img"></image>
  38. </view>
  39. <view class="message-content-wrapper">
  40. <view class="message-arrow arrow-left"></view>
  41. <!-- 文本消息 -->
  42. <view class="message-bubble bubble-left" wx:if="{{item.contentType === 'text'}}">
  43. <text class="message-text">{{item.content}}</text>
  44. </view>
  45. <!-- 图片消息 -->
  46. <view class="media-bubble" wx:elif="{{item.contentType === 'image'}}">
  47. <image
  48. src="{{baseUrl+item.content}}"
  49. class="message-image"
  50. mode="aspectFill"
  51. bindtap="previewImage"
  52. data-url="{{baseUrl+item.content}}"
  53. ></image>
  54. </view>
  55. <!-- 消息状态 - 仅对方消息显示已读状态 -->
  56. <view class="message-status" wx:if="{{item.status === 'read'}}">
  57. <text class="status-text">已读</text>
  58. </view>
  59. </view>
  60. </view>
  61. <!-- 我的消息 -->
  62. <view class="message-item message-right" wx:else>
  63. <view class="message-content-wrapper">
  64. <view class="message-arrow arrow-right"></view>
  65. <!-- 文本消息 -->
  66. <view class="message-bubble bubble-right" wx:if="{{item.contentType === 'text'}}">
  67. <text class="message-text">{{item.content}}</text>
  68. </view>
  69. <!-- 图片消息 -->
  70. <view class="media-bubble" wx:elif="{{item.contentType === 'image'}}">
  71. <image
  72. src="{{baseUrl+item.content}}"
  73. class="message-image"
  74. mode="aspectFill"
  75. bindtap="previewImage"
  76. data-url="{{baseUrl+item.content}}"
  77. ></image>
  78. <!-- 上传进度 -->
  79. <view class="upload-progress" wx:if="{{item.status === 'uploading'}}">
  80. <view class="progress-circle">
  81. <text class="progress-text">{{item.progress}}%</text>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. <view class="message-avatar">
  87. <image src="{{conversation.userAvatar?baseUrl+conversation.userAvatar:'/pages/images/tx.png'}}" class="avatar-img"></image>
  88. </view>
  89. </view>
  90. </block>
  91. <view class="chat-bottom-space"></view>
  92. <view class="load-more-tip" wx:if="{{loadingMore}}">
  93. <text>加载中...</text>
  94. </view>
  95. <view class="empty-tip" wx:if="{{messageList.length === 0 && !loading}}">
  96. <text class="empty-text">暂无聊天记录,开始咨询吧</text>
  97. </view>
  98. </scroll-view>
  99. <view class="input-section" id="inputSection">
  100. <view class="text-input-panel">
  101. <!-- 添加按钮 - 完美垂直居中 -->
  102. <view class="add-btn" bindtap="showMediaActionSheet">
  103. <image src="/pagesA/images/add.png" class="add-icon"></image>
  104. </view>
  105. <!-- 输入框包装器 -->
  106. <view class="input-wrapper">
  107. <textarea
  108. auto-height
  109. maxlength="500"
  110. class="chat-textarea"
  111. placeholder="请输入消息..."
  112. placeholder-class="input-placeholder"
  113. value="{{inputValue}}"
  114. bindinput="onInput"
  115. confirm-type="send"
  116. focus="{{inputFocus}}"
  117. adjust-position="{{false}}"
  118. cursor-spacing="20"
  119. bindfocus="onInputFocus"
  120. bindblur="onInputBlur"
  121. show-confirm-bar="{{false}}"
  122. disable-default-padding="{{true}}"
  123. ></textarea>
  124. <!-- 清空按钮 - 垂直居中 -->
  125. <view class="input-actions" wx:if="{{inputValue}}">
  126. <button class="clear-btn" bindtap="clearInput">
  127. <image src="/pagesA/images/ch.png" class="clear-icon"></image>
  128. </button>
  129. </view>
  130. </view>
  131. <!-- 发送按钮 - 美观渐变绿色,完美垂直居中 -->
  132. <button
  133. class="send-btn"
  134. bindtap="sendTextMessage"
  135. wx:if="{{inputValue}}"
  136. >
  137. <text class="send-text">发送</text>
  138. </button>
  139. <!-- 无内容时显示占位,保持布局稳定 -->
  140. <view class="send-placeholder" wx:else></view>
  141. </view>
  142. </view>
  143. <!-- 多媒体选择面板 -->
  144. <view class="media-action-sheet" wx:if="{{showMediaSheet}}" catchtap="hideMediaActionSheet">
  145. <view class="media-sheet-content" catchtap="stopPropagation">
  146. <view class="media-sheet-header">
  147. <text class="sheet-title">发送内容</text>
  148. <view class="close-sheet-btn" bindtap="hideMediaActionSheet">
  149. <image src="/pagesA/images/cuo.png"></image>
  150. </view>
  151. </view>
  152. <view class="media-options-grid">
  153. <view class="media-option" bindtap="chooseImage">
  154. <view class="option-icon-box">
  155. <image src="/pagesA/images/zp.png"></image>
  156. </view>
  157. <text class="option-text">照片</text>
  158. </view>
  159. </view>
  160. <view class="sheet-bottom">
  161. <text class="bottom-tip">最多可选择9张照片</text>
  162. </view>
  163. </view>
  164. </view>
  165. </view>