updatePsw.vue 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <el-form ref="form" :model="data" label-width="90px">
  3. <div class="stop-psw">
  4. <input type="text" />
  5. <input type="password" name="" id="" />
  6. </div>
  7. <el-form-item label="手机号:" class="mandatory">
  8. <el-input v-model="data.phone" placeholder="请输入手机号码" disabled></el-input>
  9. </el-form-item>
  10. <el-form-item label="验证码:" class="mandatory">
  11. <el-input v-model="data.code" placeholder="请输入验证码">
  12. <template v-slot:suffix>
  13. <el-button
  14. type="primary"
  15. plain
  16. class="input-inner-btn"
  17. @click="sendCode"
  18. :disabled="msgStatus && msgStatus.status !== CountdownStuts.never"
  19. >
  20. {{
  21. msgStatus?.status === CountdownStuts.effective
  22. ? `${msgStatus.miss}S后可重新发送`
  23. : "获取验证码"
  24. }}
  25. </el-button>
  26. </template>
  27. </el-input>
  28. </el-form-item>
  29. <el-form-item label="新密码:" class="mandatory">
  30. <el-input
  31. v-model="data.password"
  32. type="password"
  33. :maxlength="16"
  34. placeholder="请输入8-16位数字、英文大小写组合"
  35. ></el-input>
  36. </el-form-item>
  37. <el-form-item label="密码确认:" class="mandatory">
  38. <el-input
  39. v-model="data.confimPsw"
  40. type="password"
  41. placeholder="请输入8-16位数字、英文大小写组合"
  42. ></el-input>
  43. </el-form-item>
  44. </el-form>
  45. </template>
  46. <script setup lang="ts">
  47. import { encodePwd } from "@/util";
  48. import { openErrorMsg } from "@/request";
  49. import {
  50. CountdownStore,
  51. CountdownStuts,
  52. sendPhoneCode,
  53. updatePassword,
  54. user,
  55. } from "@/store/user";
  56. import { ref, reactive } from "vue";
  57. import { PSW } from "@/constant/REG";
  58. import { QuiskExpose } from "@/helper/mount";
  59. const data = ref({
  60. oldPassword: "",
  61. password: "",
  62. confimPsw: "",
  63. phone: user.value.info.userName,
  64. code: "",
  65. });
  66. const msgStatus = ref<CountdownStore>();
  67. const sendCode = async () => {
  68. msgStatus.value = await sendPhoneCode(data.value.phone);
  69. };
  70. defineExpose<QuiskExpose>({
  71. async submit() {
  72. if (data.value.password !== data.value.confimPsw) {
  73. openErrorMsg("两次密码不一致!");
  74. throw "两次密码不一致!";
  75. }
  76. if (!PSW.REG.test(data.value.password)) {
  77. openErrorMsg(PSW.tip);
  78. throw PSW.tip;
  79. }
  80. if (!data.value.code || !data.value.code.trim()) {
  81. openErrorMsg("请输入验证码");
  82. throw "请输入验证码";
  83. }
  84. await updatePassword({
  85. userName: data.value.phone,
  86. code: data.value.code,
  87. password: data.value.password,
  88. });
  89. data.value.oldPassword = data.value.password = data.value.confimPsw = "";
  90. },
  91. });
  92. </script>