| <template> | 
|     <div class="search"> | 
|         <div class="search_input"> | 
|             <img src="@/assets/icon/ic_search@2x.png" alt=""> | 
|             <input v-model="text" @keyup.enter="searchInput" type="text" :placeholder="props.placeholder" /> | 
|         </div> | 
|         <div class="search_operation" v-if="props.isShow"> | 
| <!--            <img src="@/assets/icon/3@2x.png" alt="">--> | 
|             <div class="search_operation_w"></div> | 
|             <img @click="openCate" src="@/assets/icon/@2x.png" alt=""> | 
|         </div> | 
|         <van-popup v-model:show="open" round position="bottom" :style="{ height: '80%' }"> | 
|             <div class="content"> | 
|                 <slot name="content"></slot> | 
|             </div> | 
|             <div class="zhanwei"></div> | 
|             <div class="footer"> | 
|                 <div class="footer_close" @click="closes">重置</div> | 
|                 <div class="footer_submit" @click="submit">确定</div> | 
|             </div> | 
|         </van-popup> | 
|     </div> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
|     import { ref, defineProps, defineEmits } from 'vue' | 
|   | 
|     const props = defineProps({ | 
|         isShow: { | 
|             type: Boolean, | 
|             required: false, | 
|             default: false | 
|         }, | 
|         placeholder: { | 
|             type: String, | 
|             required: false, | 
|             default: '请输入' | 
|         } | 
|     }) | 
|   | 
|     // 向父组件提交两个方法 | 
|     const emit = defineEmits(['searchInput', 'submit', 'reset']) | 
|   | 
|     const open = ref<Boolean>(false) | 
|   | 
|     const text = ref<string>('') | 
|   | 
|     // 搜索框搜索 | 
|     const searchInput = () => { | 
|         emit('searchInput', text.value) | 
|     } | 
|   | 
|     const openCate = () => { | 
|         open.value = true | 
|     } | 
|   | 
|     // 重置 | 
|     const closes = () => { | 
|         open.value = false | 
|         text.value = '' | 
|         emit('reset', text.value) | 
|     } | 
|   | 
|     // 搜索提交 | 
|     const submit = () => { | 
|         open.value = false | 
|         emit('submit', '') | 
|     } | 
|   | 
|     // 向父组件暴漏数据 | 
|     defineExpose({ | 
|         text | 
|     }) | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .search { | 
|     width: 100%; | 
|     height: 68px; | 
|     display: flex; | 
|     align-items: center; | 
|     .zhanwei { | 
|         height: 180px; | 
|         background: #ffffff; | 
|     } | 
|     .content { | 
|         padding: 30px 30px 0 30px; | 
|     } | 
|     .footer { | 
|         width: 100%; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: space-between; | 
|         padding-left: 40px; | 
|         padding-right: 40px; | 
|         padding-bottom: 64px; | 
|         box-sizing: border-box; | 
|         position: fixed; | 
|         bottom: 0; | 
|         left: 0; | 
|         background: #ffffff; | 
|         z-index: 99; | 
|         .footer_close { | 
|             flex: 1; | 
|             padding: 28px 0; | 
|             box-sizing: border-box; | 
|             margin-right: 22px; | 
|             font-size: 32px; | 
|             font-weight: 500; | 
|             color: #999999; | 
|             background: #F7F7F7; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: center; | 
|         } | 
|         .footer_submit { | 
|             flex: 1; | 
|             padding: 28px 0; | 
|             box-sizing: border-box; | 
|             font-size: 32px; | 
|             font-weight: 500; | 
|             color: #ffffff; | 
|             background: $nav-color; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: center; | 
|         } | 
|     } | 
|     .search_input { | 
|         flex: 1; | 
|         height: 100%; | 
|         background: #F7F7F7; | 
|         border-radius: 8px; | 
|         display: flex; | 
|         align-items: center; | 
|         padding: 15px 30px; | 
|         box-sizing: border-box; | 
|         img { | 
|             width: 28px; | 
|             height: 28px; | 
|             margin-right: 10px; | 
|         } | 
|         input { | 
|             width: 100%; | 
|             border: none; | 
|             outline: none; | 
|             background: #F7F7F7; | 
|             font-size: 26px; | 
|         } | 
|         input::-webkit-input-placeholder { /* WebKit browsers */ | 
|             font-size: 26px; | 
|             font-weight: 400; | 
|             color: #B2B2B2; | 
|         } | 
|         input:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ | 
|             font-size: 26px; | 
|             font-weight: 400; | 
|             color: #B2B2B2; | 
|         } | 
|         input::-moz-placeholder { /* Mozilla Firefox 19+ */ | 
|             font-size: 26px; | 
|             font-weight: 400; | 
|             color: #B2B2B2; | 
|         } | 
|         input:-ms-input-placeholder { /* Internet Explorer 10+ */ | 
|             font-size: 26px; | 
|             font-weight: 400; | 
|             color: #B2B2B2; | 
|         } | 
|     } | 
|     .search_operation { | 
|         flex-shrink: 0; | 
|         /*width: 150px;*/ | 
|         display: flex; | 
|         justify-content: flex-end; | 
|         align-items: center; | 
|         /*margin-left: 30px;*/ | 
|         img { | 
|             width: 44px; | 
|             height: 44px; | 
|         } | 
|         .search_operation_w { | 
|             width: 30px; | 
|         } | 
|     } | 
| } | 
| </style> |