<!-- 普通玩法落地页 --> <template> <div style="width: 100%; height: 100%"> <div class="content" :style="{ background: `#fff` }" v-show="show_home" v-if="detail"> <div class="logo"> <img src="/img/icon-logo.png" alt /> </div> <!-- 未开始 --> <div class="not-open" v-show="status == 'not-open'"> <img src="/subject/001.gif" /> </div> <div class="head-in-custom" v-if="!isMoneyPrize"> <img :src="detail.postBizData.postUserInfo.avatarUrl" /> <span>{{ detail.postBizData.postUserInfo.nickName }}</span> </div> <!-- 红包打开 --> <div class="redPacket" :class="{ redPacket2: status != 'open', key_packet: status == 'open' }" v-if="status != 'nothing'" v-show="status != 'not-open'"> <!-- 内容 --> <div class="head"> <div class="head-title"> <img :src="detail.postBizData.postUserInfo.avatarUrl" alt /> <span>{{ detail.postBizData.postUserInfo.nickName }}</span> </div> <!-- <div class="head-txt" v-if="status == 'open' || status == 'opened'">Awesome! You Will Get</div> --> <!-- <div class="head-area" v-else-if="status == 'opened'">opened!</div> --> <!-- 红包被领完了 --> <div class="head-area" v-if="status == 'nothing'"> <div class="txt">Better luck next time!</div> </div> <!-- 过期 --> <div class="head-area expire" v-if="status == 'expire'"> <div class="txt">This Giveaways</div> <div class="titme">expired on {{ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</div> </div> <!-- 非chrome浏览器 --> <div class="head-area expire" v-if="status == 'no-chrome'"> <div class="txt">Get Giveaways</div> <div class="titme">with chrome</div> </div> <!-- 领取成功 --> <div class="head-area head-money" v-if="status == 'open' || status == 'opened'"> <div class="txt">AWESOME! YOU Will GET</div> <div class="head-money-area"> <img :src="currencyIconPath" alt /> <span class="money-txt" :style="{ fontSize: amount_font_size + 'px' }">{{ receiveAmount }}</span> </div> </div> </div> <!-- 领取列表 --> <div class="luck-list-title"> <div>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} Winners</div> <div v-if="isMoneyPrize">{{ detail.postBizData.receiveAmountValue }} / {{ detail.postBizData.amountValue || '' }} {{ detail.postBizData.currencySymbol || '' }}</div> </div> <div class="luck-list" @scroll="handleScroll($event)"> <div class="luck-item" v-for="(item, i) in luck_list" v-bind:key="i"> <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt /> <img v-else src="/svg/icon-twitter.svg" alt /> <div class="luck-content"> <div class="luck-title">{{ item.simpleUserInfoVO.nickName || 'Twitter User' }}</div> <div class="luck-time">{{ formatTime(item.receiveTimestamp, 'MM-DD HH:mm') }}</div> </div> <div class="luck-money" v-if="isMoneyPrize"> <img :src="item.currencyIconPath" alt /> <div class="luck-money-txt">{{ item.amountValue || 0 }}</div> </div> <div class="luck-custom-prize" v-else>winner</div> <div class="luck-king" v-if="isMoneyPrize && item.maxAmount"> <img src="/svg/icon-king-hat.svg" alt /> <span>Luckiest Draw</span> </div> </div> </div> </div> <template v-else> <div class="redBagCustom" v-if="detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled"> <!-- <img class="customImg" :src="detail.postBizData.customPosterInstalled" /> <div class="customBottom"> <div class="theme"> <span class="info">Instant Giveaway</span> </div> <div class="winner-info"> <span class="count">{{detail.postBizData.totalCount}} Winners</span> <span>to Share </span> <span class="prize-name">{{detail.postBizData.amountValue + ' ' + detail.postBizData.currencySymbol}}</span> </div> </div> --> <custom-card-cover :totalCount="detail.postBizData.totalCount" :amountValue="detail.postBizData.amountValue" :tokenSymbol="detail.postBizData.currencySymbol" :currencyIconUrl="detail.postBizData.iconPath" :playType="1" :posterType="2" :customPosterInstalled="detail.postBizData.customPosterInstalled" :validity="validity" :userInfo="{ nickName: detail.postBizData.postUserInfo.nickName, avatarUrl: detail.postBizData.postUserInfo.avatarUrl, }" :rewardType="detail.postBizData.rewardType" :customizedReward="detail.postBizData.customizedReward" :showBottomInfo="true" ></custom-card-cover> </div> <div class="redBag" :class="{ 'auto-height': !isMoneyPrize }" v-else> <!-- 货币类型 --> <template v-if="isMoneyPrize"> <img src="/subject/001-card.png" alt="" /> <img class="open-gif" src="/subject/001.gif" /> <div class="title" v-if="detail.postBizData.postUserInfo"> <img :src="detail.postBizData.postUserInfo.avatarUrl" alt /> <span>{{ detail.postBizData.postUserInfo.nickName || 'FutureDoctor' }}</span> </div> <div class="money-area"> <div class="txt">{{ detail.postBizData.currencySymbol }} GIVEAWAY</div> <div class="coin"> <img :src="detail.postBizData.currencyIconPath" alt /> <font-amount :amount="detail.postBizData.amountValue"></font-amount> </div> <div class="people">{{ detail.postBizData.totalCount }} WINNERS TO SHARE</div> </div> </template> <template v-else> <custom-card-cover :totalCount="detail.postBizData.totalCount" :amountValue="detail.postBizData.amountValue" :tokenSymbol="detail.postBizData.currencySymbol" :currencyIconUrl="detail.postBizData.iconPath" :playType="1" :validity="validity" :userInfo="{ nickName: detail.postBizData.postUserInfo.nickName, avatarUrl: detail.postBizData.postUserInfo.avatarUrl, }" :rewardType="detail.postBizData.rewardType" :customizedReward="detail.postBizData.customizedReward" :showBottomInfo="true" ></custom-card-cover> </template> </div> </template> <!-- 安装 --> <div class="install" v-if="status == 'nothing' || status == 'open' || status == 'opened'" :class="{ key_install: status == 'open' }"> <div v-if="status == 'nothing'"> <div class="title">Install Denet to Draw</div> </div> <div v-else> <div class="title">Withdraw to Wallet</div> <div class="validity"> <template v-if="validity_state"> <span style="color: #ffa620">Remaining valid time </span> <span style="color: #ffa620">{{ validity }}</span> </template> <template v-else> <span style="color: #ffa620">Giveaways Validity</span> </template> </div> </div> <div class="flow"> <div class="line"></div> <div class="area_num"> <div class="num">1</div> <span>Install DeNet</span> </div> <div class="tip">Used to verify tasks and get rewards</div> <div class="install_btn" @click="installExtension">Install</div> <div class="area_num"> <div class="num">2</div> <span v-if="status == 'nothing'">Complete Tasks</span> <span v-else>Complete Tasks by {{ detail.postBizData.postUserInfo.nickName }}</span> </div> <div class="tip">Complete like, retweet and follow in a simple way</div> </div> </div> <!-- 过期 --> <div class="install install-error" v-if="status == 'expire'"> <div class="title">Install DeNet</div> <div class="title">Don't miss the next Giveaway</div> <div class="tip">Used to verify tasks and get rewards</div> <div class="install_btn" @click="installExtension">Install</div> </div> <!-- 非chrome 浏览器状态 --> <div class="install install-error" v-if="status == 'no-chrome'"> <div class="title">Open Giveaways</div> <div class="title">with chrome</div> <div class="tip">Only supports getting Giveaways through chrome</div> <div class="install_chrome" @click="clickOpenChrome()"> <img src="/svg/icon-chrome.svg" alt /> Install Chrome </div> </div> <div v-if="status == 'error'"></div> </div> <MobileGuidePage v-if="show_moblie" :playType="PlayType.common" :detail="detail" :postBizData="detail.postBizData" :postUserInfo="detail.postBizData.postUserInfo"> </MobileGuidePage> </div> </template> <script> import axios from 'axios'; import Cookies from 'js-cookie'; import { isBrowser, appType } from '../utils/help.js'; import Report from '../log-center/log'; import { Toast } from 'vant'; import FontAmount from '../components/FontAmount.vue'; import MobileGuidePage from '../components/MobileGuidePage.vue'; // eslint-disable-next-line no-unused-vars import { RewardType, PlayType } from '../types'; var moment = require('moment'); var ClipboardJS = require('clipboard'); const api = { prod: 'https://api.denetme.net', pre: 'https://preapi.denetme.net', test: 'https://testapi.denetme.net', }; const page = { prod: 'https://h5.denetme.net', pre: 'https://preh5.denetme.net', test: 'https://testh5.denetme.net', }; const jumpUrl = page[process.env.NUXT_ENV.MODE] + '/'; const baseURL = api[process.env.NUXT_ENV.MODE]; let appVersionCode = 6; export default { name: 'index', data() { return { PlayType, cp_link: '', appVersionCode: appVersionCode, mid: '', show_moblie: false, show_home: false, layer_show: false, amount_font_size: 46, validity: '', receiveAmount: 0, validity_state: true, detail: { postId: '', postBizData: { imagePath: '', postUserInfo: {}, }, }, currencyIconPath: '', customCover: '', customGiveaway: '', title: 'DeNet Giveaway', metaTitle: 'DeNet: An Easy Web3 Tool For GIVEAWAY / AIRDROP', jumpUrl: jumpUrl, status: '', reportStatus: 'normal', page_index: 1, page_size: 20, luck_list: [], luck_list_end: false, config: { extensionsInstallChannel: 'officeDownload', // chromeAppStore extensionsInstallUrl: '', }, }; }, computed: { // 货币类型的奖品 isMoneyPrize() { return this.detail.postBizData.rewardType === RewardType.money; }, }, components: { FontAmount, MobileGuidePage, }, head() { return { type: '', title: this.title, appVersionCode: 3, meta: [ // facebook { name: 'og:url', content: this.jumpUrl + this.detail.postId, }, { name: 'og:title', content: this.metaTitle, }, { name: 'og:image', content: this.detail.postBizData.imagePath || this.detail.postBizData.customPosterUninstalled || '', }, // twitter { name: 'twitter:card', content: 'summary_large_image', }, { name: 'twitter:url', content: this.jumpUrl + this.detail.postId, }, { name: 'twitter:title', content: this.metaTitle, }, { name: 'twitter:image', content: this.detail.postBizData.imagePath || this.detail.postBizData.customPosterUninstalled || '', }, ], }; }, methods: { copyLinkHandle() { Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.mobileLandingPage, appType, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.buttonClick, objectType: Report.objectType.copyLinkButton, postId: this.detail.postId, srcContentId: this.detail.srcContentId, senderId: this.detail.srcUserId, redPacketType: 0, customCover: this.customCover, }, }, }); }, clickOpenChrome() { window.open('https://www.google.com/chrome'); let extParams = this.isMobile() ? {} : { status: this.reportStatus }; Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.newUserLandingPage, appType, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.buttonClick, objectType: Report.objectType.installButton, postId: this.detail.postId, srcContentId: this.detail.srcContentId, senderId: this.detail.srcUserId, redPacketType: 0, customCover: this.customCover, }, extParams: extParams, }, }); }, isMobile() { let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i); return flag; }, installExtension() { let { extensionsInstallChannel, extensionsInstallUrl } = this.config; let url = extensionsInstallUrl; let extParams = this.isMobile() ? {} : { status: this.reportStatus }; Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.newUserLandingPage, appType, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.buttonClick, objectType: Report.objectType.installButton, postId: this.detail.postId, srcContentId: this.detail.srcContentId, senderId: this.detail.srcUserId, redPacketType: 0, customCover: this.customCover, }, extParams: extParams, }, }); switch (extensionsInstallChannel) { case 'officeDownload': location.href = url; this.$router.push({ path: '/install', }); break; case 'chromeAppStore': window.open(extensionsInstallUrl); break; } }, formatTime(time, _type = 'MM-DD HH:mm:ss') { return moment(time).format(_type); }, guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); }, handleScroll(e) { e = e.target; if (this.luck_list_end) { return; } if ((e.clientHeight + e.scrollTop) / e.scrollHeight > 0.8) { this.luck_list_end = false; this.page_index++; this.getReceivedList(); } }, getFontSize(amount) { let _num = parseInt(360 / amount.length); this.amount_font_size = _num < 46 ? _num : 46; }, setCookieMid() { let _cookie_mid_arr = Cookies.get('mid') || []; if (_cookie_mid_arr.length > 0) { this.mid = JSON.parse(_cookie_mid_arr)[0].mid; } else { this.mid = this.guid(); Cookies.set('mid', JSON.stringify([{ mid: this.mid }]), { expires: 1000 }); } }, async getRedPacket() { this.currencyIconPath = this.detail.postBizData.currencyIconPath; let { data } = await axios.post(`${baseURL}/denet/post/luckdrop/receiveLuckdrop`, { baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, }, params: { postId: this.detail.postId || '', }, }); this.show_home = true; switch (data.code.toString()) { case '0': this.getDetail(); if (data.data.receiveAmount == '0') { this.reportStatus = 'empty'; this.status = 'nothing'; } else { if (data.data.newReceived) { this.status = 'not-open'; setTimeout(() => { this.status = 'open'; }, 3000); this.receiveAmount = data.data.receiveAmount; } else { this.status = 'opened'; } } this.getValidity(data.data.endTimestamp); this.receiveAmount = data.data.receiveAmount; this.getFontSize(this.receiveAmount); break; case '2003': // this.status = 'expire' this.reportStatus = 'empty'; this.getDetail(); this.status = 'nothing'; break; // 红包被领完了 case '2008': this.reportStatus = 'empty'; this.getDetail(); this.status = 'nothing'; break; case '2029': // 推文未发布 this.status = 'error'; break; default: console.log('getRedPacket', data); // this.show_home = false this.reportStatus = 'empty'; this.getDetail(); this.status = 'nothing'; break; } // 领取列表分页 this.getReceivedList(); }, async getReceivedList() { let { data } = await axios.post(`${baseURL}/denet/post/luckdrop/getReceivedList`, { baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, }, params: { pageNum: this.page_index, pageSize: this.page_size, postId: this.detail.postId || '', }, }); if (data.code == 0) { if (data.data.length > 0) { this.luck_list = this.luck_list.concat(data.data); this.luck_list_end = false; } else { this.luck_list_end = true; } } else { console.log('getReceivedList', data); } }, getValidity(end_time) { let _d1, _d2, _d3, _h, _m, _s; let timer = setInterval(() => { let _time = new Date().getTime(); _d3 = end_time - _time; if (_d3 > 0) { _d1 = moment(end_time); _d2 = moment(_time); _h = moment.duration(_d1.diff(_d2)).hours(); _m = moment.duration(_d1.diff(_d2)).minutes(); _s = moment.duration(_d1.diff(_d2)).seconds(); if (_h < 10) { _h = '0' + _h; } if (_m < 10) { _m = '0' + _m; } if (_s < 10) { _s = '0' + _s; } this.validity = `${_h}:${_m}:${_s}`; } else { clearInterval(timer); } }, 1000); }, setPickupInfo() { let pickupInfo = { srcContentId: this.detail.srcContentId || '', postNickName: this.detail.postBizData.postUserInfo.nickName || '', createTime: Date.now(), jump_type: 'red_packet', }; Cookies.set('jump_info', JSON.stringify(pickupInfo), { expires: 100 }); }, async getDetail() { let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, { baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, }, params: { postId: this.detail.postId, }, }); if (data.code == 0) { this.detail.postBizData = JSON.parse(data.data.postBizData); this.customCover = this.detail.postBizData && this.detail.postBizData.posterType == 2 ? 1 : 0; this.customGiveaway = this.detail.postBizData && this.detail.postBizData.rewardType == 2 ? 1 : 0; } }, async getConfig() { let { data } = await axios.post(`${baseURL}/denet/base/config/getFrontConfig`, { baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, }, params: {}, }); if (data.code == 0) { this.config = data.data; } }, }, async asyncData(params) { let { route } = params; let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, { baseInfo: { appVersionCode: appVersionCode, mid: '00000000-0000-0000-0000-000000000000', }, params: { postId: route.params.id || '', }, }); if (data.code == 0) { if (data.data && data.data.postBizData && typeof data.data.postBizData == 'string') { data.data.postBizData = JSON.parse(data.data.postBizData); } if (data.data.postBizData === null) { data.data.postBizData = { postUserInfo: {}, }; } return { detail: data.data, customCover: data.data.postBizData && data.data.postBizData.posterType == 2 ? 1 : 0, customGiveaway: data.data.postBizData && data.data.postBizData.rewardType == 2 ? 1 : 0, }; } }, mounted() { this.getConfig(); if (!this.detail.postId) { return; } console.log(this.detail); //改变font-size // (function (doc, win) { // var docEI = doc.documentElement, // resizeEvt = 'orientationchange' in window ? 'orientataionchange' : 'resize', // recalc = function () { // var clientWidth = docEI.clientWidth; // if (!clientWidth) return; // //100是字体大小,1510是开发时浏览器窗口的宽度,等比计算 // docEI.style.fontSize = 10 * (clientWidth / 1510) + 'px'; // } // if (!doc.addEventListener) return; // win.addEventListener(resizeEvt, recalc, false); // doc.addEventListener('DOMContentLoaded', recalc, false); // })(document, window); document.documentElement.style.fontSize = '62.5%'; if (this.isMobile()) { this.setCookieMid(); setTimeout(() => { Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.mobileLandingPage, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.pageView, postId: this.detail.postId, redPacketType: 0, }, }, }); }, 500); this.show_moblie = true; this.cp_link = window.location.href; // 复制链接 var clipboard = new ClipboardJS('.btn'); clipboard.on('success', function (e) { Toast('copy success'); console.info('Action:', e.action); console.info('Text:', e.text); console.info('Trigger:', e.trigger); e.clearSelection(); }); clipboard.on('error', function (e) { this.layer_show = true; console.error('Action:', e.action); console.error('Trigger:', e.trigger); }); // 领取列表分页 this.getReceivedList(); } else if (isBrowser() == 'chrome') { // 领取任务红包 this.setCookieMid(); // 是否被领完 if (this.detail.postBizData.receiveCount < this.detail.postBizData.totalCount) { this.getRedPacket(); } else { this.show_home = true; this.status = 'nothing'; this.reportStatus = 'empty'; } this.setPickupInfo(); setTimeout(() => { Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.newUserLandingPage, appType, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.pageView, postId: this.detail.postId, srcContentId: this.detail.srcContentId, senderId: this.detail.srcUserId, redPacketType: 0, customCover: this.customCover, }, extParams: { status: this.reportStatus, }, }, }); }, 1000); } else { this.show_home = true; this.status = 'no-chrome'; this.reportStatus = 'not-chrome'; Report.reportLog({ baseInfo: { appVersionCode: this.appVersionCode, mid: this.mid, pageSource: Report.pageSource.newUserLandingPage, appType, machineCode: this.mid, }, params: { eventData: { businessType: Report.businessType.pageView, postId: this.detail.postId, srcContentId: this.detail.srcContentId, senderId: this.detail.srcUserId, redPacketType: 0, customCover: this.customCover, }, extParams: { status: this.reportStatus, }, }, }); } }, }; </script> <style lang="scss"> html, body, #__nuxt, #__layout { width: 100%; height: 100%; padding: 0; margin: 0; } .moblie { display: flex; flex-wrap: wrap; height: 100%; align-content: flex-start; flex-direction: column; .layer { position: fixed; width: 100%; height: 100%; top: 0; left: 0; background: rgba(0, 0, 0, 0.5); .layer-box { width: 30rem; height: 17rem; background: #ffffff; border-radius: 11px; opacity: 1; position: absolute; top: 25rem; left: 50%; margin-left: -15rem; .layer-txt { margin: 3rem 0; width: 100%; padding: 0 2.7rem; font-weight: 600; font-size: 1.8rem; text-align: center; } .layer-btn { width: 19rem; height: 4rem; background: #389aff; border-radius: 100px; margin: 0 auto; text-align: center; line-height: 4rem; color: #fff; font-weight: 600; font-size: 1.8rem; } } } .head-area { width: 100%; height: 11rem; text-align: center; letter-spacing: 0.3px; font-size: 2rem; text-align: center; color: #fff; background: #389aff; border-radius: 0 586px 586px/0 0 104px 104px; display: flex; align-items: center; justify-content: center; .gift { margin-right: 1.4rem; img { width: 5.2rem; } } .txt { font-size: 1.8rem; text-align: left; } } .luck-list-title { /* margin-top: 47px;*/ margin: 0 16px; padding: 14px 0 11px 0; background: #fff; display: flex; justify-content: space-between; color: #b0b0b0; border-bottom: 1px solid #d1d1d1; } .luck-list { flex: 1; width: 100%; overflow-y: auto; .luck-item { display: flex; padding: 12px 0; margin: 0 16px; border-bottom: 1px solid #f2f2f2; justify-content: space-between; position: relative; img:first-child { border-radius: 50%; } .luck-king { position: absolute; top: 36px; right: 0px; display: flex; align-items: center; img { width: 22px; height: 19px; margin: 0; } span { font-weight: 500; font-size: 12px; line-height: 14px; letter-spacing: 0.3px; color: #f5b945; } } img { width: 42px; height: 42px; margin-right: 12px; } .luck-content { flex: auto; .luck-title { font-weight: 500; font-size: 16px; letter-spacing: 0.3px; color: #444444; } .luck-time { font-weight: 400; font-size: 12px; line-height: 14px; color: #9b9b9b; } } .luck-money { display: flex; height: 17px; align-items: center; img { width: 14px; height: 14px; margin-right: 6px; } .luck-money-txt { font-weight: 500; font-size: 14px; /* identical to box height */ text-align: right; letter-spacing: 0.3px; color: #444444; } } .luck-custom-prize { font-weight: 500; font-size: 14px; letter-spacing: 0.3px; color: #f5b945; } } .luck-item:last-child { border: 0; } } .area-cp-link { background: #fff; width: 100%; flex-wrap: wrap; height: 18rem; box-shadow: 0px -4px 10px rgba(0, 0, 0, 0.1); border-top-left-radius: 1rem; border-top-right-radius: 1rem; .area-list { width: 34.3rem; margin: 1.5rem auto; .item { clear: both; overflow: hidden; margin: 0.7rem 0; font-size: 1.6rem; font-weight: 500; .icon { float: left; margin-right: 0.8rem; } .font { float: left; margin-right: 0.8rem; } .pc { float: left; } } } .area-content { background: #f4f4f4; padding: 0.7rem 1rem; margin: 0 auto 1rem; width: 34.3rem; font-size: 1.3rem; border-radius: 0.5rem; word-break: break-all; } .area-btn { flex: 1; display: flex; justify-content: center; .btn { width: 34.3rem; height: 4rem; background: #389aff; border-radius: 100px; font-size: 1.8rem; color: #ffffff; } } } } .content { width: 100%; height: 100%; background-size: 100%; background-repeat: no-repeat; position: relative; font-family: 'SF Pro Display'; font-style: normal; font-weight: 600; .head-in-custom { position: absolute; top: 9rem; left: 30rem; background: #fff; display: flex; align-items: center; font-weight: 500; font-size: 15px; color: #000; height: 54px; img { width: 30px; height: 30px; border-radius: 50%; margin-right: 10px; } } .not-open { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; img { width: 20rem; height: 20rem; } } .logo { position: absolute; left: 4rem; top: 1.5rem; img { width: 10.7rem; height: 3.4rem; } } .key_packet { animation: key_packet 3s; animation-delay: 0s; animation-fill-mode: forwards; } .redBagCustom { display: flex; justify-content: flex-start; flex-direction: column; position: absolute; top: 16rem; left: 30.6rem; width: 37.5rem; border-radius: 2rem; overflow-y: hidden; box-shadow: 0 0.3rem 2rem rgba(0, 0, 0, 0.2); background: #fff; .customImg { width: 100%; min-height: 373px; } .customBottom { width: 100%; background: #111214; padding: 10px 16px; font-weight: 500; font-size: 12px; line-height: 14px; letter-spacing: 0.3px; color: #838383; line-height: 20px; .theme { display: flex; height: 20px; align-items: center; justify-content: flex-start; .icon { width: 12px; } .time { margin: 0 4px; color: #1d9bf0; } } .winner-info { display: flex; height: 20px; align-items: center; justify-content: flex-start; .count { color: #1d9bf0; margin-right: 4px; } .prize-name { color: #1d9bf0; margin-left: 4px; } } } } .redBag { display: flex; justify-content: flex-start; flex-direction: column; position: absolute; top: 14rem; left: 30.6rem; width: 37.5rem; height: 50rem; border-radius: 2rem; overflow-y: hidden; box-shadow: 0 0 5px #888888; background: #fff; &.auto-height { height: auto; } .money-area { width: 100%; position: absolute; top: 65px; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; .txt { font-weight: 800; font-size: 16px; text-align: center; letter-spacing: 0.3px; color: #ffffff; } .coin { text-align: center; margin-top: 6px; margin-bottom: 7px; display: flex; justify-content: center; align-items: center; width: 90%; img { width: 46px; height: 46px; border-radius: 50%; border: 3px solid #ffffff; } span { margin-left: 15px; font-weight: 800; font-size: 60px; line-height: 76px; color: #ffffff; } } .people { font-weight: 800; font-size: 13px; line-height: 16px; letter-spacing: 0.05em; text-align: center; color: #ffffff; } } .title { position: absolute; top: 15px; left: 15px; z-index: 3; display: flex; align-items: center; img { width: 24px; height: 24px; border: 2px solid #fff; border-radius: 50%; } span { margin-left: 10px; font-weight: 600; font-size: 16px; letter-spacing: 0.3px; color: #fff; } } img { width: 100%; } .up { position: absolute; top: 0; z-index: 1; } .down { position: absolute; top: 253px; } .open { width: 335px; height: 50px; cursor: pointer; position: absolute; bottom: 28px; left: 50%; margin-left: -167.5px; z-index: 4; } .open-gif { width: 200px; height: 200px; text-align: center; position: absolute; bottom: 70px; left: 50%; margin-left: -100px; z-index: 3; } } .redPacket { display: flex; justify-content: flex-start; flex-direction: column; position: absolute; top: 9rem; left: 50%; width: 37.5rem; margin-left: -18rem; height: 65rem; border-radius: 2rem; // background: red; overflow-y: hidden; box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.1); background: #fff; .top { top: 0; position: absolute; width: 100%; z-index: 12; } .down { bottom: 0; position: absolute; height: 32.3rem; z-index: 11; } .head { position: relative; .head-title { position: absolute; top: 0; width: 100%; display: flex; align-items: center; justify-content: center; height: 3.6rem; background: rgba(255, 255, 255, 0.1); img { width: 1.8rem; height: 1.8rem; border-radius: 50%; border: 1px solid #fff; } span { margin-left: 0.8rem; font-size: 1.2rem; color: #fff; } } .head-txt { margin-top: 4.7rem; font-size: 2rem; text-align: center; color: #fff; } .head-area { height: 19rem; text-align: center; letter-spacing: 0.3px; font-size: 2rem; text-align: center; color: #fff; background: #389aff; border-radius: 0 586px 586px/0 0 164px 164px; .txt { padding-top: 8.5rem; } } .head-money { .txt { padding-top: 6.8rem; font-weight: 800; font-size: 1.5rem; text-align: center; letter-spacing: 0.3px; } .head-money-area { display: flex; width: 100%; justify-content: center; align-items: center; img { width: 4rem; height: 4rem; border: 2px solid #ffffff; border-radius: 100px; } span { margin-left: 1.3rem; font-size: 4.6rem; word-break: break-all; } } } } .luck-list-title { /* margin-top: 47px;*/ margin: 0 16px; padding: 14px 0 11px 0; background: #fff; display: flex; font-weight: 500; justify-content: space-between; color: #b0b0b0; border-bottom: 1px solid #f2f2f2; } .luck-list { background: #fff; overflow-y: auto; .luck-item { display: flex; padding: 12px 0; margin: 0 16px; border-bottom: 1px solid #f2f2f2; justify-content: space-between; position: relative; img:first-child { border-radius: 50%; } .luck-king { position: absolute; top: 36px; right: 0px; display: flex; align-items: center; img { width: 22px; height: 19px; margin: 0; } span { font-weight: 500; font-size: 12px; line-height: 14px; letter-spacing: 0.3px; color: #f5b945; } } img { width: 42px; height: 42px; margin-right: 12px; } .luck-content { flex: auto; .luck-title { font-weight: 500; font-size: 16px; letter-spacing: 0.3px; color: #444444; margin-bottom: 5px; } .luck-time { font-weight: 400; font-size: 12px; line-height: 14px; color: #b0b0b0; } } .luck-money { display: flex; height: 17px; align-items: center; img { width: 14px; height: 14px; margin-right: 6px; } .luck-money-txt { font-weight: 500; font-size: 14px; /* identical to box height */ text-align: right; letter-spacing: 0.3px; color: #444444; } } .luck-custom-prize { font-weight: 500; font-size: 14px; letter-spacing: 0.3px; color: #f5b945; } } .luck-item:last-child { border: 0; } } .area { position: absolute; z-index: 112; width: 100%; .title { z-index: 11; margin-top: 8.5rem; text-align: center; img { width: 3.6rem; height: 3.6rem; border: 2px solid #fff4db; border-radius: 50%; } span { letter-spacing: 0.3px; font-size: 1.6rem; color: #fff2d3; } } .txt { font-size: 4rem; text-align: center; letter-spacing: 0.03rem; color: #fff2d3; } } .key_area { animation: key_area 1s; animation-delay: 1s; animation-fill-mode: forwards; } } .redPacket2 { left: 43.6rem; margin-left: -18rem; } .key_install { opacity: 0; animation: key_install 2s; animation-delay: 0s; animation-fill-mode: forwards; } .install { position: absolute; top: 20rem; left: 73.5rem; .title { font-size: 4.8rem; color: #000000; letter-spacing: 0.3px; } .validity { margin-top: 1rem; color: #ff0000; width: 40rem; height: 3.3rem; line-height: 3.3rem; font-weight: normal; span { font-size: 1.4rem; } } .flow { position: absolute; margin-top: 4rem; .line { position: absolute; height: 16rem; border: 1px solid #e0e0e0; top: 3rem; left: 1.2rem; } .area_num { display: flex; align-items: center; .num { width: 2.4rem; height: 2.4rem; background-color: rgba(56, 154, 255, 1); border-radius: 50%; color: #fff; text-align: center; line-height: 2.4rem; font-size: 1.4rem; } span { margin-left: 1.5rem; color: #000000; font-size: 1.8rem; } } .tip { margin-left: 4rem; margin-top: 0.7rem; font-size: 1.4rem; color: #a4a4a4; } .install_btn { cursor: pointer; margin-left: 4rem; margin-top: 2rem; margin-bottom: 6.7rem; width: 23rem; height: 5.8rem; background: #389aff; border-radius: 10rem; color: #fff; line-height: 5.8rem; text-align: center; font-size: 2rem; } } .tip { margin-top: 0.7rem; font-size: 1.4rem; color: #a4a4a4; } .install_btn { cursor: pointer; margin-top: 2rem; margin-bottom: 6.7rem; width: 23rem; height: 5.8rem; background: #389aff; border-radius: 10rem; color: #fff; line-height: 5.8rem; text-align: center; font-size: 2rem; } } .install-error { left: 78.5rem; .install_chrome { cursor: pointer; width: 24.3rem; height: 5.8rem; font-size: 2rem; font-weight: 500; letter-spacing: 0.3px; display: flex; align-items: center; background: #ffffff; border: 1px solid #e8e8e8; border-radius: 10rem; margin-top: 3.3rem; img { width: 3.2rem; height: 3.2rem; margin-left: 3.3rem; } span { margin-left: 1.2rem; } } } } @keyframes key_area { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes key_install { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes key_packet { 0% { } 100% { left: 30.6rem; margin-left: -18rem; } } </style>