mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
110 lines
2.2 KiB
Vue
110 lines
2.2 KiB
Vue
<template>
|
|
<div ref="root">
|
|
<field
|
|
:label="$t('label')"
|
|
:placeholder="$t('placeholder')"
|
|
maxlength="200"
|
|
type="textarea"
|
|
autosize
|
|
rows="1"
|
|
:value="value"
|
|
:error="isError"
|
|
@click-icon="onIconClick"
|
|
@input="$emit('input', $event)"
|
|
@focus="onFocus"
|
|
@blur="onBlur"
|
|
>
|
|
<div slot="icon">
|
|
<span v-if="showIcon && isAndroid" :class="b('finish')">{{ $t('complete') }}</span>
|
|
<icon v-else-if="showIcon" name="clear" />
|
|
</div>
|
|
</field>
|
|
<cell-group :border="false" v-if="showSearchList">
|
|
<cell
|
|
v-for="express in searchResult"
|
|
:key="express.name + express.address"
|
|
:title="express.name"
|
|
:label="express.address"
|
|
icon="location"
|
|
clickable
|
|
@click="onSelect(express)"
|
|
/>
|
|
</cell-group>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import create from '../utils/create';
|
|
import Field from '../field';
|
|
import { isAndroid } from '../utils';
|
|
|
|
export default create({
|
|
name: 'address-edit-detail',
|
|
|
|
components: {
|
|
Field
|
|
},
|
|
|
|
props: {
|
|
value: {},
|
|
isError: Boolean,
|
|
searchResult: Array,
|
|
showSearchResult: Boolean
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
isAndroid: isAndroid(),
|
|
isFocused: false
|
|
};
|
|
},
|
|
|
|
computed: {
|
|
showSearchList() {
|
|
return this.showSearchResult && this.isFocused && this.searchResult.length > 0;
|
|
},
|
|
|
|
showIcon() {
|
|
return this.value && this.isFocused;
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
onFocus(e) {
|
|
this.isFocused = true;
|
|
this.$emit('focus', e);
|
|
|
|
const { root } = this.$refs;
|
|
if (root && root.scrollIntoView) {
|
|
root.scrollIntoView();
|
|
}
|
|
},
|
|
|
|
onBlur(e) {
|
|
// wait for click event finished
|
|
setTimeout(() => {
|
|
this.isFocused = false;
|
|
this.$emit('blur', e);
|
|
}, 100);
|
|
},
|
|
|
|
onIconClick() {
|
|
if (this.isAndroid) {
|
|
this.$refs.root.querySelector('.van-field__control').blur();
|
|
} else {
|
|
this.$emit('input', '');
|
|
}
|
|
},
|
|
|
|
onSelect(express) {
|
|
this.$emit('input', `${express.address || ''} ${express.name || ''}`.trim());
|
|
this.$emit('select-search', express);
|
|
},
|
|
|
|
isString(str) {
|
|
return typeof str === 'string';
|
|
}
|
|
}
|
|
});
|
|
</script>
|