New UI layout
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

login.js 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. const serverUrl = 'http://localhost:3088/';
  2. const emailInputEl = document.getElementById('email');
  3. const passwordInputEl = document.getElementById('password');
  4. const emailErrEl = document.getElementById('emailErrMsg');
  5. const passwordErrEl = document.getElementById('passwordErrMsg');
  6. const emailContainerEl = document.getElementById('emailBox');
  7. const passwordContainerEl = document.getElementById('passwordBox');
  8. const showPasswordChk = document.getElementById('showPassword');
  9. const emailNextBtn = document.getElementById('emailNextBtn');
  10. const renterEmailLink = document.getElementById('renterEmail');
  11. const loginSubmitBtn = document.getElementById('loginSubmitBtn');
  12. passwordContainerEl.style.display = 'none';
  13. emailInputEl.focus();
  14. function showPasswordBox() {
  15. const email = emailInputEl.value;
  16. if (validateEmailOrPhone()) {
  17. emailContainerEl.style.display = 'none';
  18. passwordContainerEl.style.display = 'block';
  19. document.getElementById('entered-email').innerHTML = email;
  20. passwordInputEl.focus();
  21. emailInputEl.classList.remove('error');
  22. emailErrEl.innerText = '';
  23. } else {
  24. emailInputEl.classList.add('error');
  25. emailErrEl.innerText = 'Please enter valid email or phone';
  26. }
  27. }
  28. function validateEmailOrPhone() {
  29. const value = emailInputEl.value.trim();
  30. const regx = /^[6-9]\d{9}$/;
  31. if (value.includes('@') || regx.test(value)) {
  32. return true;
  33. }
  34. return false;
  35. }
  36. function togglePassword() {
  37. const ele = document.getElementById('showPassword');
  38. const password = passwordInputEl;
  39. if (password.value.length > 0) {
  40. passwordInputEl.value = password.value;
  41. password.focus();
  42. if (ele.checked) {
  43. password.setAttribute('type', 'text');
  44. } else {
  45. password.setAttribute('type', 'password');
  46. }
  47. }
  48. }
  49. function onPasswordFocusOut() {
  50. const passwordLabel = document.getElementById('passwordLabel');
  51. if (passwordInputEl.value.length > 0) {
  52. passwordLabel.classList.add('password-fixed');
  53. } else {
  54. passwordLabel.classList.remove('password-fixed');
  55. }
  56. }
  57. function onEmailFocusOut() {
  58. const emailLabel = document.getElementById('emailLabel');
  59. if (emailInputEl.value.trim()) {
  60. emailLabel.classList.add('password-fixed');
  61. } else {
  62. emailLabel.classList.remove('password-fixed');
  63. }
  64. }
  65. function setCookie(name, value, days) {
  66. var expires = '';
  67. if (days) {
  68. var date = new Date();
  69. date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
  70. expires = '; expires=' + date.toUTCString();
  71. }
  72. document.cookie = name + '=' + (value || '') + expires + '; path=/';
  73. }
  74. function loginUser(email, password) {
  75. const postData = JSON.stringify({
  76. UserName: email,
  77. Password: password,
  78. UnibaseId: '',
  79. RememberMe: false,
  80. });
  81. const requestOptions = {
  82. method: 'POST',
  83. headers: {
  84. 'Content-Type': 'application/json',
  85. },
  86. body: postData,
  87. redirect: 'follow',
  88. };
  89. fetch(serverUrl + 'account/login', requestOptions)
  90. .then((response) => response.text())
  91. .then((result) => {
  92. const data = JSON.parse(result);
  93. if (data.status === 0) {
  94. setCookie('authentication', data.result.sessionId, 1);
  95. window.location = '../authentication';
  96. } else {
  97. passwordErrEl.innerText = data.message;
  98. }
  99. })
  100. .catch((error) => {
  101. passwordErrEl.innerText = error;
  102. });
  103. }
  104. function validateLogin() {
  105. const email = emailInputEl.value;
  106. const password = passwordInputEl.value;
  107. if (password.trim().length !== 0) {
  108. loginUser(email, password);
  109. } else {
  110. passwordInputEl.classList.add('error');
  111. passwordErrEl.innerText = 'Please enter valid password';
  112. }
  113. }
  114. function initializeEventListeners() {
  115. document
  116. .getElementById('emailNextBtn')
  117. .addEventListener('click', showPasswordBox);
  118. showPasswordChk.addEventListener('click', togglePassword);
  119. passwordInputEl.addEventListener('focusout', onPasswordFocusOut);
  120. emailInputEl.addEventListener('focusout', onEmailFocusOut);
  121. loginSubmitBtn.addEventListener('click', validateLogin);
  122. renterEmailLink.addEventListener('click', () => {
  123. emailContainerEl.style.display = 'block';
  124. passwordContainerEl.style.display = 'none';
  125. emailInputEl.focus();
  126. });
  127. }
  128. initializeEventListeners();