Browse Source

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

zhangwei 3 years ago
parent
commit
21e62cb024

+ 13 - 6
README.md

@@ -73,19 +73,26 @@ node 版本 16
 
 yarn install
 
-yarn build
+测试打包:yarn build-test
 
-打包完后,将.nuxt , static,nuxt.config.js,package.json传到服务器上,docker里
+予发布打包:yarn build-pre
+
+生产打包:yarn build-prod
+
+打包完后
+
+将.nuxt, static, nuxt.config.js, package.json, env.js 传到服务器上,docker里
 
 下载包:yarn
 
-服务器启动: yarn pm2
+服务器启动:pm2 start npm --name "de-net-official" -- run start
 
 启动端口:3000
 
 ## 重启
-pm2 list 
+pm2 list (pm2常用命令 https://zhuanlan.zhihu.com/p/395339261
+)
 
-停止守护进程: pm2 stop app_name 
+停止守护进程: pm2 stop "de-net-official"
 
-删除守护进程: pm2 delete app_name 
+删除守护进程: pm2 delete "de-net-official"

+ 11 - 0
env.js

@@ -0,0 +1,11 @@
+module.exports = {
+	test: {
+		MODE: 'test'
+	},
+	pre: {
+		MODE: 'pre',
+	},
+	prod: {
+		MODE: 'prod',
+	}
+}

+ 6 - 0
nuxt.config.js

@@ -1,3 +1,9 @@
+const env = require('./env')
+module.exports = {
+  env: {
+    NUXT_ENV: env[process.env.MODE]
+  }
+}
 export default {
   // Global page headers: https://go.nuxtjs.dev/config-head
   head: {

+ 11 - 2
package.json

@@ -9,8 +9,12 @@
     }
   },
   "scripts": {
-    "dev": "nuxt",
-    "build": "nuxt build",
+    "dev-test": "cross-env MODE=test nuxt",
+    "dev-pre": "cross-env MODE=pre nuxt",
+    "dev-prod": "cross-env MODE=prod nuxt",
+    "build-test": "cross-env MODE=test nuxt build",
+    "build-pre": "cross-env MODE=pre nuxt build",
+    "build-prod": "cross-env MODE=prod nuxt build",
     "start": "nuxt start",
     "pm2": "pm2 start yarn --interpreter bash --name oitboy-front -- start",
     "generate": "nuxt generate",
@@ -21,6 +25,9 @@
     "bootstrap": "^4.6.1",
     "bootstrap-vue": "^2.21.2",
     "core-js": "^3.19.3",
+    "cross-env": "^7.0.3",
+    "js-cookie": "^3.0.1",
+    "moment": "^2.29.2",
     "nuxt": "^2.15.8",
     "pm2": "^5.2.0",
     "vue": "^2.6.14",
@@ -33,6 +40,8 @@
     "babel-core": "7.0.0-bridge.0",
     "babel-jest": "^27.4.4",
     "jest": "^27.4.4",
+    "sass": "^1.49.11",
+    "sass-loader": "^10.2.1",
     "vue-jest": "^3.0.4"
   }
 }

+ 791 - 18
pages/index.vue

@@ -1,25 +1,165 @@
 <template>
-  <div>
-    {{JSON.stringify(detail)}}
-  </div>
+	<div class="content" :style="{ 'backgroundImage': `url(${this.back_img})` }" v-show="home_show">
+		<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>
+
+			<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>
+				<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 Giveways</div>
+					<div>expired on 03-14</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>
+				</div>
+			</div>
+			<div class="luck-list-title">
+				<div>{{ detail.postBizData.receiveCount || 0 }}/{{ detail.postBizData.totalCount || 0 }} People Got
+				</div>
+				<div>Total ${{ detail.postBizData.amountValue / 100 || '' }} {{
+					detail.postBizData.amountCurrencyCode ||
+						''
+				}}</div>
+			</div>
+			<div class="luck-list" @scroll="handleScroll" ref="list">
+				<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>
+					</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>
+				<div class="tip">Used for Task Verification and Giveaways Withdrawal</div>
+				<div class="install_btn">Install</div>
+				<div class="area_num">
+					<div class="num" style="background: #E0E0E0;">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>
+		<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>
+		</div>
+		<div v-if="status == 'error'"></div>
+	</div>
 </template>
 
 <script>
 import axios from 'axios';
+import Cookies from 'js-cookie'
+import { isBrowser } from '../utils/help.js'
+var moment = require('moment');
 
