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.
220 lines
4.8 KiB
220 lines
4.8 KiB
<template> |
|
<view |
|
@click="type == 'select' && $emit('arrow', true)" |
|
class="sp-new-input-wrap" |
|
> |
|
<view class="label"> |
|
<text v-if="isRequire" class="is-require">*</text> |
|
{{ label }} |
|
|
|
</view> |
|
<view class="sp-new-input" v-if="type == 'textarea'" > |
|
<u-input |
|
v-model="v" |
|
@input="ch" |
|
:placeholder="placeholder" |
|
:type="type" |
|
:class="{ 'sp-new-input-diabled': disabled }" |
|
:height="height" |
|
:disabled="disabled" |
|
style="padding:8rpx" |
|
></u-input> |
|
|
|
</view> |
|
|
|
<view class="sp-new-input" v-else> |
|
<u-icon |
|
class="sp-new-input-icon" |
|
v-if="icon" |
|
:name="icon ? icon : ''" |
|
color="rgba(190,190,190,1)" |
|
size="38" |
|
></u-icon> |
|
|
|
<u-input |
|
v-model="v" |
|
@input="ch" |
|
:placeholder="placeholder" |
|
:type="type !== 'password' ? 'text' : type" |
|
:clearable="false" |
|
:class="{ 'sp-new-input-diabled': disabled }" |
|
:maxlength="maxlength" |
|
:disabled="disabled" |
|
></u-input> |
|
<u-icon style="padding-right:12rpx" @click="scanCode" v-if="endIcon&&!disabled" size="60" :name="endIcon"></u-icon> |
|
<view class="wrap sms" v-if="isSms"> |
|
<u-toast ref="uToast"></u-toast> |
|
<u-verification-code |
|
:seconds="seconds" |
|
@end="end" |
|
@start="start" |
|
ref="uCode" |
|
@change="codeChange" |
|
></u-verification-code> |
|
<span class="btn-txt" @click="getCode">{{ tips }}</span> |
|
</view> |
|
</view> |
|
|
|
<view |
|
v-if="type == 'select'" |
|
class="arrow" |
|
@click="$emit('arrow', true)" |
|
></view> |
|
|
|
<view class="sub"> |
|
<slot name="sub"></slot> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
export default { |
|
name: "spInput", |
|
props: { |
|
label: { |
|
type: String, |
|
default: "", |
|
}, |
|
value: { |
|
type: String, |
|
default: "", |
|
}, |
|
placeholder: { |
|
type: String, |
|
default: "", |
|
}, |
|
type: { |
|
type: String, |
|
default: "text", |
|
}, |
|
// 是否开启短信验证 |
|
isSms: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
|
|
isRequire: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
maxlength: { |
|
type: Number, |
|
default: -1, |
|
}, |
|
disabled: { |
|
type: Boolean, |
|
default: false, |
|
}, |
|
icon: { |
|
type: String, |
|
default: "", |
|
}, |
|
height: { |
|
type: Number, |
|
default: 100, |
|
}, |
|
endIcon:{//输入框后面的icon |
|
type: String, |
|
default: "", |
|
}, |
|
endScanIndex:{ |
|
type: Number, |
|
default:null, |
|
} |
|
}, |
|
data() { |
|
return { |
|
v: this.value, |
|
ele: false, |
|
getSmsFlg: 0, |
|
smsTimer: null, |
|
smsTxt: "获取验证码", |
|
smsTxtr: "重新发送", |
|
isCountdown: true, |
|
tips: "", |
|
seconds: 60, |
|
}; |
|
}, |
|
watch: { |
|
value(v) { |
|
this.v = v; |
|
}, |
|
}, |
|
computed: {}, |
|
mounted() {}, |
|
methods: { |
|
// 发送验证码逻辑 |
|
codeChange(text) { |
|
this.tips = text; |
|
}, |
|
getCode() { |
|
if (this.$refs.uCode.canGetCode) { |
|
this.$emit("ch"); |
|
// // 模拟向后端请求验证码 |
|
// uni.showLoading({ |
|
// title: "正在获取验证码", |
|
// }); |
|
// setTimeout(() => { |
|
// uni.hideLoading(); |
|
// // 这里此提示会被this.start()方法中的提示覆盖 |
|
// uni.$u.toast("验证码已发送"); |
|
|
|
// // 通知验证码组件内部开始倒计时 |
|
// this.$refs.uCode.start(); |
|
// }, 2000); |
|
} else { |
|
uni.$u.toast("倒计时结束后再发送"); |
|
} |
|
}, |
|
end() { |
|
// uni.$u.toast("倒计时结束"); |
|
}, |
|
start() { |
|
// this.$refs.uCode.start(); |
|
// uni.$u.toast("倒计时开始"); |
|
}, |
|
sendSuceess(){ |
|
uni.showLoading({ |
|
title: "正在获取验证码", |
|
}); |
|
setTimeout(() => { |
|
uni.hideLoading(); |
|
// 这里此提示会被this.start()方法中的提示覆盖 |
|
uni.$u.toast("验证码已发送"); |
|
|
|
// 通知验证码组件内部开始倒计时 |
|
this.$refs.uCode.start(); |
|
}, 2000); |
|
}, |
|
// 数据改变 |
|
ch(e) { |
|
this.$emit("changevalue", e); |
|
}, |
|
// 扫一扫 方法 |
|
scanCode(){ |
|
uni.scanCode({ |
|
success: (res) => { |
|
console.log('扫码结果:' + res.result); |
|
// 扫码成功后的操作,例如: |
|
// this.handleScanResult(res.result); |
|
this.$emit("scanSuccess", res.result,this.endScanIndex); |
|
}, |
|
fail: (err) => { |
|
console.error('扫码失败:' + err); |
|
} |
|
}); |
|
} |
|
}, |
|
model: { |
|
prop: "value", |
|
event: "changevalue", |
|
}, |
|
|
|
destroyed() { |
|
clearInterval(this.smsTimer); |
|
}, |
|
}; |
|
</script> |
|
|
|
<style> |
|
</style> |