uniapp:幸运大转盘demo

news2024/9/24 5:28:21

在这里插入图片描述

<template>
	<view class="index">
		<image src="../../static/img/158.png" mode="" class="banner"></image>
		<view class="title">绿色积分加倍卡拿到手软</view>
		<almost-lottery 
		:lotteryBg="lotteryBg" 
		:actionBg="actionBg" 
		:colors="['#fff','#FFDFD4']"
		:strFontColors="['#FF4100','#FF4100']"
		:strMarginOutside="30"
		:imgMarginStr="50"
		:imgWidth="62"
		:imgHeight="38"
		:imgCircled="false"
		:lottery-size="lotteryConfig.lotterySize"
		:action-size="lotteryConfig.actionSize" 
		:ring-count="6" 
		:duration="4" 
		:self-rotaty="false"
			:img-circled="true" :canvasCached="true" :prize-list="prizeList" :prize-index="prizeIndex"
			@reset-index="prizeIndex = -1" @draw-before="handleDrawBefore" @draw-start="handleDrawStart"
			@draw-end="handleDrawEnd" @finish="handleDrawFinish" v-if="prizeList.length" />
		<u-button :ripple="true" class="btn" @click="submit" :loading="loading">立即抽奖({{freeNum}}次)</u-button>
	</view>
</template>

<script>
	import AlmostLottery from '@/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue'
	import {
		clearCacheFile,
		clearStore
	} from '@/uni_modules/almost-lottery/utils/almost-utils.js'
	export default {
		name: 'Home',
		components: {
			AlmostLottery
		},
		data() {
			return {
				// 开启调试模式
				isDev: false,
				// 以下是转盘配置相关数据
				lotteryConfig: {
					lotterySize: 600, // 抽奖转盘的整体尺寸,单位rpx
					actionSize: 200 // 抽奖按钮的尺寸,单位rpx
				},

				lotteryBg: require('../../static/img/156.png'), // 转盘外环图,如有需要,请参考替换为自己的设计稿
				actionBg: require('../../static/img/157.png'), // 抽奖按钮图
				prizeList: [], // 奖品数据
				prizeIndex: -1, // 中奖下标
				prizeing: false, // 是否正在抽奖中,避免重复触发
				freeNum: 0, // 抽奖次数
				loading:false,
				rules:[]
			}
		},
		onLoad() {
			this.prizeList = []
			this.getPrizeList()
		},
		onShow() {
			this.$http.get('/api/turntable/index').then(res=>{
				if(res.code == 1){
					this.freeNum = res.data.lottery_count;
					this.rules = res.data.rules;
				}
			})
		},
		onUnload() {
			uni.hideLoading()
		},
		methods: {
			// 获取奖品列表
			async getPrizeList() {
				uni.showLoading({
					title: '奖品准备中...'
				})
				this.$http.get('/api/turntable/prizes').then(res=>{
					if(res.code == 1){
						res.data.prizes.forEach(item=>{
							if(item.multiple == 0){
								this.prizeList.push({
									prizeId: item.id,
									prizeName: '谢谢参与',
									prizeImage: item.image,
									name:item.name
								})
							}else{
								this.prizeList.push({
									prizeId: item.id,
									prizeName: item.name,
									prizeImage: item.image,
									name:item.name
								})
							}
							
						})
					}
				})
			},

			// 抽奖开始之前
			handleDrawBefore(callback) {
				// 还有免费数次或者剩余金币足够抽一次
				if (this.freeNum > 0) {
					this.handleDrawStart()
				} else {
					this.$toast('抽奖次数已用完')
				}
			},
			// 本次抽奖开始
			handleDrawStart() {
				console.log('触发抽奖按钮')
				if (this.prizeing) return
				this.prizeing = true
				this.tryLotteryDraw()
			},
			// 尝试发起抽奖
			tryLotteryDraw() {
				this.$http.post('/api/turntable/lottery').then(res=>{
					if(res.code == 1){
						this.freeNum--
						this.prizeList.forEach((item,index)=>{
							if(item.prizeId == res.data.prize_id){
								this.prizeIndex = index; // 中奖的数据下标
							}
						})
						console.log('本次抽中奖品 =>', this.prizeList[this.prizeIndex].prizeName)
					}
				})
			},
			// 本次抽奖结束
			handleDrawEnd() {
				console.log('旋转结束,执行拿到结果后到逻辑')

				// 旋转结束后,开始处理拿到结果后的逻辑
				let prizeName = this.prizeList[this.prizeIndex].name
				let tipContent = ''

				if (prizeName === '谢谢参与') {
					tipContent = '很遗憾,没有中奖,请再接再厉!'
				} else {
					tipContent = `恭喜您,获得 ${prizeName}`
				}

				uni.showModal({
					content: tipContent,
					showCancel: false,
					complete: () => {
						this.prizeing = false
					}
				})
			},
			// 抽奖转盘绘制完成
			handleDrawFinish(res) {
				console.log('抽奖转盘绘制完成', res)

				if (res.ok) {
					// 计算结束绘制的时间
					if (console.timeEnd) {
						console.timeEnd('绘制转盘用时')
					}
				}

				let stoTimer = setTimeout(() => {
					stoTimer = null

					uni.hideLoading()
					uni.showToast({
						title: res.msg,
						mask: true,
						icon: 'none'
					})
				}, 50)
			},
		
			submit(){
				if (this.freeNum > 0) {
					this.handleDrawStart()
				} else {
					this.$toast('抽奖次数已用完')
				}
			},
		},
	}
