diff --git a/frontend/src/app/dashboard/page.tsx b/frontend/src/app/dashboard/page.tsx
index cd9cc60..f335b8f 100644
--- a/frontend/src/app/dashboard/page.tsx
+++ b/frontend/src/app/dashboard/page.tsx
@@ -64,6 +64,15 @@ export default function DashboardPage() {
const [stats, setStats] = useState(null)
const [farmRanking, setFarmRanking] = useState(null)
+ // 모바일 감지 (반응형)
+ const [isMobile, setIsMobile] = useState(false)
+ useEffect(() => {
+ const checkMobile = () => setIsMobile(window.innerWidth < 640)
+ checkMobile()
+ window.addEventListener('resize', checkMobile)
+ return () => window.removeEventListener('resize', checkMobile)
+ }, [])
+
// 필터에서 고정된 첫 번째 형질 (없으면 '도체중')
const firstPinnedTrait = filters.pinnedTraits?.[0] || '도체중'
@@ -718,37 +727,37 @@ export default function DashboardPage() {
{farmPositionData.label} 기준
{/* 모바일/웹 모두 3열 */}
-
+
{/* 순위 카드 */}
-
-
순위
-
- {farmPositionData.rank ?? '-'}위
+
+
순위
+
+ {farmPositionData.rank ?? '-'}위
-
/{farmPositionData.totalFarms}개
+
/{farmPositionData.totalFarms} 농가
{/* 백분율 카드 */}
-
-
상위
-
- {farmPositionData.percentile ?? '-'}%
+
+
상위
+
+ {farmPositionData.percentile ?? '-'}%
보은군 내
{/* 점수 비교 카드 */}
-
= 0
+
= 0
? 'border-emerald-200 bg-emerald-50/30'
: 'border-red-200 bg-red-50/30'
}`}>
-
평균대비
-
= 0 ? 'text-emerald-600' : 'text-red-500'}`}>
+
평균대비
+
= 0 ? 'text-emerald-600' : 'text-red-500'}`}>
{farmPositionData.farmScore > 0 ? '+' : ''}{farmPositionData.farmScore.toFixed(2)}
= 0 ? 'text-emerald-500' : 'text-red-400'}`}>
{farmPositionData.farmScore >= 0 ? (
- <>높음>
+ <>높음>
) : (
- <>낮음>
+ <>낮음>
)}
@@ -814,9 +823,14 @@ export default function DashboardPage() {
농가: d.hasData ? d.농가 : minBarValue,
보은군: d.hasData ? d.보은군 : minBarValue,
}))
+ // 모바일/웹 차트 설정
+ const labelFontSize = isMobile ? 12 : 16
+ const barMaxSize = isMobile ? 50 : 70 // 막대 너비 설정
+ const chartHeight = isMobile ? 300 : 350 // 막대 높이 설정
+ const chartMarginBottom = isMobile ? 40 : 70
return (
-
-
+
+
{
const item = chartData[index]
- if (!item.hasData) return -
+ if (!item.hasData) return -
const v = item.농가
// 양수: 막대 위에, 음수: 막대 바로 아래
- const labelY = height < 0 ? y + 18 : y - 14
- return {(v > 0 ? '+' : '') + v.toFixed(2)}
+ const labelY = height < 0 ? y + 20 : y - 14
+ return {(v > 0 ? '+' : '') + v.toFixed(2)}
}}
>
{chartData.map((entry, index) => (
@@ -859,14 +873,14 @@ export default function DashboardPage() {
{
const item = chartData[index]
- if (!item.hasData) return -
+ if (!item.hasData) return -
const v = item.보은군
// 양수: 막대 위에, 음수: 막대 바로 아래
- const labelY = height < 0 ? y + 18 : y - 14
- return {(v > 0 ? '+' : '') + v.toFixed(2)}
+ const labelY = height < 0 ? y + 20 : y - 14
+ return {(v > 0 ? '+' : '') + v.toFixed(2)}
}}
>
{chartData.map((entry, index) => (
@@ -918,41 +932,41 @@ export default function DashboardPage() {
}
return (
-
+
{/* 전년대비 */}
-
= 0 ? 'border-blue-200 bg-blue-50/30' : 'border-red-200 bg-red-50/30') : 'border-slate-200 bg-slate-50/30'}`}>
-
전년대비
+
= 0 ? 'border-blue-200 bg-blue-50/30' : 'border-red-200 bg-red-50/30') : 'border-slate-200 bg-slate-50/30'}`}>
+
전년대비
{yearOverYear !== null ? (
-
= 0 ? 'text-[#1F3A8F]' : 'text-red-500'}`}>
+
= 0 ? 'text-[#1F3A8F]' : 'text-red-500'}`}>
{yearOverYear >= 0 ? '+' : ''}{yearOverYear.toFixed(2)}
- {yearOverYear >= 0 ? : }
+ {yearOverYear >= 0 ? : }
) : (
-
-
+
-
)}
{/* 보은군대비 */}
-
= 0 ? 'border-emerald-200 bg-emerald-50/30' : 'border-amber-200 bg-amber-50/30') : 'border-slate-200 bg-slate-50/30'}`}>
-
보은군대비
+
= 0 ? 'border-emerald-200 bg-emerald-50/30' : 'border-amber-200 bg-amber-50/30') : 'border-slate-200 bg-slate-50/30'}`}>
+
보은군대비
{vsRegion !== null ? (
-
= 0 ? 'text-emerald-600' : 'text-amber-600'}`}>
+
= 0 ? 'text-emerald-600' : 'text-amber-600'}`}>
{vsRegion >= 0 ? '+' : ''}{vsRegion.toFixed(2)}
) : (
-
-
+
-
)}
{/* 3년 추세 */}
-
-
3년 추세
+
+
3년 추세
{trend !== null ? (
-
+
{trend}
- {trend === '상승' && }
- {trend === '하락' && }
+ {trend === '상승' && }
+ {trend === '하락' && }
) : (
-
-
+
-
)}
@@ -1151,7 +1165,7 @@ export default function DashboardPage() {
{isPositive ? '+' : ''}{avgEpd.toFixed(2)}
-
+
상위
{avgPercentile}%
@@ -1183,9 +1197,9 @@ export default function DashboardPage() {
{isPositive ? '+' : ''}{avgEpd.toFixed(2)}
-
+
상위
- {avgPercentile}%
+ {avgPercentile}%
)