完成弹窗布局
| Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 67 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/laba.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 498 B | 
| Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/luckybag_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 95 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/notice_box.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/cake.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 51 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/cls_btn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/draw_got_btn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 24 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/eqcode.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/got_btn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 9.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/luckybag.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 202 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/my_prize.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/prize_box.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 119 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/prize_box_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/prize_box_middle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 60 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/prize_box_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 35 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/rule_pop.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 352 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/service_box.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 178 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/pop/view_btn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 10 KiB | 
| @ -9,22 +9,25 @@ | ||||
|             <div class="luckybag_right"></div> | ||||
|             <div class="icon_left_1"></div> | ||||
|             <div class="lucky_bag"></div> | ||||
|             <div class="lucky_bag_2"> | ||||
|                 <div class="prize_num">{{ prizeResult }}<span>元</span></div> | ||||
|             </div> | ||||
|             <div class="notice"> | ||||
|                 <span class="icon"><img src="../assets/img/laba.png" alt="" srcset=""></span> | ||||
|                 <span class="num">活动已有{{ participantNum }}人参与</span> | ||||
|             </div> | ||||
|             <div class="cloud_left_2"></div> | ||||
|             <div class="icon_left_2"></div> | ||||
|             <div class="cloud_right_2"></div> | ||||
|             <!-- 大转盘 --> | ||||
|             <div class="zhuanpan"> | ||||
|                 <div class="liwu"> | ||||
|                 <!-- <div class="liwu"> | ||||
|                     <div>1.99</div> | ||||
|                     <div>2.99</div> | ||||
|                     <div>3.99</div> | ||||
|                     <div>4.99</div> | ||||
|                     <div>5.99</div> | ||||
| 
 | ||||
|                 </div> | ||||
|                 <!-- <lucky-wheel ref="myLucky" width="300px" height="300px" :prizes="prizes" :blocks="blocks" | ||||
|                     :buttons="buttons" @start="startCallback" @end="endCallback" /> --> | ||||
| 
 | ||||
|                 </div> --> | ||||
|             </div> | ||||
|             <div class="icon_right_2"></div> | ||||
|             <div class="icon_right_3"></div> | ||||
| @ -33,8 +36,8 @@ | ||||
|             <div class="icon_right_1"></div> | ||||
|             <div class="select_box"></div> | ||||
|             <div class="draw_btn"></div> | ||||
|             <div class="rule_btn"></div> | ||||
|             <div class="prize_btn"></div> | ||||
|             <div class="rule_btn" @click="showRluesBtn"></div> | ||||
|             <div class="prize_btn" @click="showMyPrizePop"></div> | ||||
|             <div class="rule_btn_text"></div> | ||||
|             <div class="prize_btn_text"></div> | ||||
|             <div class="caidai"></div> | ||||
| @ -54,6 +57,17 @@ | ||||
|             <div class="cloud_bottom"></div> | ||||
|         </div> | ||||
| 
 | ||||
|         <!-- 活动规则弹窗 --> | ||||
|         <Rules v-if="showRulesPop" @RulesPop="hideRulesPop" /> | ||||
|         <!-- 我的奖品弹窗 --> | ||||
|         <MyPrize v-if="showMyPrize" @MyPrize="myPrizePop" /> | ||||
|         <!-- 添加专属服务人员企微弹窗 --> | ||||
|         <ServiceList v-if="showServicePop" @ServicePop="hideServicePop" /> | ||||
| 
 | ||||
|         <LuckyWheel v-if="false" /> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| @ -67,6 +81,11 @@ import { get_authorize, get_jssdk } from '@/api/authorize-api' | ||||
| import service from "@/api/httpServe" | ||||
| import qs from 'qs' | ||||
| import h5plugin from '@/utils/plugin' | ||||
| import Rules from '@/components/Rules' | ||||
| import MyPrize from '@/components/MyPrize' | ||||
| import ServiceList from '@/components/ServiceList' | ||||
| import LuckyWheel from '@/components/LuckyWheel' | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -77,44 +96,15 @@ const store = useStore()  //初始化vuex | ||||
| const { proxy } = getCurrentInstance();  //初始化全局方法:plugin工具箱 | ||||
| 
 | ||||
