register.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. const btnRegister = document.querySelector('.btn-register');
  2. const btnLoginPage = document.querySelector('.btn-login');
  3. const btnUserProfile = document.querySelector('.btn-userProfile');
  4. const btnLogout = document.querySelector('.btn-logout');
  5. const registerPassword = document.querySelector('#register #password');
  6. const btnLoginPage_d = document.querySelector('.login-top .btn-login');
  7. const btnUserProfile_d = document.querySelector('.login-top .btn-userProfile');
  8. const btnLogout_d= document.querySelector('.login-top .btn-logout');
  9. $('.psd_visible').hide();
  10. $('.psd_invisible').click(function(){
  11. $(this).prev().toggle();
  12. $(this).toggle();
  13. $(this).parent().children(':first').attr('type', 'text');
  14. })
  15. $('.psd_visible').click(function(){
  16. $(this).toggle();
  17. $(this).next().toggle();
  18. $(this).parent().children(':first').attr('type', 'password');
  19. })
  20. registerPassword.addEventListener('keyup', registerByEnter);
  21. btnRegister.addEventListener('click', register);
  22. function registerByEnter(e) {
  23. if (e.keyCode === 13) {
  24. e.preventDefault();
  25. console.log('login!');
  26. register();
  27. }
  28. };
  29. function validateEmail(email) {
  30. const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  31. if(re.test(String(email).toLowerCase()) === false) {
  32. $('#register [name = "email"]').addClass('error');
  33. if( !$('.error-text').length ) {
  34. let msg = '請輸入正確E-mail';
  35. if (lang == 'en') {
  36. msg = 'Please enter valid Email format.';
  37. }
  38. $('input.error').after('<p class="error-text" set-lan="html:errorEmail">' + msg + '</p>');
  39. }
  40. } else {
  41. $('#register [name = "email"]').removeClass('error');
  42. $('.error-text').remove();
  43. }
  44. return re.test(String(email).toLowerCase());
  45. }
  46. function validatePassword(psd) {
  47. if(psd.length >=4) {
  48. $('#register [name = "password"]').removeClass('error');
  49. $('.error-text').remove();
  50. return true;
  51. } else {
  52. $('#register [name = "password"]').addClass('error');
  53. if( !$('.error-text').length ) {
  54. $('input.error').after('<p class="error-text" set-lan="html:errorPsd">密碼至少為4個字元</p>');
  55. }
  56. return false;
  57. }
  58. }
  59. function validateConfirmPsd(psd1, psd2) {
  60. if(psd1 == psd2) {
  61. $('#register #confirm_password').removeClass('error');
  62. $('.error-text').remove();
  63. return true;
  64. } else {
  65. $('#register #confirm_password').addClass('error');
  66. if( !$('.error-text').length ) {
  67. $('input.error').after('<p class="error-text" set-lan="html:errorConsistentPsd">密碼輸入需一致</p>');
  68. }
  69. return false;
  70. }
  71. }
  72. function validateConfirmName() {
  73. let username = $('#register [name = "username"]').val();
  74. var regex = new RegExp("^[a-zA-Z0-9 ]+$");
  75. if(regex.test(username)) {
  76. $('#register [name = "username"]').removeClass('error');
  77. $('.error-text').remove();
  78. return true;
  79. } else {
  80. $('#register [name = "username"]').addClass('error');
  81. if( !$('.error-text').length ) {
  82. $('input.error').after('<p class="error-text" set-lan="html:errorUsername">請輸入英文字元或數字</p>');
  83. }
  84. return false;
  85. }
  86. }
  87. function register() {
  88. let userName = $('#register [name = "username"]').val();
  89. let email = $('#register [name = "email"]').val();
  90. let password = $('#register [name = "password"]').val();
  91. let confirm_psd = $('#register #confirm_password').val();
  92. var regex = new RegExp("^[a-zA-Z0-9 ]+$");
  93. // 註冊資料檢查
  94. if (userName == '' || password == '') {
  95. let title = "註冊失敗";
  96. let text = "請先輸入您的帳號/密碼";
  97. if (lang == 'en') {
  98. title = "Login Failed!";
  99. text = "Please enter your username and password";
  100. }
  101. Swal.fire({
  102. title: title,
  103. icon: 'error',
  104. text: text,
  105. confirmButtonColor: '#3085d6',
  106. });
  107. return;
  108. }
  109. if (!regex.test(userName)) {
  110. let title = "字元有誤";
  111. let text = "名稱僅得包含英文及數字";
  112. if (lang == 'en') {
  113. title = "Invalid username!";
  114. text = "Please enter valid username";
  115. }
  116. Swal.fire({
  117. title: title,
  118. icon: 'error',
  119. text: text,
  120. confirmButtonColor: '#3085d6',
  121. });
  122. return;
  123. }
  124. if(userName && validateConfirmName() && validateEmail(email) && validatePassword(password) && validateConfirmPsd(password, confirm_psd)) {
  125. JsLoadingOverlay.show({
  126. "overlayBackgroundColor": "#666666",
  127. "overlayOpacity": 0.6,
  128. "spinnerIcon": "ball-circus",
  129. "spinnerColor": "#000",
  130. "spinnerSize": "3x",
  131. "overlayIDName": "overlay",
  132. "spinnerIDName": "spinner",
  133. "offsetX": 0,
  134. "offsetY": 0,
  135. "containerID": null,
  136. "lockScroll": false,
  137. "overlayZIndex": 10,
  138. "spinnerZIndex": 11
  139. });
  140. let userObj = {
  141. username: userName,
  142. email,
  143. password
  144. }
  145. console.log(userObj);
  146. const headers = {
  147. "accept": "application/json",
  148. "Content-Type": "application/json"
  149. }
  150. axios({
  151. method: 'post',
  152. url: 'https://www.choozmo.com:8887/register',
  153. headers: headers,
  154. data: userObj
  155. }).then(res => {
  156. console.log(res.data.msg);
  157. JsLoadingOverlay.hide();
  158. let text;
  159. if (lang == 'en') {
  160. text = res.data.msg.eng;
  161. } else {
  162. text = res.data.msg.zh;
  163. }
  164. Swal.fire({
  165. icon: 'info',
  166. text: text,
  167. confirmButtonColor: '#3085d6',
  168. });
  169. }).catch(err => {
  170. console.log(err);
  171. var title = "錯誤處理中,請稍後再試";
  172. if (lang == 'en') { // 英文版訊息
  173. title = "Oops! Errors occurred. Please try it later!"
  174. }
  175. Swal.fire({
  176. title: title,
  177. icon: 'error',
  178. confirmButtonColor: '#3085d6',
  179. });
  180. window.setTimeout(() => {
  181. location.reload();
  182. }, 4000);
  183. })
  184. }
  185. }
  186. function loginControl() {
  187. btnLoginPage.style.display = 'block';
  188. btnLogout.style.display = 'none';
  189. btnUserProfile.style.display = 'none';
  190. btnLoginPage_d.style.display = 'block';
  191. btnLogout_d.style.display = 'none';
  192. btnUserProfile_d.style.display = 'none';
  193. }
  194. loginControl();