<template>
|
<view class="oi-form-input">
|
<text v-if="data.setting.prefix && !viewMode" class="form-input-icon" :class="[data.setting.prefix]"
|
@click="onPrefixButton"></text>
|
<input v-if="model" class="oi-input" :class="data.disabled?'input-disabled':''"
|
:style="{'padding-left':data.setting.prefix?0 : '8rpx','right':data.setting.suffix?0 : '8rpx'}"
|
v-model="model[data.fieldId]" :focus="focus" :placeholder="data.placeholder" @focus="onFocus"
|
@blur="onChange" @confirm="onConfirm" @click="onClick" :disabled="data.disabled" :maxlength="-1"></input>
|
<input v-else class="oi-input" :class="data.disabled?'input-disabled':''"
|
:style="{'padding-left':data.setting.prefix?0 : '8rpx','right':data.setting.suffix?0 : '8rpx'}"
|
v-model="data.value" :focus="focus" :placeholder="data.placeholder" @blur="onChange" @confirm="onConfirm"
|
@click="onClick" :disabled="data.disabled"></input>
|
<text v-if="data.setting.suffix&& !viewMode" class="form-input-icon" :class="[data.setting.suffix]"
|
@click="onSuffixButton"></text>
|
|
</view>
|
</template>
|
|
<script>
|
import buttonClickMixin from '@/mixins/button-click.js';
|
|
export default {
|
|
name: "OIFormInput",
|
mixins: [buttonClickMixin],
|
props: {
|
viewMode: {
|
type: Boolean,
|
default: false
|
},
|
data: {
|
type: Object,
|
required: true,
|
},
|
model: Object,
|
focus: {
|
type: Boolean,
|
default: false
|
},
|
},
|
data() {
|
return {
|
largeMode: getApp().globalData?.largeMode || false,
|
}
|
},
|
methods: {
|
onChange(e) {
|
this.$emit("on-change", e)
|
},
|
onConfirm(e) {
|
console.log("onConfirm")
|
this.onChange(e)
|
},
|
onClick(e) {
|
this.$emit("on-click", e)
|
},
|
onFocus(e) {
|
this.$emit("on-focus", e)
|
},
|
onPrefixButton() {
|
this.handleButtonClick((done) => {
|
this.$emit("on-click-prefix")
|
setTimeout(() => {
|
done(); // 重置状态
|
}, 1000);
|
});
|
},
|
onSuffixButton() {
|
|
this.handleButtonClick((done) => {
|
this.$emit("on-click-suffix")
|
setTimeout(() => {
|
done(); // 重置状态
|
}, 1000);
|
});
|
|
|
},
|
},
|
|
};
|
</script>
|
|
<style lang="scss">
|
.oi-form-input {
|
border: 1px solid #d5d5d5;
|
border-radius: 6px !important;
|
padding: 3rpx;
|
width: calc(100% - 6rpx);
|
display: flex;
|
flex-direction: row;
|
|
.input-disabled {
|
background-color: #f3f3f3 !important;
|
}
|
|
.oi-input {
|
color: #2d8cf0;
|
padding: 10rpx 8rpx;
|
flex: 1;
|
height: 20px;
|
background: #FFF;
|
line-height: 20px;
|
font-size: 14px;
|
font-family: inherit;
|
transition-duration: 0.1s;
|
vertical-align: middle;
|
}
|
|
.form-input-icon {
|
width: 30rpx;
|
font-family: uniicons;
|
font-weight: 400;
|
font-style: normal;
|
cursor: pointer;
|
display: inline-block;
|
vertical-align: middle;
|
padding: 10rpx 5rpx;
|
font-size: 32rpx;
|
color: rgb(192, 196, 204);
|
}
|
}
|
|
.oi-form-input:hover {
|
border: 1px solid rgb(41, 121, 255);
|
}
|
|
.large-mode {
|
.oi-form-input {
|
.oi-input {
|
font-size: 24px;
|
height: 36px;
|
}
|
|
.form-input-icon {
|
font-size: 30px;
|
height: 36px;
|
width: 36px;
|
}
|
}
|
}
|
</style>
|