99 lines
1.9 KiB
Vue
Raw Normal View History

2026-04-02 15:39:27 +08:00
<template>
<div class="search-input">
<div class="input-wrapper">
<div class="input-block">
<van-icon class="search-icon" name="search" />
<input class="inner-input" v-model="modelValue" :placeholder="placeholder" />
<van-icon class="close-icon" name="clear" v-if="modelValue !== ''" @click="modelValue = ''" />
</div>
<!-- 占位符 -->
<!-- <div class="placeholder-block" v-if="modelValue === '111'">
<van-icon class="search-icon" name="search" />
<span class="placeholder-text">{{ placeholder }}</span>
</div> -->
</div>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
const modelValue = defineModel('modelValue')
const props = defineProps({
placeholder: {
type: String,
default: '请输入关键词'
}
})
</script>
<style scoped lang="scss">
.search-input {
position: relative;
height: 40px;
width: 100%;
margin-top: 8px;
box-sizing: border-box;
}
.input-wrapper {
width: 100%;
height: 100%;
background-color: #fff;
border-radius: 4px;
}
.input-block {
position: relative;
display: flex;
justify-content: center;
width: 100%;
height: 100%;
padding: 0 20px;
box-sizing: border-box;
.search-icon, .close-icon {
position: absolute;
top: 50%;
left: 20px;
transform: translateY(-50%);
font-size: 20px;
color: #9b9b9b;
}
.close-icon {
left: unset;
right: 20px;
}
}
.inner-input {
outline: none;
border: none;
padding: 0;
margin: 0;
height: 100%;
text-align: center;
font-size: 14px;
}
.placeholder-block {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
pointer-events: none;
.search-icon {
font-size: 20px;
margin-right: 3px;
color: #9b9b9b;
}
.placeholder-text {
color: #9b9b9b;
}
}
</style>