|
@@ -1,9 +1,8 @@
|
|
|
+<!-- 红包玩法落地页 -->
|
|
|
<template>
|
|
|
<div class="content">
|
|
|
<template v-if="isLoading">
|
|
|
- <img
|
|
|
- class="loading"
|
|
|
- src="../static/svg/icon-loading.svg" />
|
|
|
+ <img class="loading" src="../static/svg/icon-loading.svg" />
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<template v-if="isMobile">
|
|
@@ -13,29 +12,46 @@
|
|
|
custom: detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled,
|
|
|
}">
|
|
|
<template v-if="status === 'not-open'">
|
|
|
- <template v-if="detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled">
|
|
|
+ <template
|
|
|
+ v-if="detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled">
|
|
|
<img class="customImg" :src="detail.postBizData.customPosterInstalled" />
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <img class="lottery" :src=" require('../static/svg/icon-luck-mark.svg') " />
|
|
|
- <div class="head">
|
|
|
- <img :src="detail.postBizData.postUserInfo.avatarUrl" />
|
|
|
- <span>{{ detail.postBizData.postUserInfo.nickName }}</span>
|
|
|
- </div>
|
|
|
- <div class="price">
|
|
|
- <div class="usdt">{{ detail.postBizData.currencySymbol }} GIVEAWAY</div>
|
|
|
- <div class="money">
|
|
|
- <img :src="detail.postBizData.currencyIconPath" />
|
|
|
- <font-amount :fontSize="60" :amount="detail.postBizData.amountValue"></font-amount>
|
|
|
+ <template v-if="isMoneyPrize">
|
|
|
+ <img class="lottery" :src=" require('../static/svg/icon-luck-mark.svg') " />
|
|
|
+ <div class="head">
|
|
|
+ <img :src="detail.postBizData.postUserInfo.avatarUrl" />
|
|
|
+ <span>{{ detail.postBizData.postUserInfo.nickName }}</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="time">
|
|
|
- <img class="img" :src=" require('../static/svg/icon-time.svg') " />
|
|
|
- {{ validity || '00:00:00' }}
|
|
|
- </div>
|
|
|
- <div class="box">
|
|
|
- <img src="../static/subject/icon-box.png" />
|
|
|
- </div>
|
|
|
+ <div class="price">
|
|
|
+ <div class="usdt">{{ detail.postBizData.currencySymbol }} GIVEAWAY</div>
|
|
|
+ <div class="money">
|
|
|
+ <img :src="detail.postBizData.currencyIconPath" />
|
|
|
+ <font-amount :fontSize="60" :amount="detail.postBizData.amountValue">
|
|
|
+ </font-amount>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="time">
|
|
|
+ <img class="img" :src=" require('../static/svg/icon-time.svg') " />
|
|
|
+ {{ validity || '00:00:00' }}
|
|
|
+ </div>
|
|
|
+ <div class="box">
|
|
|
+ <img src="../static/subject/icon-box.png" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-else>
|
|
|
+ <custom-card-cover :totalCount="detail.postBizData.totalCount"
|
|
|
+ :amountValue="detail.postBizData.amountValue"
|
|
|
+ :tokenSymbol="detail.postBizData.tokenSymbol"
|
|
|
+ :currencyIconUrl="detail.postBizData.iconPath" :playType="2" :validity="validity"
|
|
|
+ :userInfo="{
|
|
|
+ nickName: detail.postBizData.postUserInfo.nickName,
|
|
|
+ avatarUrl: detail.postBizData.postUserInfo.avatarUrl
|
|
|
+ }" :rewardType="detail.postBizData.rewardType"
|
|
|
+ :customizedReward="detail.postBizData.customizedReward" :showBottomInfo="false">
|
|
|
+ </custom-card-cover>
|
|
|
+ </template>
|
|
|
</template>
|
|
|
</template>
|
|
|
<template v-else>
|
|
@@ -47,10 +63,11 @@
|
|
|
<template v-else-if="status === 'expire'">
|
|
|
<!-- <img class="img" :src=" require('../static/svg/icon-luck-complete.svg') " />
|
|
|
<p class="tips">This Draw is Complete</p> -->
|
|
|
- <p class="expire">This Giveaways<br/>expired on {{ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</p>
|
|
|
+ <p class="expire">This Giveaways<br />expired on {{
|
|
|
+ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</p>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <p class="win">🎉 Awesome! You are Winner!</p>
|
|
|
+ <p class="win">🎉 Awesome! You Will Get</p>
|
|
|
<div class="win-money">
|
|
|
<img :src="detail.postBizData.currencyIconPath" />
|
|
|
<font-amount :fontSize="46" :amount="receiveAmount"></font-amount>
|
|
@@ -58,25 +75,31 @@
|
|
|
</template>
|
|
|
</div>
|
|
|
<div class="succTitle">
|
|
|
- <span>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} Winners</span>
|
|
|
- <span>{{ detail.postBizData.receiveAmountValue }} / {{ detail.postBizData.amountValue || '' }} {{ detail.postBizData.currencySymbol || '' }}</span>
|
|
|
+ <span>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }}
|
|
|
+ Winners</span>
|
|
|
+ <span v-if="isMoneyPrize">{{ detail.postBizData.receiveAmountValue }} / {{
|
|
|
+ detail.postBizData.amountValue || '' }} {{ detail.postBizData.currencySymbol || ''
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
<div class="luck-list" @scroll="handleScroll($event)">
|
|
|
<div class="luck-item" v-for="item, i in luck_list" v-bind:key="i">
|
|
|
<div class="userLogo">
|
|
|
- <img class="medal" v-if="i < 2" :src=" require('../static/svg/icon-medal-' + i + '.svg') " />
|
|
|
- <img class="header" v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
|
|
|
+ <img class="medal" v-if="i < 2"
|
|
|
+ :src=" require('../static/svg/icon-medal-' + i + '.svg') " />
|
|
|
+ <img class="header" v-if="item.simpleUserInfoVO.avatarUrl"
|
|
|
+ :src="item.simpleUserInfoVO.avatarUrl" alt />
|
|
|
<img class="header" v-else src="/svg/icon-twitter.svg" alt />
|
|
|
</div>
|
|
|
<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">
|
|
|
+ <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-king" v-if="item.maxAmount">
|
|
|
+ <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>
|
|
@@ -99,7 +122,7 @@
|
|
|
{{ linkHref }}
|
|
|
</div>
|
|
|
<div class="area-btn">
|
|
|
- <div class="btn" :data-clipboard-text="linkHref">Copy Link</div>
|
|
|
+ <div class="btn" :data-clipboard-text="linkHref" @click="copyLinkHandle">Copy Link</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="layer" v-show="layer_show">
|
|
@@ -109,56 +132,90 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 手机端 -->
|
|
|
</template>
|
|
|
+ <!-- PC端 -->
|
|
|
<template v-else>
|
|
|
<div class="logo">
|
|
|
<img src="/img/icon-logo.png" />
|
|
|
</div>
|
|
|
<div class="show">
|
|
|
<div class="center">
|
|
|
+ <div class="head-in-custom" v-if="!isMoneyPrize">
|
|
|
+ <img :src="detail.postBizData.postUserInfo.avatarUrl" />
|
|
|
+ <span>{{ detail.postBizData.postUserInfo.nickName }}</span>
|
|
|
+ </div>
|
|
|
<div class="giveaway" :class="{
|
|
|
bg: status === 'not-open',
|
|
|
custom: detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled,
|
|
|
+ 'auto-height': !isMoneyPrize
|
|
|
}">
|
|
|
- <template v-if="status === 'not-open'">
|
|
|
- <template v-if="detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled">
|
|
|
- <img class="customImg" :src="detail.postBizData.customPosterInstalled" />
|
|
|
- <div class="customBottom">
|
|
|
- <div class="theme">
|
|
|
- <img class="icon" :src="require('../static/svg/icon-last-time.svg')"/>
|
|
|
- <span class="time2">{{ validity || '00:00:00' }}</span>
|
|
|
- <span class="info">Left</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 v-if="status === 'not-open'">
|
|
|
+ <template
|
|
|
+ v-if="detail.postBizData.posterType === 2 && detail.postBizData.customPosterInstalled">
|
|
|
+ <!-- <img class="customImg" :src="detail.postBizData.customPosterInstalled" />
|
|
|
+ <div class="customBottom">
|
|
|
+ <div class="theme">
|
|
|
+ <img class="icon" :src="require('../static/svg/icon-last-time.svg')"/>
|
|
|
+ <span class="time2">{{ validity || '00:00:00' }}</span>
|
|
|
+ <span class="info">Left</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.tokenSymbol"
|
|
|
+ :currencyIconUrl="detail.postBizData.iconPath" :playType="2" :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>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <img class="lottery" :src=" require('../static/svg/icon-luck-mark.svg') " />
|
|
|
- <div class="head">
|
|
|
- <img :src="detail.postBizData.postUserInfo.avatarUrl" />
|
|
|
- <span>{{ detail.postBizData.postUserInfo.nickName }}</span>
|
|
|
- </div>
|
|
|
- <div class="price">
|
|
|
- <div class="usdt">{{ detail.postBizData.currencySymbol }} GIVEAWAY</div>
|
|
|
- <div class="money">
|
|
|
- <img :src="detail.postBizData.currencyIconPath" />
|
|
|
- <font-amount :fontSize="60" :amount="detail.postBizData.amountValue"></font-amount>
|
|
|
+ <!-- 旧版 样式,后续更新时在 custom-card-cover 公共组件内维护-->
|
|
|
+ <template v-if="isMoneyPrize">
|
|
|
+ <img class="lottery" :src=" require('../static/svg/icon-luck-mark.svg') " />
|
|
|
+ <div class="head">
|
|
|
+ <img :src="detail.postBizData.postUserInfo.avatarUrl" />
|
|
|
+ <span>{{ detail.postBizData.postUserInfo.nickName }}</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="time">
|
|
|
- <img class="img" :src=" require('../static/svg/icon-time.svg') " />
|
|
|
- {{ validity || '00:00:00' }}
|
|
|
- </div>
|
|
|
- <div class="box">
|
|
|
- <img src="../static/subject/icon-box.png" />
|
|
|
- </div>
|
|
|
+ <div class="price">
|
|
|
+ <div class="usdt">{{ detail.postBizData.currencySymbol }} GIVEAWAY</div>
|
|
|
+ <div class="money">
|
|
|
+ <img :src="detail.postBizData.currencyIconPath" />
|
|
|
+ <font-amount :fontSize="60" :amount="detail.postBizData.amountValue">
|
|
|
+ </font-amount>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="time">
|
|
|
+ <img class="img" :src=" require('../static/svg/icon-time.svg') " />
|
|
|
+ {{ validity || '00:00:00' }}
|
|
|
+ </div>
|
|
|
+ <div class="box">
|
|
|
+ <img src="../static/subject/icon-box.png" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-else>
|
|
|
+ <custom-card-cover :totalCount="detail.postBizData.totalCount"
|
|
|
+ :amountValue="detail.postBizData.amountValue"
|
|
|
+ :tokenSymbol="detail.postBizData.tokenSymbol"
|
|
|
+ :currencyIconUrl="detail.postBizData.iconPath" :playType="2"
|
|
|
+ :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>
|
|
|
</template>
|
|
|
- </template>
|
|
|
+ </div>
|
|
|
<template v-else>
|
|
|
<div class="succTop">
|
|
|
<template v-if="status === 'opened'">
|
|
@@ -168,7 +225,8 @@
|
|
|
<template v-else-if="status === 'expire'">
|
|
|
<!-- <img class="img" :src=" require('../static/svg/icon-luck-complete.svg') " />
|
|
|
<p class="tips">This Draw is Complete</p> -->
|
|
|
- <p class="expire">This Giveaways<br/>expired on {{ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</p>
|
|
|
+ <p class="expire">This Giveaways<br />expired on {{
|
|
|
+ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</p>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<p class="win">🎉 Awesome! You are Winner!</p>
|
|
@@ -179,25 +237,33 @@
|
|
|
</template>
|
|
|
</div>
|
|
|
<div class="succTitle">
|
|
|
- <span>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} Winners</span>
|
|
|
- <span>{{ detail.postBizData.receiveAmountValue }} / {{ detail.postBizData.amountValue || '' }} {{ detail.postBizData.currencySymbol || '' }}</span>
|
|
|
+ <span>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount ||
|
|
|
+ 0 }} Winners</span>
|
|
|
+ <span v-if="isMoneyPrize">{{ detail.postBizData.receiveAmountValue }} / {{
|
|
|
+ detail.postBizData.amountValue || '' }} {{ detail.postBizData.currencySymbol ||
|
|
|
+ '' }}</span>
|
|
|
</div>
|
|
|
<div class="luck-list" @scroll="handleScroll($event)">
|
|
|
<div class="luck-item" v-for="item, i in luck_list" v-bind:key="i">
|
|
|
<div class="userLogo">
|
|
|
- <img class="medal" v-if="i < 2" :src=" require('../static/svg/icon-medal-' + i + '.svg') " />
|
|
|
- <img class="header" v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
|
|
|
+ <img class="medal" v-if="i < 2"
|
|
|
+ :src=" require('../static/svg/icon-medal-' + i + '.svg') " />
|
|
|
+ <img class="header" v-if="item.simpleUserInfoVO.avatarUrl"
|
|
|
+ :src="item.simpleUserInfoVO.avatarUrl" alt />
|
|
|
<img class="header" v-else src="/svg/icon-twitter.svg" alt />
|
|
|
</div>
|
|
|
<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 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">
|
|
|
+ <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-king" v-if="item.maxAmount">
|
|
|
+ <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>
|
|
@@ -208,18 +274,20 @@
|
|
|
<div class="desc">
|
|
|
<template v-if="isChrome">
|
|
|
<template v-if="status === 'not-open'">
|
|
|
- <div class="title">Install DeNet Plugin<br/>to Draw Prizes</div>
|
|
|
+ <div class="title">Install DeNet Plugin<br />to Draw Prizes</div>
|
|
|
<div class="issue">DeNet will detect task situation to issue Giveaway</div>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <div class="title">Install the Denet plugin<br/>to not miss the next draw</div>
|
|
|
+ <div class="title">Install the Denet plugin<br />to not miss the next draw</div>
|
|
|
</template>
|
|
|
- <img class="button" @click="installExtension" src="../static/svg/icon-install-nft-plugin.svg" />
|
|
|
+ <img class="button" @click="installExtension"
|
|
|
+ src="../static/svg/icon-install-nft-plugin.svg" />
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
<div class="title">Get Giveaway<br />with chrome</div>
|
|
|
<div class="issue">Only supports getting Giveaways through chrome</div>
|
|
|
- <img class="button" @click="clickOpenChrome" src="../static/svg/icon-install-nft-chrome.svg" />
|
|
|
+ <img class="button" @click="clickOpenChrome"
|
|
|
+ src="../static/svg/icon-install-nft-chrome.svg" />
|
|
|
</template>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -235,6 +303,9 @@ import Cookies from 'js-cookie'
|
|
|
import { Toast } from 'vant';
|
|
|
import { isBrowser, appType, appVersionCode, formatSecondsAsDaysOrTime } from '../utils/help.js'
|
|
|
import FontAmount from '../components/FontAmount.vue'
|
|
|
+import CustomCardCover from '../components/CustomCardCover.vue'
|
|
|
+import Report from "../log-center/log"
|
|
|
+import { RewardType } from '../types';
|
|
|
|
|
|
var moment = require('moment');
|
|
|
var ClipboardJS = require('clipboard')
|
|
@@ -255,47 +326,47 @@ const baseURL = api[process.env.NUXT_ENV.MODE]
|
|
|
export default {
|
|
|
name: 'luckdraw',
|
|
|
components: {
|
|
|
- FontAmount,
|
|
|
+ FontAmount,CustomCardCover
|
|
|
},
|
|
|
head() {
|
|
|
return {
|
|
|
type: '',
|
|
|
title: this.title,
|
|
|
- appVersionCode: 3,
|
|
|
- meta: [
|
|
|
- // facebook
|
|
|
- {
|
|
|
- name: 'og:url',
|
|
|
- content: this.jumpUrl + 'luckdraw/' + 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 + 'luckdraw/' + this.detail.postId
|
|
|
- },
|
|
|
- {
|
|
|
- name: 'twitter:title',
|
|
|
- content: this.metaTitle
|
|
|
- },
|
|
|
- {
|
|
|
- name: 'twitter:image',
|
|
|
- content: this.detail.postBizData.imagePath || this.detail.postBizData.customPosterUninstalled || ''
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- },
|
|
|
+ appVersionCode: appVersionCode,
|
|
|
+ meta: [
|
|
|
+ // facebook
|
|
|
+ {
|
|
|
+ name: 'og:url',
|
|
|
+ content: this.jumpUrl + 'luckdraw/' + 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 + 'luckdraw/' + this.detail.postId
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'twitter:title',
|
|
|
+ content: this.metaTitle
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'twitter:image',
|
|
|
+ content: this.detail.postBizData.imagePath || this.detail.postBizData.customPosterUninstalled || ''
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
detail: {
|
|
@@ -316,12 +387,21 @@ export default {
|
|
|
mid: '',
|
|
|
status: '', // not-open->未打开 opened->没有抽中 success->抽中了 expire->过期
|
|
|
page_index: 1,
|
|
|
- page_size: 20,
|
|
|
+ page_size: 20,
|
|
|
validity: '',
|
|
|
receiveAmount: '0',
|
|
|
title: 'DeNet Giveaway',
|
|
|
jumpUrl: jumpUrl,
|
|
|
- metaTitle: 'DeNet: An Easy Web3 Tool For GIVEAWAY / AIRDROP',
|
|
|
+ metaTitle: 'DeNet: An Easy Web3 Tool For GIVEAWAY / AIRDROP',
|
|
|
+ reportStatus: 'normal',
|
|
|
+ customCover: '',
|
|
|
+ customGiveaway: '',
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ // 货币类型的奖品
|
|
|
+ isMoneyPrize() {
|
|
|
+ return this.detail.postBizData.rewardType === RewardType.money;
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -342,103 +422,157 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
async asyncData(params) {
|
|
|
- let { route } = params;
|
|
|
- let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, {
|
|
|
- baseInfo: {
|
|
|
- appVersionCode: appVersionCode,
|
|
|
- mid: function () {
|
|
|
- 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);
|
|
|
- });
|
|
|
- }()
|
|
|
- },
|
|
|
- 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: {}
|
|
|
- }
|
|
|
- }
|
|
|
- console.log('detail', data.data)
|
|
|
-
|
|
|
- return {
|
|
|
- detail: data.data,
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
+ let { route } = params;
|
|
|
+ let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, {
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: appVersionCode,
|
|
|
+ mid: function () {
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ }()
|
|
|
+ },
|
|
|
+ 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,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
methods: {
|
|
|
checkBrowser() {
|
|
|
this.linkHref = window.location.href;
|
|
|
this.isChrome = isBrowser() == 'chrome';
|
|
|
- this.isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
|
|
|
+ this.isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
|
|
|
if (!this.isChrome) {
|
|
|
this.status = 'no-chrome'
|
|
|
} else {
|
|
|
this.setPickupInfo()
|
|
|
}
|
|
|
- },
|
|
|
+ // report
|
|
|
+ setTimeout(() => {
|
|
|
+ this.reportData()
|
|
|
+ }, 500)
|
|
|
+ },
|
|
|
async getConfig() {
|
|
|
let { data } = await axios.post(`${baseURL}/denet/base/config/getFrontConfig`, {
|
|
|
- baseInfo: {
|
|
|
- appVersionCode: appVersionCode,
|
|
|
- mid: this.mid
|
|
|
- },
|
|
|
- params: {}
|
|
|
- })
|
|
|
- if (data.code == 0) {
|
|
|
- this.config = data.data;
|
|
|
- }
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: appVersionCode,
|
|
|
+ mid: this.mid
|
|
|
+ },
|
|
|
+ params: {}
|
|
|
+ })
|
|
|
+ if (data.code == 0) {
|
|
|
+ this.config = data.data;
|
|
|
+ }
|
|
|
},
|
|
|
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 })
|
|
|
- }
|
|
|
+ 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 })
|
|
|
+ }
|
|
|
},
|
|
|
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);
|
|
|
- });
|
|
|
- },
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ },
|
|
|
clickOpenChrome() {
|
|
|
- window.open('https://www.google.com/chrome')
|
|
|
- },
|
|
|
+ window.open('https://www.google.com/chrome')
|
|
|
+
|
|
|
+ let extParams = this.isMobile ? {} : { status: this.reportStatus }
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ },
|
|
|
+ extParams: extParams
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
installExtension() {
|
|
|
let { extensionsInstallChannel, extensionsInstallUrl } = this.config;
|
|
|
+ let extParams = this.isMobile ? {} : { status: this.reportStatus }
|
|
|
+
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ },
|
|
|
+ extParams: extParams,
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
switch (extensionsInstallChannel) {
|
|
|
- case "officeDownload":
|
|
|
- location.href = url;
|
|
|
- this.$router.push({
|
|
|
- path: '/install'
|
|
|
- })
|
|
|
- break;
|
|
|
- case "chromeAppStore":
|
|
|
- window.open(extensionsInstallUrl)
|
|
|
- break;
|
|
|
- }
|
|
|
+ case "officeDownload":
|
|
|
+ location.href = url;
|
|
|
+ this.$router.push({
|
|
|
+ path: '/install'
|
|
|
+ })
|
|
|
+ break;
|
|
|
+ case "chromeAppStore":
|
|
|
+ window.open(extensionsInstallUrl)
|
|
|
+ break;
|
|
|
+ }
|
|
|
},
|
|
|
setPickupInfo() {
|
|
|
let pickupInfo = {
|
|
|
- srcContentId: this.detail.srcContentId,
|
|
|
- postNickName: this.detail.postBizData.postUserInfo.nickName,
|
|
|
+ srcContentId: this.detail.srcContentId || '',
|
|
|
+ postNickName: this.detail.postBizData.postUserInfo.nickName || '',
|
|
|
createTime: Date.now(),
|
|
|
- };
|
|
|
- Cookies.set('pickup_info', JSON.stringify(pickupInfo), { expires: 100 });
|
|
|
+ jump_type: 'luck_draw',
|
|
|
+ };
|
|
|
+ Cookies.set('jump_info', JSON.stringify(pickupInfo), { expires: 100 });
|
|
|
},
|
|
|
formatTime(time, _type = 'MM-DD HH:mm:ss') {
|
|
|
- return moment(time).format(_type)
|
|
|
- },
|
|
|
+ return moment(time).format(_type)
|
|
|
+ },
|
|
|
getValidity(end_time) {
|
|
|
let timer = setInterval(() => {
|
|
|
let time = moment(new Date().getTime())
|
|
@@ -456,16 +590,16 @@ export default {
|
|
|
}, 1000)
|
|
|
},
|
|
|
handleScroll(e) {
|
|
|
- e = e.target
|
|
|
- if (this.luck_list_end) {
|
|
|
- return
|
|
|
- }
|
|
|
- if ((e.clientHeight + e.scrollTop) / e.scrollHeight > .8) {
|
|
|
- this.luck_list_end = false
|
|
|
- this.page_index++
|
|
|
- this.getReceivedList()
|
|
|
- }
|
|
|
- },
|
|
|
+ e = e.target
|
|
|
+ if (this.luck_list_end) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if ((e.clientHeight + e.scrollTop) / e.scrollHeight > .8) {
|
|
|
+ this.luck_list_end = false
|
|
|
+ this.page_index++
|
|
|
+ this.getReceivedList()
|
|
|
+ }
|
|
|
+ },
|
|
|
handleStatusPage() {
|
|
|
// 如果 我领取过了
|
|
|
// taskFinishStatus 任务完成状态(0:未完成,1:已完成,2:已过期)
|
|
@@ -480,6 +614,7 @@ export default {
|
|
|
if (this.receiveAmount == 0) {
|
|
|
// 领取到空红包
|
|
|
this.status = `opened`
|
|
|
+ this.reportStatus = `empty`
|
|
|
} else {
|
|
|
// 显示成功页面
|
|
|
this.status = `success`
|
|
@@ -492,6 +627,7 @@ export default {
|
|
|
} else {
|
|
|
// 显示已经过期页面
|
|
|
this.status = 'expire'
|
|
|
+ this.reportStatus = `empty`
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
@@ -502,6 +638,7 @@ export default {
|
|
|
if (this.detail.postBizData.receiveTimeExpired) {
|
|
|
// 显示过期页面
|
|
|
this.status = 'expire'
|
|
|
+ this.reportStatus = `empty`
|
|
|
} else {
|
|
|
// 如果 过了红包的领取截止时间 = false
|
|
|
// 显示未打开页面
|
|
@@ -511,6 +648,7 @@ export default {
|
|
|
// 红包状态 = 已经结束了 | 已经终止 | 终止退款中
|
|
|
// 显示过期页面
|
|
|
this.status = 'expire'
|
|
|
+ this.reportStatus = `empty`
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -524,41 +662,141 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
async getDetail(fn) {
|
|
|
- let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, {
|
|
|
- baseInfo: {
|
|
|
- appVersionCode: appVersionCode,
|
|
|
- mid: this.mid
|
|
|
- },
|
|
|
- params: {
|
|
|
- postId: this.detail.postId
|
|
|
- }
|
|
|
- })
|
|
|
- if (data.code == 0) {
|
|
|
- this.detail.postBizData = JSON.parse(data.data.postBizData)
|
|
|
+ let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, {
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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;
|
|
|
if (fn) fn();
|
|
|
- }
|
|
|
- },
|
|
|
+ }
|
|
|
+ },
|
|
|
async getReceivedList() {
|
|
|
- let { data } = await axios.post(`${baseURL}/denet/post/luckdrop/getReceivedList`, {
|
|
|
- baseInfo: {
|
|
|
- appVersionCode: 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
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
+ let { data } = await axios.post(`${baseURL}/denet/post/luckdrop/getReceivedList`, {
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ copyLinkHandle() {
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ reportData() {
|
|
|
+ if (this.isMobile) {
|
|
|
+ // 手机端
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: appVersionCode,
|
|
|
+ mid: this.mid,
|
|
|
+ pageSource: Report.pageSource.mobileLandingPage,
|
|
|
+ appType,
|
|
|
+ machineCode: this.mid
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ eventData: {
|
|
|
+ businessType: Report.businessType.pageView,
|
|
|
+ postId: this.detail.postId,
|
|
|
+ srcContentId: this.detail.srcContentId,
|
|
|
+ senderId: this.detail.srcUserId,
|
|
|
+ redPacketType: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else if (this.isChrome) {
|
|
|
+ // pc端
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ },
|
|
|
+ extParams: {
|
|
|
+ status: this.reportStatus,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ Report.reportLog({
|
|
|
+ baseInfo: {
|
|
|
+ appVersionCode: 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: 1,
|
|
|
+ customCover: this.customCover,
|
|
|
+ customGiveaway: this.customGiveaway,
|
|
|
+ },
|
|
|
+ extParams: {
|
|
|
+ status: 'not-chrome',
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
@@ -578,7 +816,7 @@ body,
|
|
|
overflow: hidden;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
- background: #F5FAFF;
|
|
|
+ background: #fff;
|
|
|
.loading {
|
|
|
position: absolute;
|
|
|
transform: translate(-50%, -50%);
|
|
@@ -607,6 +845,26 @@ body,
|
|
|
margin: -50px auto 0;
|
|
|
justify-content: space-between;
|
|
|
width: 1000px;
|
|
|
+ position: relative;
|
|
|
+ .head-in-custom {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 100%;
|
|
|
+ left: 0;
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
.giveaway {
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
@@ -615,6 +873,7 @@ body,
|
|
|
border-radius: 20px;
|
|
|
background-color: #fff;
|
|
|
box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.1);
|
|
|
+
|
|
|
&.bg {
|
|
|
background: linear-gradient(17.98deg, #3438FF 3.69%, #8B56FC 74.32%);
|
|
|
}
|
|
@@ -622,6 +881,12 @@ body,
|
|
|
background: unset;
|
|
|
height: auto!important;
|
|
|
}
|
|
|
+ &.auto-height {
|
|
|
+ height: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
.lottery {
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
@@ -1020,6 +1285,12 @@ body,
|
|
|
color: #444444;
|
|
|
}
|
|
|
}
|
|
|
+ .luck-custom-prize {
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 14px;
|
|
|
+ letter-spacing: 0.3px;
|
|
|
+ color: #F5B945;
|
|
|
+ }
|
|
|
}
|
|
|
.luck-item:last-child {
|
|
|
border: 0;
|