|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <div class="mobile-land-page">
|
|
|
+ <div class="mobile-land-page" :class="isLoading ? 'loading-page' : ''">
|
|
|
<div class="mobile-land-page-invited-info" v-if="useFul && !isNFTCpd">
|
|
|
<img :src="userInfo.avatarUrl" class="invited-photo" />
|
|
|
<div class="invited-name">{{ userInfo.nickName }}</div>
|
|
@@ -63,6 +63,9 @@
|
|
|
<div class="mobile-land-page-tip">{{ tipCpd }}</div>
|
|
|
</FontZoom>
|
|
|
<div class="mobile-land-page-login-twitter" @click="toLogin">{{ isLoginCpd || loginSuccessBack ? (!useFul || isNFTCpd ? 'Install' : 'Claim Prize') : 'Login Twitter' }}</div>
|
|
|
+ <template v-if="isLoading">
|
|
|
+ <img class="loading" src="../static/svg/icon-loading.svg" />
|
|
|
+ </template>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
@@ -146,6 +149,7 @@ export default {
|
|
|
return {
|
|
|
timer: {},
|
|
|
loginSuccessBack: false,
|
|
|
+ isLoading: false,
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -240,12 +244,14 @@ export default {
|
|
|
}).then(({ code, data }) => {
|
|
|
if (code == 0) {
|
|
|
let url = getOauthUrl(data.authToken);
|
|
|
+ this.isLoading = true;
|
|
|
win.location.href = url;
|
|
|
this.timer.value = setInterval(() => {
|
|
|
if (win && win.closed) {
|
|
|
clearInterval(this.timer.value);
|
|
|
this.twitterLogin(data);
|
|
|
if (getStorage(storageKey.backFromTwitterLogin)) {
|
|
|
+ this.isLoading = false;
|
|
|
removeStorage(storageKey.backFromTwitterLogin);
|
|
|
this.cancelLogin();
|
|
|
}
|
|
@@ -268,6 +274,7 @@ export default {
|
|
|
oauthVerifier: verifier,
|
|
|
},
|
|
|
}).then(({ code, data }) => {
|
|
|
+ this.isLoading = false;
|
|
|
if (code == 0) {
|
|
|
setStorage(storageKey.userInfo, data);
|
|
|
removeStorage(storageKey.verifier);
|
|
@@ -397,5 +404,27 @@ export default {
|
|
|
text-align: center;
|
|
|
color: #fff;
|
|
|
}
|
|
|
+ .loading {
|
|
|
+ position: absolute;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ margin: auto;
|
|
|
+ width: 40px;
|
|
|
+ border-radius: 50%;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+.loading-page {
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.loading-page::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background-color: #fff;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
}
|
|
|
</style>
|