index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="formData" :rules="formRules" label-width="80px" class="form">
  4. <el-form-item label="旧密码" prop="oldPassword">
  5. <el-input v-model="formData.oldPassword" type="password" placeholder="请输入旧密码" />
  6. </el-form-item>
  7. <el-form-item label="新密码" prop="newPassword">
  8. <el-input v-model="formData.newPassword" type="password" placeholder="请输入新密码" />
  9. </el-form-item>
  10. <el-form-item label="确认密码" prop="confirmPwd">
  11. <el-input v-model="formData.confirmPwd" type="password" placeholder="请再次输入密码" />
  12. </el-form-item>
  13. <el-form-item>
  14. <el-button type="primary" @click="submit()">确认</el-button>
  15. <el-button type="warning" @click="$_back()">返回</el-button>
  16. </el-form-item>
  17. </el-form>
  18. </div>
  19. </template>
  20. <script>
  21. import { modifyPassword } from '@/api/user'
  22. import { validPassword } from '@/utils/validate'
  23. export default {
  24. data() {
  25. var confirmPassword = (rule, value, callback) => {
  26. if (value === '') {
  27. callback(new Error('请再次输入密码'))
  28. } else if (value !== this.formData.newPassword) {
  29. callback(new Error('两次输入密码不一致!'))
  30. } else {
  31. callback()
  32. }
  33. }
  34. var validPwd = (rule, value, callback) => {
  35. if (this.formData.oldPassword === value) {
  36. callback(new Error('新密码与旧密码相同'))
  37. } else if (!validPassword(value)) {
  38. callback(new Error('请输入字母与数字组合的8-12位密码'))
  39. } else {
  40. callback()
  41. }
  42. }
  43. return {
  44. formData: {
  45. oldPassword: '',
  46. newPassword: '',
  47. confirmPwd: ''
  48. },
  49. formRules: {
  50. oldPassword: [
  51. { required: true, message: '请输入原来的密码', trigger: 'blur' }
  52. ],
  53. newPassword: [
  54. { required: true, trigger: ['change', 'blur'], validator: validPwd }
  55. ],
  56. confirmPwd: [
  57. { required: true, message: '请再次输入密码' },
  58. { validator: confirmPassword, trigger: 'change' }
  59. ]
  60. }
  61. }
  62. },
  63. methods: {
  64. submit() {
  65. const that = this
  66. this.$refs.form.validate(valide => {
  67. if (!valide) return
  68. const authUserId = this.$store.getters.authUserId
  69. modifyPassword({ authUserId, ...that.formData }).then(res => {
  70. if (res.code === 0) {
  71. this.$refs.form.resetFields()
  72. this.$message.success('密码修改成功,请重新登录')
  73. this.logout()
  74. }
  75. }).catch(err => {
  76. console.log(err)
  77. })
  78. })
  79. },
  80. async logout() {
  81. setTimeout(() => {
  82. // 退出登录重置用户信息
  83. this.$store.dispatch('user/logout')
  84. // 重置相关state
  85. this.$store.dispatch('resetState')
  86. this.$router.replace('/login')
  87. }, 500)
  88. }
  89. }
  90. }
  91. </script>
  92. <style lang="scss" scoped>
  93. .form{
  94. width: 600px;
  95. margin: 80px auto;
  96. .el-button{
  97. width: 120px;
  98. }
  99. }
  100. </style>