Phone.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <template>
  2. <div class="center">
  3. <div class="item account">
  4. <span class="icon">
  5. <img src="/login/User.png" alt="">
  6. </span>
  7. <input
  8. type="text"
  9. v-model="phone"
  10. :placeholder="L['请输入手机号']"
  11. class="input"
  12. @blur="validatePhone"
  13. autocomplete="off"
  14. />
  15. <div data-type="userName" class="cancel" @click="clearInputVal('phone')">
  16. <span class="iconfont icon-cuowu"></span>
  17. </div>
  18. </div>
  19. <div class="error">
  20. <span
  21. v-if="phoneErrorMsg"
  22. class="iconfont icon-jubao"
  23. ></span>
  24. {{ phoneErrorMsg }}
  25. </div>
  26. <div class="item password">
  27. <span class="icon">
  28. <img src="/login/Password.png" alt="">
  29. </span>
  30. <input
  31. type="password"
  32. v-model="password"
  33. :placeholder="L['请输入密码']"
  34. class="input"
  35. autocomplete="new-password"
  36. />
  37. <div
  38. data-type="password"
  39. class="cancel"
  40. @click="clearInputVal('password')"
  41. >
  42. <span class="iconfont icon-cuowu"></span>
  43. </div>
  44. </div>
  45. <div class="error">
  46. <span
  47. v-if="errorMsg"
  48. class="iconfont icon-jubao"
  49. ></span>
  50. {{ errorMsg }}
  51. </div>
  52. <el-button
  53. @click="login"
  54. :class="{ submit: true, disabled: loginDisabled }"
  55. :disabled="loginDisabled"
  56. :loading="props.loginLoding"
  57. >{{ L["登录"] }}</el-button
  58. >
  59. </div>
  60. </template>
  61. <script setup>
  62. const props = defineProps({
  63. loginLoding: {
  64. type: Boolean,
  65. default: false
  66. },
  67. });
  68. const emits = defineEmits(["login"]);
  69. const errorMsg = ref(); //错误提示
  70. const phone = ref(""); //手机号
  71. const password = ref(""); //密码
  72. const phoneCalc = ref();
  73. const pwdCalc = ref();
  74. const phoneErrorMsg = ref("");
  75. const loginLoding = ref(false);
  76. const loginType = ref(1); //登陆类型:1-账号密码登陆,2-手机验证码登陆
  77. const L = getCurLanguage();
  78. const loginDisabled = computed(() => !phone.value || !password.value);
  79. // 校验邮箱
  80. const validatePhone = () => {
  81. //邮箱非空的验证
  82. if (!phone.value) {
  83. phoneErrorMsg.value = L["请输入手机号"];
  84. return false;
  85. }
  86. // 邮箱格式验证
  87. phoneCalc.value = checkPhone(phone.value);
  88. if (phoneCalc.value !== true) {
  89. phoneErrorMsg.value = phoneCalc.value;
  90. return false;
  91. }
  92. phoneErrorMsg.value = "";
  93. return true;
  94. };
  95. //清空输入框内容
  96. const clearInputVal = (type) => {
  97. if (type == "phone") {
  98. phone.value = "";
  99. } else if (type == "password") {
  100. password.value = "";
  101. }
  102. };
  103. const login = () => {
  104. let param = {};
  105. param.username = phone.value;
  106. param.password = password.value;
  107. param.loginType = loginType.value;
  108. //邮箱验证
  109. if (!validatePhone()) return;
  110. //密码校验
  111. if (!param.password) {
  112. errorMsg.value = L["请输入密码"];
  113. return false;
  114. } else {
  115. pwdCalc.value = checkPwd(param.password);
  116. if (pwdCalc.value !== true) {
  117. errorMsg.value = pwdCalc.value;
  118. return false;
  119. }
  120. }
  121. errorMsg.value = ''
  122. emits("login", param);
  123. };
  124. const updateErrorMsg = (val) => {
  125. errorMsg.value = val
  126. }
  127. defineExpose({
  128. updateErrorMsg
  129. })
  130. </script>