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

129 lines
4.7 KiB

  1. <view class="forum-page">
  2. <!-- 顶部栏 -->
  3. <view class="header">
  4. <view class="title">问答论坛</view>
  5. <button class="add-btn" bindtap="showPostModal">发帖提问</button>
  6. </view>
  7. <!-- 帖子列表 -->
  8. <view class="post-list" wx:if="{{posts.length > 0}}">
  9. <block wx:for="{{posts}}" wx:key="id">
  10. <view class="post-item" data-index="{{index}}">
  11. <!-- 帖子头部 -->
  12. <view class="post-header">
  13. <view class="user-info">
  14. <image class="avatar" src="{{item.avatar}}" mode="aspectFill"></image>
  15. <view class="user-detail">
  16. <view class="username">{{item.username}}</view>
  17. <view class="post-time">{{item.time}}</view>
  18. </view>
  19. </view>
  20. </view>
  21. <!-- 帖子内容 -->
  22. <view class="post-content">
  23. <view class="post-title">{{item.title}}</view>
  24. <view class="post-desc">{{item.content}}</view>
  25. </view>
  26. <!-- 回复列表 -->
  27. <view class="reply-list" wx:if="{{item.replies.length > 0}}">
  28. <view class="reply-title">共{{item.replies.length}}条回复</view>
  29. <block wx:for="{{item.replies}}" wx:key="index">
  30. <view class="reply-item" wx:if="{{index < 2 || item.showAllReplies}}">
  31. <view class="reply-user">
  32. <image class="reply-avatar" src="{{item.avatar}}" mode="aspectFill"></image>
  33. <view class="reply-user-info">
  34. <view class="reply-username">{{item.username}}</view>
  35. <view class="reply-time">{{item.time}}</view>
  36. </view>
  37. </view>
  38. <view class="reply-content">{{item.content}}</view>
  39. </view>
  40. </block>
  41. <!-- 查看更多回复 -->
  42. <view class="view-more-replies" wx:if="{{item.replies.length > 2 && !item.showAllReplies}}" bindtap="toggleReplies" data-index="{{index}}">
  43. 查看全部{{item.replies.length}}条回复
  44. </view>
  45. <!-- 收起回复 -->
  46. <view class="view-more-replies" wx:if="{{item.replies.length > 2 && item.showAllReplies}}" bindtap="toggleReplies" data-index="{{index}}">
  47. 收起回复
  48. </view>
  49. </view>
  50. <!-- 回复输入区域(当前激活的帖子) -->
  51. <view class="reply-input-container" wx:if="{{activeReplyIndex === index}}">
  52. <input
  53. class="reply-input"
  54. placeholder="输入您的回复..."
  55. value="{{replyContent}}"
  56. bindinput="onReplyInput"
  57. focus="{{activeReplyIndex === index}}"
  58. />
  59. <button class="send-reply-btn" bindtap="submitReply" data-index="{{index}}">发送</button>
  60. </view>
  61. </view>
  62. </block>
  63. </view>
  64. <!-- 空状态 -->
  65. <view class="empty-state" wx:else>
  66. <image class="empty-image" src="/images/empty.png" mode="aspectFit"></image>
  67. <view class="empty-text">暂无帖子,快来发布第一个问题吧!</view>
  68. <button class="empty-btn" bindtap="showPostModal">发布问题</button>
  69. </view>
  70. <!-- 发帖弹窗 -->
  71. <view class="modal-overlay" wx:if="{{showPostModal}}" bindtap="hidePostModal">
  72. <view class="modal-content" catchtap="preventTap">
  73. <view class="modal-header">发布新问题</view>
  74. <view class="form-item">
  75. <input
  76. class="form-input"
  77. placeholder="请输入问题标题"
  78. value="{{postTitle}}"
  79. bindinput="onPostTitleInput"
  80. />
  81. </view>
  82. <view class="form-item">
  83. <textarea
  84. class="form-textarea"
  85. placeholder="请详细描述您的问题..."
  86. value="{{postContent}}"
  87. bindinput="onPostContentInput"
  88. maxlength="500"
  89. />
  90. <view class="textarea-counter">{{postContent.length}}/500</view>
  91. </view>
  92. <view class="form-item">
  93. <view class="selected-tags" wx:if="{{selectedTags.length > 0}}">
  94. <block wx:for="{{selectedTags}}" wx:key="index">
  95. <view class="selected-tag">
  96. {{item}}
  97. <text class="remove-tag" data-index="{{index}}" bindtap="removeTag">×</text>
  98. </view>
  99. </block>
  100. </view>
  101. </view>
  102. <view class="modal-buttons">
  103. <button class="modal-btn cancel" bindtap="hidePostModal">取消</button>
  104. <button class="modal-btn submit" bindtap="submitPost" disabled="{{!postTitle || !postContent}}">发布</button>
  105. </view>
  106. </view>
  107. </view>
  108. <!-- 加载提示 -->
  109. <view class="loading" wx:if="{{loading}}">
  110. <image class="loading-icon" src="/images/loading.png" mode="aspectFit"></image>
  111. 加载中...
  112. </view>
  113. </view>