uniapp小程序砸金蛋抽奖

砸之前是金蛋png图片,点击砸完之后切换砸金蛋动效gif图片;

当前代码封装为砸金蛋的组件;

vue代码: 

<template>
	<view class="page" v-if="merchantInfo.cdn_static">
		<image class="bg" :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/page_bg.png'" mode="aspectFill"></image>
		<view class="content">
			<view class="logo">
				<image :src="merchantInfo.logo" mode="heightFix"></image>
			</view>
			<view class="title">
				<image :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/title.png'" mode="heightFix"></image>
			</view>
			<view class="notification">
				<image :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/notification.png'" mode="heightFix"></image>
				<text>欢乐砸金蛋,一起瓜分好礼</text>
			</view>
			<view class="box">
				<view class="eggs">
					<image class="egg" v-for="(item,index) in eggList" :key="index" :src="merchantInfo.cdn_static + 'statistics/luckDrawImg/smashGoldenEggs/'+ item.eggUrl" @click="startPlay(index)"></image>
				</view>
				<view class="count">
					<image :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/count.png'"></image>
					<view class="tip">您今天还有<text>{{total}}</text>次抽奖机会</view>
				</view>
				<view class="btns">
					<view class="btn" @click="rule_show=true">
						<image :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/rule.png'"></image>
						<text>活动规则</text>
					</view>
					<view class="btn" @click="getResult()">
						<image :src="merchantInfo.cdn_static +'statistics/luckDrawImg/smashGoldenEggs/prize.png'"></image>
						<text>我的奖品</text>
					</view>
					
				</view>
			</view>
		</view>
		<view class="win" v-if="rule_show">
			<scroll-view scroll-y class="win_box .win_box_bg">
				<mp-html :content="luckDrawInfo.rule" />
			</scroll-view>
			<text class="iconfont iconcolseIcon theme-font-white" @click="rule_show=false"></text>
		</view>
		<view class="win" v-if="result_show">
			<view class="win_box1">
				<image class="win_bg" :src="merchantInfo.cdn_static +'statistics/luckDrawImg/result_bg.png'" mode=""></image>
				<view class="win_content">
					<view class="win_tips theme-font-white">{{currentPrize.desc}}</view>
					<view class="win_title">{{currentPrize.title}}</view>
					<view class="win_btn" @click="choiseAddress()">{{currentPrize.is_address==1?'选择地址':'确定'}}</view>
				</view>
			</view>
		</view>
		<view class="win" v-if="prize_show">
			<view class="win_tit theme-font-white">我的奖品</view>
			<view class="win_box2">
				<view class="items">
					<view class="left i_title">奖品</view>
					<view class="right i_title">中奖时间</view>
				</view>
				<scroll-view scroll-y class="list">
					<view class="item" v-for="(item,index) in list" :key="index">
						<view class="left">{{item.lottery_prize_title}}</view>
						<view class="right" v-if="item.is_address==1&&!item.address_id">
							<view class="r_btn"  @click="choiseAddress1(item)">去领奖</view>
						</view>
						<view class="right" v-else>{{item.created_time}}</view>
					</view>
				</scroll-view>
			</view>
			<text class="iconfont iconcolseIcon theme-font-white" @click="prize_show=false"></text>
		</view>
	</view>

</template>

