Phone.vue 3.4 KB

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