| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { socialLogin } from '@/api/login'; |
| | | import { login, callback } from '@/api/login'; |
| | | import { setToken } from '@/utils/auth'; |
| | | import Cookies from 'js-cookie'; |
| | | import { getToken } from '@/utils/auth'; |
| | | import router from '@/router'; |
| | | import { LoginData } from '@/api/types'; |
| | | |
| | | const route = useRoute(); |
| | | const loading = ref(true); |
| | |
| | | * 接收Route传递的参数 |
| | | * @param {Object} route.query. |
| | | */ |
| | | const code = route.query.code; |
| | | const state = route.query.state; |
| | | const code = route.query.code as string; |
| | | const state = route.query.state as string; |
| | | const source = route.query.source as string; |
| | | const tenantId = Cookies.get("tenantId") ? Cookies.get("tenantId") as string : '000000'; |
| | | |
| | | /** |
| | | * 通过code获取token |
| | | * @param {string} source |
| | | * @param {string} code |
| | | * @param {string} state |
| | | */ |
| | | await socialLogin(source, tenantId, code, state) |
| | | .then(async (res) => { |
| | | if (res.code !== 200) { |
| | | ElMessage.error(res.msg); |
| | | location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; |
| | | return; |
| | | } |
| | | |
| | | const processResponse = async (res: any) => { |
| | | if (res.code !== 200) { |
| | | throw new Error(res.msg); |
| | | } |
| | | setToken(res.data.access_token); |
| | | ElMessage.success(res.msg); |
| | | location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; |
| | | }; |
| | | |
| | | const handleError = (error: any) => { |
| | | ElMessage.error(error.message); |
| | | location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; |
| | | }; |
| | | |
| | | const callbackByCode = async (data: LoginData) => { |
| | | try { |
| | | const res = await callback(data); |
| | | await processResponse(res); |
| | | loading.value = false; |
| | | setToken(res.data.access_token) |
| | | ElMessage.success(res.msg); |
| | | location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index'; |
| | | }) |
| | | .catch(() => { |
| | | } catch (error) { |
| | | handleError(error); |
| | | } |
| | | }; |
| | | |
| | | const loginByCode = async (data: LoginData) => { |
| | | try { |
| | | const res = await login(data); |
| | | await processResponse(res); |
| | | loading.value = false; |
| | | } catch (error) { |
| | | handleError(error); |
| | | } |
| | | }; |
| | | |
| | | const init = async () => { |
| | | const data: LoginData = { |
| | | socialCode: code, |
| | | socialState: state, |
| | | tenantId: tenantId, |
| | | source: source, |
| | | clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e', |
| | | grantType: 'social' |
| | | }; |
| | | |
| | | if (!getToken()) { |
| | | await loginByCode(data); |
| | | } else { |
| | | await callbackByCode(data); |
| | | } |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | nextTick(() => { |
| | | init(); |
| | | }); |
| | | }); |
| | | </script> |