소스 검색

Merge branch 'test' of DeNet/de-net-official into master

zhangwei 3 년 전
부모
커밋
6b5e3294e2
6개의 변경된 파일606개의 추가작업 그리고 221개의 파일을 삭제
  1. 3 0
      package.json
  2. 537 208
      pages/index.vue
  3. BIN
      static/subject/001.gif
  4. 14 11
      static/svg/icon-logo.svg
  5. 4 0
      static/svg/icon-mobile.svg
  6. 48 2
      yarn.lock

+ 3 - 0
package.json

@@ -25,8 +25,11 @@
     "axios": "^0.26.1",
     "bootstrap": "^4.6.1",
     "bootstrap-vue": "^2.21.2",
+    "clipboard": "^2.0.10",
     "core-js": "^3.19.3",
     "cross-env": "^7.0.3",
+    "current-device": "^0.10.2",
+    "device": "^0.3.12",
     "js-cookie": "^3.0.1",
     "moment": "^2.29.2",
     "nuxt": "^2.15.8",

+ 537 - 208
pages/index.vue

@@ -1,122 +1,186 @@
 <template>
-	<div class="content" :style="{ 'backgroundImage': `url(${this.back_img})` }" v-show="home_show" v-if="detail">
-		<div class="logo">
-			<img src="/svg/icon-logo.svg" alt />
-		</div>
-		<!-- 红包 -->
-		<div class="redPacket" :class="{ redPacket2: status != 'open', key_packet: status == 'open' }"
-			v-show="status != 'error'">
-			<div class="area" :class="{ key_area: status == 'open' }"
-				v-show="status == 'open' || status == 'no-chrome'">
-				<div class="title">
-					<img :src="detail.postBizData.postUserInfo.avatarUrl" alt />
-					<span>Giveaways from: {{ detail.postBizData.postUserInfo.nickName }}</span>
-				</div>
-				<div class="txt">Good Luck!</div>
+	<div style="width: 100%; height: 100%;">
+		<div class="content" :style="{ 'background': `#F5FAFF` }" v-show="show_home" v-if="detail">
+			<div class="logo">
+				<img src="/svg/icon-logo.svg" alt />
 			</div>
+			<!-- 未开始 -->
+			<div class="not-open" v-show="status == 'not-open'">
+				<img src="/subject/001.gif">
+			</div>
+
+			<!-- 红包打开 -->
+			<div class="redPacket" v-show="status != 'not-open'"
+				:class="{ redPacket2: status != 'open', key_packet: status == 'open' }">
 
-			<img src="/svg/back-top.svg" alt class="top" v-show="status == 'open' || status == 'no-chrome'"
-				:class="{ key_top: status == 'open' }" />
-			<img src="/svg/back-down.svg" alt class="down" v-show="status == 'open' || status == 'no-chrome'"
-				:class="{ key_down: status == 'open' }" />
-			<img src="/svg/icon-usd.svg" alt class="start" v-show="status == 'no-chrome'" />
-			<img src="/git/icon-start.gif" alt class="start" v-show="status == 'open'" />
-
-			<!-- 内容 -->
-			<div class="head">
-				<div class="head-title">
-					<img :src="detail.postBizData.postUserInfo.avatarUrl" alt />
-					<span>Giveaways from: {{ detail.postBizData.postUserInfo.nickName }}</span>
+				<!-- 内容 -->
+				<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="currencyIconUrl" alt />
+							<span class="money-txt">{{ receiveAmount / 100 }}</span>
+						</div>
+					</div>
 				</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-else-if="status == 'nothing'">Better luck next time!</div>
-				<div class="head-area" v-else-if="status == 'expire'">
-					<div>This Giveaways</div>
-					<div>expired on {{ formatTime(detail.postBizData.endTimestamp, 'MM-DD') }}</div>
+
+				<!-- 领取列表 -->
+				<div class="luck-list-title">
+					<div>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} Got</div>
+					<div> {{ detail.postBizData.receiveAmountValue / 100 }} / {{
+						detail.postBizData.amountValue / 100 || ''
+					}} {{ detail.postBizData.amountCurrencyCode || '' }}</div>
 				</div>
