handler.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. // const routerArray = [{
  2. // path: '/', name: '首页',
  3. // }]
  4. // const handler = {
  5. // JumpRouter, getToken, setToken, GetUserInfo
  6. // }
  7. var loginState = false;
  8. var RouterLinkName = "routerLink";
  9. document.addEventListener('DOMContentLoaded', function () {
  10. if (window.location.pathname === "/" || window.location.pathname === "") {
  11. console.log("6666668")
  12. sessionStorage.setItem(RouterLinkName, JSON.stringify([]))
  13. }
  14. RouterBarCreate()
  15. })
  16. //=======================链接跳转
  17. function JumpRouter(url, name) {
  18. //获取当前路径和请求参数
  19. let path = window.location.href;
  20. if (path.indexOf(window.location.host) !== -1) {
  21. path = path.substring(path.indexOf(window.location.host) + window.location.host.length)
  22. }
  23. let title = name ? name : document.title;
  24. if (path === '' || path === "/") {
  25. sessionStorage.setItem(RouterLinkName, JSON.stringify([]))
  26. }
  27. //不存在 存储创建一个
  28. if (!sessionStorage.getItem(RouterLinkName)) {
  29. sessionStorage.setItem(RouterLinkName, JSON.stringify([path]))
  30. } else {
  31. //存在则添加
  32. let arr = JSON.parse(sessionStorage.getItem(RouterLinkName));
  33. arr[arr.length] = {title, url: path}
  34. sessionStorage.setItem(RouterLinkName, JSON.stringify(arr))
  35. }
  36. window.location.href = url;
  37. }
  38. function RouterBarJump(name, url) {
  39. let routerLink = JSON.parse(sessionStorage.getItem(RouterLinkName))
  40. let newArray = []
  41. if (!routerLink) {
  42. return
  43. }
  44. for (let i = 0; i < routerLink.length; i++) {
  45. if (routerLink[i].title === name) {
  46. break
  47. } else {
  48. newArray[i] = (routerLink[i])
  49. }
  50. }
  51. sessionStorage.setItem(RouterLinkName, JSON.stringify(newArray))
  52. window.location.href = url;
  53. }
  54. function RouterBarCreate() {
  55. let routerLink = JSON.parse(sessionStorage.getItem(RouterLinkName))
  56. let ulEle = document.getElementById("router-bar-list");
  57. if (!ulEle) {
  58. return
  59. }
  60. ulEle.children = []
  61. let rightArrowEle = document.createElement("li");
  62. rightArrowEle.innerText = ">"
  63. rightArrowEle.className = "router-bar-arrow"
  64. let ele = document.createElement("li");
  65. ele.innerText = '首页'
  66. ele.className = "router-bar-item"
  67. ele.addEventListener("click", function () {
  68. RouterBarJump('首页', "/")
  69. })
  70. ulEle.appendChild(ele)
  71. ulEle.appendChild(rightArrowEle)
  72. if (routerLink) {
  73. for (let i = 0; i < routerLink.length; i++) {
  74. if (routerLink[i].url==="/"){
  75. continue
  76. }
  77. let liEle = document.createElement("li");
  78. liEle.innerText = routerLink[i].title
  79. liEle.className = "router-bar-item"
  80. liEle.addEventListener("click", function () {
  81. RouterBarJump(routerLink[i].title, routerLink[i].url)
  82. })
  83. ulEle.appendChild(liEle)
  84. let rae = document.createElement("li");
  85. rae.innerText = ">"
  86. rae.className = "router-bar-arrow"
  87. ulEle.appendChild(rae)
  88. }
  89. }
  90. let nowEle = document.createElement("li")
  91. nowEle.innerText = document.title
  92. nowEle.className = "router-bar-text"
  93. ulEle.appendChild(nowEle)
  94. }
  95. function jumpClass(className) {
  96. // document.querySelector('.to-class' + className).scrollIntoView()
  97. // 获取元素的网页高度
  98. var height = document.querySelector('.to-class' + className).offsetTop;
  99. //这个80是导航栏的高度
  100. window.scrollTo(0, height - 80);
  101. }
  102. function getToken() {
  103. return localStorage.getItem("token");
  104. }
  105. function setToken(value) {
  106. localStorage.setItem("token", value);
  107. console.log("token set", getToken())
  108. }
  109. function GetUserInfo() {
  110. console.log("获取用户信息")
  111. fetch('/api/user/info', {
  112. method: 'GET', headers: {
  113. // 'Content-Type': 'application/json',
  114. "auth-sign": getToken()
  115. }, // body: JSON.stringify(data)
  116. })
  117. .then(response => response.json())
  118. .then(data => {
  119. if (data.code !== 200) {
  120. loginState = false;
  121. //头像修改
  122. document.getElementById("not-login").style.display = "black";
  123. document.getElementById("logged-in").style.display = "none";
  124. //用户名称
  125. document.getElementById("login-name").innerText = "登录";
  126. } else {
  127. //导航栏头像处理
  128. if (data.data.avatar) {
  129. document.getElementById("not-login").style.display = "none";
  130. let logged = document.getElementById("logged-in");
  131. logged.style.display = "block"
  132. logged.src = data.data.avatar;
  133. } else {
  134. document.getElementById("not-login").style.display = "black";
  135. document.getElementById("logged-in").style.display = "none";
  136. }
  137. // 导航栏名字问题
  138. document.getElementById("login-name").innerText = data.data.name;
  139. loginState = true;
  140. }
  141. })
  142. .catch((error) => {
  143. loginState = false;
  144. //头像修改
  145. document.getElementById("not-login").style.display = "black";
  146. document.getElementById("logged-in").style.display = "none";
  147. //用户名称
  148. document.getElementById("login-name").innerText = "登录";
  149. console.error('Error:', error);
  150. // alert("获取登录信息失败");
  151. });
  152. }
  153. //点击导航栏头像
  154. function clickAvatar() {
  155. if (loginState) {
  156. //已经登录的,进入管理页面
  157. JumpRouter("/manage/info");
  158. } else {
  159. let loginBody = document.getElementById("login-body");
  160. let loginCenter = document.getElementById("login-center");
  161. let registerCenter = document.getElementById("register-center");
  162. loginBody.style.display = "";
  163. loginCenter.style.display = "";
  164. registerCenter.style.display = "none"
  165. }
  166. }
  167. //关闭登录框
  168. function closeLoginBody() {
  169. console.log(6666666666)
  170. let loginBody = document.getElementById("login-body");
  171. let loginCenter = document.getElementById("login-center");
  172. let registerCenter = document.getElementById("register-center");
  173. loginBody.style.display = "none";
  174. loginCenter.style.display = "none";
  175. registerCenter.style.display = "none"
  176. }
  177. //打开登录框
  178. function openLoginBody(type) {
  179. if (type === "register") {
  180. let loginBody = document.getElementById("login-body");
  181. let loginCenter = document.getElementById("login-center");
  182. let registerCenter = document.getElementById("register-center");
  183. loginBody.style.display = "";
  184. loginCenter.style.display = "none";
  185. registerCenter.style.display = ""
  186. } else if (type === "login") {
  187. let loginBody = document.getElementById("login-body");
  188. let loginCenter = document.getElementById("login-center");
  189. let registerCenter = document.getElementById("register-center");
  190. loginBody.style.display = "";
  191. loginCenter.style.display = "";
  192. registerCenter.style.display = "none"
  193. }
  194. }
  195. //登录
  196. document.addEventListener('DOMContentLoaded', () => {
  197. const selectType = 'email';
  198. const phoneTab = document.getElementById('phone-tab');
  199. const emailTab = document.getElementById('email-tab');
  200. const wxTab = document.getElementById('wx-tab');
  201. const phoneSection = document.getElementById('phone-section');
  202. const emailSection = document.getElementById('email-section');
  203. const wxSection = document.getElementById('wx-section');
  204. const selectBar = document.getElementById('select-bar');
  205. const sendCodeBtn = document.getElementById('send-code-btn');
  206. const phoneLoginBtn = document.getElementById('phone-login-btn');
  207. const emailLoginBtn = document.getElementById('email-login-btn');
  208. const refreshWxCode = document.getElementById('refresh-wx-code');
  209. function setType(type) {
  210. phoneSection.style.display = 'none';
  211. emailSection.style.display = 'none';
  212. wxSection.style.display = 'none';
  213. if (type === 'phone') {
  214. phoneSection.style.display = 'block';
  215. selectBar.style.marginLeft = '-200px';
  216. } else if (type === 'email') {
  217. emailSection.style.display = 'block';
  218. selectBar.style.marginLeft = '0';
  219. } else if (type === 'wx') {
  220. wxSection.style.display = 'block';
  221. selectBar.style.marginLeft = '200px';
  222. }
  223. }
  224. phoneTab.addEventListener('click', () => setType('phone'));
  225. emailTab.addEventListener('click', () => setType('email'));
  226. wxTab.addEventListener('click', () => setType('wx'));
  227. function showTip(msg) {
  228. alert(msg);
  229. }
  230. function validateEmail(email) {
  231. const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  232. return re.test(String(email).toLowerCase());
  233. }
  234. function validatePhone(phone) {
  235. const re = /^1[3-9]\d{9}$/;
  236. return re.test(String(phone));
  237. }
  238. function validateCode(code) {
  239. const re = /^\d{6}$/;
  240. return re.test(String(code));
  241. }
  242. sendCodeBtn.addEventListener('click', () => {
  243. const phone = document.getElementById('phone-input').value;
  244. if (!validatePhone(phone)) {
  245. showTip('手机号格式错误');
  246. return;
  247. }
  248. fetch("/api/user/loginCode", {
  249. method: 'POST',
  250. headers: {
  251. 'Content-Type': 'application/json'
  252. },
  253. body: JSON.stringify({
  254. phone: phone
  255. })
  256. })
  257. .then(response => {
  258. if (!response.ok) {
  259. throw new Error('Network response was not ok ' + response.statusText);
  260. }
  261. return response.json();
  262. })
  263. .then(data => {
  264. if (data.success) {
  265. console.log('Verification code sent successfully:', data);
  266. } else {
  267. console.error('Failed to send verification code:', data.message);
  268. }
  269. })
  270. .catch(error => {
  271. console.error('There has been a problem with your fetch operation:', error);
  272. });
  273. alert('验证码已发送');
  274. });
  275. phoneLoginBtn.addEventListener('click', () => {
  276. const phone = document.getElementById('phone-input').value;
  277. const code = document.getElementById('phone-code-input').value;
  278. if (!validatePhone(phone)) {
  279. showTip('手机号格式错误');
  280. return;
  281. }
  282. if (!validateCode(code)) {
  283. showTip('验证码错误');
  284. return;
  285. }
  286. fetch("/api/user/login", {
  287. method: 'POST',
  288. headers: {
  289. 'Content-Type': 'application/json'
  290. },
  291. body: JSON.stringify({
  292. username: phone,
  293. password: code,
  294. type: "phone"
  295. })
  296. }).then(response => {
  297. if (!response.ok) {
  298. throw new Error('Network response was not ok ' + response.statusText);
  299. }
  300. return response.json();
  301. }).then(data => {
  302. if (data.code === 200) {
  303. setToken(data.data.token)
  304. //刷新页面
  305. window.location.reload();
  306. } else {
  307. alert(data.msg)
  308. }
  309. }).catch(error => {
  310. console.error('There has been a problem with your fetch operation:', error);
  311. });
  312. alert('手机号登录成功');
  313. });
  314. emailLoginBtn.addEventListener('click', () => {
  315. const email = document.getElementById('email-input').value;
  316. const password = document.getElementById('email-password-input').value;
  317. if (!validateEmail(email)) {
  318. showTip('邮箱格式错误');
  319. return;
  320. }
  321. if (password.length < 6) {
  322. showTip('密码过短');
  323. return;
  324. }
  325. fetch("/api/user/login", {
  326. method: 'POST',
  327. headers: {
  328. 'Content-Type': 'application/json'
  329. },
  330. body: JSON.stringify({
  331. username: email,
  332. password: password,
  333. type: "email"
  334. })
  335. }).then(response => {
  336. if (!response.ok) {
  337. throw new Error('Network response was not ok ' + response.statusText);
  338. }
  339. return response.json();
  340. }).then(data => {
  341. if (data.code === 200) {
  342. setToken(data.data.token)
  343. //刷新页面
  344. window.location.reload();
  345. } else {
  346. alert(data.msg)
  347. }
  348. }).catch(error => {
  349. console.error('There has been a problem with your fetch operation:', error);
  350. });
  351. });
  352. refreshWxCode.addEventListener('click', () => {
  353. console.log('二维码已刷新');
  354. });
  355. setType(selectType);
  356. });
  357. //注册
  358. document.addEventListener('DOMContentLoaded', () => {
  359. const username = document.getElementById('username');
  360. const password = document.getElementById('password');
  361. const requirePassword = document.getElementById('requirePassword');
  362. const phone = document.getElementById('phone');
  363. const code = document.getElementById('code');
  364. const sendCodeBtn = document.getElementById('send-register-code');
  365. const registerBtn = document.getElementById('register-btn');
  366. let awaitCode = 0;
  367. function showTip(msg) {
  368. alert(msg);
  369. }
  370. function validateEmail(email) {
  371. const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  372. return re.test(String(email).toLowerCase());
  373. }
  374. function validatePhone(phone) {
  375. const re = /^1[3-9]\d{9}$/;
  376. return re.test(String(phone));
  377. }
  378. function validatePassword(password) {
  379. const re = /^[a-zA-Z0-9,./<>?;'\\:"|\[\]{}~!@#$%^&*()_+=-]{6,32}$/;
  380. return re.test(String(password));
  381. }
  382. function validateCode(code) {
  383. const re = /^[0-9]{6}$/;
  384. return re.test(String(code));
  385. }
  386. sendCodeBtn.addEventListener('click', () => {
  387. if (awaitCode === 0) {
  388. const phoneVal = phone.value;
  389. if (!validatePhone(phoneVal)) {
  390. showTip('手机号格式错误');
  391. return;
  392. }
  393. alert('验证码已发送');
  394. awaitCode = 5;
  395. const interval = setInterval(() => {
  396. awaitCode--;
  397. sendCodeBtn.textContent = awaitCode > 0 ? `${awaitCode}s` : '发送验证码';
  398. if (awaitCode === 0) {
  399. clearInterval(interval);
  400. }
  401. }, 1000);
  402. }
  403. });
  404. registerBtn.addEventListener('click', () => {
  405. const usernameVal = username.value;
  406. const passwordVal = password.value;
  407. const requirePasswordVal = requirePassword.value;
  408. const phoneVal = phone.value;
  409. const codeVal = code.value;
  410. if (!validateEmail(usernameVal)) {
  411. showTip('邮箱格式错误');
  412. return;
  413. }
  414. if (!validatePassword(passwordVal)) {
  415. showTip('密码格式错误');
  416. return;
  417. }
  418. if (passwordVal !== requirePasswordVal) {
  419. showTip('两次密码不一致');
  420. return;
  421. }
  422. if (!validatePhone(phoneVal)) {
  423. showTip('手机号格式错误');
  424. return;
  425. }
  426. if (!validateCode(codeVal)) {
  427. showTip('验证码错误');
  428. return;
  429. }
  430. alert('注册成功');
  431. // Here you can make an API request to register the user
  432. });
  433. });