Changeset 20d16ca for frontend/src/pages
- Timestamp:
- 08/30/26 00:27:08 (2 weeks ago)
- Branches:
- master
- Children:
- e1f74f6
- Parents:
- b63d7b5
- File:
-
- 1 edited
-
frontend/src/pages/Login.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
frontend/src/pages/Login.js
rb63d7b5 r20d16ca 47 47 48 48 localStorage.setItem('token', data.token); 49 localStorage.setItem('user', JSON.stringify({49 const userData = { 50 50 userId: data.userId, 51 51 patientId: data.patientId, … … 55 55 firstName: data.firstName, 56 56 lastName: data.lastName, 57 }; 58 localStorage.setItem('user', JSON.stringify(userData)); 59 60 // Dispatch custom event to notify components on the same tab 61 window.dispatchEvent(new CustomEvent('userStorageChange', { 62 detail: { userData } 57 63 })); 58 64 … … 60 66 setTimeout(() => { 61 67 navigate('/'); 62 }, 1000);68 }, 500); 63 69 } catch (err) { 64 70 setError(err.message || 'Login failed'); … … 69 75 70 76 return ( 71 <div className="min-h-screen bg-blue-200 flex items-center justify-center p-4"> 72 <div className="bg-white rounded-lg shadow-2xl p-8 w-full max-w-md"> 73 <div className="text-center mb-8"> 74 <h1 className="text-5xl font-bold text-purple-600 mb-2">Medora</h1> 75 <p className="text-gray-600">Hospital Management System</p> 76 </div> 77 78 {error && <ErrorAlert message={error} onClose={() => setError(null)} />} 79 {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />} 80 81 <form onSubmit={handleLogin} className="space-y-6"> 82 <div> 83 <label className="block text-sm font-normal text-gray-700 mb-2"> 84 Username (EMBG for Patients) 85 </label> 86 <input 87 type="text" 88 value={username} 89 onChange={(e) => setUsername(e.target.value)} 90 placeholder="Enter your username or EMBG" 91 className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" 92 disabled={loading} 93 /> 77 <div className="min-h-screen bg-blue-200 flex items-center justify-center p-4"> 78 <div className="bg-white rounded-lg shadow-2xl p-8 w-full max-w-md"> 79 <div className="text-center mb-8"> 80 <h1 className="text-5xl font-bold text-purple-600 mb-2">Medora</h1> 81 <p className="text-gray-600">Hospital Management System</p> 94 82 </div> 95 83 96 <div> 97 <label className="block text-sm font-normal text-gray-700 mb-2"> 98 Password 99 </label> 100 <input 101 type="password" 102 value={password} 103 onChange={(e) => setPassword(e.target.value)} 104 placeholder="Enter your password" 105 className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" 106 disabled={loading} 107 /> 84 {error && <ErrorAlert message={error} onClose={() => setError(null)} />} 85 {success && <SuccessAlert message={success} onClose={() => setSuccess(null)} />} 86 87 <form onSubmit={handleLogin} className="space-y-6"> 88 <div> 89 <label className="block text-sm font-normal text-gray-700 mb-2"> 90 Username (EMBG for Patients) 91 </label> 92 <input 93 type="text" 94 value={username} 95 onChange={(e) => setUsername(e.target.value)} 96 placeholder="Enter your username or EMBG" 97 className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" 98 disabled={loading} 99 /> 100 </div> 101 102 <div> 103 <label className="block text-sm font-normal text-gray-700 mb-2"> 104 Password 105 </label> 106 <input 107 type="password" 108 value={password} 109 onChange={(e) => setPassword(e.target.value)} 110 placeholder="Enter your password" 111 className="w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:outline-none focus:border-purple-500 transition" 112 disabled={loading} 113 /> 114 </div> 115 116 <button 117 type="submit" 118 disabled={loading} 119 className="w-full bg-purple-600 text-white font-bold py-3 rounded-lg hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed" 120 > 121 {loading ? 'Logging in...' : 'Login'} 122 </button> 123 </form> 124 125 <div className="mt-8 p-4 bg-purple-50 rounded-lg border border-purple-200"> 126 <p className="text-sm text-gray-700 font-normal mb-2">Demo Credentials:</p> 127 <p className="text-sm text-gray-600 mb-2"> 128 <strong>Admin:</strong> username: admin | password: admin123 129 </p> 130 <p className="text-sm text-gray-600 mb-2"> 131 <strong>Doctor:</strong> username: ivan.stojanov@medora.com | password: doctor123 132 </p> 133 <p className="text-sm text-gray-600"> 134 <strong>Patient:</strong> username: [EMBG] | password: password123 135 </p> 108 136 </div> 109 110 <button111 type="submit"112 disabled={loading}113 className="w-full bg-purple-600 text-white font-bold py-3 rounded-lg hover:bg-purple-700 transition disabled:opacity-50 disabled:cursor-not-allowed"114 >115 {loading ? 'Logging in...' : 'Login'}116 </button>117 </form>118 119 <div className="mt-8 p-4 bg-purple-50 rounded-lg border border-purple-200">120 <p className="text-sm text-gray-700 font-normal mb-2">Demo Credentials:</p>121 <p className="text-sm text-gray-600 mb-2">122 <strong>Admin:</strong> username: admin | password: admin123123 </p>124 <p className="text-sm text-gray-600 mb-2">125 <strong>Doctor:</strong> username: ivan.stojanov@medora.com | password: doctor123126 </p>127 <p className="text-sm text-gray-600">128 <strong>Patient:</strong> username: [EMBG] | password: password123129 </p>130 137 </div> 131 138 </div> 132 </div>133 139 ); 134 140 }
Note:
See TracChangeset
for help on using the changeset viewer.
