Files

197 lines
4.1 KiB
Vue
Raw Normal View History

2023-11-15 19:59:37 +08:00
<!--
@name: 新品首发
@author: kahu4
@date: 2023-10-27 14:42
@descriptionindex
@update: 2023-10-27 14:42
-->
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { usePage } from "@/hooks";
import { getProductList } from "@/api/product";
import Empty from "@/components/Empty/index.vue"
import ListLoadOver from "@/components/ListLoadOver/index.vue"
import ListLoadLoading from "@/components/ListLoadLoading/index.vue"
import { useRouter } from "@/hooks/useRouter";
2023-11-17 20:55:32 +08:00
import {emptyCollectIcon} from "@/utils/images";
2023-11-15 19:59:37 +08:00
import Goods from "@/components/goodsComponents/Goods.vue";
import { computed, toRefs } from "vue";
const {refresh, dataList, loadend, loading, listEmpty} = usePage(getProductList)
const {push} = useRouter()
onLoad(() => {
refresh()
})
const props = defineProps({
more:{
type:Boolean,
default:()=>true
}
})
const { more } = toRefs(props)
const colList = computed(() => [
{
name: 'all',
data: dataList.value.filter((item,index)=>index%2===0)
},
{
name:'right',
data: dataList.value.filter((item,index)=>index%2!==0)
}
])
const executeRefresh = () => {
refresh()
}
2023-11-15 19:59:37 +08:00
defineExpose({ executeRefresh })
2023-11-15 19:59:37 +08:00
</script>
<template>
<!--push({ url: '/pages/goodsList/goodsList' }-->
<view class="recommend-container">
<slot name="head">
<view class="title-row">
商品推荐
</view>
</slot>
<view
class="product-box"
v-if="!listEmpty"
>
<!-- 分两列 后期瀑布流 -->
<template
v-for="col in colList"
:key="col.name"
>
<view class="goods-col">
<template
v-for="item in col.data"
:key="item.id"
>
<view class="product">
<Goods
:ratio="true"
:goods="item"
infoPadding="20rpx"
2023-11-15 19:59:37 +08:00
>
<template #options>
<view class="good-bottom">
<view class="price">
{{ item.price }}
</view>
<view class="sale">
仅剩{{ item.stock }}
</view>
</view>
</template>
</Goods>
</view>
</template>
</view>
</template>
</view>
<Empty
v-else
2023-11-17 20:55:32 +08:00
:iconSrc="emptyCollectIcon"
2023-11-15 19:59:37 +08:00
>
暂时没有商品推荐哦~
</Empty>
<!-- 加载中 -->
<ListLoadLoading v-if="loading" />
<!-- 加载完毕-->
<ListLoadOver v-if="loadend" >
<template v-if="more">
<span @click="push({ url: '/pages/goodsList/goodsList' })">
浏览更多商品
</span>
</template>
<template v-else>
到底了~
</template>
</ListLoadOver>
</view>
</template>
<style
scoped
lang="scss"
>
.recommend-container{
@include usePadding(30, 20);
width: 100%;
.title-row{
width: 100%;
font-size:32rpx;
text-align: center;
position: relative;
color: #333;
font-weight: bold;
&::before,&::after{
content: '';
position: absolute;
width: 10%;
height: 3rpx;
border-radius: 5rpx;
background: #333;
top: 50%;
transform: translate(0,50%);
}
&::before{
left: 25%;
}
&::after{
right: 25%;
}
}
}
.product-box {
margin-top: 30rpx;
width: 100%;
box-sizing: border-box;
overflow: hidden;
//display: flex;
//gap: 20rpx;
.goods-col {
width: 49%;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
flex-grow: 0;
float: left;
&:nth-child(2){
float: right;
}
.product {
flex-grow: 0;
width: 100%;
background: $white-color;
border-radius: 20rpx;
overflow: hidden;
margin-bottom: 20rpx;
.good-bottom {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 20rpx;
.price {
font-size: 28rpx;
}
.sale {
color: #999999;
}
}
}
}
}
</style>