Files
dvcp_v2_webapp/ui/packages/common/AiPhone.vue

81 lines
2.1 KiB
Vue

<template>
<section class="AiPhone">
<el-input v-if="mode=='input'" v-model="phone" clearable :disabled="disabled" :placeholder="placeholder"
:maxLength="11" @change="autoComplete"></el-input>
<el-row type="flex" v-if="mode=='show'" style="align-items: center">
<el-button type="text" v-if="!rightBtn&&showEyes" :icon="showIcon" @click="isShow=!isShow"></el-button>
<span v-if="isShow">{{value||"-"}}</span>
<span v-else>{{hideId}}</span>
<el-button type="text" v-if="rightBtn&&showEyes" :icon="showIcon" @click="isShow=!isShow"></el-button>
</el-row>
</section>
</template>
<script>
export default {
name: "AiPhone",
model: {
prop: "value",
event: "change"
},
props: {
value: String,
mode: {type: String, default: 'input'},
rightBtn: Boolean,
show: {type: Boolean, default: false},
disabled: Boolean,
placeholder: String,
showEyes: {type: Boolean, default: true}
},
computed: {
showIcon() {
return this.isShow ? 'iconfont iconHide_Content' : 'iconfont iconShow_Content'
},
hideId() {
if (this.value) {
let idArr = Array.from(this.value)
idArr.splice(3, 4, "****")
return idArr.join("") || "-"
} else return "-"
}
},
data() {
return {
isShow: false,
phone: ""
}
},
methods: {
autoComplete() {
this.$emit("valid", this.validate(this.phone))
},
validate(phone) {
let result = false, msg = ''
if(phone){
if(phone.length==11){
if((/^1(3|4|5|6|7|8|9)\d{9}$/.test(phone))){
result = true
}else{
msg = "手机号不合法!"
}
}else{
msg = "手机号长度不合法!"
}
}else{
msg = "手机号不能为空!"
}
return [result, msg]
}
},
mounted() {
this.phone = this.value
this.isShow = this.show
}
}
</script>
<style lang="scss" scoped>
.AiPhone {
}
</style>