Przeglądaj źródła

feat: 专家登录

NeeDaye 6 miesięcy temu
rodzic
commit
39811df272

+ 12 - 0
.umirc.ts

@@ -15,6 +15,12 @@ export default defineConfig({
       layout: false,
     },
     {
+      path: '/login/callback',
+      name: '三方登录回调',
+      component: './LoginCallback',
+      layout: false,
+    },
+    {
       path: '/',
       redirect: '/record',
       custom: [{
@@ -37,6 +43,12 @@ export default defineConfig({
       }]
     },
   ],
+  proxy: {
+    '/api': {
+      'target': 'http://119.45.236.111:8866',
+      'changeOrigin': true,
+    },
+  },
   npmClient: 'pnpm',
 });
 

+ 1 - 1
src/app.ts

@@ -36,7 +36,7 @@ export function onRouteChange({ location }: any) {
   const token = localStorage.getItem('token');
 
   // 未登录且不在登录页,跳转到登录页
-  if (!token && location.pathname !== '/login') {
+  if (!token && (location.pathname !== '/login' && location.pathname !== '/login/callback' )) {
     history.push('/login?redirect=' + encodeURIComponent(location.pathname));
   }
 

+ 17 - 17
src/pages/Login/index.tsx

@@ -1,25 +1,25 @@
-import { useNavigate } from "@umijs/max";
+import { useNavigate } from '@umijs/max';
 import React from "react";
-import * as LoginController from '@/services/login/LoginController';
-import { Button } from 'antd';
+import {Button, Flex} from "antd";
 
 
 const LoginPage: React.FC = () => {
   const navigate = useNavigate();
-
-  const handleLogin = async () => {
-    if (localStorage.getItem('token')) {
-      navigate('/');
-    } else {
-      const data = await LoginController.login({ username: 'mxkj_xy', password: 'Aa@@1144' });
-      if (data.code === 200) {
-        localStorage.setItem('token', data.data.accessToken as string)
-        navigate('/');
-      }
-    }
-  };
-
-  return <Button onClick={handleLogin}>登录</Button>;
+  return (
+    <Flex style={{ height: '100vh' }} justify="center" align="center" gap="middle" vertical>
+      <h1>统一登录(甲方提供)</h1>
+      <Button
+        style={{ width: "200px" }}
+        color="primary"
+        variant="solid"
+        onClick={() => {
+          navigate('/login/callback?sessionId=xxxxxxxx')
+        }}
+      >
+        登录
+      </Button>
+    </Flex>
+  );
 }
 
 export default LoginPage;

+ 35 - 0
src/pages/LoginCallback/index.tsx

@@ -0,0 +1,35 @@
+import { useNavigate } from "@umijs/max";
+import React, { useEffect } from 'react';
+import * as LoginController from '@/services/login/LoginController';
+import { Flex, Spin } from 'antd';
+import {useLocation} from "@@/exports";
+
+
+const LoginPage: React.FC = () => {
+  const location = useLocation();
+  const navigate = useNavigate();
+  const handleLogin = async () => {
+    const searchParams = new URLSearchParams(location.search);
+    if (localStorage.getItem('token')) {
+      navigate('/');
+    } else {
+      const data = await LoginController.login({ sessionId: searchParams.get('sessionId') || '' });
+      if (data.code === 200) {
+        localStorage.setItem('token', data.data.accessToken as string)
+        navigate('/');
+      }
+    }
+  };
+
+  useEffect(() => {
+    handleLogin()
+  }, []);
+
+  return (
+    <Flex style={{ height: '100vh' }} justify="center" align="center" gap="middle" vertical>
+      <Spin size="large" />
+    </Flex>
+  );
+}
+
+export default LoginPage;

+ 1 - 1
src/services/login/LoginController.ts

@@ -11,7 +11,7 @@ export async function login(
   body?: API.LoginParams,
   options?: { [key: string]: any },
 ) {
-  return request<API.LoginRes>('/api/auth/login', {
+  return request<API.LoginRes>('/api/auth/expertLogin', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',

+ 1 - 2
src/services/login/typings.d.ts

@@ -1,8 +1,7 @@
 declare namespace API {
   // 参数接口
   interface LoginParams {
-    password?: string;
-    username?: string;
+    sessionId?: string;
   }
 
   // 响应接口