|
|
@@ -1,18 +1,50 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { ref } from 'vue';
|
|
|
+import { ref, onMounted } from 'vue';
|
|
|
import axios from 'axios';
|
|
|
import { useUserStore } from '../stores/user';
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
import robotImage from '../assets/robot.png';
|
|
|
|
|
|
const userStore = useUserStore();
|
|
|
const router = useRouter();
|
|
|
+const route = useRoute();
|
|
|
|
|
|
const name = ref('');
|
|
|
const password = ref('');
|
|
|
const loading = ref(false);
|
|
|
const error = ref('');
|
|
|
|
|
|
+onMounted(async () => {
|
|
|
+ const token = route.query.token as string;
|
|
|
+ const source = route.query.source as string;
|
|
|
+
|
|
|
+ if (token && source) {
|
|
|
+ loading.value = true;
|
|
|
+ error.value = '';
|
|
|
+
|
|
|
+ try {
|
|
|
+ const { data } = await axios.post(
|
|
|
+ `${import.meta.env.VITE_API_URL}/users/token/third-party`,
|
|
|
+ {
|
|
|
+ token,
|
|
|
+ source,
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ userStore.setUser({
|
|
|
+ userId: data.access_token,
|
|
|
+ name: data.username,
|
|
|
+ refreshToken: data.refresh_token,
|
|
|
+ });
|
|
|
+
|
|
|
+ router.push('/chat');
|
|
|
+ } catch (err: any) {
|
|
|
+ error.value = err.response?.data?.detail || '第三方登录失败';
|
|
|
+ loading.value = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
const loginUser = async () => {
|
|
|
if (!name.value || !password.value) {
|
|
|
error.value = '用户名和秘密是必填项';
|