import { useContextKey } from '@kevisual/context'; import '@kevisual/kv-login'; import { checkPluginLogin } from '@kevisual/kv-login' import { useEffect } from 'react'; import { useLayoutStore } from './store'; import { useShallow } from 'zustand/shallow'; import { useNavigate } from '@tanstack/react-router'; export const LoginComponent = ({ onLoginSuccess }: { onLoginSuccess: () => void }) => { useEffect(() => { // 监听登录成功事件 const handleLoginSuccess = () => { console.log('监听到登录成功事件,关闭弹窗'); onLoginSuccess(); }; const loginEmitter = useContextKey('login-emitter') console.log('KvLogin Types:', loginEmitter); loginEmitter.on('login-success', handleLoginSuccess); // 清理监听器 return () => { loginEmitter.off('login-success', handleLoginSuccess); }; }, [onLoginSuccess]); // @ts-ignore return () } export const App = () => { const store = useLayoutStore(useShallow((state) => ({ init: state.init, loginPageConfig: state.loginPageConfig, }))); useEffect(() => { checkPluginLogin(); }, []); const navigate = useNavigate(); const handleLoginSuccess = async () => { await store.init() navigate({ to: '/' }) }; const { title, subtitle, footer } = store.loginPageConfig; return (
{/* 背景装饰 - 圆形光晕 */}
{/* 背景装饰 - 网格图案 */}
{/* 顶部装饰文字 */}

{title}

{subtitle}

{/* 登录卡片容器 */}
{/* 卡片外圈光效 */}
{/* 登录组件容器 */}
{/* 底部装饰 */}

{footer}

) } export default App;