绿满眶商城微信小程序-uniapp
zxl
2025-08-29 eb46fca9f3e9890d621d22f670afb37d72d58460
pages/tabbar/index/home.vue
@@ -202,11 +202,13 @@
         </view>
         <view v-else class="comment-item" v-for="(comment, index) in comments" :key="comment.id">
         <view style="display: flex;">
         <view style="display: flex;" >
            <image class="comment-avatar" :src="comment.userAvatar || '/static/default-avatar.png'"></image>
            <view class="comment-content">
              <text class="nickname">{{comment.userNickname}} <text v-if="userId===comment.userId">(我)</text> </text>
              <text class="content">{{comment.commentContent}}</text>
               <view @click="replyClick(comment)">
                  <text class="nickname">{{comment.userNickname}} <text v-if="userId===comment.userId">(我)</text> </text>
                  <text class="content">{{comment.commentContent}}</text>
               </view>
              <view style="position: relative;">
               <text class="time">{{formatTime(comment.createTime)}}</text>
               <text @click="openReply(comment)" class="reply-btu time">回复</text>
@@ -218,7 +220,7 @@
         <!-- 回复列表 -->
           <view class="reply-list" v-if="comment.replies && comment.replies.length > 0">
            <view class="reply-item" v-for="(reply, replyIndex) in comment.replies" :key="reply.id">
              <view class="reply-content">
              <view class="reply-content" @click="replyClick(reply)">
               <view style="display: flex;">
                  <image class="comment-reply-avatar" :src="reply.replyUserAvatar || '/static/default-avatar.png'"></image>
                  <text class="nickname">{{reply.userNickname}}<text v-if="userId===comment.userId">(我)</text></text>
@@ -261,6 +263,16 @@
   <custom-tabbar bgColor="#333333" selected="index" selectedTextColor="#ffffff"></custom-tabbar>
   <ActivityPopup
         :show="activityPopup.show"
         :activityTitle="activityPopup.title"
         :activityDesc="activityPopup.desc"
         :activityImage="activityPopup.image"
         :endTime="activityPopup.endTime"
        :prizeActivityId="activityPopup.prizeActivityId"
         @close="onClosePopup"
       />
  </view>
</template>
@@ -274,8 +286,13 @@
   thubmsUpComment, 
   cancelThubmsUpComment,
   changeThumbsUp,
   getGoodsSimilarlyVideos
   getGoodsSimilarlyVideos,
  removeByIdVideoComment,
} from "@/api/video.js";
import ActivityPopup from '@/pages/ActivityPopup/ActivityPopup.vue'
import { mapState, mapMutations } from 'vuex'
import {setPopupRedisTime,getPopupAcitivty} from '@/api/popup.js'
import { changeCollect } from "@/api/collect.js";
import { saveShare, saveShareClickRecord } from "@/api/share.js";
import { silentLogin } from "@/api/connect.js";
@@ -285,11 +302,13 @@
import { nextTick } from "vue";
import {getVideoCover } from "@/api/common.js"
export default {
  components: {TopBar},
  components: {TopBar,ActivityPopup},
  computed: {
       hasPlayTime() {
         return this.sliderFormatTime(this.progress > 0 ? this.duration * this.progress / 100 : 0);
       }
       },
      // 错误:没有用 ... 展开,导致 activityPopup 是函数
      ...mapState(['activityPopup'])
  },
  data() {
    return {
@@ -382,6 +401,10 @@
    }
  },
  onShow() {
     this.openActivityPopup()
     if(!this.userId){
        this.getUserId()
     }
@@ -480,14 +503,71 @@
      title: videoInfo.title,
      path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
      imageUrl: videoInfo.coverUrl
   }
      }
   // 保存分享记录
  },
    },
  methods: {
     async openActivityPopup() {
        await getPopupAcitivty().then(res =>{
           if(res.statusCode === 200){
              let obj = res.data.data;
              if(obj.enableStatus === 'ON'){
                 setPopupRedisTime().then(res =>{
                    if(res.statusCode === 200){
                       if(res.data.state){
                          this.showActivityPopup({
                          title: obj.activityName,
                          desc: obj.activityDes,
                          image: obj.activityCoverUrl,
                          endTime:new Date(obj.endTime).getTime(),
                        prizeActivityId:obj.id
                          })
                       }else{
                          this.hideActivityPopup()
                       }
                    }
                 });
              }
           }
        })
         },
     ...mapMutations(['showActivityPopup','hideActivityPopup']), // 引入Vuex的方法
      onClosePopup() {
           this.hideActivityPopup()
         },
     replyClick(reply){
        if(this.userId === reply.userId){
           let that = this;
          uni.showModal({
             title: '提示',
             content: '你确定要删除吗',
             success: function (res) {
                if (res.confirm) {
                console.log('确定');
                  //调用删除的逻辑
                   console.log(reply)
                  removeByIdVideoComment(reply.id).then(res =>{
                     const item = {
                        id:reply.videoId
                     }
                     that.commentQuery.pageNumber = 1;
                     //重新更新评论
                     that.showComments(item);
                  })
                } else if (res.cancel) {
                console.log('取消');
                }
             }
          });
        }
        console.log(reply)
     },
      // 截取视频当前帧
      captureVideoFrame(videoCtx) {
        return new Promise((resolve) => {
@@ -844,6 +924,7 @@
            this.commentQuery.pageNumber++;
         })
      },
       // 显示评论弹窗
       async showComments(item) {
         this.commentForm.videoId = item.id;
@@ -920,7 +1001,9 @@
                    this.videoNoMore = true;
                    return;
                 }
                 if(res.data.code===200){
                 this.videoQuery.pageNumber++;
                 }
         
         })
      }else{
@@ -948,7 +1031,9 @@
           this.videoNoMore = true;
           return;
        }
        this.videoQuery.pageNumber++;
        if(res.data.code===200){
         this.videoQuery.pageNumber++;
        }
     })
     }
@@ -1382,7 +1467,7 @@
   /* 商品链接悬挂层样式 */
   .goods-link-warp {
      position: absolute;
      bottom: 160px;
      bottom: 100px;
      left: 20px;
      color: #f8f8f8;
      z-index: 10;