+const api = {
+	prod: 'https://api.denet.me',
+	pre: 'https://preapi.denet.me',
+	test: 'https://testapi.denet.me',
+}
+
+const baseURL = api[process.env.NUXT_ENV.MODE]
 export default {
 	name: "index",
-	data () {
+	data() {
 		return {
+			appVersionCode: 1,
+			mid: '',
+			back_img: '/svg/back-denet.svg',
+			area_show: true,
+			home_show: false,
+			validity: '',
+			receiveAmount: 0,
+			validity_state: true,
 			detail: {
 				postId: '',
 				postBizData: {
-					imagePath: ''
-        }
-      },
+					imagePath: '',
+					postUserInfo: {
+					}
+				}
+			},
 			title: '',
 			twitterTitle: 'deNet',
-			jumpUrl: 'https://de-net-test.piaoquantv.com/'
+			jumpUrl: 'https://de-net-test.piaoquantv.com/',
+			status: '',
+			page_index: 1,
+			page_size: 20,
+			luck_list: [],
+			luck_list_end: false
 		}
 	},
 
@@ -27,6 +167,7 @@ export default {
 		return {
 			type: '',
 			title: this.title,
+			appVersionCode: 1,
 			meta: [
 				{
 					name: 'twitter:card',
@@ -55,29 +196,661 @@ export default {
 			]
 		}
 	},
-  async asyncData (params) {
-     let {route} = params;
-		 let {data} = await axios.post('https://denettestapi.piaoquantv.com/denet/post/getDetail', {
+	methods: {
+		formatTime(time) {
+			return moment(time).format('MM-DD hh:mm:ss')
+		},
+		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) {
+			if (this.luck_list_end) {
+				return
+			}
+			if ((this.$refs.list.clientHeight + this.$refs.list.scrollTop) / this.$refs.list.scrollHeight > .8) {
+				this.luck_list_end = false
+				this.page_index++
+				this.getReceivedList()
+			}
+		},
+		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() {
+			let { data } = await axios.post(`${baseURL}/denet/post/luckdrop/receiveLuckdrop`, {
+				baseInfo: {
+					appVersionCode: this.appVersionCode,
+					mid: this.mid
+				},
+				params: {
+					postId: this.detail.postId || ''
+				}
+			})
+			this.home_show = true
+			switch (data.code.toString()) {
+				case '0':
+					if (data.data.newReceived) {
+						this.status = 'open'
+						this.receiveAmount = data.data.receiveAmount
+					} else {
+						this.status = 'opened'
+					}
+					this.getValidity(data.data.endTimestamp)
+					this.receiveAmount = data.data.receiveAmount
+					break;
+				// 红包被领完了
+				case '2008':
+					this.status = 'nothing'
+					break
+				case '2029':
+					// 推文未发布
+					this.status = 'error'
+					break
+				default:
+					console.log('getRedPacket', data)
+					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()
+					this.validity = `${_h}:${_m}:${_s}`
+				} else {
+					clearInterval(timer)
+				}
+			}, 1000)
+		},
+		setPickupInfo() {
+			let  pickupInfo = {	srcContentId: this.detail.srcContentId,
+								postNickName: this.detail.postBizData.postUserInfo.nickName };
+			Cookies.set('pickup_info', JSON.stringify(pickupInfo), { expires: 100 });
+		}
+	},
+
+	async asyncData(params) {
+		let { route } = params;
+		let { data } = await axios.post(`${baseURL}/denet/post/getDetail`, {
 			baseInfo: {
-				token: ''
-      },
+				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.code == 0) {
 			if (data.data && data.data.postBizData && typeof data.data.postBizData == 'string') {
 				data.data.postBizData = JSON.parse(data.data.postBizData)
 			}
-
 			return {
 				detail: data.data,
 			}
-    }
-  }
+		}
+	},
+
+	mounted() {
+		//改变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);
+
+		if (isBrowser() == 'chrome') {
+			// 领取任务红包
+			this.setCookieMid()
+			this.getRedPacket()
+			this.setPickupInfo()
+		} else {
+			this.home_show = true
+			this.status = 'no-chrome'
+		}
+	}
 }
 </script>
 
