¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-loading"> |
| | | <div class="app-loading-wrap"> |
| | | <img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo"> |
| | | <div class="app-loading-dots"> |
| | | <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span> |
| | | </div> |
| | | <div class="app-loading-title">æºè½ä¸è¯å¹²ç¥æºæ°åå车é´</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | |
| | | <script lang="ts"> |
| | | /** |
| | | * å°å䏿ºå¸¦tokenï¼è·³è½¬è³æ¤é¡µé¢è¿è¡ç»å½æä½ |
| | | */ |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import { useMessage } from '/@/hooks/web/useMessage'; |
| | | import { useUserStore } from '/@/store/modules/user'; |
| | | import { useI18n } from '/@/hooks/web/useI18n'; |
| | | |
| | | export default { |
| | | name: "TokenLogin", |
| | | setup(){ |
| | | const route = useRoute(); |
| | | let router = useRouter(); |
| | | const {createMessage, notification} = useMessage() |
| | | const {t} = useI18n(); |
| | | const routeQuery:any = route.query; |
| | | if(!routeQuery){ |
| | | createMessage.warning('åæ°æ æ') |
| | | } |
| | | |
| | | const token = routeQuery['loginToken']; |
| | | if(!token){ |
| | | createMessage.warning('tokenæ æ') |
| | | } |
| | | const userStore = useUserStore(); |
| | | userStore.ThirdLogin({ token, thirdType:'email' }).then(res => { |
| | | console.log("res====>doThirdLogin",res) |
| | | if(res && res.userInfo){ |
| | | requestSuccess(res) |
| | | }else{ |
| | | requestFailed(res) |
| | | } |
| | | }); |
| | | |
| | | function requestFailed (err) { |
| | | notification.error({ |
| | | message: 'ç»å½å¤±è´¥', |
| | | description: ((err.response || {}).data || {}).message || err.message || "请æ±åºç°é误ï¼è¯·ç¨ååè¯", |
| | | duration: 4, |
| | | }); |
| | | } |
| | | |
| | | function requestSuccess(res){ |
| | | let info = routeQuery.info; |
| | | if(info){ |
| | | let query = JSON.parse(info) |
| | | let taskId = query.taskId; |
| | | let path = '/task/handle/'+taskId |
| | | router.replace({ path, query }) |
| | | notification.success({ |
| | | message: t('sys.login.loginSuccessTitle'), |
| | | description: `${t('sys.login.loginSuccessDesc')}: ${res.userInfo.realname}`, |
| | | duration: 3, |
| | | }); |
| | | }else{ |
| | | notification.error({ |
| | | message: '忰失æ', |
| | | description: "页é¢è·³è½¬åæ°ä¸¢å¤±ï¼è¯·æ¥çæ¥å¿", |
| | | duration: 4, |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | html[data-theme='dark'] .app-loading { |
| | | background-color: #2c344a; |
| | | } |
| | | |
| | | html[data-theme='dark'] .app-loading .app-loading-title { |
| | | color: rgba(255, 255, 255, 0.85); |
| | | } |
| | | |
| | | .app-loading { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100%; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | background-color: #f4f7f9; |
| | | } |
| | | |
| | | .app-loading .app-loading-wrap { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | display: flex; |
| | | -webkit-transform: translate3d(-50%, -50%, 0); |
| | | transform: translate3d(-50%, -50%, 0); |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .app-loading .dots { |
| | | display: flex; |
| | | padding: 98px; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | |
| | | .app-loading .app-loading-title { |
| | | display: flex; |
| | | margin-top: 30px; |
| | | font-size: 30px; |
| | | color: rgba(0, 0, 0, 0.85); |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | |
| | | .app-loading .app-loading-logo { |
| | | display: block; |
| | | width: 90px; |
| | | margin: 0 auto; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .dot { |
| | | position: relative; |
| | | display: inline-block; |
| | | width: 48px; |
| | | height: 48px; |
| | | margin-top: 30px; |
| | | font-size: 32px; |
| | | transform: rotate(45deg); |
| | | box-sizing: border-box; |
| | | animation: antRotate 1.2s infinite linear; |
| | | } |
| | | |
| | | .dot i { |
| | | position: absolute; |
| | | display: block; |
| | | width: 20px; |
| | | height: 20px; |
| | | background-color: #0065cc; |
| | | border-radius: 100%; |
| | | opacity: 0.3; |
| | | transform: scale(0.75); |
| | | animation: antSpinMove 1s infinite linear alternate; |
| | | transform-origin: 50% 50%; |
| | | } |
| | | |
| | | .dot i:nth-child(1) { |
| | | top: 0; |
| | | left: 0; |
| | | } |
| | | |
| | | .dot i:nth-child(2) { |
| | | top: 0; |
| | | right: 0; |
| | | -webkit-animation-delay: 0.4s; |
| | | animation-delay: 0.4s; |
| | | } |
| | | |
| | | .dot i:nth-child(3) { |
| | | right: 0; |
| | | bottom: 0; |
| | | -webkit-animation-delay: 0.8s; |
| | | animation-delay: 0.8s; |
| | | } |
| | | |
| | | .dot i:nth-child(4) { |
| | | bottom: 0; |
| | | left: 0; |
| | | -webkit-animation-delay: 1.2s; |
| | | animation-delay: 1.2s; |
| | | } |
| | | @keyframes antRotate { |
| | | to { |
| | | -webkit-transform: rotate(405deg); |
| | | transform: rotate(405deg); |
| | | } |
| | | } |
| | | @-webkit-keyframes antRotate { |
| | | to { |
| | | -webkit-transform: rotate(405deg); |
| | | transform: rotate(405deg); |
| | | } |
| | | } |
| | | @keyframes antSpinMove { |
| | | to { |
| | | opacity: 1; |
| | | } |
| | | } |
| | | @-webkit-keyframes antSpinMove { |
| | | to { |
| | | opacity: 1; |
| | | } |
| | | } |
| | | |
| | | </style> |