handler.js 16 KB

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