稀土掘金 稀土掘金

用户评论及回复功能

image.png 需求:渲染文章详情页底部的评论列表,点击“写回答”,打开评论弹窗,发布一级评论,点击一级评论和二级回复都会打开回复评论弹窗,一级评论进行分页,二级回复不分页,点击展开回复会全部展开。

评论列表前端页面

   <div class="uni-comment">
        <div class="comment-nums">{{ answerAllCount }}条评论</div>
        <div v-for="(item, index) in answerList" :key="index">
          <div class="uni-comment-list">
            <div class="uni-comment-face">
              <img :src="item.wxHeadUrl" />
            </div>
            <div class="uni-comment-body">
              <div @click="giveComment(item.answerId, item)">
                <div class="uni-comment-top">
                  <span class="username">{{ item.username }}</span>
                  <span class="author" v-if="item.userId == userId">{{
                    item.userId == userId ? "作者" : ""
                  }}</span>
                </div>
                <div class="uni-comment-content">{{ item.answerConment }}</div>
              </div>
              <div class="uni-comment-date">
                <span>{{ item.answerTime }}</span>
                <div class="thumb" @click="giveThumb(item)">
                  <img
                    src="../../assets/img/topic/topic_post_thumb.png"
                    alt=""
                    v-if="Number(item.flowerFlag)"
                  />
                  <img
                    src="../../assets/img/topic/topic_post_nthumb.png"
                    alt=""
                    v-else
                  />
                  {{ item.follwerCount }}
                </div>
              </div>
            </div>
          </div>
          <div
            class="fold"
            v-for="(ele, idx) of !item.showMoreReply
              ? item.childAnswers
              : [item.childAnswers[0]]"
            :key="idx"
          >
            <div style="display: flex">
              <div class="uni-comment-face">
                <img :src="ele.wxHeadUrl" />
              </div>
              <div class="uni-comment-body">
                <div @click="giveComment(ele.answerId, item)">
                  <div class="uni-comment-top">
                    <span class="username">{{ ele.username }}</span>
                    <span class="author" v-if="ele.userId == userId">{{
                      ele.userId == userId ? "作者" : ""
                    }}</span>
                  </div>
                  <div class="uni-comment-content">
                    回复 <span>{{ ele.replyToAnswerUserName }}</span
                    >:{{ ele.answerConment }}
                  </div>
                </div>
                <div class="uni-comment-date">
                  <span>{{ ele.answerTime }}</span>
                  <div class="thumb" @click="giveThumb(ele)">
                    <img
                      src="../../assets/img/topic/topic_post_thumb.png"
                      alt=""
                      v-if="Number(ele.flowerFlag)"
                    />
                    <img
                      src="../../assets/img/topic/topic_post_nthumb.png"
                      alt=""
                      v-else
                    />
                    {{ ele.follwerCount }}
                  </div>
                </div>
              </div>
            </div>
            <div class="moreReply" v-show="item.showMoreReply">
              <div @click="moreReply(item)">
                展开{{ item.answerCount }}条回复
              </div>
            </div>
          </div>
        </div>
        <div class="moreComment" v-if="answerAllCount">
          <div @click="moreComment" v-show="showMoreComment">展开更多评论</div>
        </div>
      </div>

<div class="fold" v-for="(ele, idx) of !item.showMoreReply ? item.childAnswers : [item.childAnswers[0]]" :key="idx" > 这里在v-for中用了三元表达式实现二级回复多于1条时是否展开收起,注意:如果是在小程序里需要分开写,否则uniapp的小程序里会报如下错: image.png

实时插入回复数据

   const giveReply = () => {
      //发送回复
      data.showComment = false;
      questionComment({
        toAnswerId: toAnswerId,
        conment: data.commentContent,
        fatherCommentId: route.query.questionId,
      }).then((res) => {
        getQuestionDetail();
        if (toAnswerId) {
          //将二级回复插入到子评论的头部,不刷新发请求
          data.currentComment.childAnswers.unshift(res.data);
        } else {
          //一级评论
          data.commentPageNum = 1;
          getQuestionComments();
        }
        data.commentContent = ""; //清空之前评论内容
      });
    }

这里没有toAnswerId的都是点"写回答"发布的评论,其余评论回复都是实时插入数据,由于要求是按时间倒序排列,所以插入到子评论的头部。

两个鬼故事请示的格式车宥利远山金次雷神笔记本官网束姓起名字我的教育故事幻想三国志2结局楼房起名梦见寺庙教育公司起名字大全北京起名字的地方free!第二季青出于蓝而胜于蓝的意思婴儿起名字生辰八字起名免费取名字大全免费起名大全厨具市场宝宝起名四字大全集家政服务起名口红颜色起名字两兄弟起名起个鸽舍的名字视觉公司起名大森林里的小木屋win10专业版激活密钥郑氏起名女孩取名大全给学校起名称张姓女童起名高分牛姓宝宝取名起名大全狗宝起名宜用字中华起名网免费姓名打分少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化