doum
17 小时以前 abed82384f42233b7534b7047bcfd955a2ef4487
mini-program/pages/article-details/article-details.vue
@@ -7,11 +7,11 @@
      </view>
      <view class="xian"></view>
      <view class="pl">
         <view class="pl-title">评论 {{info.commentCount || 0}}</view>
         <view class="pl-title">评论 {{total}}</view>
         <view class="pl-wu" v-if="commentList.length === 0">
            <image src="/static/images/default_nocomment@2x.png" mode="widthFix"></image>
         </view>
         <view class="pl-item" v-for="(item, index) in commentList" :key="item.id" v-else @click="openTwo(item.id, item)">
         <view class="pl-item" v-for="(item, index) in commentList" :key="item.id" v-else>
            <view class="pl-item-tx">
               <image :src="item.memberImgUrl" mode="widthFix"></image>
            </view>
@@ -21,36 +21,37 @@
                  {{item.content}}
               </view>
               <view class="pl-item-info-list" v-if="item.multifileList && item.multifileList.length > 0">
                  <view class="pl-item-info-list-image" v-for="(child, i) in item.multifileList" :key="i" @click="yulan(child.fileFullUrl, item.multifileList)">
                  <view class="pl-item-info-list-image" v-for="(child, i) in item.multifileList" :key="i" @click.stop="yulan(child.fileFullUrl, item.multifileList)">
                     <image :src="child.fileFullUrl" mode="widthFix"></image>
                  </view>
                  <view style="width: 132rpx; height: 0;"></view>
                  <view style="width: 132rpx; height: 0;"></view>
               </view>
               <view class="pl-item-info-data">
                  <view class="pl-item-info-data-time">{{$u.timeFormat(new Date(item.createDate).getTime())}}</view>
                  <view class="pl-item-info-data-time">{{item.createDate  }}</view>
                  <view class="pl-item-info-data-list">
                     <view class="pl-item-info-data-list-item" @click="sendChild(item.id, index)">
                        <image src="/static/icon/ic_reply2@2x.png" mode="widthFix"></image>
                     <view class="pl-item-info-data-list-item"  >
                        <image  src="/static/icon/ic_reply2@2x.png" mode="widthFix"  @click="openTwo(item.id, item)"></image>
                     </view>
                     <view class="pl-item-info-data-list-item" @click.stop="dianzanpl(item)">
                        <image src="/static/icon/dianzan.png" mode="widthFix" v-if="!item.zanStatus || item.zanStatus == 0"></image>
                        <image src="/static/icon/detail_ic_zan_sel@2x.png" mode="widthFix" v-else></image>
                        <text :style="{color: (!item.zanStatus || item.zanStatus == 0) ? '#AAAAAA' : '#004096'}">{{item.zanCount}}</text>
                     <view class="pl-item-info-data-list-item" >
                           <image src="/static/icon/dianzan.png" mode="widthFix" v-if="!item.zanStatus || item.zanStatus == 0"  @click.stop="dianzanpl(item)"></image>
                           <image src="/static/icon/detail_ic_zan_sel@2x.png" mode="widthFix" v-else  @click.stop="dianzanpl(item)"></image>
                           <text :style="{color: (!item.zanStatus || item.zanStatus == 0) ? '#AAAAAA' : '#004096'}"  @click.stop="dianzanpl(item)">{{item.zanCount}}</text>
                     </view>
                  </view>
               </view>
               <view class="pl-item" style="border: none;" v-for="(child, a) in item.childern" :key="child.id" @click="openTwo(item.id, child)">
               <view class="pl-item" style="border: none;" v-for="(child, a) in item.childern" :key="child.id" >
                  <view class="pl-item-tx">
                     <image :src="child.memberImgUrl" mode="widthFix"></image>
                  </view>
                  <view class="pl-item-info">
                     <view class="pl-item-info-name">{{child.nikeName}}</view>
                     <view class="pl-item-info-content" v-if="child.content">
                        <text v-if="child.replyMemberNikeName"> 回复<text  style="color: #AAAAAA;margin-left: 6rpx;margin-right: 6rpx;">{{child.replyMemberNikeName}}</text>: </text>
                        {{child.content}}
                     </view>
                     <view class="pl-item-info-list" v-if="child.multifileList && child.multifileList.length > 0">
                        <view class="pl-item-info-list-image" v-for="(child1, i) in child.multifileList" :key="i">
                        <view class="pl-item-info-list-image" v-for="(child1, i) in child.multifileList" :key="i" @click.stop="yulan(child1.fileFullUrl, child.multifileList)">
                           <image :src="child1.fileFullUrl" mode="widthFix"></image>
                        </view>
                        <view style="width: 132rpx; height: 0;"></view>
