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' && (
+
+ 还没有馆员账号?{' '}
+
+
+ )}