uniapp/pages/all_comments/all_comments.vue

276 lines
9.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<view class="all_comments">
<view class="header bg-white" v-if="!isEmpty">
<view class="title xs">
<text class="lighter mr10">商品好评率</text>
<text class="primary">{{ percent }}</text>
</view>
<view class="tab row">
<block v-for="(item, index) in categoryList" :key="index">
<view
:class="
'tab-item xs mr10 br60 mb20 ' +
(type == item.id ? 'bg-primary white' : 'common-bg')
"
:key="index"
:data-id="item.id"
@tap="onChangType"
v-if="item.count"
>
{{ item.name }}({{ item.count }})
</view>
</block>
</view>
</view>
<view class="main bg-white">
<view class="evaluation-list">
<view v-for="(item, index) in commentList" :key="index" class="evaluation-item">
<view class="user-info row">
<image class="avatar mr20" :src="item.avatar"></image>
<view class="user-name md mr10">{{ item.nickname }}</view>
<u-rate
disabled
size="26rpx"
color="#FF2C3C"
v-model="item.goods_comment"
></u-rate>
</view>
<view class="muted xs mt10">
<text class="mr20">{{ item.create_time }}</text>
<text v-show="item.spec_value_str">{{ item.spec_value_str }}</text>
</view>
<view v-if="item.comment" class="dec mt20">{{ item.comment }}</view>
<view class="img mt20 row" style="flex-wrap: wrap" v-if="item.image.length">
<view
v-for="(imgitem, imgindex) in item.image"
:key="imgindex"
class="img-item mr10 mb20"
:data-current="imgitem"
:data-uri="item.image"
@tap="previewImage"
>
<custom-image
width="160rpx"
fit="cover"
height="160rpx"
radius="6rpx"
lazy-load
class="goods-img"
:src="imgitem"
/>
</view>
</view>
<view class="seller-recall-container common-bg mt10" v-if="item.reply">
<view class="lighter nr" style="word-wrap: break-word">
商家回复<span class="normal two-txt-cut">{{ item.reply }}</span>
</view>
</view>
</view>
</view>
</view>
</view>
<loading-footer :status="status" slotEmpty>
<view slot="empty" class="column-center" style="padding-top: 200rpx">
<image class="img-null" src="/static/images/goods_null.png"></image>
<text class="lighter">暂无评价</text>
</view>
</loading-footer>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载https://gitee.com/likeshop_gitee
// | github下载https://github.com/likeshop-github
// | 访问官网https://www.likeshop.cn
// | 访问社区https://home.likeshop.cn
// | 访问手册http://doc.likeshop.cn
// | 微信公众号likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权购买去版权授权后方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
import { getCommentList, getCommentCategory } from '../../api/store'
import { loadingType } from '../../utils/type'
export default {
data() {
return {
status: loadingType.LOADING,
page: 1,
type: '',
commentList: [],
categoryList: [],
percent: '',
isEmpty: true
}
},
components: {},
props: {},
/**
* 生命周期函数--监听页面加载
*/
onLoad: async function (options) {
this.id = options.id
await this.getCommentCategoryFun()
this.getCommentListFun()
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
this.getCommentListFun()
},
/**
* 用户点击右上角分享
*/
// onShareAppMessage: function () {},
methods: {
onChangType(e) {
let { id } = e.currentTarget.dataset
let { type } = this
if (id == type) return
this.type = id
this.page = 1
this.commentList = []
this.status = loadingType.LOADING
this.$nextTick(() => this.getCommentListFun())
},
getCommentCategoryFun() {
return new Promise((resolve) => {
getCommentCategory(this.id).then((res) => {
let {
code,
data: { comment, percent }
} = res
if (code == 1) {
this.categoryList = comment
this.percent = percent
this.type = comment[0].id
this.$nextTick(() => resolve())
}
})
})
},
getCommentListFun() {
let { page, status, commentList, type } = this
if (status == loadingType.FINISHED) return
getCommentList({
id: type,
goods_id: this.id,
page_no: page
}).then((res) => {
if (res.code == 1) {
let { list, more } = res.data
commentList.push(...list)
this.commentList = commentList
this.page++
this.$nextTick(() => {
if (!more) {
this.status = loadingType.FINISHED
}
if (commentList.length <= 0) {
this.status = loadingType.EMPTY
} else {
console.log('commentList false')
this.isEmpty = false
}
})
}
})
},
previewImage(e) {
const { current, uri } = e.currentTarget.dataset
let urls = uri
uni.previewImage({
current,
// 当前显示图片的http链接
urls // 需要预览的图片http链接列表
})
}
}
}
</script>
<style lang="scss">
.all_comments {
padding-top: 20rpx;
.header {
.title {
padding: 24rpx 26rpx;
border-bottom: var(--border);
}
.tab {
padding: 30rpx 0 10rpx 20rpx;
flex-wrap: wrap;
.tab-item {
padding: 9rpx 29rpx;
}
}
}
.common-bg {
background-color: #f5f5f5;
}
.main {
.evaluation-list {
.evaluation-item {
padding: 20rpx;
&:not(:last-of-type) {
border-bottom: $solid-border;
}
.avatar {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
}
.seller-recall-container {
padding: 24rpx 20rpx;
border-radius: 12rpx;
}
}
}
}
}
</style>