|
@@ -140,8 +140,8 @@
|
|
|
<span v-else class="count" style="color: white">请等待 {{count}} s</span>
|
|
|
</el-button>
|
|
|
</el-form-item>
|
|
|
- <el-form-item prop="newPassword">
|
|
|
- <el-input type="password" placeholder="新密码" v-model="inputForm.newPassword"></el-input>
|
|
|
+ <el-form-item prop="newPassword" :error="passwordError">
|
|
|
+ <el-input type="password" placeholder="新密码" v-model="inputForm.newPassword" @input="validatePassword"></el-input>
|
|
|
</el-form-item>
|
|
|
<el-form-item prop="newPasswordAgain">
|
|
|
<el-input type="password" placeholder="确认密码" v-model="inputForm.newPasswordAgain"></el-input>
|
|
@@ -227,10 +227,38 @@ export default {
|
|
|
{required: true, message: '旧密码不能为空', trigger: 'blur'}
|
|
|
],
|
|
|
newPassword: [
|
|
|
- {required: true, message: '新的密码不能为空', trigger: 'blur'}
|
|
|
+ { required: true, message: '新的密码不能为空', trigger: 'blur' },
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
|
|
|
+
|
|
|
+ if (!value) {
|
|
|
+ callback(new Error('新的密码不能为空'));
|
|
|
+ } else if (!passwordRegex.test(value)) {
|
|
|
+ callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
|
|
|
+ } else {
|
|
|
+ callback(); // 验证通过
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
],
|
|
|
newPasswordAgain: [
|
|
|
- {required: true, message: '再次输入的新密码不能为空', trigger: 'blur'}
|
|
|
+ {required: true, message: '再次输入的新密码不能为空', trigger: 'blur'},
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
|
|
|
+
|
|
|
+ if (!value) {
|
|
|
+ callback(new Error('确认密码不能为空'));
|
|
|
+ } else if (!passwordRegex.test(value)) {
|
|
|
+ callback(new Error('密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符'));
|
|
|
+ } else {
|
|
|
+ callback(); // 验证通过
|
|
|
+ }
|
|
|
+ },
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
]
|
|
|
},
|
|
|
captchaPath: "",
|
|
@@ -238,6 +266,7 @@ export default {
|
|
|
showPhoneCode: true,
|
|
|
count: '', // 初始化次数
|
|
|
timer: null,
|
|
|
+ passwordError: '', // 保存错误信息
|
|
|
isLoginDisabled: false, //登录按钮禁用状态
|
|
|
};
|
|
|
},
|
|
@@ -269,6 +298,17 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 验证密码的函数
|
|
|
+ validatePassword() {
|
|
|
+ const password = this.inputForm.newPassword;
|
|
|
+ const passwordRegex = /^(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*\d))|(?=(.*[A-Z]))(?=(.*[a-z]))(?=(.*[!@#$%^&*.,]))|(?=(.*[A-Z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))|(?=(.*[a-z]))(?=(.*\d))(?=(.*[!@#$%^&*.,]))[A-Za-z\d!@#$%^&*.,]{8,20}$/;
|
|
|
+
|
|
|
+ if (!passwordRegex.test(password)) {
|
|
|
+ this.passwordError = '密码必须包含大写字母、小写字母、数字或特殊字符中的三种,且长度为8到20个字符';
|
|
|
+ } else {
|
|
|
+ this.passwordError = ''; // 验证通过,清空错误信息
|
|
|
+ }
|
|
|
+ },
|
|
|
// 提交表单
|
|
|
async login() {
|
|
|
var checked = this.checked
|