| 
 | ||||
| // 活动信息 | ||||
| const participantNum = ref(store.state.userAccount.participantNum)  // 活动参与人数prizeResult | ||||
| const prizeResult = ref(store.state.userAccount.prizeResult)  // 中奖金额 | ||||
| 
 | ||||
| const myLucky = ref(null) | ||||
| const blocks = reactive({ padding: '13px', background: '#617df2' }) | ||||
| const prizes = reactive([ | ||||
|     { fonts: [{ text: '0', top: '10%' }], background: '#e9e8fe' }, | ||||
|     { fonts: [{ text: '1', top: '10%' }], background: '#b8c5f2' }, | ||||
|     { fonts: [{ text: '2', top: '10%' }], background: '#e9e8fe' }, | ||||
|     { fonts: [{ text: '3', top: '10%' }], background: '#b8c5f2' }, | ||||
|     { fonts: [{ text: '4', top: '10%' }], background: '#e9e8fe' }, | ||||
|     { fonts: [{ text: '5', top: '10%' }], background: '#b8c5f2' }, | ||||
| ]) | ||||
| const buttons = ([ | ||||
|     { radius: '50px', background: '#617df2' }, | ||||
|     { radius: '45px', background: '#afc8ff' }, | ||||
|     { | ||||
|         radius: '40px', background: '#869cfa', | ||||
|         pointer: true, | ||||
|         fonts: [{ text: '开始\n抽奖', top: '-20px' }] | ||||
|     }, | ||||
| ]) | ||||
| 
 | ||||
| // 点击抽奖按钮会触发star回调 | ||||
| const startCallback = () => { | ||||
|     // 调用抽奖组件的play方法开始游戏 | ||||
|     myLucky.value.play() | ||||
|     // 模拟调用接口异步抽奖 | ||||
|     setTimeout(() => { | ||||
|         // 假设后端返回的中奖索引是0 | ||||
|         const index = 0 | ||||
|         // 调用stop停止旋转并传递中奖索引 | ||||
|         myLucky.value.stop(index) | ||||
|     }, 3000) | ||||
| } | ||||
| // 抽奖结束会触发end回调 | ||||
| const endCallback = (prize) => { | ||||
|     console.log(prize) | ||||
| } | ||||
| 
 | ||||