-				<div class="head-money" v-if="status == 'open' || status == 'opened'">
-					<img src="/svg/icon-usd.svg" alt />
-					<span class="money-txt">{{ receiveAmount / 100 }}</span>
-					<div>
-						<span>USD</span>
+				<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) }}</div>
+						</div>
+						<div class="luck-money">
+							<img :src="item.currencyIconUrl" alt />
+							<div class="luck-money-txt">{{ item.amountValue / 100 || 0 }}</div>
+						</div>
+						<div class="luck-king" v-if="item.maxAmount">
+							<img src="/svg/icon-king-hat.svg" alt />
+							<span>Luckiest Draw</span>
+						</div>
 					</div>
 				</div>
 			</div>
-			<div class="luck-list-title">
-				<div>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} People Got
+
+
+			<!-- 安装 -->
+			<div class="install" v-if="status == 'open' || status == 'opened'"
+				:class="{ key_install: status == 'open' }">
+				<div class="title">Withdraw to Wallet</div>
+				<div class="validity">
+					<template v-if="validity_state">
+						<span>Validity</span>
+						<span style="color: red;">{{ validity }}</span>
+					</template>
+					<template v-else>
+						<span style="color: red;">Giveaways Validity</span>
+					</template>
+				</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 for Task Verification and Giveaways Withdrawal</div>
+					<div class="install_btn" @click="installExtension">Install</div>
+					<div class="area_num">
+						<div class="num">2</div>
+						<span>Complete Tasks by {{ detail.postBizData.postUserInfo.nickName }}</span>
+					</div>
+					<div class="tip">Follow、Like tweet、Retweet (Just 1-3 minutes)</div>
 				</div>
-				<div>Total ${{ detail.postBizData.amountValue / 100 || '' }} {{
-					detail.postBizData.amountCurrencyCode ||
-						''
-				}}</div>
 			</div>
-			<div class="luck-list" @scroll="handleScroll" ref="list">
+
+			<!-- 过期 -->
+			<div class="install install-error" v-if="status == 'nothing' || status == 'expire'">
+				<div class="title">Install DeNet</div>
+				<div class="title">Don't miss the next Giveaway</div>
+				<div class="tip">Used for Task Verification and Giveaways Withdrawal</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">
+					<img src="/svg/icon-chrome.svg" alt />
+					Install Chrome
+				</div>
+			</div>
+			<div v-if="status == 'error'"></div>
+		</div>
+		<div v-if="show_moblie" class="moblie">
+			<div class="head-area">
+				<div class="txt">GET GIVEAWAY</div>
+			</div>
+			<!-- 领取列表 -->
+			<div class="luck-list-title">
+				<div>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} Got</div>
+				<div> {{ detail.postBizData.receiveAmountValue / 100 }} / {{
+					detail.postBizData.amountValue / 100 || ''
+				}} {{ detail.postBizData.amountCurrencyCode || '' }}</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" v-if="item.receiveTimestamp == -1">刚刚</div>
 						<div class="luck-time">{{ formatTime(item.receiveTimestamp) }}</div>
 					</div>
 					<div class="luck-money">
-						<img src="/svg/icon-usd.svg" alt />
-						<div class="luck-money-txt">{{ item.amountValue / 100 }}</div>
+						<img :src="item.currencyIconUrl" alt />
+						<div class="luck-money-txt">{{ item.amountValue / 100 || 0 }}</div>
 					</div>
-
 					<div class="luck-king" v-if="item.maxAmount">
 						<img src="/svg/icon-king-hat.svg" alt />
 						<span>Luckiest Draw</span>
 					</div>
 				</div>
 			</div>
-		</div>
-		<!-- 安装 -->
-		<div class="install" v-if="status == 'open' || status == 'opened'" :class="{ key_install: status == 'open' }">
-			<div class="title">Withdraw to Wallet</div>
-			<div class="validity">
-				<template v-if="validity_state">
-					<span>Validity</span>
-					<span style="color: red;">{{ validity }}</span>
-				</template>
-				<template v-else>
-					<span style="color: red;">Giveaways Validity</span>
-				</template>
-			</div>
-
-			<div class="flow">
-				<div class="line"></div>
-
-				<div class="area_num">
-					<div class="num">1</div>
-					<span>Install DeNet</span>
+			<div class="area-cp-link">
+				<div class="area-title">
+					<img src="/svg/icon-mobile.svg" alt="">
+					<div class="right">
+						<div class="right-title">Get Giveaway on PC</div>
+						<div class="right-content">You need to use a computer to complete tasks, and Get Giveaways (Just
+							2-3 minutes)</div>
+					</div>
 				</div>
-				<div class="tip">Used for Task Verification and Giveaways Withdrawal</div>
-				<div class="install_btn" @click="installExtension">Install</div>
-				<div class="area_num">
-					<div class="num" style="background: #E0E0E0;">2</div>
-					<span>Complete Tasks by {{ detail.postBizData.postUserInfo.nickName }}</span>
+				<div class="area-content">
+					{{ cp_link }}
+				</div>
+				<div class="area-btn">
+					<div class="btn" :data-clipboard-text="cp_link">Copy Link</div>
 				</div>
-				<div class="tip">Follow、Like tweet、Retweet (Just 1-3 minutes)</div>
 			</div>
-		</div>
-		<div class="install install-error" v-if="status == 'nothing' || status == 'expire'">
-			<div class="title">Install DeNet</div>
-			<div class="title">Don't miss the next Giveaway</div>
-			<div class="tip">Used for Task Verification and Giveaways Withdrawal</div>
-			<div class="install_btn">Install</div>
-		</div>
-		<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">
-				<img src="/svg/icon-chrome.svg" alt />
-				Install Chrome
+			<div class="layer" v-show="layer_show">
+				<div class="layer-box">
+					<div class="layer-txt">Unable to copy, please enter the link manually</div>
+					<div class="layer-btn" @click="layer_show = false">Done</div>
+				</div>
 			</div>
 		</div>
-		<div v-if="status == 'error'"></div>
 	</div>
 </template>
 
@@ -125,6 +189,7 @@ import axios from 'axios';
 import Cookies from 'js-cookie'
 import { isBrowser } from '../utils/help.js'
 var moment = require('moment');
