seven.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class="seven">
  3. <img
  4. src="https://cxzx.smcic.net/topic/tool/img/topimg.jpg"
  5. style="width: 100%"
  6. />
  7. <van-row class="luckDraw">
  8. <van-col
  9. span="8"
  10. v-for="i in 12"
  11. :key="i"
  12. :class="{ shakeSlow: show[i - 1] }"
  13. >
  14. <div v-if="show[i - 1]" class="click">点我</div>
  15. <van-image
  16. @click="draw"
  17. :width="img.width"
  18. :height="img.height"
  19. :class="{ img: true }"
  20. fit="contain"
  21. src="err"
  22. >
  23. <template v-slot:loading>
  24. <van-loading type="spinner" size="20" />
  25. </template>
  26. </van-image>
  27. </van-col>
  28. </van-row>
  29. <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
  30. <van-swipe-item>
  31. <div class="vieoPlay">
  32. <van-icon
  33. name="play-circle-o"
  34. @click="()=>playVideo('https://cxzx.smcic.net/topic/tool/media/ad.mp4')"
  35. color="#ffffff"
  36. class="play"
  37. size="40"
  38. />
  39. <img
  40. style="width: 100%"
  41. src="https://cxzx.smcic.net/topic/tool/media/ad.mp4?x-oss-process=video/snapshot,t_100,f_jpg,m_fast"
  42. />
  43. </div>
  44. </van-swipe-item>
  45. </van-swipe>
  46. </div>
  47. </template>
  48. <script setup>
  49. import { reactive, ref,defineEmits } from "vue";
  50. import { Dialog } from "vant";
  51. // import { onMounted, reactive } from "vue";
  52. // import { isIpad, isIpod, isIphone } from "../../utils/isTerminal";
  53. /**
  54. * window.$originData.orginParames.title 页面标题
  55. * window.$originData.orginParames.parameters 固定参数值
  56. * window.$originData.urlParames url参数
  57. */
  58. let w = window.$originData.orginParames.availWidth || 0;
  59. const show = ref(Array(12).fill(false));
  60. const from = reactive({
  61. name: localStorage.getItem("silkRoadName") || "",
  62. phone: localStorage.getItem("silkRoadPhone") || "",
  63. address: localStorage.getItem("silkRoadAddress") || "",
  64. });
  65. // const gift = require("@/assets/img/")
  66. const next = false;
  67. const emits = defineEmits(["showVideo"]);
  68. let t = setInterval(() => {
  69. let index = Math.ceil(Math.random() * 12) - 1;
  70. if (index < 0) index = 0;
  71. for (let i = 0; i < show.value.length; i++) {
  72. show.value[i] = i == index;
  73. }
  74. if (next) clearInterval(t);
  75. }, 5000);
  76. w = (w / 3) * 0.8;
  77. const img = reactive({
  78. width: w,
  79. height: w,
  80. });
  81. if (!from.phone) {
  82. Dialog({
  83. message: () => {
  84. const li = diglogUser();
  85. return (
  86. <div>
  87. {li[0]} {li[1]}
  88. </div>
  89. );
  90. },
  91. }).then(() => {
  92. // on close
  93. from.name && localStorage.setItem("silkRoadName", from.name);
  94. from.phone && localStorage.setItem("silkRoadPhone", from.phone);
  95. });
  96. }
  97. function draw() {
  98. let isdraw = Math.random() >= 0.95 || true;
  99. Dialog({
  100. title: "抽奖提示",
  101. message: () => {
  102. if (isdraw) return drawIsTrue();
  103. if (!isdraw) return drawIsFalse();
  104. },
  105. }).then(() => {
  106. // on close
  107. from.address && localStorage.setItem("silkRoadAddress", from.address);
  108. });
  109. }
  110. function diglogUser() {
  111. return [
  112. <van-field
  113. required
  114. v-model={from.name}
  115. label="昵称"
  116. type="text"
  117. placeholder="请输入昵称"
  118. />,
  119. <van-field
  120. required
  121. v-model={from.phone}
  122. label="联系方式"
  123. type="tel"
  124. placeholder="请输入手机号"
  125. />,
  126. <van-field
  127. required
  128. v-model={from.address}
  129. label="地址"
  130. type="text"
  131. placeholder="请输入收货地址"
  132. />,
  133. ];
  134. }
  135. function drawIsTrue() {
  136. const li = diglogUser();
  137. const isPhone = !localStorage.getItem("silkRoadPhone");
  138. const isAddress = !localStorage.getItem("silkRoadAddress");
  139. let ele = (
  140. <div>
  141. <img
  142. class="dialogImg"
  143. src="https://cxzx.smcic.net/topic/tool/img/gift.jpg"
  144. />
  145. <br />
  146. <p>
  147. 恭喜您获得
  148. <span style="color: red">长武苹果一盒</span>!
  149. </p>
  150. <br />
  151. {isPhone ? li[1] : ""}
  152. {isAddress ? li[2] : ""}
  153. </div>
  154. );
  155. return ele;
  156. }
  157. function drawIsFalse() {
  158. let ele = <div>谢谢惠顾</div>;
  159. return ele;
  160. }
  161. function playVideo(url) {
  162. emits("showVideo", url);
  163. }
  164. </script>
  165. <style lang="scss" scoped>
  166. .seven {
  167. width: 100%;
  168. height: 100%;
  169. padding: 0.5em 0;
  170. background-color: #fff;
  171. overflow: auto;
  172. position: relative;
  173. .luckDraw {
  174. $background: #00000040;
  175. background-color: #eeeeee80;
  176. border-radius: 5px;
  177. padding: 0.5em;
  178. margin: 0.5em auto;
  179. width: 96%;
  180. .img {
  181. border-radius: 5px;
  182. display: block;
  183. margin: auto;
  184. border: 3px solid #ffffff;
  185. }
  186. .click {
  187. background-color: $background;
  188. position: absolute;
  189. border-radius: 3px;
  190. text-align: center;
  191. padding: 2px 3px;
  192. color: #fff;
  193. font-size: 14px;
  194. right: -0.5em;
  195. top: -0.5em;
  196. width: 4em;
  197. z-index: 1;
  198. }
  199. .click:before {
  200. position: absolute;
  201. display: block;
  202. content: " ";
  203. height: 0px;
  204. width: 0px;
  205. border: 3px solid $background;
  206. border-top-color: rgba($color: #000000, $alpha: 0);
  207. border-left-color: rgba($color: #000000, $alpha: 0);
  208. bottom: -3px;
  209. left: 9px;
  210. transform: rotate(45deg);
  211. }
  212. }
  213. }
  214. .shakeSlow {
  215. animation: shake-slow 1s ease-in-out;
  216. }
  217. @keyframes shake-slow {
  218. 0% {
  219. transform: rotate(0) scale(1);
  220. }
  221. 20% {
  222. transform: rotate(2.5deg);
  223. }
  224. 40% {
  225. transform: rotate(-2.5deg);
  226. }
  227. 60% {
  228. transform: rotate(2.5deg) scale(1.1);
  229. }
  230. 80% {
  231. transform: rotate(-2.5deg);
  232. }
  233. 100% {
  234. transform: rotate(0);
  235. }
  236. }
  237. </style>
  238. <style lang="scss">
  239. .seven {
  240. .van-col {
  241. padding: 0.2em 0;
  242. position: relative;
  243. }
  244. .vieoPlay {
  245. position: relative;
  246. .play {
  247. position: absolute;
  248. top: 50%;
  249. left: 50%;
  250. transform: translate(-50%, -50%);
  251. }
  252. }
  253. }
  254. .dialogImg {
  255. width: 5em;
  256. display: block;
  257. margin: auto;
  258. }
  259. </style>