From bb7ecdd27b8dd5db6200f27180a4494ed2d4931c Mon Sep 17 00:00:00 2001 From: Ember <197652334@qq.com> Date: Mon, 3 Nov 2025 21:38:52 +0800 Subject: [PATCH] fix: improve mobile responsive layout for header and comparison chart This is a partial fix for issue #311 mobile display problems. Changes in this commit: - Add responsive header layout with separate mobile/desktop views in App.tsx - Fix language selector visibility on mobile (no longer hidden by menu) - Add responsive breakpoints to ComparisonChart stats grid (2 cols on mobile, 4 on desktop) - Adjust padding and text sizes for mobile screens - Preserve all i18n (internationalization) functionality from upstream Note: Additional components (CompetitionPage, AITradersPage) will need similar mobile responsive improvements in follow-up commits. Related to #311 Co-Authored-By: tinkle-community --- web/src/App.tsx | 120 +++++++++++++++++++++++-- web/src/components/ComparisonChart.tsx | 18 ++-- 2 files changed, 123 insertions(+), 15 deletions(-) diff --git a/web/src/App.tsx b/web/src/App.tsx index 6f785908..c7107023 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -194,8 +194,9 @@ function App() {
{/* Header - Binance Style */}
-
-
+
+ {/* Desktop Layout */} +
{/* Left - Logo and Title */}
@@ -210,7 +211,7 @@ function App() {

- + {/* Center - Page Toggle (absolutely positioned) */}
- + {/* Right - Actions */}
@@ -257,7 +258,7 @@ function App() { {user.email}
)} - + {/* Admin Mode Indicator */} {systemConfig?.admin_mode && (
@@ -302,11 +303,118 @@ function App() { )}
+ + {/* Mobile Layout */} +
+ {/* Top Row - Logo, Title and Language */} +
+
+ NOFX +
+

+ {t('appTitle', language)} +

+

+ {t('subtitle', language)} +

+
+
+ + {/* Language Toggle - Right side on mobile */} +
+ + +
+
+ + {/* Second Row - Page Toggle */} +
+ + + +
+ + {/* Third Row - User Info and Logout */} +
+ {/* User Info or Admin Mode */} + {!systemConfig?.admin_mode && user && ( +
+
+ {user.email[0].toUpperCase()} +
+ {user.email} +
+ )} + + {systemConfig?.admin_mode && ( +
+ + {t('adminMode', language)} +
+ )} + + {/* Logout Button */} + {!systemConfig?.admin_mode && ( + + )} +
+
{/* Main Content */} -
+
{currentPage === 'competition' ? ( ) : currentPage === 'traders' ? ( diff --git a/web/src/components/ComparisonChart.tsx b/web/src/components/ComparisonChart.tsx index e8d1fafe..ebd56305 100644 --- a/web/src/components/ComparisonChart.tsx +++ b/web/src/components/ComparisonChart.tsx @@ -313,24 +313,24 @@ export function ComparisonChart({ traders }: ComparisonChartProps) {
{/* Stats */} -
-
+
+
{t('comparisonMode', language)}
-
PnL %
+
PnL %
-
+
{t('dataPoints', language)}
-
{t('count', language, {count: combinedData.length})}
+
{t('count', language, {count: combinedData.length})}
-
+
{t('currentGap', language)}
-
1 ? '#F0B90B' : '#EAECEF' }}> +
1 ? '#F0B90B' : '#EAECEF' }}> {currentGap.toFixed(2)}%
-
+
{t('displayRange', language)}
-
+
{combinedData.length > MAX_DISPLAY_POINTS ? `${t('recent', language)} ${MAX_DISPLAY_POINTS}` : t('allData', language)}