| // 页面控制 | ||||
| const showRulesPop = ref(false) | ||||
| const showMyPrize = ref(false) | ||||
| const showServicePop = ref(false) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -128,7 +118,7 @@ const activityList = reactive([ | ||||
|     }, | ||||
|     { | ||||
|         id: 2, | ||||
|         show: false, | ||||
|         show: true, | ||||
|         banner: require('../assets/img/activity_2.png'), | ||||
|         btnImg: require('../assets/img/li_btn_2.png'), | ||||
|     }, | ||||
| @ -190,10 +180,36 @@ const btn = () => { | ||||
| 
 | ||||
| // 活动点击 | ||||
| const activityBtn = (item) => { | ||||
|     console.log(item); | ||||
|     console.log(item.id); | ||||
| 
 | ||||
|     if (item.id == 1) { | ||||
|         showServicePop.value = true | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // 活动规则弹窗 | ||||
| const showRluesBtn = () => { | ||||
|     showRulesPop.value = true | ||||
| } | ||||
| const hideRulesPop = () => { | ||||
|     showRulesPop.value = false | ||||
| } | ||||
| 
 | ||||
| // 我的奖品页面 | ||||
| const showMyPrizePop = () => { | ||||
|     showMyPrize.value = true | ||||
| } | ||||
| const myPrizePop = () => { | ||||
|     showMyPrize.value = false | ||||
| } | ||||
| 
 | ||||
| // 企微弹窗 | ||||
| const hideServicePop = () => { | ||||
|     showServicePop.value = false | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| @ -224,6 +240,36 @@ const activityBtn = (item) => { | ||||
|             @include pos(241px, 36px, 31px, 41px); | ||||
|             @include bg_pos('../assets/img/logo.png'); | ||||
|             pointer-events: none; | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         .notice { | ||||
|             @include pos(350px, 48px, 200px, 592px); | ||||
|             @include bg_pos('../assets/img/notice_box.png'); | ||||
|             pointer-events: none; | ||||
|             align-self: center; | ||||
|             justify-content: center; | ||||
| 
 | ||||
|             display: flex; | ||||
|             font-size: 20px; | ||||
| 
 | ||||
|             .icon { | ||||
|                 width: 26px; | ||||
|                 height: 48px; | ||||
|                 // @include bg_pos('../assets/img/laba.png'); | ||||
| 
 | ||||
|                 line-height: 54px; | ||||
| 
 | ||||
|                 img { | ||||
|                     width: 26px; | ||||
|                     height: 25px; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             .num { | ||||
|                 height: 48px; | ||||
|                 line-height: 48px; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         .title_main { | ||||
| @ -321,6 +367,33 @@ const activityBtn = (item) => { | ||||
|             @include pos(308px, 355px, 227px, 356px); | ||||
|             @include bg_pos('../assets/img/luckybag.png'); | ||||
|             pointer-events: none; | ||||
|             visibility: hidden; | ||||
|         } | ||||
| 
 | ||||
|         .lucky_bag_2 { | ||||
|             @include pos(330px, 345px, 210px, 348px); | ||||
|             @include bg_pos('../assets/img/luckybag_2.png'); | ||||
|             pointer-events: none; | ||||
| 
 | ||||
|             // display: flex; | ||||
| 
 | ||||
| 
 | ||||
|             .prize_num { | ||||
|                 @include pos(330px, 50px, 0px, 79px); | ||||
|                 font-weight: 700; | ||||
|                 font-size: 59px; | ||||
|                 color: #ff480e; | ||||
|                 text-align: center; | ||||
| 
 | ||||
|                 span { | ||||
|                     color: #ca2f0a; | ||||
|                     font-size: 24px; | ||||
|                     font-weight: 700; | ||||
| 
 | ||||
|                 } | ||||
| 
 | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										128
									
								
								src/components/LuckyWheel.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,128 @@ | ||||
| <template> | ||||
|     <div class="LuckyWheelCon" @touchmove.prevent> | ||||
|         <div class="LuckyWheel_container"> | ||||
|             <div class="LuckyWheel_box"> | ||||
|                 <svg width="100%" height="100%" viewBox="-20 0 557 190" id="svg"> | ||||
|                     <circle cx="100" cy="100" r="3" /> | ||||
|                     <circle cx="300" cy="20" r="3" /> | ||||
|                     <path id="path" | ||||
|                         d="M9,100c0,0,18.53-41.58,49.91-65.11c30-22.5,65.81-24.88,77.39-24.88c33.87,0,57.55,11.71,77.05,28.47c23.09,19.85,40.33,46.79,61.71,69.77c24.09,25.89,53.44,46.75,102.37,46.75c22.23,0,40.62-2.83,55.84-7.43c27.97-8.45,44.21-22.88,54.78-36.7c14.35-18.75,16.43-36.37,16.43-36.37" /> | ||||
|                     <g id="rect"> | ||||
|                         <rect width="85" height="30" fill="dodgerblue" /> | ||||
|                         <text x="10" y="19" font-size="14">SVG <rect></text> | ||||
|                     </g> | ||||
|                 </svg> | ||||
|                 <div id="div">#div</div> | ||||
|             </div> | ||||
|             <div class="btn" @click="btn">开始抽奖</div> | ||||
|         </div> | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { onBeforeMount, onMounted, defineEmits, defineProps, reactive, ref, toRefs } from 'vue' | ||||
| import gsap from "gsap"; | ||||
| import axios from 'axios' | ||||
| import { Toast } from 'vant'; | ||||
| import { useStore } from "vuex"; | ||||
| 
 | ||||
| import { PixiPlugin } from "gsap/PixiPlugin.js"; | ||||
| import { MotionPathPlugin } from "gsap/MotionPathPlugin.js"; | ||||
| // import { MorphSVGPlugin } from "gsap/MorphSVGPlugin"; | ||||
| 
 | ||||
| gsap.registerPlugin(PixiPlugin, MotionPathPlugin) | ||||
| 
 | ||||
| 
 | ||||
| // 初始化 | ||||
| const emit = defineEmits(["ServicePop"]); // 声明触发事件,对应父组件上面的方法 | ||||
| const props = defineProps({ sendMessage: Object }); // 获取props | ||||
| const store = useStore() | ||||
| 
 | ||||
| 
 | ||||
| const eqcode = ref(require('../assets/img/pop/eqcode.png')) | ||||
| 
 | ||||
| 
 | ||||
| // 页面挂载前 | ||||
| onBeforeMount(() => { }) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| const btn = () => { | ||||
|     console.log('抽奖'); | ||||
|     // gsap.to('.LuckyWheel_box', { duration: 10, repeat: -1, "rotation": '+=360' }) | ||||
|     gsap.to("#rect", { | ||||
|         duration: 5, | ||||
|         repeat: 12, | ||||
|         repeatDelay: 3, | ||||
|         yoyo: true, | ||||
|         ease: "power1.inOut", | ||||
|         motionPath: { | ||||
|             path: "#path", | ||||
|             align: "#path", | ||||
|             autoRotate: true, | ||||
|             alignOrigin: [0.5, 0.5] | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| .LuckyWheelCon { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     right: 0; | ||||
|     bottom: 0; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|     background-color: rgba(0, 0, 0, 0.7); | ||||
| 
 | ||||
| 
 | ||||
|     .LuckyWheel_container { | ||||
|         width: 750px; | ||||
|         height: 1180px; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         flex-direction: column; | ||||
| 
 | ||||
|         .LuckyWheel_box { | ||||
| 
 | ||||
|             border-width: 123px; | ||||
|             border-style: solid; | ||||
|             border-radius: 50%; | ||||
|             box-shadow: -1.569px -17.932px 16px 0px rgba(234, 6, 16, 0.16); | ||||
|             width: 831px; | ||||
|             height: 305px; | ||||
| 
 | ||||
|             .li { | ||||
|                 width: 100px; | ||||
|                 height: 100px; | ||||
|                 background-color: #ff6000; | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         .btn { | ||||
|             width: 200px; | ||||
|             height: 100px; | ||||
|             text-align: center; | ||||
|             line-height: 100px; | ||||
|             font-size: 30px; | ||||
|             color: #fff; | ||||
|             background: #ff6000; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| </style> | ||||
| @ -1,6 +1,27 @@ | ||||
| <template> | ||||
|     <div class="myPrizeCon"> | ||||
| 
 | ||||
|     <div class="myPrizeCon" @touchmove.prevent> | ||||
|         <div class="myPrize_container"> | ||||
|             <div class="cake"></div> | ||||
|             <div class="prize_box"> | ||||
|                 <div class="prize_top"> | ||||
|                     <div class="prize_title"></div> | ||||
|                 </div> | ||||
|                 <div class="prize_middle"> | ||||
|                     <div class="prize_item" v-for="item in prizeList" v-show="item.isHas"> | ||||
|                         <div class="prize_li"> | ||||
|                             <div class="prize_num">{{ item.prizeNum }}元红包</div> | ||||
|                             <div class="prize_spe">{{ item.spe }}</div> | ||||
|                         </div> | ||||
|                         <div class="buttom"> | ||||
|                             <img | ||||
|                                 :src="item.isGeted ? require('../assets/img/pop/view_btn.png') : require('../assets/img/pop/got_btn.png')" /> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="prize_bottom"></div> | ||||
|             </div> | ||||
|             <div class="cls_btn" @click="hide"></div> | ||||
|         </div> | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| @ -12,11 +33,30 @@ import { Toast } from 'vant'; | ||||
| import { useStore } from "vuex"; | ||||
| 
 | ||||
| // 初始化 | ||||
| const emit = defineEmits(["welcomePage"]); // 声明触发事件,对应父组件上面的方法 | ||||
| const emit = defineEmits(["MyPrize"]); // 声明触发事件,对应父组件上面的方法 | ||||
| const props = defineProps({ sendMessage: Object }); // 获取props | ||||
| const store = useStore() | ||||
| 
 | ||||
| 
 | ||||
| const prizeList = reactive([ | ||||
|     { | ||||
|         id: 1, | ||||
|         prizeNum: 8.8, | ||||
|         isGeted: true, | ||||
|         isHas: true, | ||||
|         spe: '财富88,与“礼”共见证', | ||||
|     }, | ||||
|     { | ||||
|         id: 2, | ||||
|         prizeNum: 8.8, | ||||
|         isGeted: false, | ||||
|         isHas: true, | ||||
|         spe: '添加专属服务人员企微', | ||||
| 
 | ||||
|     }, | ||||
| ]) | ||||
| 
 | ||||
| 
 | ||||
| // 页面挂载前 | ||||
| onBeforeMount(() => { }) | ||||
| 
 | ||||
| @ -26,32 +66,139 @@ onBeforeMount(() => { }) | ||||
| 
 | ||||
| // 页面挂载后 | ||||
| onMounted(() => { | ||||
| 
 | ||||
|     gsap.from('.myPrizeCon', { duration: 0.3, autoAlpha: 0 }) | ||||
|     gsap.from('.myPrize_container', { duration: 0.3, scale: 0.2, autoAlpha: 0, delay: 0.1 }) | ||||
|     // gsap.from('.rule_cls_btn', { duration: 0.3, y: 20, autoAlpha: 0, delay: 0.5 }) | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| const hide = () => { | ||||
|     emit('MyPrize') | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| .welcomePage { | ||||
| .myPrizeCon { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     right: 0; | ||||
|     bottom: 0; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|     color: #000; | ||||
|     background-color: rgba(0, 0, 0, 0.7); | ||||
| 
 | ||||
|     .myPrize_container { | ||||
|         width: 750px; | ||||
|         height: 1180px; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         flex-direction: column; | ||||
| 
 | ||||
|         .cake { | ||||
|             width: 382px; | ||||
|             height: 201px; | ||||
|             @include bg_pos('../assets/img/pop/cake.png'); | ||||
|             z-index: 999; | ||||
|         } | ||||
| 
 | ||||
|         .prize_box { | ||||
|             width: 550px; | ||||
|             margin-top: -34px; | ||||
| 
 | ||||
|             .prize_top { | ||||
|                 width: 550px; | ||||
|                 height: 135px; | ||||
|                 @include bg_pos('../assets/img/pop/prize_box_top.png'); | ||||
|                 pointer-events: none; | ||||
|                 display: flex; | ||||
|                 justify-content: center; | ||||
|                 align-items: center; | ||||
| 
 | ||||
|                 .prize_title { | ||||
|                     width: 267px; | ||||
|                     height: 58px; | ||||
|                     @include bg_pos('../assets/img/pop/my_prize.png'); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             .prize_middle { | ||||
|                 width: 550px; | ||||
|                 height: 190px; | ||||
|                 @include bg_pos('../assets/img/pop/prize_box_middle.png'); | ||||
|                 margin-top: 0px; | ||||
|                 display: flex; | ||||
|                 justify-content: center; | ||||
|                 align-items: center; | ||||
|                 flex-direction: column; | ||||
| 
 | ||||
| 
 | ||||
|     .video_container { | ||||
|         width: 80%; | ||||
|                 .prize_item { | ||||
|                     width: 463px; | ||||
|                     height: 67px; | ||||
|                     display: flex; | ||||
|                     justify-content: space-between; | ||||
|                     align-items: center; | ||||
|                     flex-direction: row; | ||||
|                     margin: 20px auto; | ||||
|                     padding-bottom: 10px; | ||||
| 
 | ||||
|         .video { | ||||
|             width: 100%; | ||||
|                     .prize_li { | ||||
|                         display: flex; | ||||
|                         // justify-content: center; | ||||
|                         // align-items: center; | ||||
|                         flex-direction: column; | ||||
| 
 | ||||
|                         .prize_num { | ||||
|                             color: #ca2f0a; | ||||
|                             font-weight: 700; | ||||
|                             font-size: 30px; | ||||
|                         } | ||||
| 
 | ||||
|                         .prize_spe { | ||||
|                             color: #ca2f0a; | ||||
|                             font-weight: 700; | ||||
|                             font-size: 24px; | ||||
|                             margin-top: 5px; | ||||
|                         } | ||||
| 
 | ||||
|                     } | ||||
| 
 | ||||
|                     .buttom { | ||||
|                         width: 147px; | ||||
|                         height: 62px; | ||||
|                         background-size: 100%; | ||||
| 
 | ||||
|                         img { | ||||
|                             width: 100%; | ||||
|                             height: 100%; | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
| 
 | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             .prize_bottom { | ||||
|                 width: 550px; | ||||
|                 height: 50px; | ||||
|                 @include bg_pos('../assets/img/pop/prize_box_bottom.png'); | ||||
|                 margin-top: 0px; | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         .cls_btn { | ||||
|             @include box(72px, 72px); | ||||
|             @include bg_pos('../assets/img/pop/cls_btn.png'); | ||||
|             margin-top: 50px; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -59,5 +206,8 @@ onMounted(() => { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										82
									
								
								src/components/Rules.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,82 @@ | ||||
| <template> | ||||
|     <div class="rulesCon" @touchmove.prevent> | ||||
|         <div class="rules_container"> | ||||
|             <div class="rule_t"></div> | ||||
|             <div class="rule_cls_btn" @click="hidePop"></div> | ||||
|         </div> | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { onBeforeMount, onMounted, defineEmits, defineProps, reactive, ref, toRefs } from 'vue' | ||||
| import gsap from "gsap"; | ||||
| import axios from 'axios' | ||||
| import { Toast } from 'vant'; | ||||
| import { useStore } from "vuex"; | ||||
| 
 | ||||
| // 初始化 | ||||
| const emit = defineEmits(["RulesPop"]); // 声明触发事件,对应父组件上面的方法 | ||||
| const props = defineProps({ sendMessage: Object }); // 获取props | ||||
| const store = useStore() | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // 页面挂载前 | ||||
| onBeforeMount(() => { }) | ||||
| 
 | ||||
| // 页面挂载后 | ||||
| onMounted(() => { | ||||
|     gsap.from('.rulesCon', { duration: 0.3, autoAlpha: 0 }) | ||||
|     gsap.from('.rule_t', { duration: 0.3, scale: 0.2, autoAlpha: 0, delay: 0.1 }) | ||||
|     gsap.from('.rule_cls_btn', { duration: 0.3, y: 20, autoAlpha: 0, delay: 0.5 }) | ||||
| 
 | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| const hidePop = () => { | ||||
|     emit('RulesPop') | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| .rulesCon { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     right: 0; | ||||
|     bottom: 0; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|     background-color: rgba(0, 0, 0, 0.7); | ||||
| 
 | ||||
|     .rules_container { | ||||
|         width: 750px; | ||||
|         height: 1180px; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         flex-direction: column; | ||||
| 
 | ||||
|         .rule_t { | ||||
|             @include box(629px, 762px); | ||||
|             @include bg_pos('../assets/img/pop/rule_pop.png'); | ||||
|             pointer-events: none; | ||||
|         } | ||||
| 
 | ||||
|         .rule_cls_btn { | ||||
|             @include box(72px, 72px); | ||||
|             @include bg_pos('../assets/img/pop/cls_btn.png'); | ||||
|             margin-top: 50px; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										102
									
								
								src/components/ServiceList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,102 @@ | ||||
| <template> | ||||
|     <div class="serviceCon" @touchmove.prevent> | ||||
|         <div class="service_container"> | ||||
|             <div class="service_box"> | ||||
|                 <div class="eqcode_box"> | ||||
|                     <img :src="eqcode" alt=""> | ||||
| 
 | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="service_cls_btn" @click="hidePop"></div> | ||||
|         </div> | ||||
|     </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { onBeforeMount, onMounted, defineEmits, defineProps, reactive, ref, toRefs } from 'vue' | ||||
| import gsap from "gsap"; | ||||
| import axios from 'axios' | ||||
| import { Toast } from 'vant'; | ||||
| import { useStore } from "vuex"; | ||||
| 
 | ||||
| // 初始化 | ||||
| const emit = defineEmits(["ServicePop"]); // 声明触发事件,对应父组件上面的方法 | ||||
| const props = defineProps({ sendMessage: Object }); // 获取props | ||||
| const store = useStore() | ||||
| 
 | ||||
| 
 | ||||
| const eqcode = ref(require('../assets/img/pop/eqcode.png')) | ||||
| 
 | ||||
| 
 | ||||
| // 页面挂载前 | ||||
| onBeforeMount(() => { }) | ||||
| 
 | ||||
| // 页面挂载后 | ||||
| onMounted(() => { | ||||
|     gsap.from('.serviceCon', { duration: 0.3, autoAlpha: 0 }) | ||||
|     gsap.from('.service_box', { duration: 0.3, scale: 0.2, autoAlpha: 0, delay: 0.1 }) | ||||
|     gsap.from('.service_cls_btn', { duration: 0.3, y: 20, autoAlpha: 0, delay: 0.5 }) | ||||
| }) | ||||
| 
 | ||||
| 
 | ||||
| const hidePop = () => { | ||||
|     emit('ServicePop') | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| .serviceCon { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     right: 0; | ||||
|     bottom: 0; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|     background-color: rgba(0, 0, 0, 0.7); | ||||
| 
 | ||||
| 
 | ||||
|     .service_container { | ||||
|         width: 750px; | ||||
|         height: 1180px; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         flex-direction: column; | ||||
| 
 | ||||
|         .service_box { | ||||
|             @include box(573px, 688px); | ||||
|             @include bg_pos('../assets/img/pop/service_box.png'); | ||||
|             pointer-events: none; | ||||
|             position: relative; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|             .eqcode_box { | ||||
|                 width: 210px; | ||||
|                 height: 210px; | ||||
|                 position: absolute; | ||||
|                 top: 412px; | ||||
|                 left: 192px; | ||||
| 
 | ||||
|                 img { | ||||
|                     width: 100%; | ||||
|                     height: 100% | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         .service_cls_btn { | ||||
|             @include box(72px, 72px); | ||||
|             @include bg_pos('../assets/img/pop/cls_btn.png'); | ||||
|             margin-top: 50px; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| </style> | ||||
| @ -101,6 +101,16 @@ const getOpenId = (code) => { | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
| * { | ||||
|   -webkit-touch-callout: none; | ||||
|   -webkit-user-select: none; | ||||
|   -khtml-user-select: none; | ||||
|   -moz-user-select: none; | ||||
|   -ms-user-select: none; | ||||
|   user-select: none; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| div { | ||||
|   color: #fff; | ||||
| } | ||||
|  | ||||
| @ -11,7 +11,8 @@ export default createStore({ | ||||
|             isHasAccount: false,        //是否存在牛卡号
 | ||||
|             isAddCustomer: false,       //是否添加过服务人员
 | ||||
|             isHasPrize: [],             //是否存在奖品
 | ||||
| 
 | ||||
|             participantNum: 1213821,     //活动参与人数
 | ||||
|             prizeResult: 73.11,        //中奖金额
 | ||||
|         }, | ||||
| 
 | ||||
|     }, | ||||
|  | ||||
 Andy Leong
						Andy Leong