<script>
	import { luckDrawInfo } from '@/api/luckDraw.js';
	import colors from '@/mixins/color';
	export default {
		mixins: [colors],
		data() {
			return {//https://cdn.dev.scrm.juplus.cn/InQLzDLoAl2S9LyNJUXQ45gpA.png
				mask: true,
				wtf:true,
				luckDrawInfo: {},
				rule_show:false,
				result_show:false,
				prize_show:false,
				total:0,
				currentPrize:{},
				list:[],
				id: "",
				eggList: []
			}
		},
		props: {
			userId: {
				type: [Number,String]
			},
			type:{
				type: [Number,String]
			}
		},
		//渲染完了
		mounted() {
			this.id = this.userId;
			this.setEggList(); 
			this.init();
		},
		methods: {
			/**
			 * 设置金蛋数据
			 */
			setEggList() {
				this.eggList = [];
				for (let i = 0; i < 3; i++) {
					this.eggList.push({
						eggUrl: `goldEgg.png`
					})
				}
			},
			init(){
				if(this.userInfo){
					this.getInfo()
				}else{
					setTimeout(()=>{
						this.init()
					},500)
				}
			},
			getInfo(){
				luckDrawInfo.getDetail({id:this.id}).then(res => {
					this.luckDrawInfo=res.data
					this.total=res.data.my_can_num
					this.action('lottery',this.id,0,2,this.luckDrawInfo.title,'','lottery')
				})
			},
			choiseAddress(){
				this.currentPrize.is_address==1?uni.navigateTo({
						url:'/pages/address/address'
					}):''
				this.result_show=false
			},
			choiseAddress1(data){
				this.currentPrize=data
				uni.navigateTo({
					url:'/pages/address/address'
				})
				this.prize_show=false
			},
			setAddress(id){
				luckDrawInfo.setAddress({address_id:id,history_id:this.currentPrize.history_id||this.currentPrize.id}).then(res => {
					uni.showToast({
						title:"地址设置成功",
						icon:'none'
					})
				})
			},
			getResult(){
				if(!this.wtf){
					return false
				}
				luckDrawInfo.getResult({lottery_id:this.id}).then(res => {
					this.list=res.data.data
					this.prize_show=true
				})
			},
			// 点击开始,请求接口抽奖
			startPlay(index) {
				if(this.luckDrawInfo.is_register==1&&!this.userInfo.type){
					uni.navigateTo({
						url:'/pages/login/login'
					})
					return false
				}
				if(this.luckDrawInfo.is_form==1&&this.luckDrawInfo.user_form_count==0){
					uni.navigateTo({
						url:'/pages/form/form?id='+this.luckDrawInfo.form_id+'&type_id=' + this.id + '&type=lottery'
					})
					return false
				}
				if(!this.wtf){
					return false
				}
				
				// 活动未开始或活动已结束
				let startTimeMs = new Date(this.luckDrawInfo.start_time).getTime();
				let endTimeMs = new Date(this.luckDrawInfo.end_time).getTime();
				let nowTimeMs = new Date().getTime();
				if (nowTimeMs < startTimeMs) {
					uni.showToast({
						icon: "none",
						title: "活动未开始"
					})
					return false;
				}
				if (nowTimeMs > endTimeMs) {
					uni.showToast({
						icon: "none",
						title: "活动已结束"
					})
					return false;
				}
				
				this.mask = false;
				this.wtf = false;
				luckDrawInfo.run({id:this.id}).then(res => {
					this.currentPrize = res.data;
					this.total = res.data.row_lottery_new.my_can_num;
					this.eggList[index].eggUrl = `breakOpenGoldEgg.gif`;
					setTimeout(()=>{
						this.eggList[index].eggUrl = `goldEgg.png`;
						this.result_show = true;
						this.wtf = true;
					},2000)
				}).catch(err => {
					this.wtf = true;
				});

			}
		}
	}
</script>

<style scoped lang="scss">
	@import 'index.scss';
	/**/
</style>

scss代码:


.page{
	width: 750rpx;
	height: 100vh;
	position: relative;
}

.bg{
	width: 750rpx;
	height: 100vh;
}

.content{
	width: 750rpx;
	min-height: 100vh;
	height: 1448rpx;
	position: absolute;
	top: 0;
	left: 0;
}


.logo{
	height: 60rpx;
	display: flex;
	justify-content: center;
	margin-top: 90rpx;
	
	image{
		height: 60rpx;
	}
}

.title{
	height: 194rpx;
	display: flex;
	justify-content: center;
	margin-top: 20rpx;
	
	image{
		height: 194rpx;
	}
}

