123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <template>
- <view :class="['flex search-box',isFocus||searchVal?'search-focus':'']">
- <image
- class="search-icon"
- :src="isFocus||searchVal?'../static/search-icon-s.png':'../static/search-icon.png'"
- mode="aspectFill"
- />
- <input
- type="text"
- :maxlength="-1"
- v-model="searchVal"
- :placeholder="placeholder"
- :focus="isFocus"
- @focus="handelFocus"
- @blur="handelBlur"
- @confirm="handleSearch"
- @input="handleInput"
- confirm-type="search"
- :disabled="disabled"
- />
- <image
- class="search-clear"
- src="../static/search-del.png"
- mode="aspectFill"
- v-if="searchVal"
- @click="handleClearSearch"
- />
- <view class="right-btn" v-if="hasRightBtn&&searchVal" @click="handleSearch">搜索</view>
- </view>
- </template>
- <script>
- export default {
- props: {
- hasRightBtn:{
- type:Boolean,
- default:true
- },
- placeholder:{
- type:String,
- default:'请输入搜索关键词'
- },
- focus:{
- type:Boolean,
- default:false
- },
- disabled:{
- type:Boolean,
- default:false
- },
- clear:{
- type:Boolean,
- default:false
- }
- },
- watch: {
- clear(n){
- if(n){
- this.searchVal=''
- }
- }
- },
- data () {
- return {
- searchVal:'',
- isFocus:this.focus
- }
- },
- methods: {
- handleClearSearch(){
- this.searchVal=''
- this.$emit('change',this.searchVal)
- this.$emit('search')
- },
- handleInput(){
- this.$emit('change',this.searchVal)
- },
- handelFocus(){
- this.isFocus=true
- },
- handelBlur(){
- this.isFocus=false
- },
- handleSearch(){
- this.$emit('search')
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .search-box{
- border: 1px solid #E5E5E5;
- align-items: center;
- background-color: #F6F6F6;
- border-radius: 43rpx;
- padding: 0 30rpx;
- height: 70rpx;
- .search-icon{
- width: 48rpx;
- height: 48rpx;
- flex-shrink: 0;
- margin-right: 5rpx;
- }
- input{
- flex: 1;
- }
- .search-clear{
- width: 40rpx;
- height: 40rpx;
- flex-shrink: 0;
- margin-left: 5rpx;
- margin-right: 20rpx;
- }
- .right-btn{
- font-size: 28rpx;
- color: #E3B377;
- flex-shrink: 0;
- border-left: 1px solid #999999;
- padding-left: 20rpx;
- }
- }
- .search-focus{
- border-color: #E3B377;
- background-color: #fff;
- }
- </style>
|