Files
city-store-transfer/components/DropDown/DropDown.vue
2023-11-24 00:42:46 +08:00

182 lines
4.3 KiB
Vue

<template>
<view class="container">
<view class="tabs-bg"></view>
<view class="tabs">
<view class="title-view" v-for="(item, index) in title" :key="item" @click="changeActiveIndex(index)"
:class="{isActive: activeIndex === index}">
<text>{{item}}</text>
<view class="arrow" v-if="activeIndex !== index">
<u-image src="/static/dropdown/dp_icon_lxia.png" width="14rpx" height="11rpx"></u-image>
</view>
<view class="arrow" v-if="activeIndex === index">
<u-image src="/static/dropdown/dp_icon_hlxia.png" width="14rpx" height="11rpx"></u-image>
</view>
</view>
</view>
<view class="item-border">
<DropDownItem v-if="activeIndex !== -1" :list="tablist" @cancelDrop="cancelDrop" @getQueryInfo="getQueryInfo"
:type="title[activeIndex]" :activeChoose = "setActiveTag"/>
</view>
</view>
</template>
<script>
/**
* @property {Array} postlist 传递一个二维数组
*/
import DropDownItem from "./DropDownItem.vue"
export default {
name: "DropDown",
components: {
DropDownItem
},
data() {
return {
title: ['行业', '区域', '面积', '筛选'],
activeIndex: -1,
postlist: [
[],
[],
['全部','小于50m²', '50-200m²', '200-600m²', '600-800m²', '800-1000m²', '1000m²以上'],
['全部','面积从大到小', '面积从小到大', '租金从大到小', '租金从小到大']
],
queryInfo: {
region: '',
sortType: '',
areatype: '',
business: ''
},
// 当前行业下拉列表
currentClassList: 0,
// 当前区域下拉列表
currentRegionList: 0,
// 当前面积下拉列表
currentAreaList: 0,
// 当前筛选下拉列表
currentFilterList: 0,
};
},
computed: {
tablist: function() {
return this.postlist[this.activeIndex]
}
},
created() {
this.postlist[0] = JSON.parse(uni.getStorageSync('classList'))
this.postlist[0].unshift('全部')
this.postlist[1] = JSON.parse(uni.getStorageSync('regionList'))
this.postlist[1].unshift('全区域')
// this.postlist[2].unshift('所有面积')
// this.postlist[3].unshift('全部')
},
methods: {
changeActiveIndex(index) {
if (this.activeIndex === index) {
this.activeIndex = -1;
} else
this.activeIndex = index
},
cancelDrop() {
this.activeIndex = -1;
},
getQueryInfo(querys) {
console.log(querys, 'getquerysinfo');
// 修改当前选择的各选项卡下标
if (this.activeIndex === 0) {
this.currentClassList = querys.business
}else if (this.activeIndex === 1) {
this.currentRegionList = querys.region
}else if (this.activeIndex === 2) {
this.currentAreaList = querys.areatype
}else if (this.activeIndex === 3) {
this.currentFilterList = querys.sortType
}
// 记忆各下拉框数据
if(querys.business==0){
querys.business = ''
}else{
querys.business = this.postlist[0][this.currentClassList]
}
if(querys.region==0){
querys.region = ''
}else querys.region = this.postlist[1][this.currentRegionList]
this.queryInfo = {
...this.queryInfo,
...querys
}
const query = this.$u.queryParams(this.queryInfo)
console.log(query, 'dropquery');
this.$emit('getQueryInfo', this.queryInfo)
},
setActiveTag(){
if(this.activeIndex == 0){
return this.currentClassList
}else if(this.activeIndex == 1){
return this.currentRegionList
}else if(this.activeIndex == 2){
return this.currentAreaList
}else{
return this.currentFilterList
}
}
}
}
</script>
<style lang="scss" scoped>
.isActive {
color: #CC3333;
}
.container {
margin-top: 10px;
position: relative;
.tabs-bg {
position: absolute;
background-color: $uni-bg-color-grey;
height: 120rpx;
width: 100%;
transform: translateY(-20rpx);
z-index: 2;
}
.tabs {
background-color: #fff;
height: 100rpx;
display: flex;
justify-content: space-around;
position: relative;
z-index: 3;
}
.title-view {
display: flex;
>text {
font-size: 14px;
display: flex;
flex-direction: column;
justify-content: center;
}
}
.arrow {
margin-left: 8rpx;
display: flex;
flex-direction: column;
justify-content: center;
}
}
.item-border {
position: absolute;
width: 100%;
height: 100%;
}
</style>