loginResetPwd.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <el-dialog
  3. v-model="open"
  4. title="修改初始密码"
  5. width="500px"
  6. append-to-body
  7. :close-on-click-modal="false"
  8. :close-on-press-escape="false"
  9. >
  10. <div style="color:red;font-size: 13px;width: 100%;text-align: right;">
  11. *密码为8位及以上且必须包含大小写字母+特殊字符+数字相结合
  12. </div>
  13. <el-form ref="pwdRef" :model="passwordForm" :rules="passwordRules" label-width="80px">
  14. <el-form-item label="新密码" prop="newPassword">
  15. <el-input
  16. v-model="passwordForm.newPassword"
  17. placeholder="请输入新密码"
  18. type="password"
  19. show-password
  20. />
  21. </el-form-item>
  22. <el-form-item label="确认密码" prop="confirmPassword">
  23. <el-input
  24. v-model="passwordForm.confirmPassword"
  25. placeholder="请确认新密码"
  26. type="password"
  27. show-password
  28. />
  29. </el-form-item>
  30. </el-form>
  31. <template #footer>
  32. <div class="dialog-footer">
  33. <el-button type="primary" @click="submit" :loading="submitLoading">确 定</el-button>
  34. </div>
  35. </template>
  36. </el-dialog>
  37. </template>
  38. <script setup>
  39. import { ref, reactive } from 'vue'
  40. import { initPassword } from "@/api/login"
  41. import { ElMessage } from 'element-plus'
  42. import { encryptAES, decryptAES } from '@/utils/cryptoAES'
  43. import { getIsKey } from '@/utils/crypto'
  44. const open = ref(false)
  45. const pwdRef = ref(null)
  46. const submitLoading = ref(false)
  47. // 登录信息
  48. const loginInfo = reactive({
  49. username: '',
  50. password: '',
  51. code: '',
  52. uuid: ''
  53. })
  54. const passwordForm = reactive({
  55. newPassword: '',
  56. confirmPassword: ''
  57. })
  58. const passwordRules = reactive({
  59. newPassword: [
  60. { required: true, message: "新密码不能为空", trigger: "blur" },
  61. { validator: validatePassword, trigger: "blur" }
  62. ],
  63. confirmPassword: [
  64. { required: true, message: "确认密码不能为空", trigger: "blur" },
  65. { validator: checkConfirmPassword, trigger: "blur" }
  66. ]
  67. })
  68. function checkConfirmPassword(rule, value, callback) {
  69. if (value !== passwordForm.newPassword) {
  70. callback(new Error("两次输入的密码不一致"))
  71. } else {
  72. callback()
  73. }
  74. }
  75. function validatePassword(rule, value, callback) {
  76. if (checkPassword(value) === false) {
  77. callback(new Error("密码格式不符合要求"))
  78. } else {
  79. callback()
  80. }
  81. }
  82. function checkPassword(password) {
  83. // 基础长度检查
  84. if (!password || password.length < 8) {
  85. return false;
  86. }
  87. // 正则表达式验证
  88. const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])[A-Za-z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,}$/;
  89. return regex.test(password);
  90. }
  91. function show(loginData) {
  92. open.value = true
  93. reset()
  94. // 保存登录信息
  95. loginInfo.username = loginData.username
  96. loginInfo.password = loginData.password
  97. loginInfo.code = loginData.code
  98. loginInfo.uuid = loginData.uuid
  99. }
  100. function hide() {
  101. open.value = false
  102. }
  103. function reset() {
  104. passwordForm.newPassword = ''
  105. passwordForm.confirmPassword = ''
  106. if (pwdRef.value) {
  107. pwdRef.value.resetFields()
  108. }
  109. }
  110. function submit() {
  111. pwdRef.value.validate(async valid => {
  112. if (valid) {
  113. submitLoading.value = true
  114. // 使用初始密码修改接口
  115. const keyObj = await getIsKey()
  116. const isKey = keyObj["data"];
  117. const requestForm = { ...loginInfo }
  118. let encryptNewPassword = passwordForm.newPassword;
  119. try {
  120. if("1" === isKey || 1 === isKey) {
  121. requestForm.username = encryptAES(loginInfo.username)
  122. requestForm.password = encryptAES(loginInfo.password)
  123. requestForm.code = encryptAES(loginInfo.code)
  124. encryptNewPassword = encryptAES(encryptNewPassword)
  125. }
  126. } catch (error) {}
  127. initPassword(requestForm.username, requestForm.password, encryptNewPassword, requestForm.code, loginInfo.uuid).then(response => {
  128. submitLoading.value = false
  129. ElMessage.success("密码修改成功,请重新登录")
  130. hide()
  131. // 通知父组件密码修改成功
  132. emits('passwordChanged')
  133. }).catch(() => {
  134. submitLoading.value = false
  135. })
  136. }
  137. })
  138. }
  139. defineExpose({
  140. show,
  141. hide
  142. })
  143. const emits = defineEmits(['passwordChanged'])
  144. </script>