.notification{
	margin-top: 170rpx;
	
	height: 40rpx;
	display: flex;
	justify-content: center;
	align-items: center;
	
	image{
		height: 32rpx;
		margin-right: 16rpx;
	}
	text{
		font-size: 28rpx;
		font-family: PingFangSC-Regular, PingFang SC;
		font-weight: 400;
		color: #FFFFFF;
	}
}


.box{
	width: 680rpx;
	height: 360rpx;
	margin: 0 auto;
	margin-top: 160rpx;
	
	.egg {
		width: 220rpx;
		height: 300rpx;
		margin-top: 80rpx;
	}
		
	.egg:first-of-type{
		margin-left: 20rpx;
	}
	
	.count{
		display: flex;
		justify-content: center;
		margin-top: 14rpx;
		position: relative;
		
		image{
			width: 424rpx;
			height: 108rpx;
		}
		
		.tip{
			position: absolute;
			top: 50%;
			transform: translateY(-50%);
			font-size: 28rpx;
			font-family: PingFangSC-Medium, PingFang SC;
			font-weight: 500;
			color: #FFFFFF;
			text{
				color: #FF9611;
			}
		} 
	}
	
	.btns{
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-top: 58rpx;
	}
	
	.btn{
		width: 292rpx;
		height: 116rpx;
		position: relative;
		image{
			width: 100%;
			height: 100%;
		}
		text{
			position: absolute;
			top: 50%;
			left: 50%;
			transform: translate(-50%,-50%);
			font-size: 36rpx;
			font-family: PingFangSC-Medium, PingFang SC;
			font-weight: 500;
			color: #FFFFFF;
		}
	}
	
}

.win{
	width: 750rpx;
	height: 100vh;
	background: rgba(0, 0, 0, 0.8);
	position: fixed;
	top: 0;
	left: 0;
	z-index: 2;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
}

.win_box{
	width: 662rpx;
	height: 60%;
	padding: 40rpx;
	box-sizing: border-box;
	border-radius: 24rpx;
}

.win_box_bg{
	background: #FFCE2B;
}

.bg3{
	background: #C3E5FE;
}

.iconcolseIcon{
	font-size: 58rpx;
	margin-top: 98rpx;
}

.win_box1{
	width: 630rpx;
	height: 922rpx;
	position: relative;
}

.win_bg{
	width: 630rpx;
	height: 922rpx;
}

.win_content{
	width: 630rpx;
	height: 922rpx;
	position: absolute;
	left: 0;
	top: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
}

.win_tips{
	font-size: 48rpx;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
	margin-top: 290rpx;
}

.win_title{
	font-size: 48rpx;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
	color: #FE6631;
	margin: 170rpx 0;
}

.win_btn{
	width: 280rpx;
	height: 80rpx;
	line-height: 80rpx;
	text-align: center;
	background: #FFE047;
	border-radius: 46rpx;
	font-size: 32rpx;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
	color: #13112C;
}

.win_tit{
	font-size: 48rpx;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
	margin-bottom: 32rpx;
}

.win_box2{
	width: 662rpx;
	height: 900rpx;
	background: #FFFFFF;
	border-radius: 24rpx;
	display: flex;
	flex-direction: column;
}

.items{
	width: 662rpx;
	height: 108rpx;
	background: #C3E5FE;
	border-radius: 24rpx 24rpx 0rpx 0rpx;
	display: flex;
	align-items: center;
	flex-shrink:0
}

.left,.right{
	width: 50%;
	text-align: center;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
}

.i_title{
	font-size: 36rpx;
}

.list{
	height: 792rpx;
	padding-bottom: 20rpx;
	overflow: hidden;
}

.item{
	width: 662rpx;
	height: 88rpx;
	display: flex;
	align-items: center;
	justify-content: space-around;
}

.item:nth-child(2n){
	background-color: #F4F4F4;
}

.r_btn{
	width: 160rpx;
	height: 60rpx;
	line-height: 60rpx;
	text-align: center;
	background: #FFC659;
	border-radius: 46rpx;
	font-family: SourceHanSansSC-Medium, SourceHanSansSC;
	font-weight: bold;
	font-size: 32rpx;
	margin:0 auto;
}

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/114855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第6章_多表查询

文章目录 多表查询概述1 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积理解演示代码 2 多表查询分类讲解2.1 等值连接 & 非等值连接2.1.1 等值连接2.1.2 非等值连接 自连接 & 非自连接内连接与外连接演示代码 3 SQL99语法实现多表查询3.1 基本语法3.2 内连接&#x…

HTML脚本、字符实体、URL

HTML脚本&#xff1a; JavaScript 使 HTML 页面具有更强的动态和交互性。 <script> 标签用于定义客户端脚本&#xff0c;比如 JavaScript。<script> 元素既可包含脚本语句&#xff0c;也可通过 src 属性指向外部脚本文件。 JavaScript 最常用于图片操作、表单验…

【机器学习】几种常用的机器学习调参方法

在机器学习中&#xff0c;模型的性能往往受到模型的超参数、数据的质量、特征选择等因素影响。其中&#xff0c;模型的超参数调整是模型优化中最重要的环节之一。超参数&#xff08;Hyperparameters&#xff09;在机器学习算法中需要人为设定&#xff0c;它们不能直接从训练数据…

Locust:可能是一款最被低估的压测工具

01、Locust介绍 开源性能测试工具https://www.locust.io/&#xff0c;基于Python的性能压测工具&#xff0c;使用Python代码来定义用户行为&#xff0c;模拟百万计的并发用户访问。每个测试用户的行为由您定义&#xff0c;并且通过Web UI实时监控聚集过程。 压力发生器作为性…

Nacos报错Connection refused (Connection refused)(最后原因醉了,非常醉)

目录 一、问题产生二、排查思路1.nacos拒绝连接&#xff0c;排查思路&#xff1a;2.Nacos启动成功但是拒绝连接的几种原因&#xff1a; 三、实操过程&#xff08;着急解决问题直接看这个&#xff09;1.启动Nacos2.查看Nacos启动日志3.根据日志处理问题4.修改Nacos5.重启Nacos 一…

CSS基础知识点速览

1 基础认识 1.1 css的介绍 CSS:层叠样式表(Cascading style sheets) CSS作用&#xff1a; 给页面中的html标签设置样式 css写在style标签里&#xff0c;style标签一般在head标签里&#xff0c;位于head标签下。 <style>p{color: red;background-color: green;font-size…

Git客户端软件 Tower mac中文版特点说明

Tower mac是一款Mac OS X系统上的Git客户端软件&#xff0c;它提供了丰富的功能和工具&#xff0c;帮助用户更加方便地管理和使用Git版本控制系统。 Tower mac软件特点 1. 界面友好&#xff1a;Tower的界面友好&#xff0c;使用户能够轻松地掌握软件的使用方法。 2. 多种Git操…

探索主题建模:使用LDA分析文本主题

在数据分析和文本挖掘领域&#xff0c;主题建模是一种强大的工具&#xff0c;用于自动发现文本数据中的隐藏主题。Latent Dirichlet Allocation&#xff08;LDA&#xff09;是主题建模的一种常用技术。本文将介绍如何使用Python和Gensim库执行LDA主题建模&#xff0c;并探讨主题…

STM32F407的系统定时器

文章目录 系统定时器SysTick滴答定时器寄存器STK_CTRL 控制寄存器STK_LOAD 重载寄存器STK_VAL 当前值寄存器STK_CALRB 校准值寄存器 非系统初始化 Systick 定时器SysTick_InitSysTick_CLKSourceConfig delay_us寄存器delay_us库函数delay_xms短时delay_ms长时SysTick_Config 系…

Firefox修改缓存目录的方法

打开Firefox&#xff0c;在地址栏输入“about:config” 查找是否有 browser.cache.disk.parent_directory&#xff0c;如果没有就新建一个同名的字符串&#xff0c;然后修改值为你要存放Firefox浏览器缓存的目录地址&#xff08;E:\FirefoxCacheFiles&#xff09; 然后重新…