-<style scoped>
+<style lang="scss" >
+html,
+body,
+#__nuxt,
+#__layout {
+	width: 100%;
+	height: 100%;
+	padding: 0;
+	margin: 0;
+}
+
+.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;
+
+	.logo {
+		position: absolute;
+		left: 4rem;
+		top: 1.5rem;
+
+		img {
+			width: 107px;
+			height: 40px;
+		}
+	}
+
+	.key_packet {
+		animation: key_packet 3s;
+		animation-delay: 6s;
+		animation-fill-mode: forwards;
+	}
+
+	.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: hidden;
+		box-shadow: 0 0 5px #888888;
+
+		.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;
+			position: absolute;
+			width: 100%;
+			z-index: 12;
+		}
+
+		.down {
+			bottom: 0;
+			position: absolute;
+			height: 32.3rem;
+			z-index: 11;
+		}
+
+		.key_down {
+			animation: key_down 4s;
+			animation-delay: 2s;
+			animation-fill-mode: forwards;
+		}
+
+		.head {
+			.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;
+
+				img {
+					width: 3rem;
+					height: 3rem;
+					border-radius: 50%;
+
+					border: 2px solid #fff4db;
+				}
+
+				span {
+					font-size: 1.4rem;
+					color: #fff2d3;
+				}
+			}
+
+			.head-txt {
+				margin-top: 4.7rem;
+				font-size: 2rem;
+				text-align: center;
+				color: #ef4545;
+			}
+
+			.head-area {
+				height: 10rem;
+				line-height: 10rem;
+				text-align: center;
+				letter-spacing: 0.3px;
+				font-size: 2rem;
+				text-align: center;
+				color: #ef4545;
+			}
+
+			.head-money {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				margin-bottom: 3.2rem;
+
+				img {
+					width: 4rem;
+					height: 4rem;
+				}
+
+				span {
+					font-size: 1.3rem;
+				}
+
+				.money-txt {
+					font-weight: 700;
+					font-size: 4.8rem;
+					color: #000000;
+					letter-spacing: 0.3px;
+				}
+			}
+		}
+
+		.luck-list-title {
+			padding: 0 16px;
+			background: #fff;
+			color: #9b9b9b;
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.luck-list {
+			background: #fff;
+			flex: 1;
+			overflow: scroll;
+
+			.luck-item {
+				display: flex;
+				padding: 12px 16px;
+				border-top: 1px solid #d1d1d1;
+				justify-content: space-between;
+				position: relative;
+
+				img:first-child {
+					border-radius: 50%;
+				}
+
+				.luck-king {
+					position: absolute;
+					top: 36px;
+					right: 16px;
+					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;
+					}
+				}
+			}
+		}
+
+		.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: 30.6rem;
+		margin-left: -18rem;
+	}
+
+	.key_install {
+		opacity: 0;
+		animation: key_install 2s;
+		animation-delay: 6s;
+		animation-fill-mode: forwards;
+	}
+
+	.install {
+		position: absolute;
+		top: 20rem;
+		left: 78.5rem;
+
+		.title {
+			font-size: 4.8rem;
+			color: #000000;
+			letter-spacing: 0.3px;
+		}
+
+		.validity {
+			padding-left: 1.5rem;
+			margin-top: 2rem;
+			background: rgba(166, 166, 166, 0.1);
+			width: 40rem;
+			height: 3.3rem;
+			line-height: 3.3rem;
+
+			span {
+				color: #000000;
+				font-size: 1.4rem;
+			}
+		}
+
+		.flow {
+			position: absolute;
+			margin-top: 4.6rem;
+
+			.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 {
+				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 {
+			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;
+			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;
+	}
+}
+
+@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>

+ 27 - 0
static/svg/back-denet.svg

@@ -0,0 +1,27 @@
+<svg width="1510" height="866" viewBox="0 0 1510 866" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="1510" height="943" fill="url(#paint0_linear_13321_142413)"/>
+<g opacity="0.07">
+<path d="M998.14 379.892C969.277 344.064 952 298.51 952 248.921C952 199.331 969.277 153.777 998.14 117.95M1107.9 451.054C1124.83 455.484 1142.6 457.842 1160.92 457.842C1250.7 457.842 1327.25 401.213 1356.81 321.727M1357.81 178.885C1329.02 97.9473 1251.74 40 1160.92 40C1144.87 40 1129.24 41.81 1114.23 45.237" stroke="#4A4A4A" stroke-width="20" stroke-linecap="round" stroke-linejoin="round"/>
+<g clip-path="url(#clip0_13321_142413)">
+<circle cx="1162.59" cy="248.926" r="149.856" stroke="#4A4A4A" stroke-width="20"/>
+<path d="M1148.85 99.3516L1168.85 107.265V393.74L1148.85 401.654V99.3516Z" fill="#4A4A4A"/>
+</g>
+<circle cx="1045.81" cy="73.2812" r="27" fill="#FC782C"/>
+<circle cx="1045.81" cy="423.859" r="27" fill="#FC782C"/>
+<circle cx="1366.52" cy="251.555" r="27" fill="#FC782C"/>
+</g>
+<rect width="1510" height="943" fill="url(#paint1_linear_13321_142413)"/>
+<defs>
+<linearGradient id="paint0_linear_13321_142413" x1="755" y1="0" x2="755" y2="493.477" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FFF8EA"/>
+<stop offset="1" stop-color="white"/>
+</linearGradient>
+<linearGradient id="paint1_linear_13321_142413" x1="755" y1="0" x2="755" y2="402" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FFF8EA" stop-opacity="0"/>
+<stop offset="1" stop-color="white"/>
+</linearGradient>
+<clipPath id="clip0_13321_142413">
+<rect width="195.468" height="401.223" fill="white" transform="translate(1149.85 58.9922)"/>
+</clipPath>
+</defs>
+</svg>

+ 3 - 0
static/svg/back-down.svg

@@ -0,0 +1,3 @@
+<svg width="375" height="323" viewBox="0 0 375 323" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0 0C0 0 49 28 187.5 28C326 28 375 0 375 0V323H0V0Z" fill="#EF4545"/>
+</svg>

+ 17 - 0
static/svg/back-top.svg

@@ -0,0 +1,17 @@
+<svg width="375" height="409" viewBox="0 0 375 409" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_13539_7653)">
+<path d="M1.00954e-10 0H375V332.5C375 332.5 322 360.83 187.5 360.83C53 360.83 0 332.5 0 332.5L1.00954e-10 0Z" fill="#EF4545"/>
+</g>
+<defs>
+<filter id="filter0_d_13539_7653" x="-44" y="-40" width="463" height="448.83" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="22"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_13539_7653"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_13539_7653" result="shape"/>
+</filter>
+</defs>
+</svg>

File diff suppressed because it is too large
+ 6 - 0
static/svg/icon-chrome.svg


File diff suppressed because it is too large
+ 6 - 0
static/svg/icon-king-hat.svg


+ 16 - 0
static/svg/icon-logo.svg

@@ -0,0 +1,16 @@
+<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"/>
+</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)"/>
+</clipPath>
+</defs>
+</svg>

