Phone.vue 3.4 KB

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