first commit

This commit is contained in:
2025-08-06 17:17:48 +08:00
commit dc5fba137c
453 changed files with 85995 additions and 0 deletions
+275
View File
@@ -0,0 +1,275 @@
<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>