多租户商城-商户小程序端
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.
 
 
 

255 lines
5.8 KiB

<template>
<view>
<global-loading />
<view class="header">
<image class="logo" src="https://ceres.zkthink.com//assets/img/logo.png" mode="widthFix"></image>
</view>
<view class="content">
<!-- 分类中心 -->
<scroll-view scroll-y class="left-aside">
<view v-for="(item,index) in flist" :key="item.classifyId" class="f-item b-b" :class="{active: index === currentIndex}" @click="tabtap(item,index)">
{{item.classifyName}}
</view>
</scroll-view>
<scroll-view scroll-with-animation scroll-y class="right-aside" v-if="!ifEmpty">
<view v-if="onlyTwoLayer">
<view class="t-list" v-if="slist.length>0">
<view @click="navToList(titem.classifyPid, titem.classifyId)" class="t-item" v-for="titem in slist" :key="titem.classifyId">
<image :src="titem.classifyImage" class="pic-img"></image>
<text>{{titem.classifyName}}</text>
</view>
</view>
</view>
<view v-if="!onlyTwoLayer">
<view v-for="item in slist" :key="item.classifyId" class="s-list">
<view class="classBox flex-items-plus" v-if="slist.childs.length>0">
<image class="emptyOrder-img" src="https://ceres.zkthink.com/static/images/classRight.png"></image>
<text class="s-item" >{{item.classifyName}}</text>
<image class="emptyOrder-img" src="https://ceres.zkthink.com/static/images/classLeft.png"></image>
</view>
<view class="t-list">
<view @click="navToList(item.classifyId, titem.classifyId)" class="t-item" v-for="titem in slist.childs" :key="titem.classifyId">
<image :src="titem.classifyImage" class="pic-img"></image>
<text>{{titem.classifyName}}</text>
</view>
</view>
</view>
</view>
</scroll-view>
<view v-if="ifEmpty" class="emptyOrder-box flex-items-plus flex-column">
<image class="emptyOrder-img" src="https://ceres.zkthink.com/static/img/bgnull.png"></image>
<label class="font-color-999 fs26 mar-top-30">该分类没有商品</label>
</view>
</view>
</view>
</template>
<script>
const NET = require('../../../utils/request')
const API = require('../../../config/api')
export default {
data() {
return {
sizeCalcState: false,
tabScrollTop: 0,
currentIndex: 0,
currentId:'',
flist: [],
slist: [],
ifEmpty: false,
onlyTwoLayer : true
}
},
onLoad() {
this.loadData();
},
methods: {
loadData(){
// uni.showLoading({
// mask: true,
// title:'加载中...'
// })
NET.request(API.FindCategoryListByDepth, {
classifyId: "",
}, 'GET').then(res => {
this.flist = res.data
this.currentId = this.flist[0].classifyId
uni.hideLoading()
this.getChildCategory()
}).catch(res => {
uni.hideLoading()
})
},
getChildCategory(){
// uni.showLoading({
// mask: true,
// title:'加载中...'
// })
NET.request(API.FindCategoryListByDepth,{
classifyId:this.currentId
},'GET').then(res => {
uni.hideLoading()
if (res.data.length === 0) {
this.ifEmpty = true
}
this.onlyTwoLayer = !this.slist.some(function(item){
return item.childs.length>0
});
this.slist = res.data
}).catch(res => {
uni.hideLoading()
})
},
//一级分类点击
tabtap(item,index){
this.ifEmpty = false
if(this.currentIndex == index){
return;
}
this.currentId = item.classifyId;
this.currentIndex = index
this.getChildCategory()
},
//右侧栏滚动
asideScroll(e){
if(!this.sizeCalcState){
this.calcSize();
}
let scrollTop = e.detail.scrollTop;
let tabs = this.slist.filter(item=>item.top <= scrollTop).reverse();
if(tabs.length > 0){
this.currentId = tabs[0].pid;
}
},
//计算右侧栏每个tab的高度等信息
calcSize(){
let h = 0;
this.slist.forEach(item=>{
let view = uni.createSelectorQuery().select("#main-" + item.id);
view.fields({
size: true
}, data => {
item.top = h;
h += data.height;
item.bottom = h;
}).exec();
})
this.sizeCalcState = true;
},
navToList(sid, tid){
uni.navigateTo({
url: `../../../pages_category_page1/goodsModule/goodsList?category3Id=${tid}`
})
}
}
}
</script>
<style lang='scss'>
page,
.content {
height: 100%;
/* background-color: #f8f8f8; */
}
.header{
border-bottom: 1px solid #F3F4F5FF;
}
.logo {
width: 280rpx;
height: 42rpx;
}
.content {
display: flex;
}
.left-aside {
flex-shrink: 0;
width: 200upx;
height: 100vh;
background-color: #F8F8F8;
}
.f-item {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100upx;
font-size: 28upx;
color: $font-color-base;
position: relative;
&.active{
color: $base-color;
background: #FFFFFF;
}
}
.right-aside{
flex: 1;
padding: 20upx 0 20upx 0;
background: #fff;
height: 100vh;
}
.s-item{
display: flex;
align-items: center;
justify-content: center;
height: 70upx;
padding-top: 8upx;
font-size: 28upx;
color: $font-color-dark;
}
.t-list{
display: flex;
flex-wrap: wrap;
width: 100%;
background: #fff;
padding-top: 12upx;
&:after{
content: '';
flex: 99;
height: 0;
}
image{
width: 140rpx;
height: 140rpx;
}
}
.t-item{
flex-shrink: 0;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 176upx;
font-size: 26upx;
color: #666;
padding-bottom: 20upx;
image{
width: 140upx;
height: 140upx;
}
}
.emptyOrder-box{
margin-left: 180upx;
.emptyOrder-img{
margin-top: -130upx;
width: 113upx;
height: 98upx;
}
}
.classBox {
image {
width: 66rpx;
height: 4rpx;
margin-top: 10rpx;
}
.s-item {
margin: 0 10rpx;
}
}
</style>