- <template>
- <view class="container">
- <view class="navleft" @click="navback">
- <image src="@/static/cj/left.png" mode=""></image>
- </view>
- <view class="navtitle">抽奖</view>
- <view class="bg">
- <image src="https://szcc.test03.qcw800.com/uploads/images/20240708/kIKHgR1pGuYUwq0D9AhTXcl9ufcKmwsVuXn0lKUp.png" mode=""></image>
- </view>
- <view class="title">幸运大抽奖</view>
- <view class="cont">
- <view
- class="cont_item"
- :class="{ 'no-margin': index % 3 === 2, highlight: index === highlightIndex }"
- v-for="(item, index) in drawList"
- :key="index"
- @click="changeCont(item)"
- >
- <view class="cont_img" v-if="item.text !== '抽奖'">
- <image src="@/static/cj/jp.png" mode=""></image>
- </view>
- <view class="cont_cj" v-if="item.text == '抽奖'">
- {{ item.text }}
- </view>
- <view class="cont_txt" v-if="item.text !== '抽奖'">{{ item.title }}</view>
- </view>
- </view>
- <view class="sycj">
- <view class="sycj_txt">剩余抽奖次数:{{ luck }}</view>
- </view>
- <view class="foot">
- <view class="foot_title">
- <view class="foot_left"></view>
- <view class="foot_title">活动规则</view>
- <view class="foot_right"></view>
- </view>
- <view class="foot_txt">
- 活动最终解释权归平台所有,活动最终解释权归平台所有,活动最终解释权归平台所有活动最终解释权归平台所有,活动最终解释权归平台所有,活动最终解释权归平台
- </view>
- </view>
- <view>
- <!-- 弹窗 -->
- <uni-popup ref="popup" background-color="#fff">
- <view class="popup-con" v-if="result.title !== '谢谢惠顾'">
- <view class="con_title">提示</view>
- <view class="con_text">恭喜您本次抽中{{ result.title }},是否需要快递邮寄?</view>
- <view class="title_btns">
- <view class="title_err" @click="popupClose">不需要</view>
- <view class="title_res" @click="goAddress">需要</view>
- </view>
- </view>
- <view class="popup-con" v-else>
- <view class="con_title">提示</view>
- <view class="con_text">您本次抽中谢谢惠顾,继续努力</view>
- <view class="conbut" @click="popupClose">确定</view>
- <!-- <view class="title_btns">
- <view class="title_err" @click="popupClose">不需要</view>
- <view class="title_res" @click="goAddress">需要</view>
- </view> -->
- </view>
- </uni-popup>
- </view>
- </view>
- </template>
- <script>
- import { get, post } from '@/utils/request.js';
- export default {
- data() {
- return {
- luck: '', //抽奖次数
- drawList: '', //抽奖列表
- isAnimating: false,
- currentIndex: null, // 用于追踪当前正在高亮的列表项的索引
- isLuckyDrawAnimating: false,
- winningItemId: null, // 存储从服务器返回的中奖ID
- highlightIndex: null, // 初始化 highlightIndex
- result: '' //中奖结果
- };
- },
- created() {
- this.getDrawList();
- },
- onShow() {
- this.getDrawNum();
- },
- // 方法部分
- methods: {
- async getDrawNum() {
- const res = await get('/api/user/luckDrawNum', { api_token: uni.getStorageSync('api_token') });
- console.log('抽奖次数', res.data.num);
- this.luck = res.data.num;
- },
- async getDrawList() {
- const res = await get('/api/public/luckDrawList');
- console.log(res);
- this.drawList = res.data;
- // 抽奖按钮配置
- const drawButton = {
- text: '抽奖',
- image: null
- };
- // 在第5项位置插入抽奖按钮
- if (this.drawList.length >= 5) {
- this.drawList.splice(4, 0, drawButton);
- } else {
- // 如果当前列表长度不足5项,可以考虑直接添加到末尾或不做任何操作
- this.drawList.push(drawButton);
- }
- },
- navback() {
- uni.navigateBack();
- },
- popupOpen() {
- this.$refs.popup.open();
- },
- popupClose() {
- this.$refs.popup.close();
- this.getDrawNum();
- },
- goAddress() {
- this.$refs.popup.close();
- this.getDrawNum();
- uni.navigateTo({
- url: '/pages/draw/address'
- });
- },
- changeCont(item) {
- if (item.text === '抽奖') {
- if (this.luck > 0) {
- this.luckyDraw();
- } else {
- uni.showToast({
- title: '没有抽奖次数了',
- icon: 'none',
- duration: 2000
- });
- }
- }
- },
- startLuckyDrawAnimation() {
- this.highlightIndex = 0; // 在这里重置 highlightIndex
- this.isLuckyDrawAnimating = true;
- this.cycleHighlight();
- },
- cycleHighlight() {
- if (this.isLuckyDrawAnimating && this.highlightIndex < this.drawList.length) {
- if (this.drawList[this.highlightIndex].text === '抽奖') {
- // 直接跳过抽奖按钮,不进行高亮
- this.highlightIndex++;
- // 使用立即执行的函数表达式确保在抽奖按钮跳过后,立即进行下一次高亮处理
- (() => {
- setTimeout(() => {
- this.cycleHighlight();
- }, 200);
- })();
- } else {
- // 应用高亮样式
- this.$nextTick(() => {
- // 更新highlightIndex之后再设置高亮,确保DOM更新完成
- setTimeout(() => {
- this.highlightIndex++;
- this.cycleHighlight();
- }, 200);
- });
- }
- } else {
- this.stopAtWinningItem();
- }
- },
- stopAtWinningItem() {
- if (this.winningItemId !== null) {
- this.highlightIndex = this.drawList.findIndex((item) => item.id === this.winningItemId);
- this.result = this.drawList.find((item) => item.id === this.winningItemId);
- console.log('执行', this.result);
- // 这里可以添加额外的中奖动画效果
- this.isLuckyDrawAnimating = false;
- //获取中奖的那一项数据
- this.popupOpen(); // 显示中奖弹窗
- }
- },
- luckyDraw() {
- this.startLuckyDrawAnimation();
- uni.request({
- url: 'https://szcc.test03.qcw800.com/api/user/LuckDraw',
- method: 'GET',
- data: { api_token: uni.getStorageSync('api_token') },
- success: (res) => {
- console.log(res); //{luck_id: "8", luck_draw_record_id: "4"} luck_draw_record_id是中奖id
- this.winningItemId = res.data.data.luck_id;
- // this.winningItemId = '4';
- }
- });
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .highlight {
- box-shadow: 0 0 10rpx 5rpx rgba(255, 255, 0, 0.8) !important;
- }
- ::v-deep .uni-popup__wrapper {
- width: 662rpx;
- height: 424rpx;
- background: #ffffff;
- border-radius: 16rpx;
- }
- .popup-con {
- .con_title {
- margin-top: 40rpx;
- font-size: 34rpx;
- font-family: PingFang SC, PingFang SC-Medium;
- font-weight: 500;
- text-align: center;
- color: #1d2129;
- letter-spacing: -0.44rpx;
- }
- .con_text {
- width: 540rpx;
- margin: 62rpx auto;
- font-size: 30rpx;
- font-family: PingFang SC, PingFang SC-Medium;
- font-weight: 500;
- text-align: center;
- color: #1b1b1b;
- line-height: 48rpx;
- }
- .conbut {
- margin: auto;
- width: 286rpx;
- height: 82rpx;
- background: linear-gradient(82deg, #d93624 13%, #f09072 80%);
- border-radius: 16rpx;
- text-align: center;
- line-height: 82rpx;
- color: #fff;
- }
- .title_btns {
- margin: auto;
- width: 602rpx;
- display: flex;
- justify-content: space-between;
- .title_err {
- width: 286rpx;
- height: 82rpx;
- background: #f6f7f9;
- border-radius: 16rpx;
- text-align: center;
- line-height: 82rpx;
- color: #666666;
- }
- .title_res {
- width: 286rpx;
- height: 82rpx;
- background: linear-gradient(82deg, #d93624 13%, #f09072 80%);
- border-radius: 16rpx;
- text-align: center;
- line-height: 82rpx;
- color: #ffffff;
- }
- }
- }
- .navleft {
- position: absolute;
- top: 108rpx;
- left: 24rpx;
- width: 48rpx;
- height: 48rpx;
- z-index: 2;
- image {
- width: 100%;
- height: 100%;
- }
- }
- .navtitle {
- z-index: 2;
- position: absolute;
- top: 108rpx;
- left: 342rpx;
- width: 68rpx;
- height: 48rpx;
- font-size: 34rpx;
- font-family: PingFang SC, PingFang SC-Medium;
- font-weight: 500;
- color: #ffffff;
- }
- .bg {
- position: relative;
- width: 750rpx;
- height: 1624rpx;
- image {
- width: 100%;
- height: 100%;
- }
- }
- .title {
- position: absolute;
- top: 194rpx;
- left: 126rpx;
- width: 496rpx;
- height: 140rpx;
- font-size: 90rpx;
- font-family: YouSheBiaoTiHei, YouSheBiaoTiHei-Regular;
- font-weight: 400;
- color: #fdf1b8;
- }
- .cont_cj {
- width: 148rpx;
- height: 148rpx;
- background: radial-gradient(#d94235, #e54f2c 55%, #eb7854);
- border-radius: 12rpx;
- box-shadow: 0rpx 6rpx 16rpx 0rpx rgba(237, 102, 60, 0.56);
- font-size: 48rpx;
- font-family: PingFang SC, PingFang SC-Medium;
- font-weight: 500;
- text-align: center;
- color: #fdf1b8;
- line-height: 148rpx;
- margin-right: 30rpx;
- }
- .cont {
- position: absolute;
- top: 366rpx;
- left: 66rpx;
- background: url(https://szcc.test03.qcw800.com/uploads/images/20240709/POqESSmKSQmWtm5XekLxwZu9zI0bXIGuIXoEbC8V.png) center;
- width: 504rpx;
- height: 500rpx;
- background-size: 100% 100%;
- padding: 60rpx;
- display: flex;
- flex-wrap: wrap;
- .cont_item {
- width: 148rpx;
- height: 148rpx;
- background: url(https://szcc.test03.qcw800.com/uploads/images/20240709/yIVTR4jIGECShJpwQzOquyntD08ZgshWV2cPAOZK.png);
- background-size: 100% 100%;
- margin-right: 30rpx;
- &.no-margin {
- margin-right: 0;
- }
- .cont_img {
- width: 76rpx;
- height: 76rpx;
- margin: auto;
- image {
- margin-top: 24rpx;
- width: 100%;
- height: 100%;
- }
- }
- .cont_txt {
- margin-top: 24rpx;
- height: 32rpx;
- font-size: 22rpx;
- font-family: PingFang SC, PingFang SC-Medium;
- font-weight: 500;
- text-align: center;
- color: #fd9440;
- }
- }
- }
- .sycj {
- position: absolute;
- top: 1016rpx;
- left: 66rpx;
- width: 618rpx;
- height: 90rpx;
- background: url(https://szcc.test03.qcw800.com/uploads/images/20240709/d3MRq1bYG9Uy7hdLFvMkk7nvfM7z4jPFj5p97W8E.png) center;
- background-size: 100% 100%;
- .sycj_txt {
- margin-left: 34rpx;
- font-size: 30rpx;
- font-family: PingFang SC, PingFang SC-Semibold;
- font-weight: 600;
- text-align: left;
- line-height: 90rpx;
- color: #ffffff;
- }
- }
- .foot {
- position: absolute;
- top: 1136rpx;
- left: 66rpx;
- background-color: #fff;
- border-radius: 12rpx;
- width: 572rpx;
- height: 410rpx;
- padding: 24rpx 22rpx 0 24rpx;
- .foot_title {
- display: flex;
- align-items: center;
- justify-content: center;
- .foot_left {
- width: 114rpx;
- height: 6rpx;
- background: linear-gradient(270deg, #eb592b, rgba(240, 144, 114, 0));
- }
- .foot_title {
- margin: 0 24rpx;
- width: 160rpx;
- height: 56rpx;
- font-size: 40rpx;
- font-family: PingFang SC, PingFang SC-Semibold;
- font-weight: 600;
- text-align: left;
- color: #ed581d;
- }
- .foot_right {
- width: 114rpx;
- height: 6rpx;
- background: linear-gradient(90deg, #eb592b, rgba(240, 144, 114, 0));
- }
- }
- .foot_txt {
- margin-top: 22rpx;
- width: 572rpx;
- height: 256rpx;
- font-size: 26rpx;
- font-family: PingFang SC, PingFang SC-Regular;
- font-weight: 400;
- text-align: left;
- color: #333333;
- line-height: 44rpx;
- }
- }
- </style>
复制代码 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |