|
|
@ -1,17 +1,84 @@ |
|
|
|
<template> |
|
|
|
<template> |
|
|
|
<div class="search"> |
|
|
|
<div> |
|
|
|
<input class="search-input" type="text" placeholder="输入城市名或拼音" /> |
|
|
|
<div class="search"> |
|
|
|
|
|
|
|
<input |
|
|
|
|
|
|
|
v-model="keyword" |
|
|
|
|
|
|
|
class="search-input" |
|
|
|
|
|
|
|
type="text" |
|
|
|
|
|
|
|
placeholder="输入城市名或拼音" |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="search-content" ref="search" v-show="keyword"> |
|
|
|
|
|
|
|
<ul> |
|
|
|
|
|
|
|
<li |
|
|
|
|
|
|
|
class="search-item border-bottom" |
|
|
|
|
|
|
|
v-for="item of list" |
|
|
|
|
|
|
|
:key="item.id" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
{{ item.name }} |
|
|
|
|
|
|
|
</li> |
|
|
|
|
|
|
|
<li class="search-item border-bottom" v-show="hasNoData"> |
|
|
|
|
|
|
|
没有找到匹配数据 |
|
|
|
|
|
|
|
</li> |
|
|
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
<script> |
|
|
|
|
|
|
|
import BSorll from "better-scroll"; |
|
|
|
export default { |
|
|
|
export default { |
|
|
|
name: "CitySearch" |
|
|
|
name: "CitySearch", |
|
|
|
|
|
|
|
props: { |
|
|
|
|
|
|
|
cities: Object |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
data: function() { |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
keyword: "", |
|
|
|
|
|
|
|
list: [], |
|
|
|
|
|
|
|
timer: null |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
computed: { |
|
|
|
|
|
|
|
hasNoData: function() { |
|
|
|
|
|
|
|
return !this.list.length; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
watch: { |
|
|
|
|
|
|
|
keyword: function() { |
|
|
|
|
|
|
|
if (this.timer) { |
|
|
|
|
|
|
|
clearTimeout(this.timer); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!this.keyword) { |
|
|
|
|
|
|
|
this.list = []; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.timer = setTimeout(() => { |
|
|
|
|
|
|
|
const result = []; |
|
|
|
|
|
|
|
for (let i in this.cities) { |
|
|
|
|
|
|
|
this.cities[i].forEach(value => { |
|
|
|
|
|
|
|
if ( |
|
|
|
|
|
|
|
value.spell.indexOf(this.keyword) > -1 || |
|
|
|
|
|
|
|
value.name.indexOf(this.keyword) > -1 |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
result.push(value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.list = result; |
|
|
|
|
|
|
|
}, 100); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
mounted: function() { |
|
|
|
|
|
|
|
this.BSorll = new BSorll(this.$refs.search); |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<style lang="stylus" scoped> |
|
|
|
<style lang="stylus" scoped> |
|
|
|
@import '~styles/variable.styl' |
|
|
|
@import '~styles/variable.styl' |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
touch-action none |
|
|
|
.search |
|
|
|
.search |
|
|
|
height .72rem |
|
|
|
height .72rem |
|
|
|
padding 0 .1rem |
|
|
|
padding 0 .1rem |
|
|
@ -25,4 +92,18 @@ export default { |
|
|
|
text-align center |
|
|
|
text-align center |
|
|
|
border-radius .06rem |
|
|
|
border-radius .06rem |
|
|
|
color #666666 |
|
|
|
color #666666 |
|
|
|
|
|
|
|
.search-content |
|
|
|
|
|
|
|
z-index 1 |
|
|
|
|
|
|
|
overflow hidden |
|
|
|
|
|
|
|
position absolute |
|
|
|
|
|
|
|
top 1.58rem |
|
|
|
|
|
|
|
left 0 |
|
|
|
|
|
|
|
right 0 |
|
|
|
|
|
|
|
bottom 0 |
|
|
|
|
|
|
|
background #eeeeee |
|
|
|
|
|
|
|
.search-item |
|
|
|
|
|
|
|
line-height .62rem |
|
|
|
|
|
|
|
padding-left .2rem |
|
|
|
|
|
|
|
background #ffffff |
|
|
|
|
|
|
|
color #666666 |
|
|
|
</style> |
|
|
|
</style> |
|
|
|