<template> <!-- 评价列表 --> <view class="evaluateWtapper"> <view class="evaluateItem" v-for="(item, indexw) in reply" :key="indexw" @click.stop="details(item)"> <view class="pic-text acea-row row-between-wrapper"> <view class="acea-row row-middle"> <view class="pictrue"> <image :src="item.avatar" mode="aspectFill"></image> </view> <view class="acea-row row-middle"> <view class="acea-row row-middle" style="margin-right: 15rpx;"> <view class="name line1">{{ item.nickname }}</view> <view class="vipImg" v-if="item.is_money_level>0"><image src="../../static/images/vip.png"></image></view> </view> </view> </view> <view class="start" :class="'star' + item.star"></view> </view> <view class="time">{{ item.add_time }} {{ item.suk }}</view> <view class="evaluate-infor">{{ item.comment }}</view> <view class="imgList acea-row"> <view class="pictrue" :class="item.pics.length==1?'one':item.pics.length==2?'two':item.pics.length==3?'three':''" v-for="(itemn, indexn) in item.pics" :key="indexn"> <image :src="itemn" class="image" @click.stop='getpreviewImage(indexw, indexn)' mode="aspectFill"></image> </view> </view> <view class="census acea-row row-between-wrapper" v-if="!fromTo"> <view>浏览{{item.views_num}}次</view> <view class="icons acea-row row-middle"> <view class="acea-row row-middle"> <text class="iconfont icon-pinglun1"></text> <text>{{item.replyComment?item.replyComment.sum:0}}</text> </view> <view class="iconZan acea-row row-middle" @click.stop="praise(item,indexw)"> <text class="icon iconfont" :class="item.is_praise?'icon-weizan font-num':'icon-zan'"></text> <text>{{item.praise}}</text> </view> <!-- #ifdef H5 || APP-PLUS --> <slot name="bottom" :item="item"></slot> <!-- #endif --> <!-- #ifdef MP --> <slot name="bottom{{indexw}}"></slot> <!-- #endif --> </view> </view> <view class="reply" v-if="item.replyComment && !fromTo"> <text :class="item.replyComment.uid?'':'font-num'">{{item.replyComment.user?item.replyComment.user.nickname:'用户'}}</text><text class="store" v-if="!item.replyComment.uid">商家</text>:{{ item.replyComment.content }} </view> </view> </view> </template> <script> import { mapGetters } from 'vuex'; import { getReplyPraise, getUnReplyPraise } from '@/api/store.js'; export default { computed: mapGetters(['isLogin']), props: { reply: { type: Array, default: () => [] }, fromTo: { type: Number, default: 0 } }, data: function() { return {}; }, methods: { details(item){ if(this.isLogin){ uni.navigateTo({ url: '/pages/goods/goods_comment_con/comment_con?id=' + item.id }) }else{ this.$emit('changeLogin'); } }, getpreviewImage: function(indexw, indexn) { uni.previewImage({ urls: this.reply[indexw].pics, current: this.reply[indexw].pics[indexn] }); }, praise(item,indexw){ if(this.isLogin){ if (item.is_praise) { getUnReplyPraise(item.id).then(res => { item.is_praise = !item.is_praise item.praise = item.praise - 1 this.$emit('replyFun',this.reply) return this.$util.Tips({ title: res.msg }); }); } else { getReplyPraise(item.id).then(res => { item.is_praise = !item.is_praise item.praise = item.praise + 1 this.$emit('replyFun',this.reply) return this.$util.Tips({ title: res.msg }); }); } }else{ this.$emit('changeLogin'); } } } } </script> <style scoped lang='scss'> .vipImg{ width: 56rpx; height: 20rpx; margin-left: 10rpx; image{ width: 100%; height: 100%; display: block; } } .evaluateWtapper .census{ padding: 0 20rpx; font-size: 22rpx; color: #999; } .evaluateWtapper .census .iconfont{ margin-right: 6rpx; } .evaluateWtapper .census .icons{ color: #333; } .evaluateWtapper .census .icons .iconZan{ margin-left: 40rpx; } .evaluateWtapper .evaluateItem { background-color: #fff; padding-bottom: 25rpx; margin: 0 20rpx 20rpx 20rpx; border-radius: 12rpx; } .evaluateWtapper .evaluateItem~.evaluateItem { /* border-top: 1rpx solid #f5f5f5; */ } .evaluateWtapper .evaluateItem .pic-text { font-size: 26rpx; color: #282828; height: 95rpx; padding: 0 20rpx; } .evaluateWtapper .evaluateItem .pic-text .pictrue { width: 56rpx; height: 56rpx; margin-right: 20rpx; } .evaluateWtapper .evaluateItem .pic-text .pictrue image { width: 100%; height: 100%; border-radius: 50%; } .evaluateWtapper .evaluateItem .pic-text .name { max-width: 450rpx; } .evaluateWtapper .evaluateItem .time { font-size: 24rpx; color: #82848f; padding: 0 20rpx; } .evaluateWtapper .evaluateItem .evaluate-infor { font-size: 28rpx; color: #282828; margin-top: 19rpx; padding: 0 20rpx; word-break: break-all; } .evaluateWtapper .evaluateItem .imgList { padding: 0 20rpx 0 6rpx; margin-top: 25rpx; } .evaluateWtapper .evaluateItem .imgList .pictrue { width: 156rpx; height: 156rpx; margin: 0 0 15rpx 15rpx; border-radius: 12rpx; } .evaluateWtapper .evaluateItem .imgList .pictrue.one{ width: 400rpx; height: 400rpx; } .evaluateWtapper .evaluateItem .imgList .pictrue.two{ width: 324rpx; height: 324rpx; } .evaluateWtapper .evaluateItem .imgList .pictrue.three{ width: 214rpx; height: 214rpx; } .evaluateWtapper .evaluateItem .imgList .pictrue image { width: 100%; height: 100%; background-color: #f7f7f7; border-radius: 12rpx; } .evaluateWtapper .evaluateItem .reply { font-size: 26rpx; color: #454545; background-color: #f7f7f7; border-radius: 5rpx; margin: 20rpx 30rpx 0 30rpx; padding: 20rpx; position: relative; word-break: break-all; .store{ background-color: var(--view-theme); font-size: 20rpx; color: #fff; border-radius: 6rpx; padding: 2rpx 5rpx; margin-left: 10rpx; } } .evaluateWtapper .evaluateItem .reply::before { content: ""; width: 0; height: 0; border-left: 20rpx solid transparent; border-right: 20rpx solid transparent; border-bottom: 30rpx solid #f7f7f7; position: absolute; top: -14rpx; left: 40rpx; } </style>