</script>

<style lang="scss" scoped>
	.index {
		min-height: 100vh;
		background: url('../../static/img/153.png')no-repeat left top #D8231C;
		background-size:750rpx 1334rpx ;
		.navRight{
			width: 144rpx;
			height: 46rpx;
			background: rgba(0,0,0,0.1);
			border-radius: 40rpx 0rpx 0rpx 40rpx;
			padding-left: 20rpx;
			display: flex;
			align-items: center;
			uni-text{
				font-size: 24rpx;
				color: #fff;
			}
			uni-image{
				width: 10rpx;
				height: 17rpx;
				margin-left: 4rpx;
			}
		}
		.banner{
			display: block;
			width: 586rpx;
			height: 93rpx;
			margin: 20rpx auto 40rpx;
		}
		.title{
			text-align: center;
			font-size: 48rpx;
			font-weight: bold;
			color: #fff;
			margin-bottom: 20rpx;
		}
		.btn{
			width: 596rpx;
			height: 120rpx;
			background: url('../../static/img/154.png')no-repeat center;
			background-size: 596rpx 120rpx;
			margin: 40rpx auto 35rpx;
			font-size: 40rpx;
			color: #BF3100;
			font-weight: bold;
		}
		.tips{
			padding: 30rpx 30rpx;
			.til{
				font-size: 28rpx;
				color: #fff;
				margin-bottom: 30rpx;
			}
			.text{
				line-height: 1.6;
				margin-bottom: 10rpx;
				font-size: 26rpx;
				color: #fff;
			}
		}
	}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element组件案例 Vue路由 前端打包部署步骤

目录 Element组件案例案例需求与分析环境搭建整体布局顶部标题左侧导航栏核心-右侧导航栏表格编写表单编写分页工具栏编写 异步数据加载异步加载数据性别展示修复图片展示修复 Vue路由Vue路由简介Vue路由入门 打包部署前端工程打包部署前端工程nginx介绍部署 Element组件案例 …

【TES720D】基于复旦微的FMQL20S400全国产化ARM核心模块

TES720D是一款基于上海复旦微电子FMQL20S400的全国产化核心模块。该核心模块将复旦微的FMQL20S400&#xff08;兼容FMQL10S400&#xff09;的最小系统集成在了一个60*70mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;特别是用在控制领域…

DC-DC模块升压电源直流隔离低压升高压正负输出变换器

特点 效率高达 80%以上1*1英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRA 0.2~8W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36V、36…

华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]

文章目录 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 华测监测预警系统 2.2 任意文件读取漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章…

macOS Sonoma 14.1beta3(23B5067a)发布

黑果魏叔10 月 11 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23B5067a&#xff09;&#xff0c;本次更新距离上次发布隔了 7 天。 根据官方发布的macOS Sonoma 14.1beta3更新日志&#xff0c;此…

如何按照洁净区不同等级选择不同流量的粒子计数器设备?

如今&#xff0c;尘埃粒子计数器已经广泛应用于生物制药、电子产业、医疗手术室、食品加工、洁净工作台、科学实验、航空航天、精密加工及新能源等领域&#xff0c;用于洁净室洁净度等级的测试及判定。今天小编就和大家来浅说说如何按需选择不同流量的尘埃粒子计数器。 01 每个…

