75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
|
|
import HomePage from './pages/HomePage';
|
|
import Dashboard from './pages/Dashboard';
|
|
import MeetingDetails from './pages/MeetingDetails';
|
|
import CreateMeeting from './pages/CreateMeeting';
|
|
import EditMeeting from './pages/EditMeeting';
|
|
import './App.css';
|
|
|
|
function App() {
|
|
const [user, setUser] = useState(null);
|
|
const [isLoading, setIsLoading] = useState(true);
|
|
|
|
// Load user from localStorage on app start
|
|
useEffect(() => {
|
|
const savedUser = localStorage.getItem('iMeetingUser');
|
|
console.log('Saved user from localStorage:', savedUser);
|
|
if (savedUser) {
|
|
try {
|
|
const parsedUser = JSON.parse(savedUser);
|
|
console.log('Parsed user:', parsedUser);
|
|
setUser(parsedUser);
|
|
} catch (error) {
|
|
console.error('Error parsing saved user:', error);
|
|
localStorage.removeItem('iMeetingUser');
|
|
}
|
|
}
|
|
setIsLoading(false);
|
|
}, []);
|
|
|
|
const handleLogin = (userData) => {
|
|
setUser(userData);
|
|
localStorage.setItem('iMeetingUser', JSON.stringify(userData));
|
|
};
|
|
|
|
const handleLogout = () => {
|
|
setUser(null);
|
|
localStorage.removeItem('iMeetingUser');
|
|
};
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<div className="app-loading">
|
|
<div className="loading-spinner"></div>
|
|
<p>加载中...</p>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<Router>
|
|
<div className="app">
|
|
<Routes>
|
|
<Route path="/" element={
|
|
user ? <Navigate to="/dashboard" /> : <HomePage onLogin={handleLogin} />
|
|
} />
|
|
<Route path="/dashboard" element={
|
|
user ? <Dashboard user={user} onLogout={handleLogout} /> : <Navigate to="/" />
|
|
} />
|
|
<Route path="/meetings/:meeting_id" element={
|
|
user ? <MeetingDetails user={user} /> : <Navigate to="/" />
|
|
} />
|
|
<Route path="/meetings/create" element={
|
|
user ? <CreateMeeting user={user} /> : <Navigate to="/" />
|
|
} />
|
|
<Route path="/meetings/edit/:meeting_id" element={
|
|
user ? <EditMeeting user={user} /> : <Navigate to="/" />
|
|
} />
|
|
</Routes>
|
|
</div>
|
|
</Router>
|
|
);
|
|
}
|
|
|
|
export default App; |