import React, { useEffect, useState } from 'react'; import { useRouter } from 'next/router'; import Footer from '@/components/Footer'; import Logo from '@/assets/logo.svg'; import LoginForm from './form'; import LoginBanner from './banner'; import styles from './style/index.module.less'; import { getToken, getUserInfo } from '@/api/user'; import { setSessionUserInfo, setToken } from '@/utils/auth'; import { localGet, localRemove, openWindow } from '@/utils/common'; import logoImage from '@/public/assets/logo.png'; import store from '@/store'; import { updateUserInfo } from '@/store/user'; import { getMyComponents, getPubComponents, getTeamComponents, } from '@/api/components'; import { getPublishPage } from '@/api/flow'; import dayjs from 'dayjs'; function Login() { const router = useRouter(); const [isNeedLogin, setIsNeedLogin] = useState(false); async function fetchUserInfo() { store.dispatch(updateUserInfo({ userLoading: true })); const res: any = await getUserInfo(); setSessionUserInfo(res.data); store.dispatch(updateUserInfo({ userInfo: { ...res.data } })); getComponentData(); } const getComponentData = async () => { try { const requests = [ { promise: getMyComponents(), key: 'myLibs' }, { promise: getPubComponents(), key: 'pubLibs' }, { promise: getTeamComponents(), key: 'teamLibs' }, { promise: getPublishPage(), key: 'pubFlow' }, // {promise: appId ? getMineSubs({id: appId}) : Promise.resolve(null), key: 'myFlow'}, // {promise: getEventList(), key: 'eventList'} ]; const obj: any = { myLibs: null, pubLibs: null, teamLibs: null, pubFlow: null, // myFlow: null, updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), }; const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); // 分别处理每个请求 for (const { promise, key } of requests) { try { const res: any = await promise; if (res?.code === 200 && res.data?.length > 0) { // if (key === 'myLibs') { // addCompInfo(res.data); // libsStore.setMyLibs(res.data); // } else if (key === 'pubLibs') { // addCompInfo(res.data); // libsStore.setPubLibs(res.data); // } else if (key === 'teamLibs') { // addCompInfo(res.data); // libsStore.setTeamLibs(res.data); // } else if (key === 'pubFlow') { // addCompInfo(res.data, true); // libsStore.setPubFlow(res.data); // } // else if (key === 'myFlow') { // let newData = formatFlowMy(res.data); // addCompInfo(newData, true); // libsStore.setMyFlow(newData); // } // else if (key === 'eventList') { // eventStore.setEventList(res.data); // } } // 更新本地存储数据 obj[key] = res?.data || null; sessionStorage.setItem( `compLibs${userInfo.userId}`, JSON.stringify(obj) ); } catch (error) { console.error(`加载${key}失败:`, error); } } } catch (error) { console.error('加载组件库失败:', error); } }; const handleLogin = async () => { const url = new URL(window.location.href); const code = url.searchParams.get('code'); const token = url.searchParams.get('token'); const { origin, pathname } = window.location; setIsNeedLogin(code === null && token === null); // 处理 URL 中的 token 参数 if (token) { try { // 记录登录状态 localStorage.setItem('userStatus', 'login'); // 保存 Token setToken(token); // 获取用户信息 // await fetchUserInfo(); // 清除 URL 中的 token 参数 url.searchParams.delete('token'); window.history.replaceState({}, '', url.pathname + url.search); // 跳转首页 window.location.href = '/dashboard/workplace'; return; } catch (error) { console.error('Token login error:', error); } } if (code) { const callbackUrl = `${origin}/`; try { // 根据code向后端获取token const res: any = await getToken({ authCode: code, callbackUrl, } as any); if (res && res.code === 200) { // 保存Token setToken(res.data as string); // 保存用户信息 // await userStore.info(); // 如果有对应的Redux操作,可以在这里dispatch if (localGet('system_name') === 'pc') { openWindow( `${window.location.protocol}//${window.location.hostname}:${window.location.port}/isdp/`, { target: '_self', } ); localRemove('system_name'); return; } else { fetchUserInfo(); router.push('/dashboard/workplace'); } } } catch (error) { console.error('Login error:', error); } } }; useEffect(() => { document.body.setAttribute('arco-theme', 'light'); handleLogin(); }, [router]); // 依赖数组包含router,确保router变化时能正确执行 return (