@@ -59,7 +60,7 @@
                     <view class="pl-item-info-data">
                        <view class="pl-item-info-data-time">{{child.createDate}}</view>
                        <view class="pl-item-info-data-list">
                           <view class="pl-item-info-data-list-item">
                           <view class="pl-item-info-data-list-item" @click="openTwo(item.id, child)">
                              <image src="/static/icon/ic_reply2@2x.png" mode="widthFix"></image>
                           </view>
                           <view class="pl-item-info-data-list-item" @click.stop="dianzanpl(child)">
@@ -71,7 +72,7 @@
                     </view>
                  </view>
               </view>
               <view class="pl-more" v-if="item.childern.length > 0">展开2条回复</view>
               <view class="pl-more" v-if="item.childern&&item.childern.length < item.replyCount" @click.stop="moreReply(index)">展开{{item.replyCount - item.childern.length}}条回复</view>
            </view>
         </view>
      </view>
@@ -124,15 +125,18 @@
            </view>
         </view>
      </u-popup>
      <Login ref="login" />
   </view>
</template>
<script>
   import { mapState } from 'vuex'
   import { dateConversion } from '@/utils/utils.js'
   import Login from '@/components/login/login.vue'
   export default {
      components: { Login },
      computed: {
         ...mapState(['userInfo', 'token'])
         ...mapState(['userInfo', 'token','recshopid','recuserid'])
      },
      data() {
         return {
@@ -142,6 +146,7 @@
            info: null,
            content: '',
            commentList: [],
            total: 0,
            page: 1,
            next: true,
            value: '',
@@ -166,6 +171,10 @@
      methods: {
         // 点赞
         dianzanpl(item) {
            if (!this.userInfo) {
               this.$refs.login.open()
               return;
            }
            if (!item.zanStatus || item.zanStatus == 0) {
               this.$u.api.zanCreate({
                  objId: item.id,
@@ -190,6 +199,10 @@
         },
         // 二级评论
         openTwo(commentId, item) {
            if (!this.userInfo) {
               this.$refs.login.open()
               return;
            }
            this.item = item
            this.commentId = commentId
            this.show1 = true
@@ -248,8 +261,42 @@
            this.multifileList = []
            this.show1 = false
         },
         // 展开评论
         moreReply(index) {
            this.$u.api.findActivityReplyCommentDTOPage({
               capacity: 10,
               page: this.commentList[index].page,
               model: {
                  type: 1,
                  commentId: this.commentList[index].id
               }
            }).then(res => {
               if (res.code === 200) {
                  this.commentList[index].page++
                  this.commentList[index].childern = this.uniqueById([
                     ...this.commentList[index].childern,
                     ...res.data.records
                  ])
               }
            })
         },
         // 数组去重
         uniqueById(arr) {
            const map = new Map();
            return arr.filter(item => {
               if (!map.has(item.id)) {
                  map.set(item.id, true);
                  return true;
               }
               return false;
            });
         },
         // 评论
         sendComment() {
            if (!this.userInfo) {
               this.$refs.login.open()
               return;
            }
            if (!this.value && this.multifileList.length === 0) return uni.showToast({
               title: '评论内容不能为空',
               icon: 'none'
@@ -268,15 +315,17 @@
                  if (this.commentId) {
                     this.commentList.forEach(item => {
                        if (item.id === this.commentId) {
                           item.commentList.childern.unshift(res.data)
                           item.childern = item.childern||[]
                           item.childern.unshift(res.data)
                        }
                     })
                  } else {
                     this.commentList = this.commentList||[]
                     this.commentList.unshift(res.data)
                  }
                  this.multifileList = []
                  this.value = ''
                  this.show1 = false
                  this.closePush()
               }
            })
         },
@@ -294,8 +343,10 @@
               }
            }).then(res => {
               if (res.code === 200) {
                  this.total = res.data.total
                  res.data.records.forEach(item => {
                     item.createDate = dateConversion(item.createDate)
                     // item.createDate = dateConversion(item.createDate)
                     item.page = 1
                     item.childern = []
                     if (item.activityReplyCommentDTO) {
                        item.activityReplyCommentDTO.createDate = dateConversion(item.activityReplyCommentDTO.createDate)
@@ -311,6 +362,10 @@
            })
         },
         shoucang(type) {
            if (!this.userInfo) {
               this.$refs.login.open()
               return;
            }
            if (type === 1) {
               this.$u.api.cancelbatch({
                  ids: this.info.id,
@@ -332,6 +387,10 @@
            }
         },
         dianzan(type) {
            if (!this.userInfo) {
               this.$refs.login.open()
               return;
            }
            if (type === 1) {
               this.$u.api.zanCancel({
                  objId: this.info.id,
@@ -591,6 +650,7 @@
                  font-weight: 400;
                  font-size: 28rpx;
                  color: #333333;
                  word-break: break-word;
                  margin-top: 16rpx;
               }
               .pl-item-info-list {