vue2安装cesium并使用

一、安装 1.安装cesium npm install cesium1.95.0 -S 2.安装所需 npm install copy-webpack-plugin10.2.4 -D 二、配置 1.配置vue.config.js vue 中引入cesium 需要用copy-webpack-plugin 把一些文件拷贝到打包目录 // vue.config.js const CopyWebpackPlugin require…

中国象棋(人机)

欢迎来到程序小院 中国象棋 玩法&#xff1a; 鼠标左键点击选中棋子&#xff0c;再点击位置进行下棋&#xff0c;可以进行悔棋&#xff0c;重新开始操作&#xff0c;棋盘右侧有AI分析&#xff0c;帮助你进一步提升棋艺&#xff0c;快去下棋吧^^。开始游戏https://www.ormcc.co…

服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

Linux命令及详细解释、用法

关机/重启/注销 命令 说明 shutdown -h now 即刻关机 shutdown -h 10 10分钟后关机 shutdown -h 11:00 11&#xff1a;00关机 shutdown -h 10 预定时间关机&#xff08;10分钟后&#xff09; shutdown -c 取消指定时间关机 shutdown -r now 重启 shutdown -r 10 10分钟之…

分享一些走心的句子英文表达

曾经有人问更新社媒&#xff0c;除了发生活照&#xff0c;产品照&#xff0c;与客户的聊天截图和一些产品视频&#xff0c;发货视频之外&#xff0c;还能发什么&#xff1f;其实像一些你平时发在朋友圈的走心的话&#xff0c;或者是一些正能量也是可以的&#xff0c;从你的文字…

【内网穿透】Docker部署Drupal并实现公网访问

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。…

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…

vim基础指令(自用)

这个是自己随便写的&#xff0c;类似于笔记 vim 多模式编辑器 查看指令&#xff1a; gg&#xff1a; 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift&#xff04; 定位到本行结尾 0 定位到本行开头 w&#xff1a;跨单词移动 h.j.k,l: 左下上右 …

docker之Harbor私有仓库

目录 一、什么是Harbor 二、Harbor的特性 三、Harbor的构成 1、六个组件 2、七个容器 四、私有镜像仓库的上传与下载 五、部署docker-compose服务 把项目中的镜像数据进行打包持久数据&#xff0c;如镜像&#xff0c;数据库等在宿主机的/data/目录下&#xff0c; 一、什么…

vscode 连接ubuntu git下载缓慢

在ubuntu20.04下载&#xff1a; git clone https://github.com/introlab/rtabmap.git src/rtabmap 挂掉情况 export https_proxyhttp://10.10.10.176:7890export http_proxyhttp://10.10.10.176:7890 其中 10.10.10.176是我本机的ip地址&#xff0c;7890是我的代理后几位 如…

iPhone 15分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 15 Plus、iPhone 15 Pro、iPhone 15 Pro Max

史上最全iPhone 机型分辨率&#xff0c;屏幕尺寸&#xff0c;PPI详细数据&#xff01;已更新到iPhone 15系列&#xff01; 点击放大查看高清图 &#xff01;

AI「鸟口普查」,康奈尔大学利用深度学习分析北美林莺分布

据世界自然基金会统计&#xff0c;1970-2016 年&#xff0c;全球代表物种种群数量减少了 68%&#xff0c;生物多样性不断下降。 保护生物多样性&#xff0c;需要对当地生态情况进行准确分析&#xff0c;制定合理的生态保护政策。然而&#xff0c;生态数据太过庞杂&#xff0c;统…

淘宝官方开放平台API接口获取淘宝商品详情信息(价格、销量、优惠价等)

淘宝、天猫商品详情API接口实现可以获取详情页面上面的标题&#xff0c;价格&#xff0c;优惠券&#xff0c;优惠价&#xff0c;促销活动&#xff0c;库存&#xff0c;sku规格属性&#xff0c;sku属性图片&#xff0c;产品图片&#xff0c;详情属性&#xff0c;详情主图&#x…

Java架构师异步架构设计

目录 1 导学2 为何需要异步消息架构3 消息发送失败该如何处理4 mq接收到消息过后又丢失了消息怎么办5 消费者弄丢了消息该如何处理6 消息重复消费了该怎么处理7 消息的有序处理8 消息堆积该如何处理9 如何提高消息消费的速度10 消息应用的可插拔11 如何设计消息的统一id12 异步…