在python中加载tensorflow-probability模块和numpy模块

目录 操作步骤&#xff1a; 注意&#xff1a; 问题&#xff1a; 解决办法&#xff1a; 操作步骤&#xff1a; 在虚拟环境的文件夹中&#xff0c;找到Scripts文件夹&#xff0c;点击进去&#xff0c;找到地址栏&#xff0c;在地址栏中输入cmd&#xff0c;进入如下界面。 输…

详解Java经典数据结构——HashMap

Java 的 HashMap 是一个常用的基于哈希表的数据结构&#xff0c;它实现了 Map 接口&#xff0c;可以存储键值对。下面我们进行详细介绍&#xff1a; 基本结构&#xff1a;HashMap 底层是基于哈希表来实现的&#xff0c;每次插入一个键值对时&#xff0c;会先对该键进行 Hash 运…

思维训练3

题目描述1 Problem - A - Codeforces 题目分析 样例1解释&#xff1a; 对于此题&#xff0c;我们采用贪心的想法&#xff0c;从1到n块数越少越好&#xff0c;故刚好符合最少的块数即可&#xff0c;由于第1块与第n块是我们必须要走的路&#xff0c;所以我们可以根据这两块砖的…

C++--二叉搜索树初阶

前言&#xff1a;二叉搜索树是一种常用的数据结构&#xff0c;支持快速的查找、插入、删除操作&#xff0c;C中map和set的特性也是以二叉搜索树作为铺垫来实现的&#xff0c;而二叉搜索树也是一种树形结构&#xff0c;所以&#xff0c;在学习map和set之前&#xff0c;我们先来学…

鸿运主动安全云平台任意文件下载漏洞复习

简介 深圳市强鸿电子有限公司鸿运主动安全监控云平台网页存在任意文件下载漏洞&#xff0c;攻击者可通过此漏洞下载网站配置文件等获得登录账号密码 漏洞复现 FOFA语法&#xff1a;body"./open/webApi.html" 获取网站数据库配置文件 POC&#xff1a;/808gps/Mobile…

Android Studio中配置Git

安装Git 在安装Android Studio之前&#xff0c;需要先安装Git。可以从Git官网下载并安装Git&#xff1a;https://git-scm.com/downloads 在Android Studio中配置Git 在Android Studio中&#xff0c;依次点击“File” -> “Settings”&#xff0c;在弹出的窗口中选择“Ver…

vue学习part01

02_Vue简介_哔哩哔哩_bilibili Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) 1.简介 2.常用用法 新项目一般vue3&#xff0c;老项目vue2 3.vue两种风格&#xff1a;选项式api&#xff08;vue2&#xff09;和组合式api&#xff08;vue3&#xff09; 两种方式实现累…

财务数字化转型的切入点是什么?_光点科技

随着科技的不断进步&#xff0c;数字化转型已经成为各个行业追求的目标&#xff0c;财务领域也不例外。那么&#xff0c;财务数字化转型的切入点在哪里呢&#xff1f;如何确保转型的成功进行&#xff1f; 数据整合与管理 财务数据的准确性与及时性是财务管理的基石。数字化转型…

桥和割点,以及图的遍历树

目录 什么是桥 寻找桥的算法 代码实现 什么是割点 ​寻找割点的算法 代码实现 什么是桥 寻找桥的算法 代码实现 import java.util.ArrayList;public class FindBridges {private Graph G;private boolean[] visited;private int ord[];private int low[];private int cnt…

在基于亚马逊云科技的湖仓一体架构上构建数据血缘的探索和实践

背景介绍 随着大数据技术的进步&#xff0c;企业和组织越来越依赖数据驱动的决策。数据的质量、来源及其流动性因此显得非常关键。数据血缘分析为我们提供了一种追踪数据从起点到终点的方法&#xff0c;有助于理解数据如何被转换和消费&#xff0c;同时对数据治理和合规性起到关…