Files
dvcp_v2_webapp/ui/packages/common/AiId.vue
2023-01-18 14:45:21 +08:00

105 lines
2.7 KiB
Vue

<template>
<section class="AiID">
<el-input :size="size" v-if="mode=='input'" v-model="idNumber" @change="autocomplete" clearable :disabled="disabled"
:placeholder="placeholder" :maxLength="18"></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>
import tools from '../../lib/js/utils'
export default {
name: "AiId",
model: {
prop: "value",
event: "change"
},
inject: {
ElFormItem: {default: ""},
},
props: {
value: String,
mode: {type: String, default: 'input'},
rightBtn: Boolean,
size: String,
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 = JSON.parse(JSON.stringify(this.value))
return tools.ID.hideId(idArr)
} else return "-"
}
},
data() {
return {
isShow: false,
idNumber: ""
}
},
watch: {
value(v) {
this.idNumber = v
this.dispatch('ElFormItem', 'el.form.change', [v]);
this.autocomplete()
}
},
methods: {
autocomplete() {
this.$emit("change", this.idNumber)
let id = this.idNumber, {$dateFormat, $moment} = tools
if (id) {
let birthday = $dateFormat($moment(id.substring(6, 14), 'YYYYMMDD'))
if (id.length == 18) {
this.$emit("auto", {
birthday,
sex: "" + Number(id.substring(16, 17)) % 2,
age: Math.ceil($moment.duration($moment().unix() - $moment(birthday, "YYYY-MM-DD").unix(), 's').asYears()),
areaId: id.substring(0, 6) + "000000",
})
}
}
},
dispatch(componentName, eventName, params) {
let parent = this.$parent || this.$root;
let name = parent.$options.componentName;
while (parent && (!name || name !== componentName)) {
parent = parent.$parent;
if (parent) {
name = parent.$options.componentName;
}
}
if (parent) {
parent.$emit.apply(parent, [eventName].concat(params));
}
},
},
created() {
this.idNumber = this.value;
this.autocomplete()
this.isShow = this.show
}
}
</script>
<style lang="scss" scoped>
.AiID {
line-height: 32px;
}
</style>