Files
uniapp-im-shop/pages/mall/comment.vue
2026-01-16 00:12:33 +08:00

249 lines
6.1 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.
<script setup>
import { ref, reactive } from 'vue'
import { onLoad, onShow } from '@dcloudio/uni-app'
import { getProductCommentList } from '@/api/mall'
import { navigateTo } from '../../utils/router'
const topNav = ref([
{ name: '全部', id: '1' },
{ name: '好评(54)', id: '2' },
{ name: '差评(43)', id: '3' },
{ name: '有图(23)', id: '4' }
])
const formData = reactive({
type: '1'
})
const productId = ref('')
const listData = ref([])
const paging = ref(null)
const onTop = id => {
formData.type = id
}
const getList = async (pageNum, pageSize) => {
try {
const res = await getProductCommentList({
productId: productId.value,
pageNum,
pageSize
})
paging.value.complete(res.rows)
} catch (err) {
paging.value.complete(false)
}
}
onLoad(e => {
productId.value = e.productId
})
onShow(() => {
getList()
})
</script>
<template>
<z-paging
ref="paging"
v-model="listData"
:default-page-size="15"
safe-area-inset-bottom
use-safe-area-placeholder
:auto="false"
@query="getList"
>
<view class="comment-box">
<!-- <view class="top-options">
<view
v-for="(item, index) in topNav"
:key="index"
:class="{ active: item.id === formData.type }"
class="text"
@click="onTop(item.id)"
>
{{ item.name }}
</view>
</view> -->
<!-- 卡片位置 -->
<view v-for="item in listData" :key="item.id" class="card-box">
<image
:src="item.avatar || '/static/images/public/random1.png'"
mode="scaleToFill"
class="avatar"
></image>
<!-- 右边 -->
<view class="right-box">
<view class="name_box">
<text class="name">{{ item.userName }}</text>
<uni-rate readonly :size="24" :value="item.rating" />
</view>
<view class="rate-box">
<view class="date">
<text>{{ item.createTime }}</text>
<!-- <text>重庆市</text> -->
</view>
<!-- <view class="star">
<view class="like">
<uni-icons
type="hand-up"
size="16"
color="#74747480"
></uni-icons>
<text v-if="item.likeCount">{{ item.likeCount }}</text>
</view>
<uni-icons
type="chat"
size="16"
color="#74747480"
></uni-icons>
</view> -->
</view>
<text class="content">
{{ item.content }}
</text>
<!-- <view class="img-box">
<image
v-for="item in 5"
src="/static/images/public/random1.png"
mode="scaleToFill"
class="bottom-img"
></image>
</view>
<view class="bottom-content">
<view class="name-box">
<text>名字</text>
<text>内容</text>
</view>
<text class="expand">共三条回复></text>
</view> -->
</view>
</view>
</view>
<!-- 底部按钮 -->
<template #bottom>
<bottom-view position="absolute">
<cb-button
@click="navigateTo('/pages/mall/add-comment', { productId })"
>
确认添加
</cb-button>
</bottom-view>
</template>
</z-paging>
</template>
<style lang="scss" scoped>
// @import './styles/public.scss';
@import '@/styles/top-selector.scss';
.comment-box {
padding: 32rpx 24rpx;
.card-box {
margin-top: 36rpx;
display: flex;
.avatar {
width: 64rpx;
height: 64rpx;
border-radius: 64rpx;
flex-shrink: 0;
margin-right: 16rpx;
}
.right-box {
width: 100%;
display: flex;
flex-direction: column;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
text-align: left;
font-style: normal;
text-transform: none;
.name_box {
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 28rpx;
color: #333333;
}
}
.rate-box {
display: flex;
align-items: center;
justify-content: space-between;
margin: 10rpx 0 20rpx;
.date {
font-weight: 400;
font-size: 24rpx;
color: #74747480;
text {
&:first-child {
margin-right: 20rpx;
}
}
}
.star {
display: flex;
align-items: center;
.like {
display: flex;
align-items: center;
font-weight: 400;
font-size: 22rpx;
color: #74747480;
margin-right: 86rpx;
}
}
}
.content {
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.img-box {
margin-top: 16rpx;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 16rpx;
.bottom-img {
width: 128rpx;
height: 128rpx;
}
}
.bottom-content {
margin-top: 32rpx;
background: #f9f9f9;
border-radius: 8rpx;
padding: 0 16rpx 16rpx;
font-family: PingFang SC, PingFang SC;
font-style: normal;
text-transform: none;
.name-box {
margin-top: 16rpx;
text {
font-weight: 400;
font-size: 28rpx;
color: #333333;
&:last-child {
font-weight: 500;
font-size: 28rpx;
color: #999999;
}
}
}
.expand {
display: block;
margin-top: 14rpx;
font-weight: 400;
font-size: 24rpx;
color: #00d993;
}
}
}
}
}
</style>