| | |
| | | </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> |
| | |
| | | {{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" > |
| | | <button open-type="getPhoneNumber" style="border:none;" plain="true" @getphonenumber="getphonenumber" v-if="!userInfo ||!userInfo.id"> |
| | | <image v-if="!userInfo ||!userInfo.id" src="/static/icon/ic_reply2@2x.png" mode="widthFix" ></image> |
| | | </button> |
| | | <image v-if="userInfo && userInfo.id" 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" > |
| | | <template v-if="userInfo && userInfo.id" > |
| | | <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> |
| | | </template> |
| | | <template v-else> |
| | | <button open-type="getPhoneNumber" style="border:none;" plain="true" @getphonenumber="getphonenumber" v-if="!userInfo ||!userInfo.id"> |
| | | <image src="/static/icon/dianzan.png" mode="widthFix" ></image> |
| | | <text :style="{color: (!item.zanStatus || item.zanStatus == 0) ? '#AAAAAA' : '#004096'}" >{{item.zanCount}}</text> |
| | | </button> |
| | | </template> |
| | | </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> |
| | |
| | | {{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> |
| | |
| | | <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)"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="pl-more" v-if="item.childern.length > 0" @click.stop="more(item)">展开{{item.replyCount - 1}}条回复</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> |
| | |
| | | </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 { |
| | |
| | | info: null, |
| | | content: '', |
| | | commentList: [], |
| | | total: 0, |
| | | page: 1, |
| | | next: true, |
| | | value: '', |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | // 授权手机号 |
| | | getphonenumber(e) { |
| | | if (e.detail.errMsg === 'getPhoneNumber:ok') { |
| | | this.$u.api.wxPhone({ |
| | | code: e.detail.code, |
| | | shopId:this.recshopid, |
| | | recId:this.recuserid, |
| | | openid: this.openid |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$store.commit('setUserInfo', res.data.member) |
| | | this.$store.commit('setToken', res.data.token) |
| | | this.$store.commit('setRecShopId','') |
| | | this.$store.commit('setRecUserId','') |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // 点赞 |
| | | dianzanpl(item) { |
| | | if (!this.userInfo) { |
| | | this.$refs.login.open() |
| | | return; |
| | | } |
| | | if (!item.zanStatus || item.zanStatus == 0) { |
| | | this.$u.api.zanCreate({ |
| | | objId: item.id, |
| | |
| | | this.show1 = false |
| | | }, |
| | | // 展开评论 |
| | | more(item) { |
| | | moreReply(index) { |
| | | this.$u.api.findActivityReplyCommentDTOPage({ |
| | | capacity: 10, |
| | | page: 1, |
| | | page: this.commentList[index].page, |
| | | model: { |
| | | type: 1, |
| | | commentId: item.id |
| | | commentId: this.commentList[index].id |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | console.log(res) |
| | | 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' |
| | |
| | | if (this.commentId) { |
| | | this.commentList.forEach(item => { |
| | | if (item.id === this.commentId) { |
| | | 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() |
| | | } |
| | | }) |
| | | }, |
| | |
| | | } |
| | | }).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) |
| | |
| | | }) |
| | | }, |
| | | shoucang(type) { |
| | | if (!this.userInfo) { |
| | | this.$refs.login.open() |
| | | return; |
| | | } |
| | | if (type === 1) { |
| | | this.$u.api.cancelbatch({ |
| | | ids: this.info.id, |
| | |
| | | } |
| | | }, |
| | | dianzan(type) { |
| | | if (!this.userInfo) { |
| | | this.$refs.login.open() |
| | | return; |
| | | } |
| | | if (type === 1) { |
| | | this.$u.api.zanCancel({ |
| | | objId: this.info.id, |
| | |
| | | font-weight: 400; |
| | | font-size: 28rpx; |
| | | color: #333333; |
| | | word-break: break-word; |
| | | margin-top: 16rpx; |
| | | } |
| | | .pl-item-info-list { |