| <template> | 
|     <view class="search" v-if="show" @click="close"> | 
|         <view class="search_box" @click.stop="test"> | 
|             <view class="search_box_item" v-if="status === 0"> | 
|                 <view class="icon"> | 
|                     <image src="@/static/ic_search@2x.png" mode="widthFix"></image> | 
|                 </view> | 
|                 <view class="search_box_item_right"> | 
|                     <text v-if="name1">{{name1}}</text> | 
|                     <input type="text" class="search_box_item_right_ipt" :focus="focus" v-model="category" @input="inputCategory(name1 ? 2 : 1)" placeholder-class="placeholder" placeholder="搜索" /> | 
|                 </view> | 
|             </view> | 
|             <view class="search_box_item" v-else> | 
|                 <view class="icon"> | 
|                     <image src="@/static/ic_search@2x.png" mode="widthFix"></image> | 
|                 </view> | 
|                 <view class="search_box_item_right"> | 
|                     <text>{{categoryName}}</text> | 
|                     <input type="text" focus v-model="category" @input="inputCategory(name1 ? 2 : 1)" placeholder-class="placeholder" placeholder="搜索" /> | 
|                 </view> | 
|             </view> | 
|             <view class="search_box_item_xl" v-if="searchData && searchData.length > 0"> | 
|                 <view class="search_box_item_xl_item" v-for="(item, i) in searchData" :key="i"> | 
|                     <view :class="index === i ? 'search_box_item_xl_item_name active' : 'search_box_item_xl_item_name'" @click="clickItem(item, i)">{{ item.name }}</view><span v-if="item.price">¥{{ item.price }}</span> | 
|                 </view> | 
|             </view> | 
|              | 
|             <!-- <view class="search_box_item" v-if="status == 0"> | 
|                 <view class="icon"> | 
|                     <image src="@/static/ic_search@2x.png" mode="widthFix"></image> | 
|                 </view> | 
|                 <input type="text" :focus="status === 0" v-model="category" @input="inputCategory" placeholder-class="placeholder" placeholder="搜索" /> | 
|             </view> | 
|             <view class="search_box_item"> | 
|                 <view class="icon"> | 
|                     <image src="@/static/ic_search@2x.png" mode="widthFix"></image> | 
|                 </view> | 
|                 <input type="text" :focus="status !== 0" v-model="name" @input="inputName" placeholder-class="placeholder" placeholder="搜索" /> | 
|             </view> | 
|             <view class="search_box_item_xl" v-if="searchData && searchData.length > 0"> | 
|                 <view class="search_box_item_xl_item" v-for="(item, index) in searchData" :key="index"> | 
|                     <view class="search_box_item_xl_item_name" @click="clickItem(item, index)">{{ item.name }}</view><span v-if="item.price">¥{{ item.price }}</span> | 
|                 </view> | 
|             </view> --> | 
|         </view> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     import { listForH5 } from '@/apis/index.js' | 
|     export default { | 
|         data() { | 
|             return { | 
|                 category: '', | 
|                 categoryId: '', | 
|                 name: '', | 
|                 show: false, | 
|                 type: '', | 
|                 typeName: '', // left right | 
|                 searchData: [], | 
|                 name1: '', | 
|                 name2: '', | 
|                  | 
|                 index: 0, | 
|                 focus: true | 
|             } | 
|         }, | 
|         props: { | 
|             categoryList: { | 
|                 type: Array, | 
|                 default: [] | 
|             }, | 
|             shopList: { | 
|                 type: Array, | 
|                 default: [] | 
|             }, | 
|             status: { | 
|                 type: Number | 
|             }, | 
|             categoryName: { | 
|                 type: Number | String | 
|             }, | 
|             categoryid: { | 
|                 type: Number | String | 
|             } | 
|         }, | 
|         watch: { | 
|             show: { | 
|                 handler(news, old) { | 
|                     if (news) { | 
|                         this.category = '' | 
|                         this.name = '' | 
|                         this.searchData = [] | 
|                         this.name1 = '' | 
|                         this.name2 = '' | 
|                     } | 
|                 } | 
|             } | 
|         }, | 
|         methods: { | 
|             confirm() { | 
|                 if (this.type === 2) { | 
|                     console.log('type') | 
|                     this.name = this.searchData[this.index].name | 
|                     this.$emit('result', this.searchData[this.index]) | 
|                     this.show = false | 
|                     this.index = 0 | 
|                     return | 
|                 } else if (this.categoryName) { | 
|                     console.log('categoryName') | 
|                     this.name = this.searchData[this.index].name | 
|                     this.$emit('result', this.searchData[this.index]) | 
|                     this.show = false | 
|                     this.index = 0 | 
|                     return | 
|                 } else { | 
|                     this.focus = false | 
|                     console.log('else') | 
|                     this.name1 = this.searchData[this.index].name | 
|                     this.category = '' | 
|                     this.categoryId = this.searchData[this.index].id | 
|                     this.searchData = []; | 
|                     this.$nextTick(() => { | 
|                         setTimeout(() =>{ | 
|                             this.focus = true | 
|                         }, 500) | 
|                     }) | 
|                     this.index = 0 | 
|                 } | 
|             }, | 
|             changeTop() { | 
|                 if (this.index === 0) return | 
|                 this.index -= 1 | 
|             }, | 
|             changeBottom() { | 
|                 if (this.searchData.length - 1 === this.index) return | 
|                 this.index += 1 | 
|             }, | 
|             getShop(keyword) { | 
|                 listForH5({ | 
|                     categoryId: this.categoryid || this.categoryId, | 
|                     keyword | 
|                 }).then(res => { | 
|                     this.searchData = res.data | 
|                 }) | 
|             }, | 
|             inputName() { | 
|                 if (this.status === 1 || this.status === 2) { | 
|                     this.category = this.categoryName | 
|                 } | 
|                 if (!this.category && this.name) { | 
|                     this.type = 1 | 
|                     let arr = this.shopList.map(item => { | 
|                         if (item.name.indexOf(this.name) != -1 || item.pinyin.indexOf(this.name) != -1 || item.shortPinyin.indexOf(this.name) != -1) { | 
|                             return item | 
|                         } | 
|                     }) | 
|                     arr = arr.filter(Boolean); | 
|                     return arr; | 
|                 } else if (this.category && this.name) { | 
|                     this.type = 2 | 
|                     let arr = this.shopList.map(item => { | 
|                         if (item.categoryName == this.category) { | 
|                             return item | 
|                         } | 
|                     }) | 
|                     arr = arr.filter(Boolean); | 
|                     let arrOne = arr.map(item => { | 
|                         if (item.name.indexOf(this.name) != -1 || item.pinyin.indexOf(this.name) != -1 || item.shortPinyin.indexOf(this.name) != -1) { | 
|                             return item | 
|                         } | 
|                     }) | 
|                     arrOne = arrOne.filter(Boolean); | 
|                     this.searchData = arrOne; | 
|                 } else { | 
|                     this.searchData = []; | 
|                 } | 
|             }, | 
|             inputCategory(type) { | 
|                 // this.name = '' | 
|                 // this.type = 1 | 
|                 if (this.status === 0) { | 
|                     this.type = type | 
|                     // 品类搜索 | 
|                     if (type === 1) { | 
|                         if (!this.category) { | 
|                             this.searchData = [] | 
|                             return | 
|                         } | 
|                         let arr = this.categoryList.map(item => { | 
|                             if (item.name.indexOf(this.category) != -1 || item.pinyin.indexOf(this.category) != -1 || item.shortPinyin.indexOf(this.category) != -1) { | 
|                                 return item | 
|                             } | 
|                         }) | 
|                         arr = arr.filter(Boolean); | 
|                         this.searchData = arr; | 
|                     } else if (type === 2) { | 
|                         if (!this.category) { | 
|                             this.searchData = [] | 
|                             return | 
|                         } | 
|                         this.getShop(this.category) | 
|                         // let arr = this.shopList.map(item => { | 
|                         //     if (item.categoryName == this.name1) { | 
|                         //         return item | 
|                         //     } | 
|                         // }) | 
|                         // arr = arr.filter(Boolean); | 
|                         // let arrOne = arr.map(item => { | 
|                         //     if (item.name.indexOf(this.category) != -1 || item.pinyin.indexOf(this.category) != -1 || item.shortPinyin.indexOf(this.category) != -1) { | 
|                         //         return item | 
|                         //     } | 
|                         // }) | 
|                         // arrOne = arrOne.filter(Boolean); | 
|                         // this.searchData = arrOne; | 
|                     } else { | 
|                         this.searchData = [] | 
|                     } | 
|                 } else { | 
|                     if (!this.category) { | 
|                         this.searchData = [] | 
|                         return | 
|                     } | 
|                      | 
|                     this.getShop(this.category) | 
|                      | 
|                     // let arr = this.shopList.map(item => { | 
|                     //     if (item.categoryName == this.categoryName) { | 
|                     //         return item | 
|                     //     } | 
|                     // }) | 
|                     // arr = arr.filter(Boolean); | 
|                     // let arrOne = arr.map(item => { | 
|                     //     if (item.name.indexOf(this.category) != -1 || item.pinyin.indexOf(this.category) != -1 || item.shortPinyin.indexOf(this.category) != -1) { | 
|                     //         return item | 
|                     //     } | 
|                     // }) | 
|                     // arrOne = arrOne.filter(Boolean); | 
|                     // this.searchData = arrOne; | 
|                 } | 
|                  | 
|                  | 
|                 // if (this.category && !this.name) { | 
|                 //     let arr = this.categoryList.map(item => { | 
|                 //         if (item.name.indexOf(this.category) != -1 || item.pinyin.indexOf(this.category) != -1 || item.shortPinyin.indexOf(this.category) != -1) { | 
|                 //             return item | 
|                 //         } | 
|                 //     }) | 
|                 //     arr = arr.filter(Boolean); | 
|                 //     this.searchData = arr; | 
|                 // } else { | 
|                 //     this.searchData = []; | 
|                 // } | 
|                 // console.log(this.searchData) | 
|             }, | 
|             clickItem(item, index) { | 
|                 if (this.type === 2) { | 
|                     console.log('type') | 
|                     this.name = item.name | 
|                     this.$emit('result', item) | 
|                     this.show = false | 
|                     this.index = 0 | 
|                     return | 
|                 } else if (this.categoryName) { | 
|                     console.log('categoryName') | 
|                     this.name = item.name | 
|                     this.$emit('result', item) | 
|                     this.show = false | 
|                     this.index = 0 | 
|                     return | 
|                 } else { | 
|                     console.log('else') | 
|                     this.focus = false | 
|                     this.name1 = item.name | 
|                     this.category = '' | 
|                     this.categoryId = item.id | 
|                     // this.category = item.name | 
|                     this.searchData = []; | 
|                     this.$nextTick(() => { | 
|                         setTimeout(() => { | 
|                             this.focus = true | 
|                         }, 800) | 
|                     }) | 
|                     this.index = 0 | 
|                 } | 
|             }, | 
|             open(type) { | 
|                 this.typeName = type | 
|                 this.show = true | 
|             }, | 
|             close() { | 
|                 this.show = false | 
|             }, | 
|             test() { | 
|                 return false | 
|             } | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .search { | 
|         position: fixed; | 
|         z-index: 4; | 
|         top: 0; | 
|         left: 0; | 
|         width: 100vw; | 
|         height: 100vh; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: center; | 
|         .search_box { | 
|             width: 560px; | 
|             height: auto; | 
|             display: flex; | 
|             flex-direction: column; | 
|             .search_box_item_xl::-webkit-scrollbar { | 
|                 width: 6px; | 
|                 background: rgba(255,255,255,0.5); | 
|                 border-radius: 4px; | 
|             } | 
|             .search_box_item_xl::-webkit-scrollbar-thumb { | 
|                 box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); | 
|                 background: rgba(255,255,255,0.8); | 
|             } | 
|             .search_box_item_xl { | 
|                 width: 100%; | 
|                 max-height: 60px; | 
|                 min-height: 240px; | 
|                 overflow-y: scroll; | 
|                 background: rgba(5,35,102,0.7); | 
|                 border-radius: 8px; | 
|                 // display: flex; | 
|                 // flex-direction: column; | 
|                 .search_box_item_xl_item { | 
|                     width: 100%; | 
|                     height: 40px; | 
|                     // line-height: 52px; | 
|                     // font-size: 28px; | 
|                     // font-family: PingFangSC-Regular, PingFang SC; | 
|                     // font-weight: 400; | 
|                     // color: #FFFFFF; | 
|                     padding: 0 24px; | 
|                     cursor: pointer; | 
|                     box-sizing: border-box; | 
|                     display: flex; | 
|                     align-items: center; | 
|                     // &:hover { | 
|                     //     span { | 
|                     //         color: #FFF200; | 
|                     //     } | 
|                     // } | 
|                     .active { | 
|                         color: #FFF200 !important; | 
|                     } | 
|                     .search_box_item_xl_item_name { | 
|                         flex: 1; | 
|                         height: 100%; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         overflow: hidden; | 
|                         white-space: nowrap; | 
|                         text-overflow: ellipsis; | 
|                         font-size: 16px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                         // &:hover { | 
|                         //     color: #FFF200; | 
|                         // } | 
|                     } | 
|                     span { | 
|                         flex-shrink: 0; | 
|                         font-size: 16px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                         margin-left: 10px; | 
|                     } | 
|                 } | 
|             } | 
|             .search_box_item { | 
|                 width: 100%; | 
|                 height: 62px; | 
|                 background: rgba(5,35,102,0.7); | 
|                 border-radius: 32px; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 padding: 0 30px; | 
|                 box-sizing: border-box; | 
|                 margin-bottom: 16px; | 
|                 &:last-child { | 
|                     margin-bottom: 0 !important; | 
|                 } | 
|                 .search_box_item_right { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     text { | 
|                         flex-shrink: 0; | 
|                         font-size: 16px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                         margin-right: 10px; | 
|                     } | 
|                     input { | 
|                         flex: 1; | 
|                         height: 100%; | 
|                         font-size: 16px; | 
|                         font-family: PingFangSC-Regular, PingFang SC; | 
|                         font-weight: 400; | 
|                         color: #FFFFFF; | 
|                     } | 
|                 } | 
|                 .icon { | 
|                     width: 20px; | 
|                     height: 20px; | 
|                     flex-shrink: 0; | 
|                     margin-right: 18px; | 
|                     image { | 
|                         width: 100%; | 
|                         height: 100%; | 
|                     } | 
|                 } | 
|                 .placeholder { | 
|                     height: 62px; | 
|                     line-height: 62px; | 
|                     font-size: 16px; | 
|                     font-family: PingFangSC-Regular, PingFang SC; | 
|                     font-weight: 400; | 
|                     color: rgba(255,255,255,0.5); | 
|                 } | 
|             } | 
|         } | 
|     } | 
| </style> |