import React, { useState, useEffect } from 'react'; import './PasswordProtection.css'; import { gradingApi } from '../api/grading'; interface PasswordProtectionProps { onPasswordCorrect: () => void; } const PasswordProtection: React.FC = ({ onPasswordCorrect }) => { const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); // 檢查是否已經有有效的密碼 session useEffect(() => { const savedPassword = sessionStorage.getItem('app_password_verified'); if (savedPassword === 'true') { onPasswordCorrect(); } }, [onPasswordCorrect]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!password.trim()) { setError('請輸入密碼'); return; } setLoading(true); setError(''); try { // 發送密碼驗證請求到後端 const data = await gradingApi.verifyPassword(password); if (data.success) { // 密碼正確,保存到 sessionStorage sessionStorage.setItem('app_password_verified', 'true'); onPasswordCorrect(); } else { setError(data.message || '密碼錯誤,請重試'); } } catch (err) { console.error('Password verification error:', err); setError('驗證失敗,請檢查網路連線'); } finally { setLoading(false); } }; return (

🔒 AI 批改平台

請輸入存取密碼以繼續使用

setPassword(e.target.value)} placeholder="請輸入密碼" disabled={loading} autoFocus />
{error && (
{error}
)}

此平台需要密碼保護以確保使用安全性
如需協助,請聯絡管理員

); }; export default PasswordProtection;