<template> <el-dialog :title="modalTitle" :visible.sync="showDialog" width="500px" :close-on-click-modal="false" :append-to-body="true" :show-close="false" > <el-form class="modifyPw" ref="form" :model="formData" :rules="rules"> <el-form-item :label="$t('hivuiMain_modifypw_oldpw')" :label-width="formLabelWidth" prop="oldPw"> <el-input ref="oldPw" type="password" v-model="formData.oldPw" autocomplete="off" :placeholder="$t('hivuiMain_modifypw_oldpw')" ></el-input> </el-form-item> <el-form-item :label="$t('hivuiMain_modifypw_newpw')" :label-width="formLabelWidth" prop="newPw"> <el-input ref="newPw" type="password" v-model="formData.newPw" autocomplete="off" @input="onChange" :placeholder="$t('hivuiMain_modifypw_newpw_ph')" ></el-input> </el-form-item> <el-progress :style="pwStrengthStyle()" :percentage="currPwStrength.num" :color="currPwStrength.color" :format="format"></el-progress> <el-form-item :label="$t('hivuiMain_modifypw_newpw2')" :label-width="formLabelWidth" prop="newPw2"> <el-input ref="newPw2" type="password" v-model="formData.newPw2" autocomplete="off" :placeholder="$t('hivuiMain_modifypw_newpw2_ph')" ></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="cancel" :loading="dialogLoading">{{$t('hivuiMain_dialog_cancel')}}</el-button> <el-button type="primary" @click="submit" :loading="dialogLoading">{{$t('hivuiMain_dialog_define')}}</el-button> </div> </el-dialog> </template> <script> import { modifyPassword } from '@main/api/user' import md5 from "js-md5"; export default { data(){ var validatePass = (rule, value, callback) => { if (value === '') { callback(new Error(this.$t('hivuiMain_modifypw_valid_pw2_empty2'))); } else if (value !== this.formData.newPw) { callback(new Error(this.$t('hivuiMain_modifypw_valid_pw2_msg'))); } else { callback(); } }; return { modalTitle:this.$t('hivuiMain_modifypw_title'), formLabelWidth:"140px", formData:{ oldPw:'', newPw:'', newPw2:'', }, dialogLoading:false, rules: { oldPw: [{ required: true, message: this.$t('hivuiMain_modifypw_oldpw'), trigger: "blur" }], newPw: [ { required: true, message: this.$t('hivuiMain_modifypw_valid_pw_empty'), trigger: "blur" }, { min:4,max:25, message: this.$t('hivuiMain_modifypw_newpw_ph'), trigger: "blur" }, ], newPw2: [ { required: true, message: this.$t('hivuiMain_modifypw_valid_pw2_empty'), trigger: "blur" }, { validator:validatePass, trigger: "blur" }, ], }, currPwStrength:{}, pwStrength:[ { num:33, desc:this.$t('hivuiMain_modifypw_weak'), color:'#f56c6c', }, { num:66, desc:this.$t('hivuiMain_modifypw_middle'), color:'#e6a23c', }, { num:100, desc:this.$t('hivuiMain_modifypw_strong'), color:'#67c23a', }, ], }; }, computed:{ showDialog(){ return this.$store.getters.showPwDialog; }, }, mounted(){ }, methods:{ submit(){ let me=this; this.$refs.form.validate((valid) => { if(valid){ this.dialogLoading=true; modifyPassword({ oldPwd:md5(this.formData.oldPw), newPwd:md5(this.formData.newPw), }).then(res=>{ this.$store.dispatch("user/showPwDialog",false); this.dialogLoading=false; this.formData={ oldPw:'', newPw:'', newPw2:'', }; this.$message({ type:"success", message:me.$t('hivuiMain_modifypw_success') }); setTimeout(()=>{ if(window.modifyPwAfterSubmit){//自定义确定事件 window.modifyPwAfterSubmit(); }else{ this.$store.dispatch("user/logout").then(()=>{ location=window.HIVUI_SETTING.loginUrl; }); } },1500); }).catch(err=>{ this.dialogLoading=false; }); }else{ } }); }, cancel(){ if(window.modifyPwAfterCancel){//自定义关闭事件 window.modifyPwAfterCancel(); }else{ this.$store.dispatch("user/showPwDialog",false); } this.dialogLoading=false; this.formData={ oldPw:'', newPw:'', newPw2:'', }; }, onChange(val){ var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g"); var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g"); var enoughRegex = new RegExp("(?=.{4,}).*", "g"); if(strongRegex.test(val)){ this.currPwStrength=this.pwStrength[2]; }else if(mediumRegex.test(val)){ this.currPwStrength=this.pwStrength[1]; }else if(enoughRegex.test(val)){ this.currPwStrength=this.pwStrength[0]; }else{ this.currPwStrength={}; } }, format(){ return this.currPwStrength.desc; }, pwStrengthStyle(){ return `margin-left:calc(${this.formLabelWidth} + 15px);margin-bottom:10px;width:calc(100% - ${this.formLabelWidth})` }, } } </script> <style lang="less" scoped> .modifyPw{ /deep/.el-dialog__body{ word-break: break-word; } } </style>