app/pages/search/tuangou.vue
2025-04-21 17:35:54 +08:00

289 lines
5.4 KiB
Vue

<template>
<view class="wrapper">
<!-- 商品栏 -->
<div class="swiper">
<div v-if="groupBuy.length != 0">
<view
class="view-item"
v-for="(groupItem, groupIndex) in groupBuy"
:key="groupIndex"
>
<view class="view-left">
<u-image
border-radius="10"
shape="square"
:src="groupItem.thumbnail"
width="186rpx"
height="186rpx"
>
<view
slot="error"
style="font-size: 24rpx"
>
加载失败
</view>
</u-image>
</view>
<view class="view-content">
<view class="view-content-name">
{{ groupItem.goodsName }}
</view>
<view class="view-content-bottom">
<view>
<view class="view-content-price">
<!-- {{groupItem.sales_price | unitPrice }} <span v-if="groupItem.point">+{{groupItem.point}}积分</span> -->
{{ groupItem.price | unitPrice }}
</view>
<view class="view-content-original_price">{{ groupItem.originalPrice | unitPrice }}</view>
</view>
<view>
<view
class="btn-group"
@click="toHref(groupItem)"
>
去拼团
</view>
<view class="buy-content">已售{{ groupItem.num || 0 }}</view>
</view>
</view>
</view>
</view>
<u-loadmore
style="padding: 10px 0"
bg-color="#f8f8f8"
:status="status"
/>
</div>
<u-empty
v-else
style="margin-top: 20%"
text="暂无数据"
mode="data"
></u-empty>
</div>
</view>
</template>
<script>
import * as API_Promotions from '@/api/promotions';
import * as API_Goods from '@/api/goods';
export default {
props: {
keywords: {
default: ''
}
},
data() {
return {
flag: 3, //tabs中的索引
status: 'loadmore',
is_empty: false,
search: false,
title: '拼团活动',
background: {
backgroundColor: '#fff'
},
empty: false,
params: {
pageNumber: 0,
pageSize: 10,
categoryPath: '',
goodsName: ''
},
groupBuy: [],
search: ''
};
},
created() {
this.initData();
},
methods: {
initData() {
this.search = this.keywords;
this.status = 'loadmore';
this.params = {
pageNumber: 0,
pageSize: 10,
categoryPath: '',
goodsName: this.search
};
this.groupBuy = [];
console.log('初始化团购数据');
this.getData();
},
toHref(goods) {
uni.navigateTo({
url: `/pages/product/goods?id=${goods.skuId}&goodsId=${goods.goodsId}`
});
},
// 请求拼团数据
getData() {
if (this.status !== 'loadmore') return;
this.params.pageNumber++;
this.status = 'loading';
this.params.goodsName = this.search;
const params = JSON.parse(JSON.stringify(this.params));
if (params.category_id === 0) delete params.category_id;
API_Promotions.getAssembleList(params)
.then((response) => {
const data = response.data.result.records;
if (!data || !data.length) {
this.is_empty = true;
this.status = 'nomore';
} else {
if (data.length < this.params.pageSize) {
this.status = 'nomore';
} else {
this.status = 'loadmore';
}
this.is_empty = false;
this.groupBuy.push(...(data || []));
}
})
.catch(() => {});
}
}
};
</script>
<style lang="scss" scoped>
.view-item {
background: #fff;
border-radius: 0.4em;
margin: 20rpx 30rpx;
padding: 20rpx 0;
}
.nodata {
text-align: center;
margin: 40rpx 0 20rpx 0;
}
.container-wrap {
width: 100%;
}
.white_class {
color: #fff;
font-size: 28rpx;
}
.popupTips {
font-size: 22rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #999999;
margin: 0 20rpx;
/deep/ view {
line-height: 1.75;
}
}
.search {
margin: 30rpx 20rpx !important;
}
.view-left,
.view-content,
.view-right,
.view-item {
display: flex;
}
.wrapper {
width: 100%;
overflow: hidden;
}
.view-left {
width: 226rpx;
height: 100%;
overflow: hidden;
display: flex;
justify-content: center;
}
.view-content {
width: calc((100% - 240rpx));
padding-left: 20rpx;
flex-direction: column;
justify-content: center;
text-align: center;
}
.buy-content {
font-size: 22rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
margin-top: 15rpx;
text-align: center;
color: #999999;
}
.view-content-bottom {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.group-wrapper {
padding: 16rpx 32rpx;
}
.view-content-name {
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #333333;
font-size: 28rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.view-content-price {
margin: 10rpx 0;
letter-spacing: 0px;
overflow: hidden;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #ff5a10;
text-overflow: ellipsis;
white-space: nowrap;
}
.view-content-original_price {
font-size: 22rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-decoration: line-through;
text-align: left;
color: #999999;
}
.btn-group {
background: $aider-light-color;
border-radius: 10rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
color: #fff;
text-align: center;
padding: 6rpx 16rpx;
}
/deep/ .empty {
position: relative;
padding-top: 20%;
> .empty-content {
position: relative;
padding-top: 20%;
}
}
</style>