import React, { useState, useCallback, useEffect } from 'react'; import { Box, Center, Flex, useDisclosure } from '@chakra-ui/react'; import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import type { ResLogin } from '@/global/support/api/userRes.d'; import { useRouter } from 'next/router'; import { useUserStore } from '@/web/support/user/useUserStore'; import { useChatStore } from '@/web/core/chat/context/storeChat'; import LoginForm from './components/LoginForm/LoginForm'; import dynamic from 'next/dynamic'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { clearToken, setToken } from '@/web/support/user/auth'; import Script from 'next/script'; import Loading from '@fastgpt/web/components/common/MyLoading'; const RegisterForm = dynamic(() => import('./components/RegisterForm')); const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm')); const WechatForm = dynamic(() => import('./components/LoginForm/WechatForm')); const CommunityModal = dynamic(() => import('@/components/CommunityModal')); const Login = () => { const router = useRouter(); const { lastRoute = '' } = router.query as { lastRoute: string }; const { feConfigs } = useSystemStore(); const [pageType, setPageType] = useState<`${LoginPageTypeEnum}`>(); const { setUserInfo } = useUserStore(); const { setLastChatId, setLastChatAppId } = useChatStore(); const { isOpen, onOpen, onClose } = useDisclosure(); const loginSuccess = useCallback( (res: ResLogin) => { // init store setLastChatId(''); setLastChatAppId(''); setUserInfo(res.user); setToken(res.token); setTimeout(() => { router.push(lastRoute ? decodeURIComponent(lastRoute) : '/app/list'); }, 300); }, [lastRoute, router, setLastChatId, setLastChatAppId, setUserInfo] ); function DynamicComponent({ type }: { type: `${LoginPageTypeEnum}` }) { const TypeMap = { [LoginPageTypeEnum.passwordLogin]: LoginForm, [LoginPageTypeEnum.register]: RegisterForm, [LoginPageTypeEnum.forgetPassword]: ForgetPasswordForm, [LoginPageTypeEnum.wechat]: WechatForm }; const Component = TypeMap[type]; return ; } /* default login type */ useEffect(() => { setPageType( feConfigs?.oauth?.wechat ? LoginPageTypeEnum.wechat : LoginPageTypeEnum.passwordLogin ); }, [feConfigs.oauth]); useEffect(() => { clearToken(); router.prefetch('/app/list'); }, []); return ( <> {feConfigs.googleClientVerKey && ( )} {pageType ? ( ) : (
)}
{feConfigs?.concatMd && ( 无法登录,点击联系 )}
{isOpen && }
); }; export async function getServerSideProps(context: any) { return { props: { ...(await serviceSideProps(context)) } }; } export default Login;