From e177443052a2357f97b565a3407122f5b8b10482 Mon Sep 17 00:00:00 2001 From: Nono-Coco <604921208@qq.com> Date: Wed, 10 Jun 2026 18:32:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E5=9B=BE=E4=B9=A6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 LibrarianApp 使用统一认证 - 更新统一登录页面 --- frontend/src/librarian/LibrarianApp.jsx | 12 +++++++-- frontend/src/pages/UnifiedLogin.jsx | 33 +++++++++++++++++-------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/frontend/src/librarian/LibrarianApp.jsx b/frontend/src/librarian/LibrarianApp.jsx index e948418..2bc576c 100644 --- a/frontend/src/librarian/LibrarianApp.jsx +++ b/frontend/src/librarian/LibrarianApp.jsx @@ -1,15 +1,22 @@ import { useState, useEffect } from 'react' +import { useLocation, useNavigate } from 'react-router-dom' import LibrarianLogin from './LibrarianLogin' import LibrarianRegister from './LibrarianRegister' import LibrarianDashboard from './LibrarianDashboard' import { isAuthenticated, logout } from './api' // 改为新函数 function LibrarianApp() { + const location = useLocation() + const navigate = useNavigate() const [isLoggedIn, setIsLoggedIn] = useState(false) const [librarian, setLibrarian] = useState(null) - const [showRegister, setShowRegister] = useState(false) + const [showRegister, setShowRegister] = useState(() => new URLSearchParams(location.search).get('register') === 'true') const [loading, setLoading] = useState(true) + useEffect(() => { + setShowRegister(new URLSearchParams(location.search).get('register') === 'true') + }, [location.search]) + useEffect(() => { // 检查登录状态 - 使用新函数 if (isAuthenticated()) { @@ -44,6 +51,7 @@ function LibrarianApp() { logout() // 使用新函数 setIsLoggedIn(false) setLibrarian(null) + navigate('/login') } const handleRegisterSuccess = () => { @@ -66,7 +74,7 @@ function LibrarianApp() { return ( setShowRegister(false)} + onSwitchToLogin={() => navigate('/login')} /> ) } diff --git a/frontend/src/pages/UnifiedLogin.jsx b/frontend/src/pages/UnifiedLogin.jsx index c2c4b15..dbf1139 100644 --- a/frontend/src/pages/UnifiedLogin.jsx +++ b/frontend/src/pages/UnifiedLogin.jsx @@ -1,6 +1,8 @@ import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; const UnifiedLogin = () => { + const navigate = useNavigate(); const [role, setRole] = useState('reader'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); @@ -36,7 +38,6 @@ const UnifiedLogin = () => { setLoading(true); try { - let apiEndpoint = 'http://localhost:3001/api/auth/login'; let requestBody = {}; if (role === 'reader') { @@ -46,10 +47,10 @@ const UnifiedLogin = () => { type: 'student' }; } else if (role === 'librarian') { - apiEndpoint = 'http://localhost:3001/api/auth/login-librarian'; requestBody = { - employeeId: employeeId || email, - password: password + email: employeeId || email, + password: password, + type: 'librarian' }; } else if (role === 'admin') { requestBody = { @@ -59,7 +60,7 @@ const UnifiedLogin = () => { }; } - const res = await fetch(apiEndpoint, { + const res = await fetch('http://localhost:3001/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(requestBody) @@ -81,21 +82,21 @@ const UnifiedLogin = () => { setBannedInfo(null); if (role === 'librarian') { - localStorage.setItem('librarianToken', data.token); - localStorage.setItem('librarianInfo', JSON.stringify(data.librarian)); + localStorage.setItem('token', data.token); + localStorage.setItem('user', JSON.stringify(data.librarian)); if (rememberMe) { localStorage.setItem('savedEmployeeId', employeeId || email); } else { localStorage.removeItem('savedEmployeeId'); } - window.location.href = '/librarian-login'; + navigate('/librarian-login'); } else { localStorage.setItem('token', data.token); localStorage.setItem('user', JSON.stringify(data.user)); if (role === 'admin') { - window.location.href = '/admin-dashboard'; + navigate('/admin-dashboard'); } else { - window.location.href = '/'; + navigate('/'); } } } catch (err) { @@ -289,6 +290,18 @@ const UnifiedLogin = () => {

)} + {role === 'librarian' && ( +

+ 还没有馆员账号?{' '} + +

+ )}