Files

230 lines
5.2 KiB
Vue
Raw Normal View History

<!--
@name: index
@author: kahu4
@date: 2024-01-16 11:19
@descriptionindex
@update: 2024-01-16 11:19
-->
<script setup>
import { emptyCollectIcon, groupByBg } from "@/utils/images";
import Header from "@/components/Header/index.vue";
import { useScroll } from "@/hooks/useScroll";
import ListLoadLoading from "@/components/ListLoadLoading/index.vue";
import ListLoadOver from "@/components/ListLoadOver/index.vue";
import Empty from "@/components/Empty/index.vue";
import Goods from "@/components/goodsComponents/Goods.vue";
import { onLoad } from '@dcloudio/uni-app'
import { usePage } from "@/hooks";
import { getProductList } from "@/api/product";
import { useRouter } from "@/hooks/useRouter";
import { computed, toRefs } from "vue";
import GoodsItemOptions from "@/views/activity/groupBy/component/GoodsItemOptions.vue";
const {scrollTop} = useScroll()
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()
console.log()
}
defineExpose({executeRefresh})
</script>
<template>
<Header
:scroll-top="scrollTop"
>
拼团专区
</Header>
<view class="group-buy-container">
<!-- 背景 -->
<view class="bg-box">
<image
class="bg"
:src="groupByBg" />
</view>
<!-- 内容 -->
<view class="main-box">
<view class="main-box__inner">
<view
class="row-product"
v-if="colList[0].data.length>0">
<Goods
row
:ratio="true"
:goods="colList[0].data[0]"
imgWidth="200rpx"
infoPadding="0rpx 20rpx"
>
<template #options="{goods}">
<GoodsItemOptions :goods="goods" />
</template>
</Goods>
</view>
<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="30rpx 10rpx"
>
<template #options="{goods}">
<GoodsItemOptions :goods="goods" />
</template>
</Goods>
</view>
</template>
</view>
</template>
</view>
<Empty
v-else
:iconSrc="emptyCollectIcon"
>
暂时没有商品推荐哦~
</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>
</view>
</view>
</template>
<style lang="scss">
page {
background: $page-bg-color;
}
</style>
<style
scoped
lang="scss">
.group-buy-container {
width: 100%;
position: relative;
.bg-box {
position: absolute;
top: 0;
left: 0;
width: 100%;
aspect-ratio: 750/435;
.bg {
width: 100%;
height: 100%;
}
}
.main-box {
top: 250rpx;
position: relative;
@include usePadding(30, 30);
&__inner {
//background: #000;
.row-product {
@include usePadding(30, 30);
width: 100%;
background: $white-color;
border-radius: 15rpx;
}
.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>