Email.vue 3.3 KB

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