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.

417 lines
9.0 KiB

4 months ago
<template>
<view :style="colorStyle">
<tui-drawer :mode="mode" :visible="visible" @close="closeDrawer">
<view class="acea-row row-column container">
<!-- #ifdef MP -->
<view :style="{height: getHeight.barTop+'px'}"></view>
<view :style="{height: getHeight.barHeight+'px'}" class="head-box acea-row row-center-wrapper">筛选</view>
<!-- #endif -->
<!-- #ifndef MP -->
<view class="head-box acea-row row-center-wrapper">筛选</view>
<!-- #endif -->
<scroll-view scroll-y="true" class="scroll-view">
<view class="d-container">
<!-- 品牌 -->
<view class="box brand-box">
<tui-collapse :index="brandIndex" :current="brandCurrent" @click="brandCollapse">
<template v-slot:title>
<tui-list-cell>品牌</tui-list-cell>
</template>
<template v-slot:content>
<view class="box-list acea-row">
<view class="box-list acea-row">
<view class="list acea-row row-center-wrapper line1" :class="{'bgcolor':spanIndex.indexOf(index)>-1}" v-for="(item,index) in list" :key="index"
@click="changeSpan(index,item)">
{{item.brand_name}}
</view>
</view>
</view>
</template>
</tui-collapse>
</view>
<!-- 分类 -->
<view class="box">
<view class="font">分类</view>
<scroll-view scroll-x="true" class="scroll-x-view" v-if="level == 3">
<view class="item" :class="{ on: navOneActive == index }" v-for="(item,index) in categoryList" :key="item.id" @click="tapNavOne(item,index)">
<view class="img-box">
<image :src="item.pic" class="img"></image>
</view>
<view class="title">{{item.cate_name}}</view>
</view>
</scroll-view>
<template v-for="(item,index) in categoryErList">
<tui-collapse :key="item.id" :index="index" :current="item.current" :disabled="item.disabled" @click="change">
<template v-slot:title>
<tui-list-cell>{{item.cate_name}}</tui-list-cell>
</template>
<template v-slot:content>
<view class="box-list acea-row">
<view class="list acea-row row-center-wrapper" v-for="(data,indexn) in item.children" :key="indexn" @click="categoryFn(data,item)">
<view class="acea-row row-center-wrapper" :class="{bgcolor:sortIndex===data.id}">
{{data.cate_name}}
</view>
</view>
</view>
</template>
</tui-collapse>
</template>
</view>
</view>
</scroll-view>
<!-- 底部按钮 -->
<view class="btn-box acea-row">
<view class="btn" @click="submit(2)">
重置
</view>
<view class="btn btnColor" @click="submit(1)">
确认
</view>
</view>
<view class="safe-area-inset-bottom"></view>
</view>
</tui-drawer>
<!-- 确认 -->
</view>
</template>
<script>
import colors from "@/mixins/color";
import tuiDrawer from "@/components/thorui/tui-drawer"
import tuiCollapse from "@/components/thorui/tui-collapse"
import tuiListCell from "@/components/thorui/tui-list-cell"
let statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
export default {
components: {
tuiDrawer,
tuiCollapse,
tuiListCell
},
props: {
storeCategory: {
type: Array, // 分类数据
default: []
},
storeBrand: {
type: Array, //品牌数据
},
level: {
type: Number,
default: 2
}
},
mixins: [colors],
data() {
return {
getHeight: this.$util.getWXStatusHeight(),
statusBarHeight: statusBarHeight,
visible: false,
mode: "right",
sortIndex: 0,
spanIndex: [],
newList: [],
open: 1,
forArr: [],
serchData: {
sort: '', //new 最新, sales价值
sort_type: '', // DESC 倒序 ASC 正序
send: '',
cate_id: [],
},
brandIndex: 0,
brandCurrent: 0,
navOneActive: 0,
categoryList: [],
categoryErList: [],
}
},
computed: {
storeArr() {
return this.storeCategory
},
list() {
if (this.open === 1) {
return this.storeBrand.slice(0, 10)
} else if (this.open === 2) {
return this.storeBrand
}
},
},
watch: {
storeCategory(val) {
this.categoryList = val;
if (this.level == 2) {
this.categoryErList = this.categoryList;
} else {
this.categoryErList = this.categoryList[0].children;
}
this.sortIndex = this.categoryErList[0].children[0].id;
console.log(this.sortIndex)
},
},
mounted() {
console.log(2, '父组件传过来的值')
// this.newListArr()
// this.openFn()
},
methods: {
// newListArr() {
// // this.forArr = this.list
// if (this.open == 1) {
// console.log('进入')
// this.$set(this.forArr,this.forArr.length,...this.list.slice(0, 10))
// console.log(this.forArr)
// } else {
// console.log('全部')
// this.forArr = this.list
// }
// },
closeDrawer() {
this.visible = false
},
// 点击展开
openFn(num) {
switch (num) {
case 1:
this.open = 2
break;
case 2:
this.open = 1
break;
}
// this.newListArr()
},
// 单选
categoryFn(row, item) {
console.log(row, item)
this.sortIndex = row.id
let cid = this.categoryList[this.navOneActive].id;
let sid = row.pid;
let tid = row.id;
if (this.level == 2) {
cid = row.pid;
sid = row.id;
tid = 0;
}
let data = {
cid: cid,
sid: sid,
tid: tid,
}
console.log(data)
this.$emit('categoryChange', data)
},
change(e) {
let index = e.index;
let item = this.categoryErList[index];
item.current = item.current == index ? -1 : index
},
// 多选
changeSpan(index, row) {
let arrIndex = this.spanIndex.indexOf(index);
if (arrIndex > -1) {
this.spanIndex.splice(arrIndex, 1);
this.newList.splice(arrIndex, 1);
} else {
this.spanIndex.push(index);
this.newList.push(row.id);
}
let result = this.newList.join(",")
this.$emit('brandChange', result)
},
// 确认提交
submit(val) {
if (val == 2) {
this.sortIndex = 0
this.spanIndex = []
}
this.$emit('submitFn', val)
},
brandCollapse(e) {
this.brandCurrent = this.brandCurrent == e.index ? -1 : e.index;
},
tapNavOne(item, index) {
this.navOneActive = index;
this.categoryErList = this.categoryList[this.navOneActive].children;
}
}
}
</script>
<style lang="scss" scoped>
.safe-area-inset-bottom {
height: 0;
height: constant(safe-area-inset-bottom);
height: env(safe-area-inset-bottom);
}
.container {
flex-wrap: nowrap;
height: 100%;
.head-box {
height: 80rpx;
font-weight: 500;
font-size: 34rpx;
color: #333333;
}
.scroll-view {
flex: 1;
min-height: 0;
}
.btn-box {
padding: 20rpx 32rpx;
.btn {
flex: 1;
height: 72rpx;
border: 1rpx solid var(--view-theme);
border-radius: 36rpx;
margin-left: 14rpx;
text-align: center;
font-weight: 500;
font-size: 26rpx;
line-height: 72rpx;
color: var(--view-theme);
transform: rotateZ(360deg);
&:first-child {
margin-left: 0;
}
}
.btnColor {
background: var(--view-theme);
color: #FFFFFF;
}
}
}
.bgcolor {
background: var(--view-minorColorT) !important;
border: 1px solid var(--view-theme);
border-radius: 34rpx;
color: var(--view-theme) !important;
height: 100%;
width: 100%;
}
.font {
margin-top: 24rpx;
font-size: 28rpx;
font-weight: 500;
color: #333333;
}
.font-live {
font-size: 28rpx;
font-weight: 500;
color: #333333;
}
.font-right {
margin-top: 30rpx;
font-size: 20rpx;
font-weight: 400;
color: #666666;
}
.icon-xialazhankai {
font-size: 20rpx;
color: #666666;
margin-left: 6rpx;
}
.icon-xiangshang {
font-size: 20rpx;
color: #666666;
margin-left: 6rpx;
}
.d-container {
padding: 0 32rpx;
.box {
.title {
/* #ifndef MP */
// margin-top: 30rpx;
/* #endif */
// display: flex;
// justify-content: space-between;
// padding: 24rpx 0;
}
.box-list {
margin: 0 -26rpx 0 0;
.list {
width: 184rpx;
height: 56rpx;
border-radius: 28rpx;
margin: 0 26rpx 24rpx 0;
background: #F5F5F5;
font-size: 24rpx;
color: #333333;
}
}
}
}
.scroll-x-view {
white-space: nowrap;
.item {
display: inline-block;
padding: 24rpx 0;
margin-right: 8rpx;
vertical-align: middle;
&.on {
.img-box {
border-color: var(--view-theme);
}
.title {
background: linear-gradient(90deg, var(--view-gradient) 0%, var(--view-theme) 100%);
color: #FFFFFF;
}
}
}
.img-box {
width: 104rpx;
height: 104rpx;
padding: 6rpx;
border: 3rpx solid transparent;
border-radius: 50%;
margin: 0 auto;
}
.img {
width: 92rpx;
height: 92rpx;
border-radius: 50%;
}
.title {
width: 120rpx;
height: 40rpx;
border-radius: 20rpx;
margin-top: 8rpx;
text-align: center;
font-size: 24rpx;
line-height: 40rpx;
color: #333333;
}
}
</style>