File diff suppressed because it is too large
+ 8 - 0
static/svg/icon-twitter.svg


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

@@ -0,0 +1,4 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="20" height="20" rx="10" fill="#FFB443"/>
+<path d="M10.4871 15.4098V14.5332C12.4926 14.3738 13.6414 13.3445 13.6414 11.691C13.6414 10.2898 12.818 9.43984 11.1445 9.04141L10.4871 8.90195V6.14609C11.2973 6.25234 11.8617 6.81016 11.8816 7.51406H13.4688C13.4355 6.01992 12.2801 4.95078 10.4871 4.79141V3.875H9.5707V4.79141C7.69141 4.95742 6.5625 5.98008 6.5625 7.54727C6.5625 8.87539 7.39922 9.77852 8.9332 10.1504L9.5707 10.3098V13.2117C8.63438 13.1055 8.03008 12.5676 7.97031 11.8105H6.35C6.35664 13.3777 7.5918 14.4203 9.5707 14.5465V15.4098H10.4871ZM12.0277 11.8637C12.0277 12.6605 11.4633 13.1652 10.4871 13.225V10.4824C11.543 10.6949 12.0277 11.1332 12.0277 11.8637ZM8.19609 7.41445C8.19609 6.71055 8.77383 6.18594 9.5707 6.13945V8.70937C8.67422 8.52344 8.19609 8.07852 8.19609 7.41445Z" fill="white"/>
+</svg>

+ 49 - 0
utils/help.js

