2022-02-12 11:33:47 +00:00
|
|
|
|
<template>
|
2022-02-23 11:08:25 +00:00
|
|
|
|
<view class="pad-x180">
|
2022-02-12 11:33:47 +00:00
|
|
|
|
<!-- 状态栏 -->
|
2022-02-14 11:45:52 +00:00
|
|
|
|
<status-nav
|
|
|
|
|
:ifTitle="true"
|
|
|
|
|
:ifReturn="false"
|
|
|
|
|
:ifCenter="true"
|
|
|
|
|
:navBarTitle="'分类'"></status-nav>
|
2022-02-23 11:08:25 +00:00
|
|
|
|
<!-- 容器 -->
|
|
|
|
|
<container-subgroup>
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<view slot="content">
|
|
|
|
|
<view class="pad30 sort-box mar-x20" style="margin-left: -30rpx;margin-right: -30rpx;" :style="{top: statusBarHeight+'px'}">
|
2022-02-25 09:24:06 +00:00
|
|
|
|
<view class="col0 fon38 disjbac">
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<view>分类筛选</view>
|
|
|
|
|
<i @tap="clikScreenIcon" class="icon icon-screen" style="font-size: 50rpx;"></i>
|
|
|
|
|
</view>
|
|
|
|
|
<view v-if="chooseCateList.length" class="disac fw fon24">
|
|
|
|
|
<view class="disac pad-sx10 pad-zy20 radius20 bac0 colf mar-y20 mar-s20"
|
|
|
|
|
v-for="(item,index) in chooseCateList" :key="index"
|
|
|
|
|
@tap="delCate(index)">
|
|
|
|
|
{{item}}<i class="icon icon-del-white mar-z20" style="font-size: 20rpx;"></i>
|
|
|
|
|
</view>
|
2022-02-12 11:33:47 +00:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<!-- 列表 -->
|
|
|
|
|
<view class="disjbac fw">
|
|
|
|
|
<view @tap="goDetail(item.id)" class="width47 mar-s50 posir" v-for="(item,index) in dataList" :key="index">
|
|
|
|
|
<image :src="item.imgSrc" mode="aspectFill" style="width: 100%;height: 312rpx;border-radius: 30rpx;"></image>
|
|
|
|
|
<view class="clips2 fon30 col0 linh50" style="height: 100rpx;">{{item.title}}</view>
|
|
|
|
|
<view class="fon30 colpeili">¥{{item.price}}</view>
|
|
|
|
|
<view v-if="item.isActivity" class="posia fon24 colf pad-zy10 pad-s10 pad-x20 activity-img">限时优惠</view>
|
|
|
|
|
</view>
|
2022-02-23 11:08:25 +00:00
|
|
|
|
</view>
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<!-- 无更多 -->
|
|
|
|
|
<pitera v-if="total==dataList.length"></pitera>
|
|
|
|
|
<!-- 筛选框 -->
|
|
|
|
|
<view v-show="isScreen" @tap="isScreen=false" class="screen-box" :style="{top:statusBarHeight+'px'}">
|
|
|
|
|
<view @tap.stop="isScreen=true" class="posir">
|
|
|
|
|
<view class="fon24">筛选</view>
|
|
|
|
|
<!-- 类型 -->
|
|
|
|
|
<view v-for="(item,index) in screenList" :key="index">
|
|
|
|
|
<view class="fon30 bold mar-sx20">{{item.mainTitle}}</view>
|
|
|
|
|
<view class="disac fw fon24">
|
|
|
|
|
<view class="disac pad-sx10 pad-zy20 radius20 mar-y20 mar-x20"
|
|
|
|
|
:class="childitem.isCheck ? 'bac0 colf' : 'colpeili'"
|
|
|
|
|
v-for="(childitem,childindex) in item.childrenList" :key="childindex"
|
2022-02-25 09:24:06 +00:00
|
|
|
|
@tap.stop="chooseCate(index,childindex,item.mainTitle)">
|
2022-02-24 03:21:51 +00:00
|
|
|
|
{{childitem.title}}<i v-if="childitem.isCheck" class="icon icon-check mar-z20" style="font-size: 30rpx;"></i>
|
|
|
|
|
</view>
|
2022-02-12 11:33:47 +00:00
|
|
|
|
</view>
|
|
|
|
|
</view>
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<!-- 价格 -->
|
|
|
|
|
<view class="sort-price">
|
|
|
|
|
<view class="fon30 bold mar-sx20">价格</view>
|
|
|
|
|
<view class="disac fon24">
|
|
|
|
|
<input class="radius20 pad-zy20" v-model="minPrice" type="number" placeholder="0" />
|
|
|
|
|
<view class="mar-zy20">~</view>
|
|
|
|
|
<input class="radius20 pad-zy20" v-model="maxPrice" type="number" placeholder="9999" />
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<!-- 按钮 -->
|
|
|
|
|
<view class="disjbac fon30 screen-btn">
|
|
|
|
|
<view @tap.stop="isScreen=false" class="radius30 colpeili">取消</view>
|
|
|
|
|
<view @tap.stop="defineEv" class="radius30 colf">确定</view>
|
2022-02-12 11:33:47 +00:00
|
|
|
|
</view>
|
2022-02-14 11:45:52 +00:00
|
|
|
|
</view>
|
2022-02-12 11:33:47 +00:00
|
|
|
|
</view>
|
2022-02-24 03:21:51 +00:00
|
|
|
|
<!-- 全局客服 -->
|
|
|
|
|
<public-customer :nbottom="520"></public-customer>
|
2022-02-14 11:45:52 +00:00
|
|
|
|
</view>
|
2022-02-23 11:08:25 +00:00
|
|
|
|
</container-subgroup>
|
2022-02-12 11:33:47 +00:00
|
|
|
|
<!-- 底部tab -->
|
|
|
|
|
<foot-tab :titleList="titleList" :imgList="imgList" :newcurrent='1'></foot-tab>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2022-02-23 11:08:25 +00:00
|
|
|
|
import pitera from '@/components/nothing/pitera.vue';
|
|
|
|
|
// 客服按钮组件
|
|
|
|
|
import publicCustomer from '@/components/public-customer.vue';
|
|
|
|
|
// 底部组件
|
|
|
|
|
import footTab from '@/components/foot-tab.vue';
|
2022-02-12 11:33:47 +00:00
|
|
|
|
export default {
|
|
|
|
|
components:{
|
2022-02-23 11:08:25 +00:00
|
|
|
|
footTab,
|
|
|
|
|
publicCustomer,
|
|
|
|
|
pitera
|
2022-02-12 11:33:47 +00:00
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
2022-02-18 13:20:26 +00:00
|
|
|
|
statusBarHeight:uni.getSystemInfoSync().statusBarHeight + 50,
|
2022-02-12 11:33:47 +00:00
|
|
|
|
publicColor:uni.getStorageSync('publicColor'),
|
2022-02-14 11:45:52 +00:00
|
|
|
|
chooseCateList:[],//选中的分类列表
|
|
|
|
|
temporaryCate:[],//暂存分类数据
|
|
|
|
|
isScreen:false,//是否隐藏筛选弹框
|
|
|
|
|
// 筛选弹框内容
|
|
|
|
|
screenList:[
|
|
|
|
|
{
|
|
|
|
|
mainTitle:'类型',
|
|
|
|
|
childrenList:[
|
|
|
|
|
{
|
|
|
|
|
title:'全部',
|
|
|
|
|
isCheck:true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'翡翠',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'白玉',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'彩宝',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'琥珀',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'其他',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
mainTitle:'活动',
|
|
|
|
|
childrenList:[
|
|
|
|
|
{
|
|
|
|
|
title:'全部',
|
|
|
|
|
isCheck:true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title:'折扣',
|
|
|
|
|
isCheck:false,
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
minPrice:'',//最低价格
|
|
|
|
|
maxPrice:'',//最高价格
|
2022-02-23 11:08:25 +00:00
|
|
|
|
dataList:[//数据列表
|
2022-02-12 11:33:47 +00:00
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
showTop:false,//是否显示返回顶部
|
|
|
|
|
page:1,
|
|
|
|
|
size:10,
|
|
|
|
|
total:'',//总数
|
2022-02-18 08:26:42 +00:00
|
|
|
|
titleList:uni.getStorageSync('footTitle'), // 底部导航文字
|
|
|
|
|
imgList:uni.getStorageSync('footimg'), // 底部导航图标
|
2022-02-23 11:08:25 +00:00
|
|
|
|
activityStr:'',
|
|
|
|
|
categoryId:''
|
2022-02-12 11:33:47 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onPageScroll(e) {
|
|
|
|
|
e.scrollTop > 360 ? this.showTop = true : this.showTop = false
|
|
|
|
|
},
|
|
|
|
|
onReachBottom() {//触底事件
|
|
|
|
|
if(this.total!=this.dataList.length){
|
|
|
|
|
this.page++
|
2022-02-23 11:08:25 +00:00
|
|
|
|
this.implementEv();
|
2022-02-12 11:33:47 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
onShareAppMessage() {
|
|
|
|
|
var shareObj = {
|
|
|
|
|
path: `/pages/tabbar/cate/cate?invite_code=${uni.getStorageSync('invite_code')}`, // 默认是当前页面,必须是以‘/’开头的完整路径
|
|
|
|
|
};
|
|
|
|
|
return shareObj;
|
|
|
|
|
},
|
|
|
|
|
onLoad(options) {
|
2022-02-25 09:24:06 +00:00
|
|
|
|
if(uni.getStorageSync('phone_active')){
|
|
|
|
|
this.$toolAll.tools.clearShare();
|
|
|
|
|
// 调用获取筛选条件列表事件
|
|
|
|
|
this.obtainScreen();
|
|
|
|
|
// 调用商品列表查询事件
|
|
|
|
|
this.implementEv();
|
|
|
|
|
} else {
|
|
|
|
|
uni.setStorageSync('existCode',options.invite_code);
|
|
|
|
|
uni.setStorageSync('transientUrl',`/pages/tabbar/cate/cate`);
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
url:'/pages/login/login'
|
|
|
|
|
})
|
|
|
|
|
}
|
2022-02-12 11:33:47 +00:00
|
|
|
|
},
|
|
|
|
|
methods: {
|
2022-02-23 11:08:25 +00:00
|
|
|
|
// 获取筛选条件列表
|
|
|
|
|
obtainScreen(){
|
|
|
|
|
this.$requst.post('/api/spu/condition').then(res=>{
|
|
|
|
|
if(res.code==0){
|
|
|
|
|
this.screenList = [];
|
|
|
|
|
if(res.data.length){
|
|
|
|
|
res.data.forEach((item,index)=>{
|
|
|
|
|
let obj = {};
|
|
|
|
|
let newlist = [];
|
|
|
|
|
item.children.forEach((item1,index1)=>{
|
|
|
|
|
let childObj = {
|
|
|
|
|
id:item1.value,
|
|
|
|
|
title:item1.name,
|
|
|
|
|
isCheck:index1==0 ? true : false
|
|
|
|
|
}
|
|
|
|
|
newlist.push(childObj)
|
|
|
|
|
})
|
|
|
|
|
obj = {
|
|
|
|
|
mainTitle:item.title,
|
|
|
|
|
childrenList:newlist
|
|
|
|
|
}
|
|
|
|
|
this.screenList.push(obj)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.$toolAll.tools.showToast(res.msg);
|
|
|
|
|
}
|
|
|
|
|
}).catch(err=>{
|
|
|
|
|
this.$toolAll.tools.showToast(err.msg);
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
2022-02-14 11:45:52 +00:00
|
|
|
|
// 点击筛选按钮图标
|
|
|
|
|
clikScreenIcon(){
|
|
|
|
|
this.isScreen = true;
|
|
|
|
|
},
|
|
|
|
|
// 分类选择事件
|
2022-02-25 09:24:06 +00:00
|
|
|
|
chooseCate(mainIndex,childrenIndex,title){
|
2022-02-14 11:45:52 +00:00
|
|
|
|
// 清除分类所有选中项
|
|
|
|
|
this.screenList[mainIndex].childrenList.forEach((item,index)=>{
|
|
|
|
|
item.isCheck = false;
|
|
|
|
|
})
|
2022-02-25 09:24:06 +00:00
|
|
|
|
let screenIndex = this.screenList.findIndex(item=>item.mainTitle==title);
|
|
|
|
|
if(screenIndex==0){
|
|
|
|
|
// 设置分类id
|
2022-02-28 07:31:39 +00:00
|
|
|
|
if(childrenIndex==0){
|
|
|
|
|
this.categoryId = '';
|
|
|
|
|
} else {
|
|
|
|
|
this.categoryId = this.screenList[screenIndex].childrenList[childrenIndex].id;
|
|
|
|
|
}
|
2022-02-25 09:24:06 +00:00
|
|
|
|
}
|
|
|
|
|
if(screenIndex==1){
|
|
|
|
|
// 设置限时优惠
|
2022-02-28 07:31:39 +00:00
|
|
|
|
if(childrenIndex==0){
|
|
|
|
|
this.activityStr = '';
|
|
|
|
|
} else {
|
|
|
|
|
this.activityStr = this.screenList[screenIndex].childrenList[childrenIndex].id;
|
|
|
|
|
}
|
2022-02-25 09:24:06 +00:00
|
|
|
|
}
|
2022-02-14 11:45:52 +00:00
|
|
|
|
// 将当前选择的类别下的数组置空
|
|
|
|
|
this.temporaryCate[mainIndex] = [];
|
|
|
|
|
// 设置当前选中项为true
|
|
|
|
|
this.screenList[mainIndex].childrenList[childrenIndex].isCheck = true;
|
|
|
|
|
// 向二维数组存储选中项
|
|
|
|
|
this.screenList[mainIndex].childrenList.forEach((item,index)=>{
|
|
|
|
|
if(item.isCheck){
|
|
|
|
|
if(index!=0){
|
|
|
|
|
this.temporaryCate[mainIndex].push(item.title);
|
|
|
|
|
} else {
|
|
|
|
|
this.temporaryCate.splice(mainIndex,1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 删除选中的分类列表
|
|
|
|
|
delCate(index){
|
|
|
|
|
this.chooseCateList.splice(index,1);
|
2022-02-28 07:31:39 +00:00
|
|
|
|
if(index==0){//清空分类id
|
|
|
|
|
this.categoryId = '';
|
|
|
|
|
}
|
|
|
|
|
if(index==1){//清空活动限时字段
|
|
|
|
|
this.activityStr = '';
|
|
|
|
|
}
|
2022-02-14 11:45:52 +00:00
|
|
|
|
// 清除选中
|
|
|
|
|
this.screenList.forEach((item1,index1)=>{
|
|
|
|
|
item1.childrenList.forEach((item2,index2)=>{
|
|
|
|
|
if(index2!=0){
|
|
|
|
|
this.screenList[index1].childrenList[index2].isCheck = false;
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
if(this.chooseCateList.length){
|
|
|
|
|
this.chooseCateList.forEach((existItem,existIndex)=>{
|
|
|
|
|
// 设置存在的选中状态
|
|
|
|
|
this.screenList.forEach((item,mainIndex)=>{
|
|
|
|
|
let nameIndex = item.childrenList.findIndex((childItem)=>{
|
|
|
|
|
return childItem.title == existItem;
|
|
|
|
|
})
|
|
|
|
|
if(nameIndex!=-1){
|
|
|
|
|
this.screenList[mainIndex].childrenList[nameIndex].isCheck = true;
|
|
|
|
|
} else {
|
|
|
|
|
this.screenList[mainIndex].childrenList[0].isCheck = true;
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
// 变更暂存的分类数组
|
|
|
|
|
this.temporaryCate.forEach((temporaryItem,temporaryIndex)=>{
|
|
|
|
|
let newIndex = temporaryItem.findIndex(titem=>{
|
|
|
|
|
return titem == existItem;
|
|
|
|
|
})
|
|
|
|
|
if(newIndex==-1){
|
|
|
|
|
this.temporaryCate[temporaryIndex].splice(0,1);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
} else {// 传递的分类数组长度为0
|
|
|
|
|
this.screenList.forEach((item1,index1)=>{
|
|
|
|
|
item1.childrenList.forEach((item2,index2)=>{
|
|
|
|
|
if(index2==0){
|
|
|
|
|
this.screenList[index1].childrenList[index2].isCheck = true;
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
this.temporaryCate = [];
|
2022-02-23 11:08:25 +00:00
|
|
|
|
// 设置分类id
|
|
|
|
|
this.categoryId = '';
|
|
|
|
|
// 设置限时优惠
|
|
|
|
|
this.activityStr = '';
|
|
|
|
|
// 调用搜索执行事件
|
|
|
|
|
this.implementEv();
|
2022-02-14 11:45:52 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 分类筛选确认事件
|
|
|
|
|
defineEv(){
|
|
|
|
|
this.log(this.temporaryCate)
|
|
|
|
|
// 二维数组this.temporaryCate 降一维数组this.chooseCateList
|
|
|
|
|
let newChoose = this.temporaryCate.join().split(',');
|
|
|
|
|
// 置空选中的分类列表
|
|
|
|
|
this.chooseCateList = [];
|
|
|
|
|
newChoose.forEach(item=>{
|
|
|
|
|
if(item!=''){
|
|
|
|
|
this.chooseCateList.push(item);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
this.isScreen = false;
|
2022-02-23 11:08:25 +00:00
|
|
|
|
this.page = 1;
|
|
|
|
|
// 调用搜索执行事件
|
|
|
|
|
this.implementEv();
|
2022-02-14 11:45:52 +00:00
|
|
|
|
},
|
2022-02-23 11:08:25 +00:00
|
|
|
|
// 搜索执行事件
|
|
|
|
|
implementEv(){
|
|
|
|
|
this.$toolAll.tools.showToast('搜索中...')
|
|
|
|
|
let params = {
|
|
|
|
|
keyword:'', //商品关键字 支持模糊搜索
|
|
|
|
|
page:this.page, // 页数
|
|
|
|
|
size: this.size, // 每页数量
|
|
|
|
|
activity:this.activityStr,// 活动类型 默认normal=普通商品;limit_time=限时促销
|
|
|
|
|
category_id:this.categoryId,// 分类ID 多个分类用英文逗号分割
|
|
|
|
|
price_from:this.minPrice,// 价格区间 最低价格 0不限
|
|
|
|
|
price_to:this.maxPrice,// 价格区间 最大价格 0不限
|
2022-02-12 11:33:47 +00:00
|
|
|
|
}
|
2022-02-23 11:08:25 +00:00
|
|
|
|
this.$requst.post('/api/spu/list',params).then(res=>{
|
2022-02-12 11:33:47 +00:00
|
|
|
|
if(res.code==0){
|
2022-02-23 11:08:25 +00:00
|
|
|
|
if(this.page==1) this.dataList = [];
|
|
|
|
|
// 设置商品总数
|
|
|
|
|
this.total = res.data.total;
|
|
|
|
|
if(res.data.list.length){
|
2022-02-12 11:33:47 +00:00
|
|
|
|
res.data.list.forEach(item=>{
|
|
|
|
|
let obj = {
|
2022-02-23 11:08:25 +00:00
|
|
|
|
id:item.id,
|
|
|
|
|
imgSrc:item.cover,
|
2022-02-12 11:33:47 +00:00
|
|
|
|
title:item.name,
|
2022-02-23 11:08:25 +00:00
|
|
|
|
// price:this.$toolAll.tools.changeNum(item.price*1),
|
|
|
|
|
price:item.price,
|
|
|
|
|
isActivity:item.tag == '' ? false : true,
|
2022-02-12 11:33:47 +00:00
|
|
|
|
}
|
2022-02-23 11:08:25 +00:00
|
|
|
|
this.dataList.push(obj);
|
2022-02-12 11:33:47 +00:00
|
|
|
|
})
|
|
|
|
|
}
|
2022-02-23 11:08:25 +00:00
|
|
|
|
} else {
|
|
|
|
|
this.$toolAll.tools.showToast(res.msg);
|
2022-02-12 11:33:47 +00:00
|
|
|
|
}
|
2022-02-23 11:08:25 +00:00
|
|
|
|
}).catch(err=>{
|
|
|
|
|
this.$toolAll.tools.showToast(err.msg);
|
2022-02-12 11:33:47 +00:00
|
|
|
|
})
|
|
|
|
|
},
|
2022-02-23 11:08:25 +00:00
|
|
|
|
goDetail(id){//前往详情页
|
2022-02-12 11:33:47 +00:00
|
|
|
|
uni.navigateTo({
|
2022-02-23 11:08:25 +00:00
|
|
|
|
url:`/pagesB/shopDetail/shopDetail?id=${id}`
|
2022-02-12 11:33:47 +00:00
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
|
|
|
|
|
</style>
|