chat.wxml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <navigation-bar title="音乐数字AI客服" back-btn="{{true}}" bg-color="#E8F4FC"></navigation-bar>
  2. <view class="chat-container">
  3. <!-- 聊天消息列表 -->
  4. <scroll-view class="chat-scroll" scroll-y scroll-into-view="{{scrollToMessage}}" enhanced show-scrollbar="{{false}}">
  5. <view class="message-list">
  6. <block wx:for="{{messages}}" wx:key="id">
  7. <!-- AI消息 -->
  8. <view wx:if="{{item.type === 'ai'}}" class="message-row ai-row">
  9. <view class="avatar ai-avatar">
  10. <image class="ai-avatar-image" src="https://oss.dayaedu.com/ktyq/ai-avatar.png" mode="aspectFill" binderror="onAvatarError"></image>
  11. </view>
  12. <view class="message-content">
  13. <!-- 文本消息 -->
  14. <view wx:if="{{item.contentType === 'text'}}" class="bubble ai-bubble">
  15. <text class="message-text">{{item.content}}</text>
  16. </view>
  17. <!-- 常见问题卡片 -->
  18. <view wx:if="{{item.contentType === 'faq'}}" class="faq-card">
  19. <view class="faq-header">
  20. <text class="faq-title">常见问题</text>
  21. </view>
  22. <view class="faq-list">
  23. <view wx:for="{{item.questions}}" wx:key="index" wx:for-item="question" class="faq-item" data-index="{{index}}" bindtap="onFaqTap">
  24. <view class="faq-icon">
  25. <text class="faq-icon-text">#</text>
  26. </view>
  27. <text class="faq-text">{{question}}</text>
  28. <text class="faq-arrow">›</text>
  29. </view>
  30. </view>
  31. </view>
  32. </view>
  33. </view>
  34. <!-- 用户消息 -->
  35. <view wx:if="{{item.type === 'user'}}" class="message-row user-row">
  36. <view class="message-content">
  37. <view wx:if="{{item.contentType === 'text'}}" class="bubble user-bubble">
  38. <text class="message-text">{{item.content}}</text>
  39. </view>
  40. <view wx:if="{{item.contentType === 'image'}}" class="user-image">
  41. <image src="{{item.content}}" mode="aspectFit" show-menu-by-longpress></image>
  42. </view>
  43. </view>
  44. <view class="avatar user-avatar">
  45. <image wx:if="{{userAvatar}}" src="{{userAvatar}}" mode="aspectFill"></image>
  46. <text wx:else class="avatar-text">我</text>
  47. </view>
  48. </view>
  49. <!-- AI回复(用户问题答案) -->
  50. <view wx:if="{{item.type === 'reply'}}" class="message-row ai-row">
  51. <view class="avatar ai-avatar">
  52. <image class="ai-avatar-image" src="https://oss.dayaedu.com/ktyq/ai-avatar.png" mode="aspectFill"></image>
  53. </view>
  54. <view class="message-content">
  55. <view class="bubble ai-bubble">
  56. <text class="message-text">{{item.content}}</text>
  57. </view>
  58. </view>
  59. </view>
  60. </block>
  61. <!-- 加载中状态 -->
  62. <view wx:if="{{isLoading}}" class="message-row ai-row loading-row">
  63. <view class="avatar ai-avatar">
  64. <image class="ai-avatar-image" src="https://oss.dayaedu.com/ktyq/ai-avatar.png" mode="aspectFill"></image>
  65. </view>
  66. <view class="loading-bubble">
  67. <view class="loading-dots">
  68. <view class="dot"></view>
  69. <view class="dot"></view>
  70. <view class="dot"></view>
  71. </view>
  72. </view>
  73. </view>
  74. <view id="last-message"></view>
  75. </view>
  76. </scroll-view>
  77. <!-- 输入区域 -->
  78. <view class="input-area">
  79. <view class="input-container">
  80. <view class="input-wrapper">
  81. <view class="voice-btn">
  82. <text class="voice-icon">🎤</text>
  83. </view>
  84. <input
  85. class="chat-input"
  86. placeholder="请输入您的问题..."
  87. placeholder-class="placeholder"
  88. value="{{inputValue}}"
  89. bindinput="onInput"
  90. confirm-type="send"
  91. bindconfirm="sendTextMessage"
  92. />
  93. </view>
  94. <view class="image-btn" bindtap="chooseImage">
  95. <text class="image-icon">🖼️</text>
  96. </view>
  97. </view>
  98. </view>
  99. </view>