mobileLogin.tmpl 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <div class="router-bar-user-login-view" id="mobile-login" style="display: none">
  2. <div class="mobile-login-header">
  3. <div class="mobile-login-header-back" id="mobile-login-header-back">
  4. <svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg">
  5. <path d="m8.786 7.981 4.609-4.585a.555.555 0 1 0-.784-.789l-4.61 4.586L3.43 2.61a.556.556 0 0 0-.788.786l4.57 4.583-4.608 4.583a.555.555 0 1 0 .784.788l4.608-4.584 4.612 4.626a.553.553 0 0 0 .787.001.556.556 0 0 0 0-.786l-4.61-4.625Z"
  6. fill="#999"></path>
  7. </svg>
  8. </div>
  9. </div>
  10. <div class="mobile-login-form" id="mobile-login-form">
  11. <form>
  12. <div class="select-login-type">
  13. <!-- <div class="select-login-type-item " id="mobile-login-phone">手机登录</div>-->
  14. <div class="select-login-type-item login-type-select" id="mobile-login-email">邮箱登录</div>
  15. </div>
  16. <div class="login-view-phone"></div>
  17. <div class="login-view-email">
  18. <div class="login-view-email-input">
  19. <input name="email" placeholder="请输入邮箱"/>
  20. </div>
  21. <div class="login-view-email-input">
  22. <input name="password" placeholder="请输入密码" type="password"/>
  23. <div class="show-password" id="show-password">
  24. <img id="show-eye"
  25. src="/api/static/image/bar/login_eyeopen.png">
  26. </div>
  27. </div>
  28. <div class="login-view-email-btn" id="login-email-btn">
  29. 登录
  30. </div>
  31. <div class="other-handler">
  32. <div class="register-now">立即注册</div>
  33. <div class="forgot-password">忘记密码</div>
  34. </div>
  35. </div>
  36. </form>
  37. </div>
  38. <div class="mobile-register-form" id="mobile-register-form" style="display: none">
  39. <div class="mobile-register-form-title">注册</div>
  40. <form>
  41. <div class="login-view-register-input">
  42. <input name="register-email" placeholder="请输入邮箱"/>
  43. </div>
  44. <div class="login-view-register-input">
  45. <input name="register-password" placeholder="请输入密码" type="password"/>
  46. <div class="show-password" id="show-register-password">
  47. <img id="show-eye-register"
  48. src="/api/static/image/bar/login_eyeopen.png">
  49. </div>
  50. </div>
  51. <div class="login-view-register-input">
  52. <input name="verify-password" placeholder="请输入确认密码" type="password"/>
  53. <div class="show-password" id="show-verify-password">
  54. <img id="show-eye-verify"
  55. src="/api/static/image/bar/login_eyeopen.png">
  56. </div>
  57. </div>
  58. <div class="login-view-register-input">
  59. <input name="verify-code" placeholder="请输入验证码" type="text"/>
  60. <div class="register-code" id="send-code">发送验证码</div>
  61. </div>
  62. <div class="login-view-email-btn" id="btn-register">
  63. 注册
  64. </div>
  65. <div class="other-handler">
  66. <div class="to-login">登录</div>
  67. <div class="forgot-password">忘记密码</div>
  68. </div>
  69. </form>
  70. </div>
  71. </div>
  72. <script>
  73. function init() {
  74. let toLogin = document.getElementsByClassName("to-login");
  75. let forgotPassword = document.getElementsByClassName("forgot-password");
  76. let registerNow = document.getElementsByClassName("register-now");
  77. for (let i = 0; i < toLogin.length; i++) {
  78. let item = toLogin[i];
  79. item.addEventListener("click", function () {
  80. document.getElementById("mobile-forgotPassword-login").style.display = "none";
  81. document.getElementById("mobile-register-form").style.display = "none";
  82. document.getElementById("mobile-login-form").style.display = "";
  83. })
  84. }
  85. for (let i = 0; i < registerNow.length; i++) {
  86. let item = registerNow[i];
  87. item.addEventListener("click", function () {
  88. document.getElementById("mobile-login-form").style.display = "none";
  89. document.getElementById("mobile-register-form").style.display = "";
  90. document.getElementById("mobile-forgotPassword-login").style.display = "none";
  91. })
  92. }
  93. for (let i = 0; i < forgotPassword.length; i++) {
  94. let item = forgotPassword[i];
  95. item.addEventListener("click", function () {
  96. document.getElementById("mobile-login-form").style.display = "none";
  97. document.getElementById("mobile-register-form").style.display = "none";
  98. document.getElementById("mobile-forgotPassword-login").style.display = "";
  99. })
  100. }
  101. document.getElementById("mobile-login-header-back").addEventListener("click", function () {
  102. closeLoginPage()
  103. })
  104. }
  105. function closeLoginPage() {
  106. let ele1 = document.getElementById("mobile-login");
  107. if (ele1) ele1.style.display = "none";
  108. let ele2 = document.getElementById("mobile-login-form");
  109. if (ele2) ele2.style.display = "";
  110. let ele3 = document.getElementById("mobile-register-form");
  111. if (ele3) ele3.style.display = "none";
  112. let ele4 = document.getElementById("mobile-forgotPassword-login");
  113. if (ele4) ele4.style.display = "none";
  114. }
  115. document.getElementById("login-email-btn").addEventListener('click', () => {
  116. // 获取用户输入的邮箱和密码
  117. const email = document.querySelector("input[name='email']").value;
  118. const password = document.querySelector("input[name='password']").value;
  119. // 校验邮箱格式
  120. const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  121. if (!emailRegex.test(email)) {
  122. alert("请输入有效的邮箱地址");
  123. return;
  124. }
  125. // 校验密码长度
  126. if (password.length < 6) {
  127. alert("密码长度至少为 6 位");
  128. return;
  129. }
  130. // 进行邮箱登录的 API 请求
  131. fetch("/api/user/login", {
  132. method: 'POST',
  133. headers: {
  134. 'Content-Type': 'application/json'
  135. },
  136. body: JSON.stringify({
  137. username: email,
  138. password: password,
  139. type: "email" // 将类型修改为 "email"
  140. })
  141. }).then(response => {
  142. if (!response.ok) {
  143. throw new Error('Network response was not ok ' + response.statusText);
  144. }
  145. return response.json();
  146. }).then(data => {
  147. if (data.code === 200) {
  148. setToken(data.data.token)
  149. closeLoginPage()
  150. getMobileUserInfo()
  151. //刷新页面
  152. window.location.reload();
  153. } else {
  154. alert(data.msg)
  155. }
  156. }).catch(error => {
  157. console.error('There has been a problem with your fetch operation:', error);
  158. });
  159. //获取用户钱包
  160. });
  161. function setToken(value) {
  162. localStorage.setItem("token", value);
  163. }
  164. // 修改1: API URL 配置
  165. const API_BASE_URL = '/api'; // 假设 API 根路径为 /api
  166. // 修改2: 发送验证码请求提取为独立函数
  167. function sendVerificationCode(email) {
  168. return fetch(`${API_BASE_URL}/send-verification-code`, {
  169. method: 'POST',
  170. headers: {
  171. 'Content-Type': 'application/json',
  172. },
  173. body: JSON.stringify({email}),
  174. })
  175. .then(response => response.json())
  176. .catch(error => {
  177. console.error('Error sending verification code:', error);
  178. });
  179. }
  180. // 修改3: 注册请求提取为独立函数
  181. function registerUser(email, password, verifyCode) {
  182. return fetch(`${API_BASE_URL}/register`, {
  183. method: 'POST',
  184. headers: {
  185. 'Content-Type': 'application/json',
  186. },
  187. body: JSON.stringify({
  188. email,
  189. password,
  190. verifyCode,
  191. }),
  192. })
  193. .then(response => response.json())
  194. .catch(error => {
  195. console.error('Error registering user:', error);
  196. });
  197. }
  198. // 原密码显示功能部分
  199. let showPassword = [false, false, false];
  200. let showPasswordImg = document.getElementById("show-password");
  201. let showRegisterPasswordImg = document.getElementById("show-register-password");
  202. let showVerifyPasswordImg = document.getElementById("show-verify-password");
  203. showPasswordImg.addEventListener("click", function () {
  204. showPasswordByEye(this, 0)
  205. })
  206. showRegisterPasswordImg.addEventListener("click", function () {
  207. showPasswordByEye(this, 1)
  208. })
  209. showVerifyPasswordImg.addEventListener("click", function () {
  210. showPasswordByEye(this, 2)
  211. })
  212. function showPasswordByEye(ele, index) {
  213. showPassword[index] = !showPassword[index];
  214. let eye = ele.children[0];
  215. let inputField = ele.parentNode.getElementsByTagName("input")[0];
  216. if (showPassword[index]) {
  217. eye.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAAXNSR0IArs4c6QAAAyxJREFUWEftVUFIVFEUvfc5iGALF6JCQQlG7WqRpmRk0MJF0KJFRS2ECkEEJ/z/jdCiEVr43/tDIxUUGBgRuGkhtAmCJiioMdCoyF0GLWR0MYsWwh/nxh3el+84+sc0MPhv9/597/5zzzn3PoQ9tnCP4YEIUJgiEUMRQ2EMhMUjD/3/DEkpryLiV8dxPodVs5O4lPIIAFzO5XLO5OTkip9rzUPDw8MHhRAPEPE8ACwQUZfWenEnP93sbjweb6itrZ0FgENENAcAg1rr93x+DZBlWSeFEBkAqOMAEc0DwNndBmXbdgsAvEHEowbwChH1aq3frgPEGynldQCYCFS2wIw5jvNtN5gyMr0EgDY/HxHFtdbjGyTzP9i2PYSI6QAA1vduLpdLBbXeDsCenp5YR0fHEOfxFTD3R5RSTjBXxTnExjZMleQza5GIxjzPe5pOp/PVAGKvxGKxi0KIkSArAMBFDiqlnpTn2QCIq2lvb+/nahCxocKPWfMMIr4GgDnP834KIXyAjTU1NfsB4AQRdSPiuTJGSumIaBkRrWw2+zyTyRQ2Zci27UuIyLSuaVwNE397hjuMiJKu605v8JBlWXeEEMmy5IuImCwUCi+EEDyfXACIbRPA72Kx6CLiYwDgglk+7rTgSiqlRtd1mZTyABF9YZmIKE9E6UKhMO77xbA3FeiOCURsIaJORGz0pQCAT6XEiL3+2WKx2Om67kfeDwwM7Kuvr7+NiHEjJ/vpsFLq1zpAvDEd1ra6ujqaSqWW/YR9fX11TU1NPwKVTSmlrnBcSnkPADg5r7RS6pbxIRfnz5oP2Wz2dNAvPI8QMYGI847jMHulVdVrL6W8z11h7rCpW/2BWQmQKe4UIr4L6HKjUleVyx8KKJFIHCMilqHkHSLiMf/QT7QZIAPqGSJeM/fynue1ho2MUEC2bc8i4nGTdG5paakrOCBDALF5v/vjg4gmtNY3y1kJ7qsBxJ0xZh7Cbv8RrIYhPpNIJPqJ6BG/jUKIuOM4r3YEiC+zqZubm89USrYVQ3zXGPzCzMzMdPkQrAQslKGtqvkXsQhQGKsRQxFDYQyExSMPhTH0B2nxWTRHozuQAAAAAElFTkSuQmCC";
  218. inputField.type = "text";
  219. } else {
  220. eye.src = "/api/static/image/bar/login_eyeopen.png";
  221. inputField.type = "password";
  222. }
  223. }
  224. // 修改4: 发送验证码按钮点击事件修改为调用 sendVerificationCode
  225. document.getElementById("send-code").addEventListener("click", function () {
  226. let email = document.querySelector("input[name='register-email']").value;
  227. if (email === "") {
  228. alert("请填写邮箱");
  229. return;
  230. }
  231. sendVerificationCode(email).then(result => {
  232. if (result && result.code === 0) {
  233. alert("验证码已发送");
  234. let lastSendTime = 60;
  235. this.innerText = lastSendTime;
  236. let si = setInterval(() => {
  237. lastSendTime -= 1;
  238. document.getElementById("send-code").innerText = lastSendTime;
  239. if (lastSendTime <= 0) {
  240. document.getElementById("send-code").innerText = "发送验证码";
  241. clearInterval(si);
  242. }
  243. }, 1000);
  244. } else {
  245. alert("发送验证码失败: " + (result && result.msg ? result.msg : "未知错误"));
  246. }
  247. });
  248. });
  249. // 修改5: 注册按钮点击事件修改为调用 registerUser
  250. document.getElementById("btn-register").addEventListener("click", function (event) {
  251. event.preventDefault();
  252. let email = document.querySelector("input[name='register-email']").value;
  253. let password = document.querySelector("input[name='register-password']").value;
  254. let verifyPassword = document.querySelector("input[name='verify-password']").value;
  255. let verifyCode = document.querySelector("input[name='verify-code']").value;
  256. console.log(email, password, verifyPassword, verifyCode)
  257. if (email === "" || password === "" || verifyPassword === "" || verifyCode === "") {
  258. alert("请填写所有字段");
  259. return;
  260. }
  261. if (password !== verifyPassword) {
  262. alert("密码和确认密码不匹配");
  263. return;
  264. }
  265. registerUser(email, password, verifyCode).then(result => {
  266. if (result && result.code === 0) {
  267. alert("注册成功");
  268. // 注册成功后进行页面跳转或其他操作
  269. } else {
  270. alert("注册失败: " + (result && result.msg ? result.msg : "未知错误"));
  271. }
  272. });
  273. });
  274. init()
  275. </script>