国内市场双十一活动仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.4 KiB

3 months ago
3 months ago
3 months ago
3 months ago
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <link rel="icon" href="/favicon.ico" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  7. <title>新时代、新龙头、新节奏</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. body {
  15. font-family: "Microsoft Yahei", sans-serif;
  16. }
  17. /* 落地页 */
  18. .landing-page {
  19. width: 375px;
  20. height: auto;
  21. margin: 0 auto;
  22. overflow-y: auto;
  23. overflow-x: hidden;
  24. }
  25. .landing-page img {
  26. width: 100%;
  27. height: auto;
  28. display: block;
  29. }
  30. /* 弹窗 */
  31. .popup {
  32. display: none;
  33. position: fixed;
  34. top: 0;
  35. left: 0;
  36. width: 100%;
  37. height: 100%;
  38. background: rgba(0, 0, 0, 0.7);
  39. justify-content: center;
  40. align-items: center;
  41. z-index: 999;
  42. }
  43. .popup.show {
  44. display: flex;
  45. }
  46. .popup-content {
  47. width: 320px;
  48. text-align: center;
  49. }
  50. .popup-content img {
  51. width: 100%;
  52. height: auto;
  53. margin-bottom: 15px;
  54. }
  55. .popup-content img#closeBtn {
  56. width: 60%;
  57. margin-bottom: 5px;
  58. }
  59. </style>
  60. </head>
  61. <body>
  62. <!-- 落地页 -->
  63. <div class="landing-page">
  64. <img id="landingImage" />
  65. </div>
  66. <!-- 弹窗样式 -->
  67. <div class="popup" id="popup">
  68. <div class="popup-content">
  69. <img id="popupImage" />
  70. <img src="./assent/开心收下.png" id="closeBtn"/>
  71. </div>
  72. </div>
  73. <script type="module">
  74. // 导入API函数
  75. import { getImageApi, acceptCardApi } from './src/api/member.js';
  76. // 获取弹窗元素
  77. const landingImage = document.getElementById('landingImage');
  78. const popupImage = document.getElementById('popupImage');
  79. const popup = document.getElementById("popup");
  80. const closeBtn = document.getElementById("closeBtn");
  81. // 防抖多次点击
  82. let isClickable = true;
  83. // 获取北京时间(东八区)的函数
  84. function getBeijingTime() {
  85. const date = new Date();
  86. const beijingTime = new Date(date.getTime() + 8 * 60 * 60 * 1000);
  87. return beijingTime.toISOString();
  88. }
  89. // 记录页面打开时间
  90. const pageOpenTime = getBeijingTime();
  91. // 获取图片方法
  92. async function getImage() {
  93. try {
  94. const res = await getImageApi();
  95. if (res.code == 200 && res.data) {
  96. return {
  97. landingImageUrl: res.data.landingImage,
  98. popupImageUrl: res.data.popupImage
  99. };
  100. } else {
  101. console.warn('网络错误,请稍后重试');
  102. }
  103. } catch (error) {
  104. console.error('网络错误,请稍后重试');
  105. }
  106. }
  107. // 加载
  108. window.onload = async function () {
  109. try {
  110. const imagePaths = await getImage();
  111. // landingImage.src = imagePaths.landingImageUrl;
  112. // popupImage.src = imagePaths.popupImageUrl;
  113. landingImage.src = './assent/8折页面.png';
  114. popupImage.src = './assent/弹窗样式2.png';
  115. // 弹窗展示
  116. setTimeout(() => {
  117. popup.classList.add("show");
  118. }, 500);
  119. } catch (err) {
  120. console.error('页面初始化失败');
  121. }
  122. };
  123. // 点击"开心收下",关闭弹窗
  124. closeBtn.addEventListener('click', closePopupAndSendData);
  125. // 点击弹窗空白处,关闭弹窗
  126. popup.addEventListener('click', function(e) {
  127. if (e.target === popup) {
  128. closePopupAndSendData();
  129. }
  130. });
  131. // 关闭弹窗并发送数据
  132. async function closePopupAndSendData() {
  133. if (!isClickable) {
  134. return;
  135. }
  136. // 关闭弹窗
  137. popup.classList.remove("show");
  138. // 发送页面打开时间到后端
  139. try {
  140. await acceptCardApi({
  141. openTime: pageOpenTime,
  142. });
  143. console.log('发送成功', pageOpenTime);
  144. } catch (error) {
  145. console.error('发送失败', pageOpenTime);
  146. }
  147. // 设置点击冷却
  148. isClickable = false;
  149. setTimeout(() => {
  150. isClickable = true;
  151. }, 10000);
  152. }
  153. </script>
  154. </body>
  155. </html>