08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiLogin / components / pwStrength.vue
<template>
	<div class="pwStrength" id="container">
		<el-row>
			<el-col :span="8">
				<el-progress :percentage="onePercentage" :color="oneCustomColors" :format="oneFormat"></el-progress>
			</el-col>
			<el-col :span="8">
				<el-progress :percentage="twoPercentage" :color="twoCustomColors" :format="twoFormat"></el-progress>
			</el-col>
			<el-col :span="8">
				<el-progress :percentage="ThreePercentage" :color="ThreeCustomColors" :format="ThreeFormat"></el-progress>
			</el-col>
		</el-row>
	</div>
</template>
<script>
	export default {
		name: "PasswordStrength",
		model: {
			event: 'change',
			prop: 'password'
		},
		props: {
			//密码
			password: {
				type: [String,Boolean,Number,Object],
				required: true,
				default: "",
			},
			minPw:{
				type: [String,Boolean,Number,Object],
				default: 6,
			}
		},
		watch:{
			password(newValue){
				const mode = this.checkPasswordStrength(newValue);
				//逻辑处理
				switch (mode) {
				//初始化状态
					case 0:
						this.content = '';
						this.onePercentage = 0;
						this.twoPercentage = 0;
						this.ThreePercentage = 0;
						break;
					case 1:
						this.content = this.$t('hivuiLogin_pw_weak');
						this.onePercentage = 100;
						this.twoPercentage = 0;
						this.ThreePercentage = 0;
						break;
					case 2:
						this.content = this.$t('hivuiLogin_pw_middle');
						this.onePercentage = 100;
						this.twoPercentage = 100;
						this.ThreePercentage = 0;
						break;
					case 3:
						this.content = this.$t('hivuiLogin_pw_middle');
						this.onePercentage = 100;
						this.twoPercentage = 100;
						this.ThreePercentage = 0;
						break;
					default:
						this.content = this.$t('hivuiLogin_pw_strong');
						this.onePercentage = 100;
						this.twoPercentage = 100;
						this.ThreePercentage = 100;
						break;
				}
			}
		},
		data(){
			return{
				content:"",
				onePercentage:0,
				twoPercentage:0,
				ThreePercentage:0,
				oneCustomColors: [
					{color: '#7ecef4', percentage: 100}
				],
				twoCustomColors: [
					{color: '#fbae65', percentage: 100}
				],
				ThreeCustomColors: [
					{color: '#ff7665', percentage: 100}
				]
			}
		},
		methods:{
			oneFormat() {
				return "";
			},
			twoFormat() {
				return "";
			},
			ThreeFormat() {
				return "";
			},
			//密码强度验证
			checkPasswordStrength(value) {
				let mode = 0;
				//正则表达式验证符合要求的
				if (value.length < this.minPw) return mode;
				if (/\d/.test(value)) mode++; //数字
				if (/[a-z]/.test(value)) mode++; //小写
				if (/[A-Z]/.test(value)) mode++; //大写
				if (/\W/.test(value)) mode++; //特殊字符
				return mode;
			}
		}
	}
</script>

<style lang="scss" scoped>
	@function px2vw($px) {
		@return calc(#{$px} / 1920 * 100vw);
	}
	.pwStrength{
		::v-deep.el-progress__text {
			display: none;
		}
		::v-deep.el-progress-bar {
			padding: 0 px2vw(5);
			margin: 0px;
		}
		::v-deep.el-progress-bar__outer{
			height:px2vw(10);
		}
	}
	
</style>