Email.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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="name"
  11. :placeholder="L['请输入邮箱']"
  12. class="input"
  13. @blur="validateEmail"
  14. autocomplete="off"
  15. />
  16. <div data-type="userName" class="cancel" @click="clearInputVal('name')">
  17. <span style="color: #bbb" class="iconfont icon-cuowu"></span>
  18. </div>
  19. </div>
  20. <div class="error">
  21. <span
  22. v-if="emailErrorMsg"
  23. style="color: #e1251b; font-size: 14px"
  24. class="iconfont icon-jubao"
  25. ></span>
  26. {{ emailErrorMsg }}
  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 name = ref(""); //账户
  75. const password = ref(""); //密码
  76. const emailCalc = ref();
  77. const pwdCalc = ref();
  78. const emailErrorMsg = ref("");
  79. const loginType = ref(1); //登陆类型:1-账号密码登陆,2-手机验证码登陆
  80. const L = getCurLanguage();
  81. const loginDisabled = computed(() => !name.value || !password.value);
  82. // 校验邮箱
  83. const validateEmail = () => {
  84. //邮箱非空的验证
  85. if (!name.value) {
  86. emailErrorMsg.value = L["请输入邮箱"];
  87. return false;
  88. }
  89. // 邮箱格式验证
  90. emailCalc.value = checkEmail(name.value);
  91. if (emailCalc.value !== true) {
  92. emailErrorMsg.value = emailCalc.value;
  93. return false;
  94. }
  95. emailErrorMsg.value = "";
  96. return true;
  97. };
  98. //清空输入框内容
  99. const clearInputVal = (type) => {
  100. if (type == "name") {
  101. name.value = "";
  102. } else if (type == "password") {
  103. password.value = "";
  104. }
  105. };
  106. const login = () => {
  107. let param = {};
  108. param.username = name.value;
  109. param.password = password.value;
  110. param.loginType = loginType.value;
  111. //邮箱验证
  112. if (!validateEmail()) return;
  113. //密码校验
  114. if (!param.password) {
  115. errorMsg.value = L["请输入密码"];
  116. return false;
  117. } else {
  118. pwdCalc.value = checkPwd(param.password);
  119. if (pwdCalc.value !== true) {
  120. errorMsg.value = pwdCalc.value;
  121. return false;
  122. }
  123. }
  124. errorMsg.value = "";
  125. emits("login", param);
  126. };
  127. const updateErrorMsg = (val) => {
  128. errorMsg.value = val
  129. }
  130. defineExpose({
  131. updateErrorMsg
  132. })
  133. </script>