@@ -0,0 +1,49 @@
+//application/vnd.chromium.remoting-viewer 可能为360特有 通过_mine判断是否是360
+export function isBrowser() {
+    var agent = navigator.userAgent.toLowerCase()
+    console.log(agent)
+    System = function () {
+        if (agent.indexOf('qqbrowser') > 0) {//判断是qq浏览器还是其它浏览器
+            return "qq浏览器"
+        }
+        if (agent.indexOf("se 2.x") > 0) {
+            return "搜狗浏览器"
+        }
+
+        var is360 = _mime("type", "application/vnd.chromium.remoting-viewer");
+
+        if (is360) {
+            return "360浏览器"
+        }
+
+        //检测是否是谷歌内核(可排除360及谷歌以外的浏览器)
+        //测试mime
+        function _mime(option, value) {
+            var mimeTypes = navigator.mimeTypes;
+            console.log(mimeTypes)
+            for (var mt in mimeTypes) {
+                if (mimeTypes[mt][option] == value) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        if (agent.indexOf("chrome") > 0) {
+            return 'chrome'
+        }
+
+    }
+    let s = System()
+    if(s){
+        return s
+    }
+    if (agent.indexOf('firefox') > 0) {
+        return "firefox浏览器"
+    }
+    if (agent.indexOf('trident') > 0) {
+        return "IE浏览器"
+    }
+    if (agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0) {
+        return 'Safari'
+    }
+}

+ 72 - 20
yarn.lock

@@ -3029,6 +3029,21 @@ charm@~0.1.1:
   resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296"
   integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=
 
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.5.1, chokidar@^3.5.2:
+  version "3.5.3"
+  resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+  dependencies:
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
 chokidar@^2.1.8:
   version "2.1.8"
   resolved "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -3048,21 +3063,6 @@ chokidar@^2.1.8:
   optionalDependencies:
     fsevents "^1.2.7"
 
-chokidar@^3.4.1, chokidar@^3.5.1, chokidar@^3.5.2:
-  version "3.5.3"
-  resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
-  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
-  dependencies:
-    anymatch "~3.1.2"
-    braces "~3.0.2"
-    glob-parent "~5.1.2"
-    is-binary-path "~2.1.0"
-    is-glob "~4.0.1"
-    normalize-path "~3.0.0"
-    readdirp "~3.6.0"
-  optionalDependencies:
-    fsevents "~2.3.2"
-
 chownr@^1.1.1:
   version "1.1.4"
   resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@@ -3467,7 +3467,14 @@ croner@~4.1.92:
   resolved "https://registry.yarnpkg.com/croner/-/croner-4.1.97.tgz#6e373dc7bb3026fab2deb0d82685feef20796766"
   integrity sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==
 
-cross-spawn@^7.0.3:
+cross-env@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+  integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+cross-spawn@^7.0.1, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -5155,6 +5162,11 @@ ignore@^5.1.8, ignore@^5.2.0:
   resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
   integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
 
+immutable@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23"
+  integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==
+
 import-cwd@^2.0.0:
   version "2.1.0"
   resolved "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -6065,6 +6077,11 @@ js-beautify@^1.6.12, js-beautify@^1.6.14:
     glob "^7.1.3"
     nopt "^5.0.0"
 
+js-cookie@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
+  integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==
+
 js-git@^0.7.8:
   version "0.7.8"
   resolved "https://registry.yarnpkg.com/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444"
@@ -6153,8 +6170,8 @@ json-schema-traverse@^0.4.1:
 
 json-stringify-safe@^5.0.1:
   version "5.0.1"
-  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+  resolved "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
 
 json5@^0.5.1:
   version "0.5.1"
@@ -6218,6 +6235,11 @@ kleur@^3.0.3:
   resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
   integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
 
+klona@^2.0.4:
+  version "2.0.5"
+  resolved "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
+  integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
+
 last-call-webpack-plugin@^3.0.0:
   version "3.0.0"
   resolved "https://registry.npmmirror.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
@@ -6679,6 +6701,11 @@ module-details-from-path@^1.0.3:
   resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b"
   integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=
 
+moment@^2.29.2:
+  version "2.29.2"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4"
+  integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==
+
 move-concurrently@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -8753,6 +8780,26 @@ safe-regex@^1.1.0:
   resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 
+sass-loader@^10.2.1:
+  version "10.2.1"
+  resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.1.tgz#17e51df313f1a7a203889ce8ff91be362651276e"
+  integrity sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA==
+  dependencies:
+    klona "^2.0.4"
+    loader-utils "^2.0.0"
+    neo-async "^2.6.2"
+    schema-utils "^3.0.0"
+    semver "^7.3.2"
+
+sass@^1.49.11:
+  version "1.50.0"
+  resolved "https://registry.yarnpkg.com/sass/-/sass-1.50.0.tgz#3e407e2ebc53b12f1e35ce45efb226ea6063c7c8"
+  integrity sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==
+  dependencies:
+    chokidar ">=3.0.0 <4.0.0"
+    immutable "^4.0.0"
+    source-map-js ">=0.6.2 <2.0.0"
+
 sax@^1.2.4, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
@@ -9027,7 +9074,7 @@ socks-proxy-agent@5, socks-proxy-agent@^5.0.0:
 
 socks@^2.3.3:
   version "2.6.2"
-  resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a"
+  resolved "https://registry.npmmirror.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a"
   integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==
   dependencies:
     ip "^1.1.5"
@@ -9052,6 +9099,11 @@ source-list-map@^2.0.0:
   resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
   integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
 
+"source-map-js@>=0.6.2 <2.0.0":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
 source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
   version "0.5.3"
   resolved "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -9930,7 +9982,7 @@ utils-merge@1.0.1:
 
 uuid@^3.2.1:
   version "3.4.0"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+  resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
   integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
 
 v8-to-istanbul@^8.1.0:

Some files were not shown because too many files changed in this diff