| <template> | 
|   <GlobalWindow | 
|     :visible.sync="visible" | 
|     :confirm-working="isWorking" | 
|     width="576px" | 
|     title="重置密码" | 
|     @confirm="confirm" | 
|   > | 
|     <p class="tip" v-if="user != null">为用户 <em>{{user.realname}}</em> 重置密码</p> | 
|     <el-form :model="form" ref="form" :rules="rules"> | 
|       <el-form-item label="新密码" prop="password" required> | 
|         <el-input v-model="form.password" type="password" placeholder="至少包括数字、大写字母、小写字母、特殊字符中的三种字符,且至少8位数" maxlength="30" show-password></el-input> | 
|       </el-form-item> | 
|     </el-form> | 
|   </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
| import GlobalWindow from '@/components/common/GlobalWindow' | 
| import { resetPwd } from '@/api/system/user' | 
| export default { | 
|   name: 'ResetPwdWindow', | 
|   components: { GlobalWindow }, | 
|   data () { | 
|     return { | 
|       isWorking: false, | 
|       visible: false, | 
|       user: null, | 
|       form: { | 
|         password: '' | 
|       }, | 
|       rules: { | 
|         password: [ | 
|           { validator: this.validatePassword, trigger: 'blur' } | 
|         ] | 
|       } | 
|     } | 
|   }, | 
|   methods: { | 
|     open (user) { | 
|       this.user = user | 
|       this.visible = true | 
|       this.$nextTick(() => { | 
|         this.$refs.form.resetFields() | 
|       }) | 
|     }, | 
|     validatePassword (rule, value, callback) { | 
|       if (!value) { | 
|         callback(new Error('请输入密码')) | 
|       } else { | 
|         let typeCount = 0; | 
|         if (/[a-z]/.test(value)) typeCount++; // 小写字母 | 
|         if (/[A-Z]/.test(value)) typeCount++; // 大写字母 | 
|         if (/\d/.test(value)) typeCount++;    // 数字 | 
|         if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(value)) typeCount++; // 特殊字符 | 
|         if (typeCount >= 3) { | 
|           callback() | 
|         } else { | 
|           callback(new Error('至少包括数字、大写字母、小写字母、特殊字符中的三种字符,且至少8位数')) | 
|         } | 
|       } | 
|     }, | 
|     // 确认重置密码 | 
|     confirm () { | 
|       if (this.isWorking) { | 
|         return | 
|       } | 
|       this.$refs.form.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         this.isWorking = true | 
|         resetPwd({ | 
|           id: this.user.id, | 
|           password: this.form.password | 
|         }) | 
|           .then(() => { | 
|             this.$tip.apiSuccess('密码重置成功') | 
|             this.visible = false | 
|             this.$emit('success') | 
|           }) | 
|           .catch(e => { | 
|             this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking = false | 
|           }) | 
|       }) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style scoped lang="scss"> | 
| @import "@/assets/style/variables.scss"; | 
| // 角色配置 | 
| .global-window { | 
|   .tip { | 
|     margin-bottom: 12px; | 
|     em { | 
|       font-style: normal; | 
|       color: $primary-color; | 
|       font-weight: bold; | 
|     } | 
|   } | 
| } | 
| </style> |