|
@@ -1,232 +1,279 @@
|
|
|
<template>
|
|
|
- <div class="eight">
|
|
|
- <van-row class="luckDraw">
|
|
|
- <van-col span="8" v-for="i in 12" :key="i + 'll'" :class="{ shakeSlow: show[i - 1] }">
|
|
|
- <div v-if="show[i - 1]" class="click">点我</div>
|
|
|
- <van-image @click="draw" :width="img.width" :height="img.height" :class="{ img: true }" fit="contain"
|
|
|
- :src="'https://cxzx.smcic.net/topic/tool/img/silugift/' + i + '.png'">
|
|
|
- <template v-slot:loading>
|
|
|
- <van-loading type="spinner" size="20" />
|
|
|
- </template>
|
|
|
- </van-image>
|
|
|
- </van-col>
|
|
|
- </van-row>
|
|
|
- <van-notice-bar color="#000000" background="#ffffff" wrapable :scrollable="false"
|
|
|
- text="点击下方小视频,给手气充能,增加一次抽奖机会!" />
|
|
|
- <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
|
|
|
- <van-swipe-item>
|
|
|
- <div class="vieoPlay">
|
|
|
- <van-icon name="play-circle-o" @click="
|
|
|
- () => playVideo('https://cxzx.smcic.net/topic/tool/media/ad.mp4')
|
|
|
- " color="#ffffff" class="play" size="40" />
|
|
|
- <img style="width: 100%"
|
|
|
- src="https://cxzx.smcic.net/topic/tool/media/ad.mp4?x-oss-process=video/snapshot,t_100,f_jpg,m_fast" />
|
|
|
- </div>
|
|
|
- </van-swipe-item>
|
|
|
- </van-swipe>
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- </div>
|
|
|
+ <div class="eight">
|
|
|
+ <div class="headText">
|
|
|
+ <p>2023丝路嘉年华暨丝路春晚</p>
|
|
|
+ <p>携手长安花小榨菜籽油、长武苹果</p>
|
|
|
+ <p>向你花式拜年,奖品丰厚,福利多多</p>
|
|
|
+ <p>更多周边奖品欢迎你来拿!快来新年冲好运鸭!</p>
|
|
|
+ </div>
|
|
|
+ <van-row class="luckDraw">
|
|
|
+ <van-col
|
|
|
+ span="8"
|
|
|
+ v-for="i in 12"
|
|
|
+ :key="i + 'll'"
|
|
|
+ :class="{ shakeSlow: show[i - 1] }"
|
|
|
+ >
|
|
|
+ <div v-if="show[i - 1]" class="click">点我</div>
|
|
|
+ <van-image
|
|
|
+ @click="draw"
|
|
|
+ :width="img.width"
|
|
|
+ :height="img.height"
|
|
|
+ :class="{ img: true }"
|
|
|
+ fit="contain"
|
|
|
+ :src="'https://cxzx.smcic.net/topic/tool/img/silugift/' + i + '.png'"
|
|
|
+ >
|
|
|
+ <template v-slot:loading>
|
|
|
+ <van-loading type="spinner" size="20" />
|
|
|
+ </template>
|
|
|
+ </van-image>
|
|
|
+ </van-col>
|
|
|
+ </van-row>
|
|
|
+ <van-notice-bar
|
|
|
+ color="#000000"
|
|
|
+ background="#ffffff"
|
|
|
+ wrapable
|
|
|
+ :scrollable="false"
|
|
|
+ text="点击下方小视频,给手气充能,增加一次抽奖机会!"
|
|
|
+ />
|
|
|
+ <van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
|
|
|
+ <van-swipe-item>
|
|
|
+ <div class="vieoPlay">
|
|
|
+ <van-icon
|
|
|
+ name="play-circle-o"
|
|
|
+ @click="() => playVideo()"
|
|
|
+ color="#ffffff"
|
|
|
+ class="play"
|
|
|
+ size="40"
|
|
|
+ />
|
|
|
+ <img
|
|
|
+ style="width: 100%"
|
|
|
+ src="https://cxzx.smcic.net/topic/tool/img/videoImg.jpg"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </van-swipe-item>
|
|
|
+ </van-swipe>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
- import {
|
|
|
- reactive,
|
|
|
- ref,
|
|
|
- defineEmits,
|
|
|
- defineExpose
|
|
|
- } from "vue";
|
|
|
- import {
|
|
|
- showDialog,
|
|
|
- showToast,
|
|
|
- showConfirmDialog
|
|
|
- } from "vant";
|
|
|
- import {
|
|
|
- getDrawOri,
|
|
|
- getUpdateOri
|
|
|
- } from "@/api/SilkRoadSpringGala.js";
|
|
|
- // import { onMounted, reactive } from "vue";
|
|
|
- // import { isIpad, isIpod, isIphone } from "../../utils/isTerminal";
|
|
|
- /**
|
|
|
- * window.$originData.orginParames.title 页面标题
|
|
|
- * window.$originData.orginParames.parameters 固定参数值
|
|
|
- * window.$originData.urlParames url参数
|
|
|
- */
|
|
|
- let w = window.$originData.orginParames.availWidth || 0;
|
|
|
- const show = ref(Array(12).fill(false));
|
|
|
- const next = false;
|
|
|
- const emits = defineEmits(["showVideo", "showTitleFunc"]);
|
|
|
- let t = setInterval(() => {
|
|
|
- let index = Math.ceil(Math.random() * 12) - 1;
|
|
|
- if (index < 0) index = 0;
|
|
|
- for (let i = 0; i < show.value.length; i++) {
|
|
|
- show.value[i] = i == index;
|
|
|
- }
|
|
|
- if (next) clearInterval(t);
|
|
|
- }, 5000);
|
|
|
-
|
|
|
- w = (w / 3) * 0.8;
|
|
|
- const img = reactive({
|
|
|
- width: w,
|
|
|
- height: w,
|
|
|
- });
|
|
|
-
|
|
|
- let T = undefined;
|
|
|
- function draw() {
|
|
|
- const phone = localStorage.getItem("silkRoadPhone");
|
|
|
- if (!phone) return emits("showTitleFunc");
|
|
|
- if(T) clearTimeout(T);
|
|
|
- T = setTimeout(()=>{
|
|
|
- getDrawOri({
|
|
|
- phone
|
|
|
- }).then(r => {
|
|
|
- let isdraw = r.prizeId !== 1; // 接入接口后直接由接口提供是否中将
|
|
|
- if (!isdraw) return showDialog({
|
|
|
- title: r.name,
|
|
|
- message: "很遗憾哟,新年礼物擦肩而过啦!点击下方刷个小视频吧,给手气充能,获取额外抽奖机会!"
|
|
|
- })
|
|
|
- const address = ref(localStorage.getItem("silkRoadAddress") || "");
|
|
|
- const field = <van-field required v-model={address.value} label="地址" placeholder="请输入地址" />;
|
|
|
- showConfirmDialog({
|
|
|
- title: "获得" + r.name,
|
|
|
- message: ()=>{
|
|
|
- return <div>
|
|
|
- <img src={r.url} style="width: 5em" />
|
|
|
- { !address.value ? field : '' }
|
|
|
- </div>
|
|
|
- },
|
|
|
- showCancelButton: false,
|
|
|
- beforeClose: type =>{
|
|
|
- if(type !== 'confirm') return true;
|
|
|
- getUpdateOri({
|
|
|
- "phone": localStorage.getItem("silkRoadPhone"),
|
|
|
- "addr": address.value,
|
|
|
- }).then(() => {
|
|
|
- localStorage.setItem("silkRoadAddress", address.value);
|
|
|
- showToast("奖品已打包,静等您收货哦!");
|
|
|
- });
|
|
|
- return true
|
|
|
- },
|
|
|
- })
|
|
|
-
|
|
|
- })
|
|
|
- },200);
|
|
|
- }
|
|
|
-
|
|
|
- function playVideo(url) {
|
|
|
- emits("showVideo", url);
|
|
|
- }
|
|
|
-
|
|
|
- defineExpose({
|
|
|
- draw
|
|
|
- })
|
|
|
+import { reactive, ref, defineEmits, defineExpose } from "vue";
|
|
|
+import { showDialog, showToast, showConfirmDialog } from "vant";
|
|
|
+import { getDrawOri, getUpdateOri } from "@/api/SilkRoadSpringGala.js";
|
|
|
+// import { onMounted, reactive } from "vue";
|
|
|
+// import { isIpad, isIpod, isIphone } from "../../utils/isTerminal";
|
|
|
+/**
|
|
|
+ * window.$originData.orginParames.title 页面标题
|
|
|
+ * window.$originData.orginParames.parameters 固定参数值
|
|
|
+ * window.$originData.urlParames url参数
|
|
|
+ */
|
|
|
+let w = window.$originData.orginParames.availWidth || 0;
|
|
|
+const show = ref(Array(12).fill(false));
|
|
|
+const address = ref(localStorage.getItem("silkRoadAddress") || "");
|
|
|
+const nickName = ref(localStorage.getItem("silkRoadName") || "");
|
|
|
+const next = false;
|
|
|
+const emits = defineEmits(["showVideo", "showTitleFunc"]);
|
|
|
+let t = setInterval(() => {
|
|
|
+ let index = Math.ceil(Math.random() * 12) - 1;
|
|
|
+ if (index < 0) index = 0;
|
|
|
+ for (let i = 0; i < show.value.length; i++) {
|
|
|
+ show.value[i] = i == index;
|
|
|
+ }
|
|
|
+ if (next) clearInterval(t);
|
|
|
+}, 5000);
|
|
|
+
|
|
|
+w = (w / 3) * 0.8;
|
|
|
+const img = reactive({
|
|
|
+ width: w,
|
|
|
+ height: w,
|
|
|
+});
|
|
|
+
|
|
|
+let T = undefined;
|
|
|
+function draw() {
|
|
|
+ const phone = localStorage.getItem("silkRoadPhone");
|
|
|
+ if (!phone) return emits("showTitleFunc");
|
|
|
+ if (T) clearTimeout(T);
|
|
|
+ T = setTimeout(() => {
|
|
|
+ getDrawOri({
|
|
|
+ phone,
|
|
|
+ }).then(r => {
|
|
|
+ let isdraw = r.prizeId !== 1; // 接入接口后直接由接口提供是否中将
|
|
|
+ if (!isdraw)
|
|
|
+ return showDialog({
|
|
|
+ title: r.name,
|
|
|
+ message:
|
|
|
+ "很遗憾哟,新年礼物擦肩而过啦!点击下方刷个小视频吧,给手气充能,获取额外抽奖机会!",
|
|
|
+ });
|
|
|
+ const field = (
|
|
|
+ <van-field
|
|
|
+ required
|
|
|
+ v-model={address.value}
|
|
|
+ label="地址"
|
|
|
+ placeholder="请输入地址"
|
|
|
+ />
|
|
|
+ );
|
|
|
+ const nickNameEle = (
|
|
|
+ <van-field
|
|
|
+ required
|
|
|
+ v-model={nickName.value}
|
|
|
+ label="昵称"
|
|
|
+ placeholder="请输入昵称"
|
|
|
+ />
|
|
|
+ );
|
|
|
+ showConfirmDialog({
|
|
|
+ title: "获得" + r.name,
|
|
|
+ message: () => {
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <img src={r.url} style="width: 5em" />
|
|
|
+ {!nickName.value ? nickNameEle : ""}
|
|
|
+ {!address.value ? field : ""}
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ },
|
|
|
+ showCancelButton: false,
|
|
|
+ beforeClose: type => {
|
|
|
+ if (type !== "confirm") return true;
|
|
|
+ getUpdateOri({
|
|
|
+ phone: localStorage.getItem("silkRoadPhone"),
|
|
|
+ userName: phone,
|
|
|
+ addr: address.value,
|
|
|
+ }).then(() => {
|
|
|
+ localStorage.setItem("silkRoadAddress", address.value);
|
|
|
+ localStorage.setItem("silkRoadName", nickName.value);
|
|
|
+ showToast("奖品已打包,静等您收货哦!");
|
|
|
+ });
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }, 200);
|
|
|
+}
|
|
|
+
|
|
|
+function playVideo() {
|
|
|
+ let url = "https://cxzx.smcic.net/topic/tool/media/ad.mp4";
|
|
|
+ if (Math.random() >= 0.5)
|
|
|
+ url = "https://cxzx.smcic.net/topic/tool/media/changanhua.M4V";
|
|
|
+ emits("showVideo", url);
|
|
|
+}
|
|
|
+
|
|
|
+defineExpose({
|
|
|
+ draw,
|
|
|
+});
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
- .eight {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- padding: 0.5em 0;
|
|
|
- background-color: #fff;
|
|
|
- position: relative;
|
|
|
-
|
|
|
- .luckDraw {
|
|
|
- $background: #00000040;
|
|
|
- background-color: #eeeeee80;
|
|
|
- border-radius: 5px;
|
|
|
- padding: 0.5em;
|
|
|
- margin: 0.5em auto;
|
|
|
- width: 96%;
|
|
|
-
|
|
|
- .img {
|
|
|
- border-radius: 5px;
|
|
|
- display: block;
|
|
|
- margin: auto;
|
|
|
- border: 3px solid #ffffff;
|
|
|
- }
|
|
|
-
|
|
|
- .click {
|
|
|
- background-color: $background;
|
|
|
- position: absolute;
|
|
|
- border-radius: 3px;
|
|
|
- text-align: center;
|
|
|
- padding: 2px 3px;
|
|
|
- color: #fff;
|
|
|
- font-size: 14px;
|
|
|
- right: -0.5em;
|
|
|
- top: -0.5em;
|
|
|
- width: 4em;
|
|
|
- z-index: 1;
|
|
|
- }
|
|
|
-
|
|
|
- .click:before {
|
|
|
- position: absolute;
|
|
|
- display: block;
|
|
|
- content: " ";
|
|
|
- height: 0px;
|
|
|
- width: 0px;
|
|
|
- border: 3px solid $background;
|
|
|
- border-top-color: rgba($color: #000000, $alpha: 0);
|
|
|
- border-left-color: rgba($color: #000000, $alpha: 0);
|
|
|
- bottom: -3px;
|
|
|
- left: 9px;
|
|
|
- transform: rotate(45deg);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .shakeSlow {
|
|
|
- animation: shake-slow 1s ease-in-out;
|
|
|
- }
|
|
|
-
|
|
|
- @keyframes shake-slow {
|
|
|
- 0% {
|
|
|
- transform: rotate(0) scale(1);
|
|
|
- }
|
|
|
-
|
|
|
- 20% {
|
|
|
- transform: rotate(2.5deg);
|
|
|
- }
|
|
|
-
|
|
|
- 40% {
|
|
|
- transform: rotate(-2.5deg);
|
|
|
- }
|
|
|
-
|
|
|
- 60% {
|
|
|
- transform: rotate(2.5deg) scale(1.1);
|
|
|
- }
|
|
|
-
|
|
|
- 80% {
|
|
|
- transform: rotate(-2.5deg);
|
|
|
- }
|
|
|
-
|
|
|
- 100% {
|
|
|
- transform: rotate(0);
|
|
|
- }
|
|
|
- }
|
|
|
+.eight {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ padding: 0.5em 0;
|
|
|
+ background-color: #fff;
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ .headText {
|
|
|
+ text-align: center;
|
|
|
+ font-size: 14px;
|
|
|
+ width: 100vw;
|
|
|
+ line-height: 1.5em;
|
|
|
+ }
|
|
|
+ .luckDraw {
|
|
|
+ $background: #00000040;
|
|
|
+ background-color: #eeeeee80;
|
|
|
+ border-radius: 5px;
|
|
|
+ padding: 0.5em;
|
|
|
+ margin: 0.5em auto;
|
|
|
+ width: 96%;
|
|
|
+
|
|
|
+ .img {
|
|
|
+ border-radius: 5px;
|
|
|
+ display: block;
|
|
|
+ margin: auto;
|
|
|
+ border: 3px solid #ffffff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .click {
|
|
|
+ background-color: $background;
|
|
|
+ position: absolute;
|
|
|
+ border-radius: 3px;
|
|
|
+ text-align: center;
|
|
|
+ padding: 2px 3px;
|
|
|
+ color: #fff;
|
|
|
+ font-size: 14px;
|
|
|
+ right: -0.5em;
|
|
|
+ top: -0.5em;
|
|
|
+ width: 4em;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .click:before {
|
|
|
+ position: absolute;
|
|
|
+ display: block;
|
|
|
+ content: " ";
|
|
|
+ height: 0px;
|
|
|
+ width: 0px;
|
|
|
+ border: 3px solid $background;
|
|
|
+ border-top-color: rgba($color: #000000, $alpha: 0);
|
|
|
+ border-left-color: rgba($color: #000000, $alpha: 0);
|
|
|
+ bottom: -3px;
|
|
|
+ left: 9px;
|
|
|
+ transform: rotate(45deg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.shakeSlow {
|
|
|
+ animation: shake-slow 1s ease-in-out;
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes shake-slow {
|
|
|
+ 0% {
|
|
|
+ transform: rotate(0) scale(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ 20% {
|
|
|
+ transform: rotate(2.5deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ 40% {
|
|
|
+ transform: rotate(-2.5deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ 60% {
|
|
|
+ transform: rotate(2.5deg) scale(1.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ 80% {
|
|
|
+ transform: rotate(-2.5deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ 100% {
|
|
|
+ transform: rotate(0);
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|
|
|
<style lang="scss">
|
|
|
- .eight {
|
|
|
- .van-col {
|
|
|
- padding: 0.2em 0;
|
|
|
- position: relative;
|
|
|
- }
|
|
|
-
|
|
|
- .vieoPlay {
|
|
|
- position: relative;
|
|
|
-
|
|
|
- .play {
|
|
|
- position: absolute;
|
|
|
- top: 50%;
|
|
|
- left: 50%;
|
|
|
- transform: translate(-50%, -50%);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .dialogImg {
|
|
|
- width: 5em;
|
|
|
- display: block;
|
|
|
- margin: auto;
|
|
|
- }
|
|
|
+.eight {
|
|
|
+ .van-col {
|
|
|
+ padding: 0.2em 0;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+ .van-notice-bar__wrap {
|
|
|
+ background: #ffffff;
|
|
|
+ color: #000000;
|
|
|
+ }
|
|
|
+
|
|
|
+ .vieoPlay {
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ .play {
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.dialogImg {
|
|
|
+ width: 5em;
|
|
|
+ display: block;
|
|
|
+ margin: auto;
|
|
|
+}
|
|
|
</style>
|