zyejMAll-mobile/pages/goods/evaluate.vue
2025-05-08 16:52:29 +08:00

247 lines
6.7 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>
<s-layout :bgStyle="{ color: '#fff' }" title="查看评论">
<view class="s-category">
<view class="three-level-wrap ss-flex ss-col-top" :style="[{ minHeight: pageHeight + 'px' }]">
<!-- 商品分类 -->
<scroll-view class="side-menu-wrap" scroll-y :style="[{ minHeight: pageHeight + 'px' }]">
<view
class="menu-item ss-flex"
v-for="(item, index) in state.categoryList"
:key="item.id"
:class="[{ 'menu-item-active': index === state.activeMenu }]"
@tap="onMenu(index,item.id)"
>
<view class="menu-title ss-line-1">
{{ item.name }}
</view>
</view>
</scroll-view>
<!-- 商品分类(右) -->
<scroll-view
class="goods-list-box"
scroll-y
:style="[{ height: pageHeight + 'px' }]"
v-if="state.categoryList?.length"
@scrolltolower="handleScrollToLower"
>
<view class="evaimg_box" v-for="(item,index) in state.imgLists" @tap="gotoProgress(item.spuId)" :key="index">
<image :src='item.picUrl' mode="widthFix" v-if="index === 0"></image>
<image :src='item.picUrl' mode="widthFix" v-else @tap="previewImage(index)"></image>
</view>
<uni-load-more
v-if="
(state.style === 'first_one' || state.style === 'first_two') &&
state.pagination.total > 0
"
:status="state.loadStatus"
:content-text="{
contentdown: '点击查看更多',
}"
@tap="loadMore"
/>
</scroll-view>
</view>
</view>
</s-layout>
</template>
<script setup>
import sheep from '@/sheep';
import CategoryApi from '@/sheep/api/product/category';
import { onLoad } from '@dcloudio/uni-app';
import { computed, reactive } from 'vue';
import _ from 'lodash-es';
// import imageSrc2 from '@/sheep/pinglun/00002.jpg';
// import imageSrc3 from '@/sheep/pinglun/00003.jpg';
const state = reactive({
style: 'second_one', // first_one一级 - 样式一), first_two二级 - 样式二), second_one二级
categoryList: [], // 商品分类树
activeMenu: 0, // 选中的一级菜单,在 categoryList 的下标
imgLists:[],
pagination: {
// 商品分页
list: [], // 商品列表
total: [], // 商品总数
pageNo: 1,
pageSize: 6,
},
picUrls:[],
loadStatus: '',
});
const { safeArea } = sheep.$platform.device;
const pageHeight = computed(() => safeArea.height - 44 - 50);
// const picUrls = computed(() => {return state.imgLists?.map(item => item.picUrl);});
// 加载评论分类
async function getList() {
// const { code, data } = await CategoryApi.getCategoryList();
const { code, data } = await CategoryApi.getCommentLists();
if (code !== 0) {
return;
}
state.categoryList = data;
}
const previewImage = (currentIndex)=>{
// console.log("",picUrls)
uni.previewImage({
current: currentIndex-1,
urls: state.picUrls, // 图片 URL 列表
});
}
const gotoProgress=(spuid)=>{
if(spuid){
uni.navigateTo({
url:'/pages/goods/index?id='+spuid
})
}
return;
}
// 选中菜单
const onMenu = (val,id) => {
state.activeMenu = val;
// if (state.style === 'first_one' || state.style === 'first_two') {
state.pagination.pageNo = 1;
state.pagination.list = [];
state.pagination.total = 0;
// getGoodsList(id);
// }
};
// 加载评论列表
async function getGoodsList(id) {
// 加载列表
state.loadStatus = 'loading';
const res = await CategoryApi.getCommentListByIds(3);
if (res.code !== 0) {
return;
}
state.imgLists = res.data
// state.picUrls = res.data.map(item => item.picUrl)
state.picUrls = res.data.slice(1).map(item => item.picUrl);
console.log(state.picUrls)
}
onLoad( (params) => {
// 获取左边的列表
getList();
getGoodsList();
// 首页点击分类的处理:查找满足条件的分类
const foundCategory = state.categoryList.find((category) => category.id === Number(params.id));
// 如果找到则调用 onMenu 自动勾选相应分类,否则调用 onMenu(0) 勾选第一个分类
onMenu(foundCategory ? state.categoryList.indexOf(foundCategory) : 0);
});
function handleScrollToLower() {
// loadMore();
}
</script>
<style lang="scss" scoped>
.evaimg_box{
width: 100%;
margin-bottom: 12rpx;
>image{
width: 100% !important;
}
}
.s-category {
:deep() {
.side-menu-wrap {
width: 200rpx;
height: 100%;
padding-left: 12rpx;
background-color: #f6f6f6;
.menu-item {
width: 100%;
height: 88rpx;
position: relative;
transition: all linear 0.2s;
.menu-title {
line-height: 32rpx;
font-size: 30rpx;
font-weight: 400;
color: #333;
margin-left: 28rpx;
position: relative;
z-index: 0;
&::before {
content: '';
width: 64rpx;
height: 12rpx;
background: linear-gradient(
90deg,
var(--ui-BG-Main-gradient),
var(--ui-BG-Main-light)
) !important;
position: absolute;
left: -64rpx;
bottom: 0;
z-index: -1;
transition: all linear 0.2s;
}
}
&.menu-item-active {
background-color: #fff;
border-radius: 20rpx 0 0 20rpx;
&::before {
content: '';
position: absolute;
right: 0;
bottom: -20rpx;
width: 20rpx;
height: 20rpx;
background: radial-gradient(circle at 0 100%, transparent 20rpx, #fff 0);
}
&::after {
content: '';
position: absolute;
top: -20rpx;
right: 0;
width: 20rpx;
height: 20rpx;
background: radial-gradient(circle at 0% 0%, transparent 20rpx, #fff 0);
}
.menu-title {
font-weight: 600;
&::before {
left: 0;
}
}
}
}
}
.goods-list-box {
background-color: #fff;
width: calc(100vw - 100px);
padding: 10px;
}
.banner-img {
width: calc(100vw - 130px);
border-radius: 5px;
margin-bottom: 20rpx;
}
}
}
</style>