// LoginApp.jsx - React Login Component for GroupWare const { useState, useEffect, useRef } = React; function LoginApp() { const [formData, setFormData] = useState({ gcode: '', userId: '', password: '', rememberMe: false }); const [userGroups, setUserGroups] = useState([]); const [isLoading, setIsLoading] = useState(false); const [message, setMessage] = useState({ type: '', text: '', show: false }); const [isFormReady, setIsFormReady] = useState(false); const gcodeRef = useRef(null); const userIdRef = useRef(null); const passwordRef = useRef(null); // 메시지 표시 함수 const showMessage = (type, text) => { setMessage({ type, text, show: true }); setTimeout(() => { setMessage(prev => ({ ...prev, show: false })); }, 3000); }; // 폼 데이터 업데이트 const handleInputChange = (e) => { const { name, value, type, checked } = e.target; setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? checked : value })); }; // 사용자 그룹 목록 로드 const loadUserGroups = async () => { try { const response = await fetch('/DashBoard/GetUserGroups'); const data = await response.json(); // 유효한 그룹만 필터링 const validGroups = data.filter(group => group.gcode && group.name); setUserGroups(validGroups); // 이전 로그인 정보 로드 await loadPreviousLoginInfo(); } catch (error) { console.error('그룹 목록 로드 중 오류 발생:', error); showMessage('error', '부서 목록을 불러오는 중 오류가 발생했습니다.'); } }; // 이전 로그인 정보 로드 const loadPreviousLoginInfo = async () => { try { const response = await fetch('/Home/GetPreviousLoginInfo'); const result = await response.json(); if (result.Success && result.Data) { const { Gcode, UserId } = result.Data; setFormData(prev => ({ ...prev, gcode: Gcode || '', userId: UserId ? UserId.split(';')[0] : '' })); // 포커스 설정 setTimeout(() => { if (Gcode && UserId) { passwordRef.current?.focus(); } else { gcodeRef.current?.focus(); } }, 100); } setIsFormReady(true); } catch (error) { console.error('이전 로그인 정보 로드 중 오류 발생:', error); setIsFormReady(true); setTimeout(() => { gcodeRef.current?.focus(); }, 100); } }; // 로그인 처리 const handleLogin = async (e) => { e.preventDefault(); const { gcode, userId, password, rememberMe } = formData; // 유효성 검사 if (!gcode || !userId || !password) { showMessage('error', '그룹코드/사용자ID/비밀번호를 입력해주세요.'); return; } setIsLoading(true); try { const response = await fetch('/Home/Login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ Gcode: gcode, UserId: userId, Password: password, RememberMe: rememberMe }) }); const data = await response.json(); if (data.Success) { // 로그인 성공 showMessage('success', data.Message); // WebView2에 로그인 성공 메시지 전송 if (window.chrome && window.chrome.webview) { window.chrome.webview.postMessage('LOGIN_SUCCESS'); } // 리다이렉트 URL이 있으면 이동 if (data.RedirectUrl) { setTimeout(() => { window.location.href = data.RedirectUrl; }, 1000); } } else { // 로그인 실패 showMessage('error', data.Message || '로그인에 실패했습니다.'); } } catch (error) { console.error('로그인 요청 중 오류 발생:', error); showMessage('error', '서버 연결에 실패했습니다. 다시 시도해주세요.'); } finally { setIsLoading(false); } }; // 컴포넌트 마운트 시 실행 useEffect(() => { loadUserGroups(); }, []); return (
로그인하여 시스템에 접속하세요
© 2024 GroupWare System. All rights reserved.