城阳工作端uniH5前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

215 lines
6.3 KiB

10 months ago
<template>
<view :class="utils.bem('search', { withaction: showAction || useActionSlot }) + ' custom-class'" :style="'background: ' + background">
<view :class="utils.bem('search__content', [shape])">
<view class="van-search__label" v-if="label">{{ label }}</view>
<slot v-else name="label" />
<van-field
type="search"
:left-icon="!useLeftIconSlot ? leftIcon : ''"
:right-icon="!useRightIconSlot ? rightIcon : ''"
:focus="focus"
:error="error"
:border="false"
confirm-type="search"
class="van-search__field field-class"
:value="valueClone"
:disabled="disabled"
:readonly="readonly"
:clearable="clearable"
:clear-trigger="clearTrigger"
:clear-icon="clearIcon"
:maxlength="maxlength"
:input-align="inputAlign"
input-class="input-class"
:placeholder="placeholder"
:placeholder-style="placeholderStyle"
:cursor-spacing="cursorSpacing"
custom-style="padding: 5px 10px 5px 0; background-color: transparent;"
@blur="onBlur"
@focus="onFocus"
@change="onChange"
@confirm="onSearch"
@clear="onClear"
@click-input="onClickInput"
>
<slot v-if="useLeftIconSlot" name="left-icon" slot="left-icon" />
<slot v-if="useRightIconSlot" name="right-icon" slot="right-icon" />
</van-field>
</view>
<view v-if="showAction || useActionSlot" class="van-search__action" hover-class="van-search__action--hover" hover-stay-time="70">
<slot v-if="useActionSlot" name="action" />
<view v-else @tap="onCancel" class="van-search__action-button cancel-class">{{ actionText }}</view>
</view>
</view>
</template>
<script module="utils" lang="wxs" src="@/miniprogram_npm/@vant/weapp/wxs/utils.wxs"></script>
<script>
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var component_1 = require('../common/component');
var version_1 = require('../common/version');
export default {
data() {
return {
valueClone: ''
};
},
field: true,
classes: ['field-class', 'input-class', 'cancel-class'],
props: {
value: {
type: String,
default: ''
},
label: String,
focus: Boolean,
error: Boolean,
disabled: Boolean,
readonly: Boolean,
inputAlign: String,
showAction: Boolean,
useActionSlot: Boolean,
useLeftIconSlot: Boolean,
useRightIconSlot: Boolean,
leftIcon: {
type: String,
default: 'search'
},
rightIcon: String,
placeholder: String,
placeholderStyle: String,
actionText: {
type: String,
default: '取消'
},
background: {
type: String,
default: '#ffffff'
},
maxlength: {
type: Number,
default: -1
},
shape: {
type: String,
default: 'square'
},
clearable: {
type: Boolean,
default: true
},
clearTrigger: {
type: String,
default: 'focus'
},
clearIcon: {
type: String,
default: 'clear'
},
cursorSpacing: {
type: Number,
default: 0
}
},
methods: {
onChange: function (event) {
if ((0, version_1.canIUseModel)()) {
this.setData({
valueClone: event.detail
});
}
this.$emit('change', event.detail);
},
onCancel: function () {
var that = this;
/**
* 修复修改输入框值时输入框失焦和赋值同时触发赋值失效
* https://github.com/youzan/vant-weapp/issues/1768
*/
setTimeout(function () {
if ((0, version_1.canIUseModel)()) {
that.setData({
valueClone: ''
});
}
that.$emit('cancel');
that.$emit('change', '');
}, 200);
},
onSearch: function (event) {
this.$emit('search', event.detail);
},
onFocus: function (event) {
this.$emit('focus', event.detail);
},
onBlur: function (event) {
this.$emit('blur', event.detail);
},
onClear: function (event) {
this.$emit('clear', event.detail);
},
onClickInput: function (event) {
this.$emit('click-input', event.detail);
}
},
watch: {
value: {
handler: function (newVal, oldVal) {
this.valueClone = newVal;
},
immediate: true
}
}
};
</script>
<style>
@import '../common/index.css';
.van-search {
align-items: center;
box-sizing: border-box;
display: flex;
padding: var(--search-padding, 10px 12px);
}
.van-search__content {
background-color: var(--search-background-color, #f7f8fa);
border-radius: 2px;
display: flex;
flex: 1;
padding-left: var(--padding-sm, 12px);
}
.van-search__content--round {
border-radius: 999px;
}
.van-search__label {
color: var(--search-label-color, #323233);
font-size: var(--search-label-font-size, 14px);
line-height: var(--search-input-height, 34px);
padding: var(--search-label-padding, 0 5px);
}
.van-search__field {
flex: 1;
}
.van-search__field__left-icon {
color: var(--search-left-icon-color, #969799);
}
.van-search--withaction {
padding-right: 0;
}
.van-search__action {
color: var(--search-action-text-color, #323233);
font-size: var(--search-action-font-size, 14px);
line-height: var(--search-input-height, 34px);
}
.van-search__action--hover {
background-color: #f2f3f5;
}
.van-search__action-button {
padding: var(--search-action-padding, 0 8px);
}
</style>