You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

257 lines
6.1 KiB

<template>
<scroll-view
class="wanlshop-category-container"
:style="{
paddingTop: headHeight + 'px',
height: windowHeight + 'px',
backgroundColor : homeModules.page ? homeModules.page.style.pageBackgroundColor : ''
}"
scroll-y
enable-back-to-top
enable-flex="true"
@scrolltoupper="handleUpper"
@scrolltolower="handleLower">
<!-- 菜单 -->
<view v-if="childlist.length > 0" class="wanlshop-category-container__menu bg-white margin-bj padding-bj radius-bock">
<view v-for="(item, index) in childlist" :key="item.id" class="item" @tap="productList(item.id, item.name)">
<image lazy-load :src="$wanlshop.oss(item.image, 50, 50)"></image>
<view class="text-sm wanl-gray-dark margin-top-xs">
{{item.name}}
</view>
</view>
</view>
<!-- 秒杀 -->
<view v-if="seckillList.length > 0" class="wanlshop-category-container__seckill bg-white margin-bj padding-bj radius-bock">
</view>
<!-- 拼团 -->
<view v-if="groupsList.length > 0"
class="wanlshop-category-container__groups bg-white margin-bj padding-bj radius-bock"
:style="{backgroundImage: `url(${$wanlshop.appstc('/show/grueps-top-bg3x.png')})`}"
>
<view class="title margin-bottom-bj">
<view class="text-xl">
<text class="wlIcon-pintuan2"></text>
<text class="margin-left-xs text-30">热门拼团</text>
</view>
<view class="wanl-gray" @tap="handleGroups(cid)">
<text class="text-sm margin-right-xs">更多</text>
<text class="wlIcon-fanhui2"></text>
</view>
</view>
<scroll-view class="list" scroll-x>
<view class="item text-center margin-right-sm" v-for="(item, index) in groupsList" :key="item.id" @tap="handleGroupsGoods(item.id)">
<image lazy-load class="radius-bock" :src="$wanlshop.oss(item.image, 50, 50)"></image>
<view class="text-cut">
{{item.title}}
</view>
<view class="text-orange">
<text class="text-price">{{item.price}}</text>
</view>
</view>
</scroll-view>
</view>
<!-- 分隔符 -->
<view class="wanlshop-category-container__separate">
<view class="line"></view>
<view class="content">
<text class="wlIcon-31guanzhuxuanzhong wanl-text-orange"></text>
<text class="text-bold wanl-gray">类目推荐</text>
</view>
<view class="line"></view>
</view>
<!-- 商品 -->
<wanl-product :dataList="goodsList" />
<!-- 底部提示 -->
<uni-load-more :status="status" :content-text="contentText" />
</scroll-view>
</template>
<script>
export default{
name: 'wanlShopCategory',
props:{
cid:{
type: Number,
default: 0
},
headHeight: {
type: Number,
default: 0
},
windowHeight: {
type: Number,
default: 0
},
currentItemId: {
type: String,
default: ""
},
homeModules: {
type: Object,
default () {
return {}
}
},
childlist: {
type: Array,
default: () => {
return []
}
}
},
data(){
return{
goodsList: [],
seckillList: [],
groupsList: [],
current_page: 1, //当前页码
last_page: 1, //总页码
status: 'loading',
contentText: {
contentdown: '下拉加载更多',
contentrefresh: '疯狂加载中...',
contentnomore: '没有更多商品了'
}
}
},
watch:{
currentItemId(newVal,oldVal){
if(newVal === 'cid' + this.cid){
this.loadData()
}
}
},
methods:{
async loadData(type) {
this.status = 'loading';
// 判断上拉还是下拉
if(type === 'upper'){
this.current_page = 1;
}else if(type === 'lower'){
if (this.current_page >= this.last_page) {
this.status = 'noMore';
return false;
} else {
this.current_page += 1;
}
}
// 请求数据
await this.$api.get({
url: '/wanlshop/common/category',
data: {
id: this.cid,
page: this.current_page
},
success: res => {
this.seckillList = res.seckill;
this.groupsList = res.groups;
// 商品
if(type === 'lower'){
this.goodsList = this.goodsList.concat(res.goods.data);
}else{
this.goodsList = res.goods.data;
}
this.current_page = res.goods.current_page; //当前页码
this.last_page = res.goods.last_page; //总页码
// 判断是否还有数据
if(res.goods.current_page === res.goods.last_page || res.goods.total === 0){
this.status = 'noMore';
}else{
this.status = 'more';
}
}
});
},
handleUpper() {
// this.loadData('upper');
},
handleLower() {
this.loadData('lower');
},
productList(category_id, category_name) {
this.$wanlshop.to(`/pages/product/list?data=${JSON.stringify({ category_id: category_id, category_name: category_name })}`);
},
handleGroups(id) {
this.$wanlshop.to(`/pages/apps/groups/index?id=${id}`);
},
handleGroupsGoods(id){
this.$wanlshop.to(`/pages/apps/groups/goods?id=${id}`);
}
}
}
</script>
<style lang="scss" scoped>
.wanlshop-category-container{
&__menu{
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
grid-auto-flow: row dense;
grid-gap: 16rpx;
.item{
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
image{
height: 100rpx;
width: 100rpx;
border-radius: 6rpx;
}
}
}
&__seckill{
}
&__groups{
background-repeat: no-repeat;
background-size: 100% auto;
.title{
color: #ad4e00;
display: flex;
align-items: center;
justify-content: space-between;
&>view{
display: flex;
align-items: center;
}
}
.list{
white-space: nowrap;
.item {
display: inline-block;
width: 200rpx;
overflow: hidden;
image{
height: 200rpx;
}
}
}
}
&__recommend{
}
&__separate{
display: flex;
align-items: center;
justify-content: center;
.line{
width: 60rpx;
height: 2rpx;
background-color: #dedede;
}
.content{
display: flex;
align-items: center;
margin: 0 50rpx;
text+text{
margin-left: 10rpx;
}
[class*="wlIcon-"]{
font-size: 46rpx;
}
}
}
}
</style>