handler.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. const routerArray = [{
  2. path: '/', name: '首页',
  3. }]
  4. const handler = {
  5. routerArray, JumpRouter, getToken, setToken, GetUserInfo
  6. }
  7. var loginState = false;
  8. //=======================链接跳转
  9. function JumpRouter(url, query) {
  10. if (query) {
  11. window.location.href = url + "?routerlink=" + query;
  12. } else {
  13. window.location.href = url
  14. }
  15. }
  16. function getToken() {
  17. return localStorage.getItem("token");
  18. }
  19. function setToken(value) {
  20. localStorage.setItem("token", value);
  21. console.log("token set", getToken())
  22. }
  23. function GetUserInfo() {
  24. console.log("获取用户信息")
  25. fetch('/api/user/info', {
  26. method: 'GET', headers: {
  27. // 'Content-Type': 'application/json',
  28. "auth-sign": getToken()
  29. }, // body: JSON.stringify(data)
  30. })
  31. .then(response => response.json())
  32. .then(data => {
  33. if (data.code !== 200) {
  34. loginState = false;
  35. //头像修改
  36. document.getElementById("not-login").style.display = "black";
  37. document.getElementById("logged-in").style.display = "none";
  38. //用户名称
  39. document.getElementById("login-name").innerText = "登录";
  40. } else {
  41. //导航栏头像处理
  42. if (data.data.avatar) {
  43. document.getElementById("not-login").style.display = "none";
  44. let logged = document.getElementById("logged-in");
  45. logged.style.display = "block"
  46. logged.src = data.data.avatar;
  47. } else {
  48. document.getElementById("not-login").style.display = "black";
  49. document.getElementById("logged-in").style.display = "none";
  50. }
  51. // 导航栏名字问题
  52. document.getElementById("login-name").innerText = data.data.name;
  53. loginState = true;
  54. }
  55. })
  56. .catch((error) => {
  57. loginState = false;
  58. //头像修改
  59. document.getElementById("not-login").style.display = "black";
  60. document.getElementById("logged-in").style.display = "none";
  61. //用户名称
  62. document.getElementById("login-name").innerText = "登录";
  63. console.error('Error:', error);
  64. // alert("获取登录信息失败");
  65. });
  66. }
  67. function clickAvatar() {
  68. if (loginState) {
  69. //已经登录的,进入管理页面
  70. JumpRouter("/manage/info");
  71. } else {
  72. let loginBody = document.getElementById("login-body");
  73. let loginCenter = document.getElementById("login-center");
  74. let registerCenter = document.getElementById("register-center");
  75. loginBody.style.display = "";
  76. loginCenter.style.display = "";
  77. registerCenter.style.display = "none"
  78. }
  79. }
  80. function closeLoginBody() {
  81. console.log(6666666666)
  82. let loginBody = document.getElementById("login-body");
  83. let loginCenter = document.getElementById("login-center");
  84. let registerCenter = document.getElementById("register-center");
  85. loginBody.style.display = "none";
  86. loginCenter.style.display = "none";
  87. registerCenter.style.display = "none"
  88. }
  89. function openLoginBody(type) {
  90. if (type === "register") {
  91. let loginBody = document.getElementById("login-body");
  92. let loginCenter = document.getElementById("login-center");
  93. let registerCenter = document.getElementById("register-center");
  94. loginBody.style.display = "";
  95. loginCenter.style.display = "none";
  96. registerCenter.style.display = ""
  97. } else if (type === "login") {
  98. let loginBody = document.getElementById("login-body");
  99. let loginCenter = document.getElementById("login-center");
  100. let registerCenter = document.getElementById("register-center");
  101. loginBody.style.display = "";
  102. loginCenter.style.display = "";
  103. registerCenter.style.display = "none"
  104. }
  105. }
  106. //登录
  107. document.addEventListener('DOMContentLoaded', () => {
  108. const selectType = 'email';
  109. const phoneTab = document.getElementById('phone-tab');
  110. const emailTab = document.getElementById('email-tab');
  111. const wxTab = document.getElementById('wx-tab');
  112. const phoneSection = document.getElementById('phone-section');
  113. const emailSection = document.getElementById('email-section');
  114. const wxSection = document.getElementById('wx-section');
  115. const selectBar = document.getElementById('select-bar');
  116. const sendCodeBtn = document.getElementById('send-code-btn');
  117. const phoneLoginBtn = document.getElementById('phone-login-btn');
  118. const emailLoginBtn = document.getElementById('email-login-btn');
  119. const refreshWxCode = document.getElementById('refresh-wx-code');
  120. function setType(type) {
  121. phoneSection.style.display = 'none';
  122. emailSection.style.display = 'none';
  123. wxSection.style.display = 'none';
  124. if (type === 'phone') {
  125. phoneSection.style.display = 'block';
  126. selectBar.style.marginLeft = '-200px';
  127. } else if (type === 'email') {
  128. emailSection.style.display = 'block';
  129. selectBar.style.marginLeft = '0';
  130. } else if (type === 'wx') {
  131. wxSection.style.display = 'block';
  132. selectBar.style.marginLeft = '200px';
  133. }
  134. }
  135. phoneTab.addEventListener('click', () => setType('phone'));
  136. emailTab.addEventListener('click', () => setType('email'));
  137. wxTab.addEventListener('click', () => setType('wx'));
  138. function showTip(msg) {
  139. alert(msg);
  140. }
  141. function validateEmail(email) {
  142. const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  143. return re.test(String(email).toLowerCase());
  144. }
  145. function validatePhone(phone) {
  146. const re = /^1[3-9]\d{9}$/;
  147. return re.test(String(phone));
  148. }
  149. function validateCode(code) {
  150. const re = /^\d{6}$/;
  151. return re.test(String(code));
  152. }
  153. sendCodeBtn.addEventListener('click', () => {
  154. const phone = document.getElementById('phone-input').value;
  155. if (!validatePhone(phone)) {
  156. showTip('手机号格式错误');
  157. return;
  158. }
  159. fetch("/api/user/loginCode", {
  160. method: 'POST',
  161. headers: {
  162. 'Content-Type': 'application/json'
  163. },
  164. body: JSON.stringify({
  165. phone: phone
  166. })
  167. })
  168. .then(response => {
  169. if (!response.ok) {
  170. throw new Error('Network response was not ok ' + response.statusText);
  171. }
  172. return response.json();
  173. })
  174. .then(data => {
  175. if (data.success) {
  176. console.log('Verification code sent successfully:', data);
  177. } else {
  178. console.error('Failed to send verification code:', data.message);
  179. }
  180. })
  181. .catch(error => {
  182. console.error('There has been a problem with your fetch operation:', error);
  183. });
  184. alert('验证码已发送');
  185. });
  186. phoneLoginBtn.addEventListener('click', () => {
  187. const phone = document.getElementById('phone-input').value;
  188. const code = document.getElementById('phone-code-input').value;
  189. if (!validatePhone(phone)) {
  190. showTip('手机号格式错误');
  191. return;
  192. }
  193. if (!validateCode(code)) {
  194. showTip('验证码错误');
  195. return;
  196. }
  197. fetch("/api/user/login", {
  198. method: 'POST',
  199. headers: {
  200. 'Content-Type': 'application/json'
  201. },
  202. body: JSON.stringify({
  203. username: phone,
  204. password: code,
  205. type: "phone"
  206. })
  207. }).then(response => {
  208. if (!response.ok) {
  209. throw new Error('Network response was not ok ' + response.statusText);
  210. }
  211. return response.json();
  212. }).then(data => {
  213. if (data.code === 200) {
  214. setToken(data.data.token)
  215. //刷新页面
  216. window.location.reload();
  217. } else {
  218. alert(data.msg)
  219. }
  220. }).catch(error => {
  221. console.error('There has been a problem with your fetch operation:', error);
  222. });
  223. alert('手机号登录成功');
  224. });
  225. emailLoginBtn.addEventListener('click', () => {
  226. const email = document.getElementById('email-input').value;
  227. const password = document.getElementById('email-password-input').value;
  228. if (!validateEmail(email)) {
  229. showTip('邮箱格式错误');
  230. return;
  231. }
  232. if (password.length < 6) {
  233. showTip('密码过短');
  234. return;
  235. }
  236. //TODO 邮箱登录
  237. alert('邮箱登录成功');
  238. });
  239. refreshWxCode.addEventListener('click', () => {
  240. console.log('二维码已刷新');
  241. });
  242. setType(selectType);
  243. });
  244. //注册
  245. document.addEventListener('DOMContentLoaded', () => {
  246. const username = document.getElementById('username');
  247. const password = document.getElementById('password');
  248. const requirePassword = document.getElementById('requirePassword');
  249. const phone = document.getElementById('phone');
  250. const code = document.getElementById('code');
  251. const sendCodeBtn = document.getElementById('send-register-code');
  252. const registerBtn = document.getElementById('register-btn');
  253. let awaitCode = 0;
  254. function showTip(msg) {
  255. alert(msg);
  256. }
  257. function validateEmail(email) {
  258. const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  259. return re.test(String(email).toLowerCase());
  260. }
  261. function validatePhone(phone) {
  262. const re = /^1[3-9]\d{9}$/;
  263. return re.test(String(phone));
  264. }
  265. function validatePassword(password) {
  266. const re = /^[a-zA-Z0-9,./<>?;'\\:"|\[\]{}~!@#$%^&*()_+=-]{6,32}$/;
  267. return re.test(String(password));
  268. }
  269. function validateCode(code) {
  270. const re = /^[0-9]{6}$/;
  271. return re.test(String(code));
  272. }
  273. sendCodeBtn.addEventListener('click', () => {
  274. if (awaitCode === 0) {
  275. const phoneVal = phone.value;
  276. if (!validatePhone(phoneVal)) {
  277. showTip('手机号格式错误');
  278. return;
  279. }
  280. alert('验证码已发送');
  281. awaitCode = 5;
  282. const interval = setInterval(() => {
  283. awaitCode--;
  284. sendCodeBtn.textContent = awaitCode > 0 ? `${awaitCode}s` : '发送验证码';
  285. if (awaitCode === 0) {
  286. clearInterval(interval);
  287. }
  288. }, 1000);
  289. }
  290. });
  291. registerBtn.addEventListener('click', () => {
  292. const usernameVal = username.value;
  293. const passwordVal = password.value;
  294. const requirePasswordVal = requirePassword.value;
  295. const phoneVal = phone.value;
  296. const codeVal = code.value;
  297. if (!validateEmail(usernameVal)) {
  298. showTip('邮箱格式错误');
  299. return;
  300. }
  301. if (!validatePassword(passwordVal)) {
  302. showTip('密码格式错误');
  303. return;
  304. }
  305. if (passwordVal !== requirePasswordVal) {
  306. showTip('两次密码不一致');
  307. return;
  308. }
  309. if (!validatePhone(phoneVal)) {
  310. showTip('手机号格式错误');
  311. return;
  312. }
  313. if (!validateCode(codeVal)) {
  314. showTip('验证码错误');
  315. return;
  316. }
  317. alert('注册成功');
  318. // Here you can make an API request to register the user
  319. });
  320. });