Skip to content

Commit 2c7bcdb

Browse files
committed
refactor: update App layout structure and enhance styling for better user experience
1 parent 935b3b6 commit 2c7bcdb

3 files changed

Lines changed: 71 additions & 69 deletions

File tree

frontend/src/App.css

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,43 @@ body {
1212
.app-shell {
1313
min-height: 100vh;
1414
background:
15-
radial-gradient(
16-
circle at 10% 10%,
17-
rgba(167, 139, 250, 0.12),
18-
transparent 32%
19-
),
20-
radial-gradient(
21-
circle at 85% 12%,
22-
rgba(139, 92, 246, 0.14),
23-
transparent 30%
24-
),
25-
linear-gradient(160deg, #faf8ff 0%, #f5f3ff 48%, #ede9fe 100%);
15+
radial-gradient(circle at 12% 12%, rgba(99, 102, 241, 0.18), transparent 20%),
16+
radial-gradient(circle at 88% 18%, rgba(139, 92, 246, 0.14), transparent 24%),
17+
linear-gradient(160deg, #f8fafc 0%, #eef2ff 50%, #ececff 100%);
2618
}
2719

2820
.dark .app-shell {
2921
background:
30-
radial-gradient(
31-
circle at 20% 18%,
32-
rgba(167, 139, 250, 0.15),
33-
transparent 28%
34-
),
35-
radial-gradient(
36-
circle at 80% 10%,
37-
rgba(139, 92, 246, 0.12),
38-
transparent 28%
39-
),
40-
linear-gradient(160deg, #0f0a1a 0%, #1a1329 55%, #26193d 100%);
22+
radial-gradient(circle at 18% 16%, rgba(167, 139, 250, 0.18), transparent 22%),
23+
radial-gradient(circle at 82% 14%, rgba(139, 92, 246, 0.16), transparent 24%),
24+
linear-gradient(160deg, #0f0a1a 0%, #14101f 52%, #24193a 100%);
25+
}
26+
27+
.app-main {
28+
width: min(1200px, calc(100% - 40px));
29+
margin: 0 auto;
30+
padding: 24px 0 40px;
31+
}
32+
33+
.app-page-shell {
34+
display: flex;
35+
flex-direction: column;
36+
gap: 24px;
37+
padding-top: 10px;
38+
}
39+
40+
.app-content-card {
41+
background: rgba(255, 255, 255, 0.86);
42+
border: 1px solid rgba(15, 23, 42, 0.08);
43+
border-radius: 28px;
44+
box-shadow: 0 25px 60px rgba(15, 23, 42, 0.08);
45+
backdrop-filter: blur(18px);
46+
overflow: hidden;
47+
}
48+
49+
.dark .app-content-card {
50+
background: rgba(15, 23, 42, 0.7);
51+
border-color: rgba(148, 163, 184, 0.16);
4152
}
4253

4354
.app-header {
@@ -49,10 +60,12 @@ body {
4960
align-items: center;
5061
justify-content: space-between;
5162
gap: 12px;
52-
padding: 12px 18px;
63+
padding: 18px 28px;
5364
border-bottom: 1px solid rgba(15, 23, 42, 0.08);
54-
background: rgba(255, 255, 255, 0.78);
55-
backdrop-filter: blur(14px);
65+
border-radius: 0 0 28px 28px;
66+
background: rgba(255, 255, 255, 0.92);
67+
box-shadow: 0 18px 35px rgba(15, 23, 42, 0.08);
68+
backdrop-filter: blur(18px);
5669
}
5770

5871
.dark .app-header {

frontend/src/App.tsx

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -256,35 +256,39 @@ function AppContent() {
256256
</header>
257257

258258
<TrafficProvider>
259-
<Routes>
260-
<Route
261-
path="/login"
262-
element={
263-
<LoginPage
264-
onLoginSuccess={handleLoginSuccess}
265-
onRegisterSuccess={handleRegisterSuccess}
266-
showRegister={showRegister}
267-
setShowRegister={setShowRegister}
259+
<main className="app-main">
260+
<div className="app-page-shell">
261+
<Routes>
262+
<Route
263+
path="/login"
264+
element={
265+
<LoginPage
266+
onLoginSuccess={handleLoginSuccess}
267+
onRegisterSuccess={handleRegisterSuccess}
268+
showRegister={showRegister}
269+
setShowRegister={setShowRegister}
270+
/>
271+
}
272+
/>
273+
<Route element={<ProtectedRoute />}>
274+
<Route path="/home" element={<TrafficDashboard />} />
275+
<Route path="/analys" element={<AnalyticsPage />} />
276+
<Route path="/chat" element={<ChatPage />} />
277+
<Route path="/profile" element={<ProfilePage />} />
278+
<Route
279+
path="/admin"
280+
element={<Navigate to="/admin/resources" replace />}
281+
/>
282+
<Route path="/admin/resources" element={<AdminResourcesPage />} />
283+
<Route path="/admin/roads" element={<AdminRoadsPage />} />
284+
</Route>
285+
<Route
286+
path="*"
287+
element={<Navigate to={authed ? "/home" : "/login"} replace />}
268288
/>
269-
}
270-
/>
271-
<Route element={<ProtectedRoute />}>
272-
<Route path="/home" element={<TrafficDashboard />} />
273-
<Route path="/analys" element={<AnalyticsPage />} />
274-
<Route path="/chat" element={<ChatPage />} />
275-
<Route path="/profile" element={<ProfilePage />} />
276-
<Route
277-
path="/admin"
278-
element={<Navigate to="/admin/resources" replace />}
279-
/>
280-
<Route path="/admin/resources" element={<AdminResourcesPage />} />
281-
<Route path="/admin/roads" element={<AdminRoadsPage />} />
282-
</Route>
283-
<Route
284-
path="*"
285-
element={<Navigate to={authed ? "/home" : "/login"} replace />}
286-
/>
287-
</Routes>
289+
</Routes>
290+
</div>
291+
</main>
288292
</TrafficProvider>
289293
<Toaster position="top-right" richColors />
290294
</div>

frontend/src/modules/features/chat/components/ChatInterface.tsx

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,6 @@ const generateMessageId = () => {
115115
return `msg_${timestamp}_${random}`;
116116
};
117117

118-
interface VehicleData {
119-
count_car: number;
120-
count_motor: number;
121-
speed_car: number;
122-
speed_motor: number;
123-
}
124-
125-
interface TrafficData {
126-
[roadName: string]: VehicleData;
127-
}
128-
129118
interface Message {
130119
id: string;
131120
text: string;
@@ -135,10 +124,6 @@ interface Message {
135124
image?: string[];
136125
}
137126

138-
interface ChatInterfaceProps {
139-
trafficData?: TrafficData;
140-
}
141-
142127
const createWelcomeMessage = (): Message => ({
143128
id: "1",
144129
text: "Xin chào! Tôi là trợ lý AI của hệ thống giao thông thông minh. Bạn có thể hỏi tôi về tình trạng giao thông hiện tại, thống kê xe cộ, hoặc bất kỳ thông tin nào về các tuyến đường đang được giám sát. Tôi có thể giúp gì cho bạn?",
@@ -308,7 +293,7 @@ function processImageUrlsInText(text: string): string {
308293
return text;
309294
}
310295

311-
const ChatInterface = ({ trafficData }: ChatInterfaceProps) => {
296+
const ChatInterface = () => {
312297
const [messages, setMessages] = useState<Message[]>(() => [
313298
createWelcomeMessage(),
314299
]);

0 commit comments

Comments
 (0)