123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <template>
- <view>
- <view class="search">
- <input
- @input="handleInput"
- class="search-input"
- type="text"
- focus
- placeholder="请输入要搜索的联系人"
- />
- </view>
- <view class="search-main" v-if="keyword">
- <view class="search-main-errtitle" v-if="hasNoData">无搜索结果</view>
- <view class="search-main-title"
- hover-class="hover"
- @click="handleClick"
- :hover-start-time="20"
- :hover-stay-time="70"
- v-for="item of list"
- :key="item.id"
- :data-name="item.name"
- :data-id="item.id"
- :data-phoneNumber="item.phoneNumber">
- {{item.name}}
- </view>
- </view>
- </view>
- </template>
- <script>
- export default {
- name:"phone-search-list",
- props:{
- phones:Object
- },
- data() {
- return {
- keyword:'',
- list:[],
- timer:null
- }
- },
- computed:{
- hasNoData () {
- return !this.list.length
- }
- },
- watch:{
- keyword () {
- if(this.timer) {
- clearTimeout(this.timer)
- }
- if(!this.keyword){
- this.list = []
- return
- }
- this.timer = setTimeout(()=>{
- const result = []
- for (let i in this.phones){
- this.phones[i].forEach((item)=>{
- if(item.spell.indexOf(this.keyword) > -1||item.name.indexOf(this.keyword) > -1){
- result.push(item)
- }
- })
- }
- this.list = result
- },100)
- }
- },
- methods:{
- handleInput (e) {
- this.keyword = e.detail.value
- },
- handleClick (e) {
- this.$emit('paramClick',e.target.dataset)
- }
- }
- }
- </script>
- <style>
- .hover{
- background-color: #eee;
- }
- .search{
- background-color: #fff;
- padding: 10upx 20upx;
- border-bottom: 1px solid #e5e5e5;
- }
- .search-input{
- font-size:28upx;
- border: 1px solid #e5e5e5;
- border-radius: 3px;
- padding: 10upx 20upx 10upx 20upx;
- }
-
- .search-main{
- height: 100%;
- padding-bottom: 20upx;
- background-color:#fff;
- overflow: hidden;
- }
-
- .search-main-errtitle,.search-main-title{
- width: 100%;
- height: 92upx;
- line-height: 92upx;
- font-size: 32upx;
- padding: 0 20upx;
- border-bottom: 1px solid #e5e5e5;
- }
- </style>
|