+var ClipboardJS = require('clipboard')
 
 const api = {
 	prod: 'https://api.denetme.net',
@@ -136,7 +201,7 @@ const page = {
 	pre: "https://preh5.denetme.net",
 	test: 'https://testh5.denetme.net'
 }
-const jumpUrl = page[process.env.NUXT_ENV.MODE]
+const jumpUrl = page[process.env.NUXT_ENV.MODE] + '/'
 const baseURL = api[process.env.NUXT_ENV.MODE]
 
 
@@ -144,11 +209,12 @@ export default {
 	name: "index",
 	data() {
 		return {
+			cp_link: '',
 			appVersionCode: 1,
 			mid: '',
-			back_img: '/svg/back-denet.svg',
-			area_show: true,
-			home_show: false,
+			show_moblie: false,
+			show_home: false,
+			layer_show: false,
 			validity: '',
 			receiveAmount: 0,
 			validity_state: true,
@@ -160,6 +226,7 @@ export default {
 					}
 				}
 			},
+			currencyIconUrl: '',
 			title: '',
 			twitterTitle: 'deNet',
 			jumpUrl: jumpUrl,
@@ -205,12 +272,16 @@ export default {
 		}
 	},
 	methods: {
+		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 url = 'https://d3d9wvhy948gxx.cloudfront.net/extensions/chrome/denet.zip'
+			location.href = url;
 			this.$router.push({
 				path: '/install'
 			})
-			location.href = url;
 		},
 		formatTime(time, _type = 'MM-DD HH:mm:ss') {
 			return moment(time).format(_type)
@@ -222,10 +293,11 @@ export default {
 			});
 		},
 		handleScroll(e) {
+			e = e.target
 			if (this.luck_list_end) {
 				return
 			}
-			if ((this.$refs.list.clientHeight + this.$refs.list.scrollTop) / this.$refs.list.scrollHeight > .8) {
+			if ((e.clientHeight + e.scrollTop) / e.scrollHeight > .8) {
 				this.luck_list_end = false
 				this.page_index++
 				this.getReceivedList()
@@ -250,11 +322,14 @@ export default {
 					postId: this.detail.postId || ''
 				}
 			})
-			this.home_show = true
+			this.show_home = true
 			switch (data.code.toString()) {
 				case '0':
 					if (data.data.newReceived) {
-						this.status = 'open'
+						this.status = 'not-open'
+						setTimeout(() => {
+							this.status = 'open'
+						}, 3000)
 						this.receiveAmount = data.data.receiveAmount
 					} else {
 						this.status = 'opened'
@@ -275,7 +350,7 @@ export default {
 					break
 				default:
 					console.log('getRedPacket', data)
-					this.home_show = false
+					this.show_home = false
 					break;
 			}
 			// 领取列表分页
@@ -362,28 +437,49 @@ export default {
 			return
 		}
 		//改变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);
+		// (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.show_moblie = true
+			this.cp_link = window.location.href
+			// 复制链接
+			var clipboard = new ClipboardJS('.btn');
+			clipboard.on('success', function (e) {
+				console.info('Action:', e.action);
+				console.info('Text:', e.text);
+				console.info('Trigger:', e.trigger);
+
+				e.clearSelection();
+			});
 
-		if (isBrowser() == 'chrome') {
+			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()
 			this.getRedPacket()
 			this.setPickupInfo()
 		} else {
-			this.home_show = true
+			this.show_home = true
 			this.status = 'no-chrome'
 		}
 	}
@@ -401,6 +497,246 @@ body,
 	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, .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: 8rem;
+		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;
+
+		.txt {
+			width: 100%;
+			text-align: center;
+		}
+	}
+
+	.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%;
+		background: #fff;
+		overflow: auto;
+
+		.luck-item {
+			display: flex;
+			padding: 12px 0;
+			margin: 0 16px;
+			border-bottom: 1px solid #d1d1d1;
+			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-item:last-child {
+			border: 0;
+		}
+	}
+
+	.area-cp-link {
+		background: #fff;
+		display: flex;
+		width: 100%;
+		flex-wrap: wrap;
+		position: fixed;
+		bottom: 0;
+		height: 20rem;
+		box-shadow: 0px -4px 10px rgba(0, 0, 0, 0.1);
+		border-top-left-radius: 2rem;
+		border-top-right-radius: 2rem;
+
+		.area-title {
+			display: flex;
+
+			img {
+				width: 6.4rem;
+				height: 6.4rem;
+				margin: 1.5rem;
+			}
+
+			.right {
+				flex: 1;
+				letter-spacing: 0.3px;
+
+				.right-title {
+					font-size: 1.7rem;
+					color: #000000;
+					margin-top: 1.7rem;
+
+				}
+
+				.right-content {
+					font-size: 1.2rem;
+					color: #989898;
+				}
+			}
+		}
+
+		.area-content {
+			background: #F4F4F4;
+			height: 4.6rem;
+			padding: 0 1rem;
+			width: 100%;
+			font-size: 1.3rem;
+			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%;
@@ -411,23 +747,38 @@ body,
 	font-style: normal;
 	font-weight: 600;
 
+	.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: 107px;
-			height: 40px;
+			width: 10.7rem;
+			height: 4rem;
 		}
 	}
 
 	.key_packet {
 		animation: key_packet 3s;
-		animation-delay: 6s;
+		animation-delay: 0s;
 		animation-fill-mode: forwards;
 	}
 
+
+
 	.redPacket {
 		display: flex;
 		justify-content: flex-start;
@@ -442,22 +793,9 @@ body,
 		// background: red;
 		overflow: hidden;
 		box-shadow: 0 0 5px #888888;
+		background: #fff;
 
-		.start {
-			position: absolute;
-			width: 10rem;
-			height: 10rem;
-			bottom: 24rem;
-			left: 50%;
-			margin-left: -5rem;
-			z-index: 13;
-		}
 
-		.key_top {
-			animation: key_top 4s;
-			animation-delay: 2s;
-			animation-fill-mode: forwards;
-		}
 
 		.top {
 			top: 0;
@@ -473,33 +811,33 @@ body,
 			z-index: 11;
 		}
 
-		.key_down {
-			animation: key_down 4s;
-			animation-delay: 2s;
-			animation-fill-mode: forwards;
-		}
 
 		.head {
+			position: relative;
+
 			.head-title {
-				height: 9.7rem;
-				line-height: 9.7rem;
-				background: #ef4545;
-				text-align: center;
-				border-radius: 0 586px 586px/0 0 104px 104px;
-				overflow: hidden;
-				box-shadow: 0 0 5px #888888;
+				position: absolute;
+				top: 0;
+				width: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				height: 3.6rem;
+				background: rgba(255, 255, 255, .1);
+
 
 				img {
-					width: 3rem;
-					height: 3rem;
+					width: 1.8rem;
+					height: 1.8rem;
 					border-radius: 50%;
 
-					border: 2px solid #fff4db;
+					border: 1px solid #fff;
 				}
 
 				span {
-					font-size: 1.4rem;
-					color: #fff2d3;
+					margin-left: .8rem;
+					font-size: 1.2rem;
+					color: #fff;
 				}
 			}
 
@@ -507,59 +845,75 @@ body,
 				margin-top: 4.7rem;
 				font-size: 2rem;
 				text-align: center;
-				color: #ef4545;
+				color: #fff;
 			}
 
 			.head-area {
-				height: 10rem;
+				height: 19rem;
 				text-align: center;
 				letter-spacing: 0.3px;
 				font-size: 2rem;
 				text-align: center;
-				color: #ef4545;
+				color: #fff;
+				background: #389AFF;
+				border-radius: 0 586px 586px/0 0 104px 104px;
+
+				.txt {
+					padding-top: 8.5rem;
+				}
 			}
 
 			.head-money {
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				margin-bottom: 3.2rem;
-
-				img {
-					width: 4rem;
-					height: 4rem;
+				.txt {
+					padding-top: 6.8rem;
+					font-weight: 800;
+					font-size: 1.5rem;
+					text-align: center;
+					letter-spacing: 0.3px;
 				}
 
-				span {
-					font-size: 1.3rem;
-				}
+				.head-money-area {
+					display: flex;
+					width: 100%;
+					justify-content: center;
+					align-items: center;
 
-				.money-txt {
-					font-weight: 700;
-					font-size: 4.8rem;
-					color: #000000;
-					letter-spacing: 0.3px;
+					img {
+						width: 4rem;
+						height: 4rem;
+						border: 2px solid #FFFFFF;
+						border-radius: 100px;
+					}
+
+					span {
+						margin-left: 1.3rem;
+						font-size: 4.6rem;
+					}
 				}
 			}
 		}
 
 		.luck-list-title {
-			padding: 0 16px;
+			/*      margin-top: 47px;*/
+			margin: 0 16px;
+			padding: 14px 0 11px 0;
 			background: #fff;
-			color: #9b9b9b;
 			display: flex;
 			justify-content: space-between;
+			color: #B0B0B0;
+			border-bottom: 1px solid #D1D1D1;
 		}
 
+
 		.luck-list {
 			background: #fff;
-			flex: 1;
-			overflow: scroll;
+			overflow: auto;
 
 			.luck-item {
 				display: flex;
-				padding: 12px 16px;
-				border-top: 1px solid #d1d1d1;
+				padding: 12px 0;
+				margin: 0 16px;
+				border-bottom: 1px solid #d1d1d1;
 				justify-content: space-between;
 				position: relative;
 
@@ -570,7 +924,7 @@ body,
 				.luck-king {
 					position: absolute;
 					top: 36px;
-					right: 16px;
+					right: 0px;
 					display: flex;
 					align-items: center;
 
@@ -637,6 +991,10 @@ body,
 					}
 				}
 			}
+
+			.luck-item:last-child {
+				border: 0;
+			}
 		}
 
 		.area {
@@ -686,7 +1044,7 @@ body,
 	.key_install {
 		opacity: 0;
 		animation: key_install 2s;
-		animation-delay: 6s;
+		animation-delay: 0s;
 		animation-fill-mode: forwards;
 	}
 
@@ -702,22 +1060,20 @@ body,
 		}
 
 		.validity {
-			padding-left: 1.5rem;
-			margin-top: 2rem;
-			background: rgba(166, 166, 166, 0.1);
+			margin-top: 1rem;
+			color: #FF0000;
 			width: 40rem;
 			height: 3.3rem;
 			line-height: 3.3rem;
 
 			span {
-				color: #000000;
 				font-size: 1.4rem;
 			}
 		}
 
 		.flow {
 			position: absolute;
-			margin-top: 4.6rem;
+			margin-top: 4rem;
 
 			.line {
 				position: absolute;
@@ -805,6 +1161,7 @@ body,
 			letter-spacing: 0.3px;
 			display: flex;
 			align-items: center;
+			background: #FFFFFF;
 			border: 1px solid #e8e8e8;
 			border-radius: 10rem;
 			margin-top: 3.3rem;
@@ -850,32 +1207,4 @@ body,
 		margin-left: -18rem;
 	}
 }
-
-@keyframes key_top {
-	0% {
-		top: 0;
-	}
-
-	50% {
-		top: -30rem;
-	}
-
-	100% {
-		top: -36rem;
-	}
-}
-
-@keyframes key_down {
-	0% {
-		bottom: 0;
-	}
-
-	50% {
-		bottom: -28.3rem;
-	}
-
-	100% {
-		bottom: -32.3rem;
-	}
-}
 </style>

BIN
static/subject/001.gif


+ 14 - 11
static/svg/icon-logo.svg

@@ -1,16 +1,19 @@
-<svg width="107" height="40" viewBox="0 0 107 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M51.2988 12.9082V27H56.2695C60.4688 27 62.9395 24.3828 62.9395 19.9297C62.9395 15.4863 60.459 12.9082 56.2695 12.9082H51.2988ZM53.4863 14.793H56.0645C59.043 14.793 60.7031 16.6289 60.7031 19.9492C60.7031 23.2793 59.0527 25.1055 56.0645 25.1055H53.4863V14.793ZM69.3723 18.2402C70.8469 18.2402 71.843 19.3438 71.8918 20.916H66.7551C66.8625 19.3633 67.8977 18.2402 69.3723 18.2402ZM71.882 23.9824C71.5988 24.8809 70.7102 25.4863 69.509 25.4863C67.8195 25.4863 66.7453 24.3047 66.7453 22.5176V22.3906H74.0012V21.668C74.0012 18.5527 72.2238 16.541 69.3723 16.541C66.4719 16.541 64.6164 18.6895 64.6164 21.9121C64.6164 25.1543 66.4426 27.1953 69.4602 27.1953C71.8137 27.1953 73.591 25.8574 73.884 23.9824H71.882ZM78.3246 27V16.6191H78.4125L85.7172 27H87.6898V12.9082H85.5609V23.2988H85.4828L78.1781 12.9082H76.1957V27H78.3246ZM94.6402 18.2402C96.1148 18.2402 97.1109 19.3438 97.1598 20.916H92.023C92.1305 19.3633 93.1656 18.2402 94.6402 18.2402ZM97.15 23.9824C96.8668 24.8809 95.9781 25.4863 94.777 25.4863C93.0875 25.4863 92.0133 24.3047 92.0133 22.5176V22.3906H99.2691V21.668C99.2691 18.5527 97.4918 16.541 94.6402 16.541C91.7398 16.541 89.8844 18.6895 89.8844 21.9121C89.8844 25.1543 91.7105 27.1953 94.7281 27.1953C97.0816 27.1953 98.859 25.8574 99.152 23.9824H97.15ZM101.825 14.2949V16.7266H100.331V18.3965H101.825V24.2949C101.825 26.2773 102.636 27.0684 104.716 27.0684C105.184 27.0684 105.653 27.0293 105.888 26.9707V25.3008C105.751 25.3301 105.409 25.3496 105.194 25.3496C104.335 25.3496 103.944 24.9492 103.944 24.0605V18.3965H105.897V16.7266H103.944V14.2949H101.825Z" fill="black"/>
-<path d="M7.39485 29.8718C5.20124 27.1489 3.88818 23.6868 3.88818 19.918C3.88818 16.1492 5.20124 12.6871 7.39485 9.96421M15.7365 35.2802C17.0233 35.6168 18.3738 35.796 19.7662 35.796C26.5893 35.796 32.4072 31.4922 34.6534 25.4513M34.73 14.5953C32.5418 8.44404 26.6683 4.04004 19.7662 4.04004C18.5463 4.04004 17.3586 4.1776 16.2177 4.43805" stroke="black" stroke-width="1.976" stroke-linecap="round" stroke-linejoin="round"/>
-<g clip-path="url(#clip0_13321_142428)">
-<circle cx="19.8932" cy="19.9186" r="11.1611" stroke="black" stroke-width="1.976"/>
-<path d="M18.8486 8.55078L20.8246 9.15222V30.9243L18.8486 31.5257V8.55078Z" fill="black"/>
+<svg width="96" height="30" viewBox="0 0 96 30" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path opacity="0.7" d="M41.2988 7.9082V22H46.2695C50.4688 22 52.9395 19.3828 52.9395 14.9297C52.9395 10.4863 50.459 7.9082 46.2695 7.9082H41.2988ZM43.4863 9.79297H46.0645C49.043 9.79297 50.7031 11.6289 50.7031 14.9492C50.7031 18.2793 49.0527 20.1055 46.0645 20.1055H43.4863V9.79297ZM59.0723 13.2402C60.5469 13.2402 61.543 14.3438 61.5918 15.916H56.4551C56.5625 14.3633 57.5977 13.2402 59.0723 13.2402ZM61.582 18.9824C61.2988 19.8809 60.4102 20.4863 59.209 20.4863C57.5195 20.4863 56.4453 19.3047 56.4453 17.5176V17.3906H63.7012V16.668C63.7012 13.5527 61.9238 11.541 59.0723 11.541C56.1719 11.541 54.3164 13.6895 54.3164 16.9121C54.3164 20.1543 56.1426 22.1953 59.1602 22.1953C61.5137 22.1953 63.291 20.8574 63.584 18.9824H61.582ZM67.7246 22V11.6191H67.8125L75.1172 22H77.0898V7.9082H74.9609V18.2988H74.8828L67.5781 7.9082H65.5957V22H67.7246ZM83.7402 13.2402C85.2148 13.2402 86.2109 14.3438 86.2598 15.916H81.123C81.2305 14.3633 82.2656 13.2402 83.7402 13.2402ZM86.25 18.9824C85.9668 19.8809 85.0781 20.4863 83.877 20.4863C82.1875 20.4863 81.1133 19.3047 81.1133 17.5176V17.3906H88.3691V16.668C88.3691 13.5527 86.5918 11.541 83.7402 11.541C80.8398 11.541 78.9844 13.6895 78.9844 16.9121C78.9844 20.1543 80.8105 22.1953 83.8281 22.1953C86.1816 22.1953 87.959 20.8574 88.252 18.9824H86.25ZM90.625 9.29492V11.7266H89.1309V13.3965H90.625V19.2949C90.625 21.2773 91.4355 22.0684 93.5156 22.0684C93.9844 22.0684 94.4531 22.0293 94.6875 21.9707V20.3008C94.5508 20.3301 94.209 20.3496 93.9941 20.3496C93.1348 20.3496 92.7441 19.9492 92.7441 19.0605V13.3965H94.6973V11.7266H92.7441V9.29492H90.625Z" fill="black"/>
+<g clip-path="url(#clip0_14299_11434)">
+<circle cx="14.6621" cy="14.0625" r="13.125" fill="url(#paint0_linear_14299_11434)" stroke="#28ACFC" stroke-width="1.875"/>
+<path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" d="M14.6602 24.375C20.3556 24.375 24.9727 19.7579 24.9727 14.0625C24.9727 8.36706 20.3556 3.75 14.6602 3.75V24.375Z" fill="#00A3FF"/>
+<path d="M3.41211 9.84375C5.22429 9.84375 6.69336 8.37468 6.69336 6.5625C6.69336 4.75032 5.22429 3.28125 3.41211 3.28125C1.59992 3.28125 0.130859 4.75032 0.130859 6.5625C0.130859 8.37468 1.59992 9.84375 3.41211 9.84375Z" fill="#44BBFF" stroke="#F7FCFF" stroke-width="0.9375"/>
+<path d="M14.6621 30.4688C16.4743 30.4688 17.9434 28.9997 17.9434 27.1875C17.9434 25.3753 16.4743 23.9062 14.6621 23.9062C12.8499 23.9062 11.3809 25.3753 11.3809 27.1875C11.3809 28.9997 12.8499 30.4688 14.6621 30.4688Z" fill="#44BBFF" stroke="#F7FCFF" stroke-width="0.9375"/>
+<path d="M26.8496 9.84375C28.6618 9.84375 30.1309 8.37468 30.1309 6.5625C30.1309 4.75032 28.6618 3.28125 26.8496 3.28125C25.0374 3.28125 23.5684 4.75032 23.5684 6.5625C23.5684 8.37468 25.0374 9.84375 26.8496 9.84375Z" fill="#44BBFF" stroke="#F7FCFF" stroke-width="0.9375"/>
 </g>
-<circle cx="11.0173" cy="6.56958" r="2.052" fill="#FC782C"/>
-<circle cx="11.0173" cy="33.2131" r="2.052" fill="#FC782C"/>
-<circle cx="35.3914" cy="20.1184" r="2.052" fill="#FC782C"/>
 <defs>
-<clipPath id="clip0_13321_142428">
-<rect width="14.8555" height="30.4929" fill="white" transform="translate(18.9248 5.4834)"/>
+<linearGradient id="paint0_linear_14299_11434" x1="14.6621" y1="0" x2="14.6621" y2="28.125" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADE0FF"/>
+<stop offset="1" stop-color="#ADE0FF" stop-opacity="0"/>
+</linearGradient>
+<clipPath id="clip0_14299_11434">
+<rect width="30" height="30" fill="white"/>
 </clipPath>
 </defs>
 </svg>

+ 4 - 0
static/svg/icon-mobile.svg

@@ -0,0 +1,4 @@
+<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect opacity="0.1" width="64" height="64" rx="32" fill="#389AFF"/>
+<path opacity="0.6" d="M46.4833 18.4219H19.0167C18.4819 18.4219 17.9689 18.6344 17.5907 19.0126C17.2125 19.3908 17 19.9037 17 20.4386V37.37C17 37.9049 17.2125 38.4179 17.5907 38.7961C17.9689 39.1743 18.4819 39.3868 19.0167 39.3868H31.5987V43.1945H26.4064C26.111 43.1945 25.8277 43.3118 25.6188 43.5206C25.41 43.7295 25.2926 44.0128 25.2926 44.3082C25.2926 44.6035 25.41 44.8868 25.6188 45.0957C25.8277 45.3045 26.111 45.4219 26.4064 45.4219H39.0485C39.3439 45.4219 39.6271 45.3045 39.836 45.0957C40.0449 44.8868 40.1622 44.6035 40.1622 44.3082C40.1622 44.0128 40.0449 43.7295 39.836 43.5206C39.6271 43.3118 39.3439 43.1945 39.0485 43.1945H33.8261V39.3868H46.4833C47.0181 39.3868 47.5311 39.1743 47.9093 38.7961C48.2875 38.4179 48.5 37.9049 48.5 37.37V20.4386C48.5 19.9037 48.2875 19.3908 47.9093 19.0126C47.5311 18.6344 47.0181 18.4219 46.4833 18.4219V18.4219Z" fill="#389AFF"/>
+</svg>

+ 48 - 2
yarn.lock

@@ -3142,6 +3142,15 @@ cli-width@^3.0.0:
   resolved "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
   integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
 
+clipboard@^2.0.10:
+  version "2.0.10"
+  resolved "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz#e61f6f7139ac5044c58c0484dcac9fb2a918bfd6"
+  integrity sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==
+  dependencies:
+    good-listener "^1.2.2"
+    select "^1.1.2"
+    tiny-emitter "^2.0.0"
+
 cliui@^7.0.2:
   version "7.0.4"
   resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -3874,6 +3883,11 @@ delayed-stream@~1.0.0:
   resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
 
+delegate@^3.1.2:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+  integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+
 depd@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -3922,6 +3936,13 @@ devalue@^2.0.1:
   resolved "https://registry.npmmirror.com/devalue/-/devalue-2.0.1.tgz#5d368f9adc0928e47b77eea53ca60d2f346f9762"
   integrity sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==
 
+device@^0.3.12:
+  version "0.3.12"
+  resolved "https://registry.npmmirror.com/device/-/device-0.3.12.tgz#c6f8b951ecc38c32ba24ee00da93655f2d2988dc"
+  integrity sha512-iN7zef86PSMbMgQTA6pBpy2re1XgnFRExO87IsZA1wgDXI03C6wWv2tiXTfE1zsQytETW+S+wn2TpKSzXgqHfA==
+  dependencies:
+    useragent "*"
+
 diff-sequences@^27.5.1:
   version "27.5.1"
   resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
@@ -4847,6 +4868,13 @@ globby@^11.0.3, globby@^11.0.4:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
+good-listener@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
+  integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
+  dependencies:
+    delegate "^3.1.2"
+
 graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
   version "4.2.9"
   resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
@@ -6398,7 +6426,7 @@ lower-case@^2.0.2:
   dependencies:
     tslib "^2.0.3"
 
-lru-cache@^4.1.2, lru-cache@^4.1.5:
+lru-cache@4.1.x, lru-cache@^4.1.2, lru-cache@^4.1.5:
   version "4.1.5"
   resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
   integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -8844,6 +8872,11 @@ scule@^0.2.1:
   resolved "https://registry.npmmirror.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc"
   integrity sha512-M9gnWtn3J0W+UhJOHmBxBTwv8mZCan5i1Himp60t6vvZcor0wr+IM0URKmIglsWJ7bRujNAVVN77fp+uZaWoKg==
 
+select@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+  integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
+
 semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   version "6.3.0"
   resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -9598,7 +9631,12 @@ timsort@^0.3.0:
   resolved "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
   integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
 
-tmp@^0.0.33:
+tiny-emitter@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
+tmp@0.0.x, tmp@^0.0.33:
   version "0.0.33"
   resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
   integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
@@ -9933,6 +9971,14 @@ use@^3.1.0:
   resolved "https://registry.npmmirror.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
   integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
 
+useragent@*:
+  version "2.3.0"
+  resolved "https://registry.npmmirror.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
+  integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
+  dependencies:
+    lru-cache "4.1.x"
+    tmp "0.0.x"
+
 util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"