RegisterForm.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <div class="content">
  3. <div class="wrapper">
  4. <div class="form-wrapper">
  5. <div class="signup-form">
  6. <div class="tips">
  7. <h1>注册账号.</h1>
  8. <span>已经有账号?</span>
  9. <router-link to="/login"
  10. ><span class="login-into">登录</span></router-link
  11. >
  12. </div>
  13. <div class="form-wrapper">
  14. <!-- 用户名 -->
  15. <div class="input-wrapper user">
  16. <input
  17. type="text"
  18. class="inputs"
  19. v-model="registerForm.username"
  20. />
  21. </div>
  22. <!-- 密码 -->
  23. <div class="input-wrapper pwd">
  24. <input
  25. type="password"
  26. class="inputs"
  27. v-model="registerForm.password"
  28. />
  29. </div>
  30. <!-- 电话号码 -->
  31. <div class="input-wrapper phone">
  32. <input
  33. type="text"
  34. class="inputs"
  35. v-model="registerForm.account"
  36. />
  37. </div>
  38. <!-- 验证码 -->
  39. <div class="input-wrapper veri-code" style="opacity: 1; z-index: 1">
  40. <input
  41. type="text"
  42. class="inputs veri-code-input"
  43. v-model="registerForm.captcha"
  44. />
  45. <span class="veri-code-tips" @click="veriCodeTipsClick"
  46. >Click To Get</span
  47. >
  48. </div>
  49. <button class="form-btn" @click="onRegister">Sign Up</button>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. </template>
  56. <script setup>
  57. import { ref } from "vue";
  58. import { registerVerify ,registerApi} from "../api/index";
  59. import { ElMessage } from "element-plus";
  60. import { useRouter } from "vue-router";
  61. const router = useRouter();
  62. let reckonTime; //计数器
  63. let reckonTimeFlag = 5; //倒计时
  64. const reckonFlag = ref(true); //重复点击判断
  65. const registerForm = ref({
  66. username: "", //用户名
  67. password: "", //密码
  68. account: "", //手机号
  69. captcha: "", //验证码
  70. });
  71. //定时器
  72. const countDown = () => {
  73. console.log("计数器");
  74. // 设置验证码读取效果
  75. let veriCodeTips = document.querySelector(".veri-code-tips");
  76. veriCodeTips.innerHTML = `RESEND(${reckonTimeFlag})`;
  77. reckonTimeFlag--;
  78. if (reckonTimeFlag < 0) {
  79. clearInterval(reckonTime);
  80. reckonTimeFlag = 5;
  81. veriCodeTips.innerHTML = `Click To Get`;
  82. veriCodeTips.style.color = "rgb(39, 150, 247)";
  83. }
  84. };
  85. //点击事件触发的方法
  86. const veriCodeTipsClick = () => {
  87. // 防止重复点击 重复触发计数器
  88. if (registerForm.value.account == "" || registerForm.value.account == null) {
  89. ElMessage.error("手机号不能为空");
  90. } else {
  91. if (!reckonFlag.value) {
  92. return;
  93. } else {
  94. reckonFlag.value = false;
  95. setTimeout(() => {
  96. reckonFlag.value = true;
  97. }, 5000);
  98. let veriCodeTips = document.querySelector(".veri-code-tips");
  99. veriCodeTips.style.color = "rgb(153, 151, 151)";
  100. reckonTime = setInterval(countDown, 1000);
  101. countDown();
  102. getRegisterVerify();
  103. }
  104. }
  105. };
  106. // 验证码获取
  107. const getRegisterVerify = async () => {
  108. await registerVerify(registerForm.value.account).then(
  109. (response) => {
  110. if (response.data.status == 200) {
  111. ElMessage.success("验证码:" + response.data.data);
  112. registerForm.value.captcha = response.data.data;
  113. } else if (response.data.status == 501) {
  114. ElMessage.warning(
  115. "验证码10分钟内有效, 请勿重复点击:" + response.data.data
  116. );
  117. const a = response.data.data.split(":")
  118. registerForm.value.captcha = a[1];
  119. } else if (response.data.status == 500) {
  120. ElMessage.error("手机号已经注册");
  121. }
  122. },
  123. (error) => {
  124. console.log("验证码获取失败");
  125. }
  126. );
  127. };
  128. // 注册校验
  129. const onRegister = async () => {
  130. await registerApi(registerForm.value).then(
  131. (response) => {
  132. ElMessage.success("注册成功");
  133. clearInterval(reckonTime);
  134. router.push({ path: "/Login" });
  135. },
  136. (error) => {
  137. console.log("注册失败");
  138. }
  139. );
  140. };
  141. </script>
  142. <style scoped>
  143. @import url("../assets/css/style.scss");
  144. </style>