<template>
|
|
<view>
|
|
<view class="se-bgc-white se-pb-20 se-pt-30 se-px-40">
|
|
<uv-search @search="onSearch()" placeholder="搜索租房信息" :showAction="false" v-model="keyword"></uv-search>
|
|
</view>
|
|
<view class="se-pb-10 se-px-40 se-bgc-white">
|
|
<uv-drop-down ref="dropDown" sign="dropDown_1" text-active-color="#20CD7D"
|
|
:extra-icon="{name:'arrow-down-fill',color:'#666',size:'26rpx'}"
|
|
:extra-active-icon="{name:'arrow-up-fill',color:'#20CD7D',size:'26rpx'}" :defaultValue="defaultValue"
|
|
:custom-style="{padding: '0rpx 0rpx',borderBottom:'1rpx solid transparent'}" @click="selectMenu">
|
|
|
|
<uv-drop-down-item name="region" type="2" :label="dropItem('region').label" :value="dropItem('region').value">
|
|
</uv-drop-down-item>
|
|
<uv-drop-down-item name="rent" type="2" :label="dropItem('rent').label" :value="dropItem('rent').value">
|
|
</uv-drop-down-item>
|
|
<uv-drop-down-item name="type" type="2" :label="dropItem('type').label" :value="dropItem('type').value">
|
|
</uv-drop-down-item>
|
|
<uv-drop-down-item name="duration" type="2" :label="dropItem('duration').label" :value="dropItem('duration').value">
|
|
</uv-drop-down-item>
|
|
<!-- <uv-drop-down-item name="vip_type" type="1" label='VIP文档' :value="dropItem('vip_type').value">
|
|
</uv-drop-down-item> -->
|
|
</uv-drop-down>
|
|
<uv-drop-down-popup sign="dropDown_1" :click-overlay-on-close="true" :currentDropItem="currentDropItem"
|
|
@clickItem="clickItem" @popupChange="change"></uv-drop-down-popup>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { houseArea,houseIconClass,housePrice,houseYear } from "@/common/api.js"
|
|
export default {
|
|
onPageScroll() {
|
|
// 滚动后及时更新位置
|
|
this.$refs.dropDown.init();
|
|
},
|
|
computed: {
|
|
dropItem(name) {
|
|
return (name) => {
|
|
const result = {};
|
|
const find = this.result.find(item => item.name === name);
|
|
if (find) {
|
|
result.label = find.label;
|
|
result.value = find.value;
|
|
} else {
|
|
result.label = this[name].label;
|
|
result.value = this[name].value;
|
|
}
|
|
return result;
|
|
}
|
|
},
|
|
// 获取当前下拉筛选项
|
|
currentDropItem() {
|
|
return this[this.activeName];
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
keyword: "",
|
|
// 表示value等于这些值,就属于默认值
|
|
defaultValue: ['all', 'all', 'all','all'],
|
|
// 筛选结果
|
|
result: [],
|
|
region:{
|
|
label: '区域',
|
|
value: 'all',
|
|
activeIndex: 0,
|
|
color: '#333',
|
|
activeColor: '#20CD7D',
|
|
child: [
|
|
// {
|
|
// label: '全部区域',
|
|
// value: 'all'
|
|
// }, {
|
|
// label: '湖南',
|
|
// value: 'hunan'
|
|
// }, {
|
|
// label: '广州',
|
|
// value: 'guangzhou'
|
|
// },
|
|
]
|
|
},
|
|
rent:{
|
|
label: '租金',
|
|
value: 'all',
|
|
activeIndex: 0,
|
|
color: '#333',
|
|
activeColor: '#20CD7D',
|
|
child: [
|
|
// {
|
|
// label: '全部',
|
|
// value: 'all'
|
|
// },
|
|
// {
|
|
// label: '0-2k',
|
|
// value: '2000'
|
|
// }, {
|
|
// label: '2k-4k',
|
|
// value: '4000'
|
|
// }, {
|
|
// label: '4k-6k',
|
|
// value: '6000'
|
|
// }, {
|
|
// label: '6k+',
|
|
// value: '6000+'
|
|
// },
|
|
]
|
|
},
|
|
type: {
|
|
label: '类型',
|
|
value: 'all',
|
|
activeIndex: 0,
|
|
color: '#333',
|
|
activeColor: '#20CD7D',
|
|
child: [
|
|
// {
|
|
// label: '全部',
|
|
// value: 'all'
|
|
// }, {
|
|
// label: '闲置散居农房',
|
|
// value: 'nongfang'
|
|
// }, {
|
|
// label: '鱼塘',
|
|
// value: 'yutang'
|
|
// }, {
|
|
// label: '耕地',
|
|
// value: 'gengdi'
|
|
// },
|
|
]
|
|
},
|
|
duration:{
|
|
label: '年限',
|
|
value: 'all',
|
|
activeIndex: 0,
|
|
color: '#333',
|
|
activeColor: '#20CD7D',
|
|
child: [
|
|
// {
|
|
// label: '全部',
|
|
// value: 'all'
|
|
// },
|
|
// {
|
|
// label: '5年内',
|
|
// value: '0-5'
|
|
// }, {
|
|
// label: '5-10年',
|
|
// value: '5-10'
|
|
// }, {
|
|
// label: '10-20年',
|
|
// value: '10-20'
|
|
// },
|
|
]
|
|
},
|
|
activeName: 'region',
|
|
|
|
vip_type: {
|
|
label: 'VIP文档',
|
|
value: 0,
|
|
activeIndex: 0
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
let that = this
|
|
// setTimeout(()=>{
|
|
that.onhouseArea()
|
|
that.onhouseIconClass()
|
|
that.onhousePrice()
|
|
that.onhouseYear()
|
|
// },2000)
|
|
console.info('组件')
|
|
// houseArea,houseIconClass,housePrice,houseYear
|
|
},
|
|
methods: {
|
|
onhouseArea(){
|
|
let that = this
|
|
houseArea({}).then(response=>{
|
|
let arr = [
|
|
{
|
|
label: '全部',
|
|
value: 'all'
|
|
}
|
|
]
|
|
response.result.forEach(items=>{
|
|
let obj = {}
|
|
obj.label=items.title;
|
|
obj.value=items.id
|
|
arr.push(obj)
|
|
})
|
|
that.region.child=arr
|
|
console.info('houseArea',response.result)
|
|
}).catch(error=>{
|
|
|
|
})
|
|
},
|
|
onhouseIconClass(){
|
|
let that = this
|
|
houseIconClass({}).then(response=>{
|
|
console.info(response.result)
|
|
let arr = [
|
|
{
|
|
label: '全部',
|
|
value: 'all'
|
|
}
|
|
]
|
|
response.result.forEach(items=>{
|
|
let obj = {}
|
|
obj.label=items.title;
|
|
obj.value=items.id
|
|
arr.push(obj)
|
|
})
|
|
that.type.child=arr
|
|
}).catch(error=>{
|
|
|
|
})
|
|
},
|
|
onhousePrice(){
|
|
let that = this
|
|
housePrice({}).then(response=>{
|
|
let arr = [
|
|
{
|
|
label: '全部',
|
|
value: 'all'
|
|
}
|
|
]
|
|
response.result.forEach(items=>{
|
|
let obj = {}
|
|
obj.label=items.title;
|
|
obj.value=items.price
|
|
arr.push(obj)
|
|
})
|
|
that.rent.child=arr
|
|
}).catch(error=>{
|
|
|
|
})
|
|
},
|
|
onhouseYear(){
|
|
let that = this
|
|
houseYear({}).then(response=>{
|
|
console.info(response.result)
|
|
let arr = [
|
|
{
|
|
label: '全部',
|
|
value: 'all'
|
|
}
|
|
]
|
|
response.result.forEach(items=>{
|
|
let obj = {}
|
|
obj.label=items.title;
|
|
obj.value=items.timeGo
|
|
arr.push(obj)
|
|
})
|
|
that.duration.child=arr
|
|
}).catch(error=>{
|
|
|
|
})
|
|
},
|
|
onSearch(){
|
|
this.$emit("onSearch",this.keyword)
|
|
},
|
|
change(e) {
|
|
console.log('弹窗打开状态:', e);
|
|
},
|
|
/**
|
|
* 点击每个筛选项回调
|
|
* @param {Object} e { name, active, type } = e
|
|
*/
|
|
selectMenu(e) {
|
|
const {
|
|
name,
|
|
active,
|
|
type
|
|
} = e;
|
|
this.activeName = name;
|
|
// type 等于1 的需要特殊处理:type不等于1可以忽略
|
|
if (type == 1) {
|
|
this.clickItem({
|
|
name: 'vip_type',
|
|
label: 'VIP文档',
|
|
value: e.active ? 1 : 0
|
|
});
|
|
} else {
|
|
const find = this.result.find(item => item.name == this.activeName);
|
|
if (find) {
|
|
const findIndex = this[this.activeName].child.findIndex(item => item.label == find.label && item
|
|
.value == find.value);
|
|
this[this.activeName].activeIndex = findIndex;
|
|
} else {
|
|
this[this.activeName].activeIndex = 0;
|
|
}
|
|
}
|
|
},
|
|
/**
|
|
* 点击菜单回调处理
|
|
* @param {Object} item 选中项 { label,value } = e
|
|
*/
|
|
clickItem(e) {
|
|
// 下面有重新赋值,所以用let
|
|
let {
|
|
label,
|
|
value
|
|
} = e;
|
|
this.result.push({
|
|
name: this.activeName,
|
|
label,
|
|
value
|
|
});
|
|
const findIndex = this.result.findIndex(item => item.name == this.activeName);
|
|
if (this.defaultValue.indexOf(value) > -1 && this[this.activeName].label) {
|
|
label = this[this.activeName].label;
|
|
}
|
|
// 已经存在筛选项
|
|
if (findIndex > -1) {
|
|
this.$set(this.result, findIndex, {
|
|
name: this.activeName,
|
|
label,
|
|
value
|
|
})
|
|
} else {
|
|
this.result.push({
|
|
name: this.activeName,
|
|
label,
|
|
value
|
|
});
|
|
}
|
|
this.result = this.result.filter(item => this.defaultValue.indexOf(item.value) == -1);
|
|
// uni.showModal({
|
|
// content: `筛选的值:${JSON.stringify(this.result)}`
|
|
// })
|
|
console.info('onParent',this.result)
|
|
this.$emit("onParent",this.result)
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
</style>
|