handler.js 16 KB

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