From 08777aa00d20472b98d3ff9c3864443c2926e664 Mon Sep 17 00:00:00 2001 From: cherry2250 Date: Mon, 27 Oct 2025 17:38:25 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=A4=EC=8B=9C=EA=B0=84=20=ED=98=84?= =?UTF-8?q?=ED=99=A9=20=EC=B9=B4=EB=93=9C=20=EC=9A=94=EC=86=8C=20=EC=A4=91?= =?UTF-8?q?=EC=95=99=20=EC=A0=95=EB=A0=AC=20(320px=20=EC=B5=9C=EC=A0=81?= =?UTF-8?q?=ED=99=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(main)/analytics/page.tsx | 206 ++-- src/app/(main)/events/[eventId]/page.tsx | 292 +++--- src/app/(main)/events/page.tsx | 1171 ++++++++++++---------- src/app/(main)/page.tsx | 166 +-- src/shared/lib/button-styles.ts | 40 +- 5 files changed, 1014 insertions(+), 861 deletions(-) diff --git a/src/app/(main)/analytics/page.tsx b/src/app/(main)/analytics/page.tsx index a94244f..0703425 100644 --- a/src/app/(main)/analytics/page.tsx +++ b/src/app/(main)/analytics/page.tsx @@ -135,24 +135,24 @@ export default function AnalyticsPage() { minHeight: '100vh', }} > - + {/* Title with Real-time Indicator */} ๐Ÿ“Š ์š”์•ฝ (์‹ค์‹œ๊ฐ„) - + {/* Summary KPI Cards */} - + - + ์ฐธ์—ฌ์ž ์ˆ˜ - + {summary.participants} - โ†‘ {summary.participantsDelta}๋ช… (์˜ค๋Š˜) + โ†‘ {summary.participantsDelta}๋ช… @@ -212,27 +212,26 @@ export default function AnalyticsPage() { borderColor: 'transparent', }} > - + ์ด ๋น„์šฉ - + {Math.floor(summary.totalCost / 10000)}๋งŒ - ๊ฒฝํ’ˆ {Math.floor(roiDetail.prizeCost / 10000)}๋งŒ + ์ฑ„๋„{' '} - {Math.floor(roiDetail.channelCost / 10000)}๋งŒ + ๊ฒฝํ’ˆ+์ฑ„๋„ @@ -246,27 +245,26 @@ export default function AnalyticsPage() { borderColor: 'transparent', }} > - + ์˜ˆ์ƒ ์ˆ˜์ต - + {Math.floor(summary.expectedRevenue / 10000)}๋งŒ - ๋งค์ถœ {Math.floor(roiDetail.salesIncrease / 10000)}๋งŒ + LTV{' '} - {Math.floor(roiDetail.newCustomerLTV / 10000)}๋งŒ + ๋งค์ถœ+LTV @@ -280,26 +278,26 @@ export default function AnalyticsPage() { borderColor: 'transparent', }} > - + - ํˆฌ์ž๋Œ€๋น„์ˆ˜์ต๋ฅ  + ROI - + {summary.roi}% - ๋ชฉํ‘œ {summary.targetRoi}% ๋‹ฌ์„ฑ + ๋ชฉํ‘œ {summary.targetRoi}% @@ -307,16 +305,16 @@ export default function AnalyticsPage() { {/* Charts Grid */} - + {/* Channel Performance */} - - + + - + - + ์ฑ„๋„๋ณ„ ์„ฑ๊ณผ @@ -335,9 +333,9 @@ export default function AnalyticsPage() { {/* Legend */} - + {channelPerformance.map((item) => ( - + {item.channel} - + {item.percentage}% ({item.participants}๋ช…) @@ -412,12 +410,12 @@ export default function AnalyticsPage() { {/* Time Trend */} - - + + - + - + ์‹œ๊ฐ„๋Œ€๋ณ„ ์ฐธ์—ฌ ์ถ”์ด @@ -436,11 +434,11 @@ export default function AnalyticsPage() { - + ํ”ผํฌ ์‹œ๊ฐ„: {timePerformance.peakTime} ({timePerformance.peakParticipants}๋ช…) - + ํ‰๊ท  ์‹œ๊ฐ„๋‹น: {timePerformance.avgPerHour}๋ช… @@ -527,16 +525,16 @@ export default function AnalyticsPage() { {/* ROI Detail & Participant Profile */} - + {/* ROI Detail */} - - + + - + - - ํˆฌ์ž๋Œ€๋น„์ˆ˜์ต๋ฅ  ์ƒ์„ธ + + ROI ์ƒ์„ธ - + - + ์ด ๋น„์šฉ: {Math.floor(roiDetail.totalCost / 10000)}๋งŒ์› - + - + โ€ข ๊ฒฝํ’ˆ ๋น„์šฉ - + {Math.floor(roiDetail.prizeCost / 10000)}๋งŒ์› - + โ€ข ์ฑ„๋„ ๋น„์šฉ - + {Math.floor(roiDetail.channelCost / 10000)}๋งŒ์› @@ -577,23 +575,23 @@ export default function AnalyticsPage() { - + ์˜ˆ์ƒ ์ˆ˜์ต: {Math.floor(roiDetail.expectedRevenue / 10000)}๋งŒ์› - + - + โ€ข ๋งค์ถœ ์ฆ๊ฐ€ - + {Math.floor(roiDetail.salesIncrease / 10000)}๋งŒ์› - + โ€ข ์‹ ๊ทœ ๊ณ ๊ฐ LTV - + {Math.floor(roiDetail.newCustomerLTV / 10000)}๋งŒ์› @@ -601,26 +599,26 @@ export default function AnalyticsPage() { - + ํˆฌ์ž๋Œ€๋น„์ˆ˜์ต๋ฅ  - + (์ˆ˜์ต - ๋น„์šฉ) รท ๋น„์šฉ ร— 100 - + ({Math.floor(roiDetail.expectedRevenue / 10000)}๋งŒ -{' '} {Math.floor(roiDetail.totalCost / 10000)}๋งŒ) รท{' '} {Math.floor(roiDetail.totalCost / 10000)}๋งŒ ร— 100 - + = {summary.roi}% @@ -633,12 +631,12 @@ export default function AnalyticsPage() { {/* Participant Profile */} - - + + - + - + ์ฐธ์—ฌ์ž ํ”„๋กœํ•„ {/* Age Distribution */} - - + + ์—ฐ๋ น๋ณ„ - + {participantProfile.age.map((item) => ( - - + + {item.label} {item.percentage}% @@ -701,20 +699,20 @@ export default function AnalyticsPage() { {/* Gender Distribution */} - + ์„ฑ๋ณ„ - + {participantProfile.gender.map((item) => ( - - + + {item.label} {item.percentage}% diff --git a/src/app/(main)/events/[eventId]/page.tsx b/src/app/(main)/events/[eventId]/page.tsx index 578ecd4..fed6ccd 100644 --- a/src/app/(main)/events/[eventId]/page.tsx +++ b/src/app/(main)/events/[eventId]/page.tsx @@ -254,12 +254,12 @@ export default function EventDetailPage() { }; return ( - - + + {/* Event Header */} - - - + + + {event.title} @@ -282,61 +282,62 @@ export default function EventDetailPage() { - + {event.isAIRecommended && ( - + )} {event.isUrgent && ( } + icon={} label="๋งˆ๊ฐ์ž„๋ฐ•" size="medium" - sx={{ bgcolor: '#FEF3C7', color: '#92400E' }} + sx={{ bgcolor: '#FEF3C7', color: '#92400E', fontSize: { xs: '0.75rem', sm: '0.875rem' }, height: { xs: 24, sm: 32 } }} /> )} {event.isPopular && ( } + icon={} label="์ธ๊ธฐ" size="medium" - sx={{ bgcolor: '#FEE2E2', color: '#991B1B' }} + sx={{ bgcolor: '#FEE2E2', color: '#991B1B', fontSize: { xs: '0.75rem', sm: '0.875rem' }, height: { xs: 24, sm: 32 } }} /> )} {event.isHighROI && ( } + icon={} label="๋†’์€ ROI" size="medium" - sx={{ bgcolor: '#DCFCE7', color: '#166534' }} + sx={{ bgcolor: '#DCFCE7', color: '#166534', fontSize: { xs: '0.75rem', sm: '0.875rem' }, height: { xs: 24, sm: 32 } }} /> )} {event.isNew && ( } + icon={} label="์‹ ๊ทœ" size="medium" - sx={{ bgcolor: '#DBEAFE', color: '#1E40AF' }} + sx={{ bgcolor: '#DBEAFE', color: '#1E40AF', fontSize: { xs: '0.75rem', sm: '0.875rem' }, height: { xs: 24, sm: 32 } }} /> )} - + ๐Ÿ“… {event.startDate} ~ {event.endDate} {/* ์ง„ํ–‰๋ฅ  ๋ฐ” (์ง„ํ–‰์ค‘์ธ ์ด๋ฒคํŠธ๋งŒ) */} {event.status === 'active' && ( - - + + ์ด๋ฒคํŠธ ์ง„ํ–‰๋ฅ  - + {Math.round(calculateProgress(event))}% @@ -344,7 +345,7 @@ export default function EventDetailPage() { variant="determinate" value={calculateProgress(event)} sx={{ - height: 10, + height: { xs: 6, sm: 10 }, borderRadius: 5, bgcolor: colors.gray[100], '& .MuiLinearProgress-bar': { @@ -358,16 +359,16 @@ export default function EventDetailPage() { {/* Real-time KPIs */} - - - + + + ์‹ค์‹œ๊ฐ„ ํ˜„ํ™ฉ - + - + ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ - + - - - + + + ์ฐธ์—ฌ์ž - + {event.participants}๋ช… - - ๋ชฉํ‘œ: {event.targetParticipants}๋ช… ( - {Math.round((event.participants / event.targetParticipants) * 100)}%) + + ๋ชฉํ‘œ: {event.targetParticipants}๋ช…
+ ({Math.round((event.participants / event.targetParticipants) * 100)}%)
@@ -412,19 +422,29 @@ export default function EventDetailPage() { - - - + + + ์กฐํšŒ์ˆ˜ - + {event.views} +
@@ -432,19 +452,29 @@ export default function EventDetailPage() { - - - + + + ROI - + {event.roi}% +
@@ -452,19 +482,29 @@ export default function EventDetailPage() { - - - + + + ์ „ํ™˜์œจ - + {event.conversion}% +
@@ -472,18 +512,18 @@ export default function EventDetailPage() {
{/* Chart Section - ์ฐธ์—ฌ ์ถ”์ด */} - - + + ๐Ÿ“ˆ ์ฐธ์—ฌ ์ถ”์ด - - - + + + @@ -491,7 +531,7 @@ export default function EventDetailPage() { size="medium" variant={chartPeriod === '30d' ? 'contained' : 'outlined'} onClick={() => setChartPeriod('30d')} - sx={{ borderRadius: 2 }} + sx={{ borderRadius: 2, fontSize: { xs: '0.75rem', sm: '0.875rem' }, py: { xs: 0.5, sm: 1 }, px: { xs: 1.5, sm: 2 } }} > 30์ผ @@ -499,13 +539,13 @@ export default function EventDetailPage() { size="medium" variant={chartPeriod === 'all' ? 'contained' : 'outlined'} onClick={() => setChartPeriod('all')} - sx={{ borderRadius: 2 }} + sx={{ borderRadius: 2, fontSize: { xs: '0.75rem', sm: '0.875rem' }, py: { xs: 0.5, sm: 1 }, px: { xs: 1.5, sm: 2 } }} > ์ „์ฒด - + {/* Chart Section - ์ฑ„๋„๋ณ„ ์„ฑ๊ณผ & ROI ์ถ”์ด */} - + - + ๐Ÿ“Š ์ฑ„๋„๋ณ„ ์ฐธ์—ฌ์ž - - - + + + - + ๐Ÿ’ฐ ROI ์ถ”์ด - - - + + + {/* Event Details */} - - + + ๐ŸŽฏ ์ด๋ฒคํŠธ ์ •๋ณด - - - - + + + + - + ๊ฒฝํ’ˆ - + {event.prize} - - + + {getMethodIcon(event.method)} - + ์ฐธ์—ฌ ๋ฐฉ๋ฒ• - + {event.method} - - - + + + - + ์˜ˆ์ƒ ๋น„์šฉ - + {event.cost.toLocaleString()}์› - - - + + + - + ๋ฐฐํฌ ์ฑ„๋„ - + {event.channels.map((channel) => ( ))} @@ -710,17 +752,17 @@ export default function EventDetailPage() { {/* Quick Actions */} - - + + โšก ๋น ๋ฅธ ์ž‘์—… - + router.push(`/events/${eventId}/participants`)} > - - - + + + ์ฐธ์—ฌ์ž ๋ชฉ๋ก @@ -743,7 +785,7 @@ export default function EventDetailPage() { elevation={0} sx={{ cursor: 'pointer', - borderRadius: 4, + borderRadius: { xs: 3, sm: 4 }, boxShadow: '0 2px 8px rgba(0, 0, 0, 0.08)', transition: 'all 0.2s', '&:hover': { @@ -752,9 +794,9 @@ export default function EventDetailPage() { }, }} > - - - + + + ์ด๋ฒคํŠธ ์ˆ˜์ • @@ -765,7 +807,7 @@ export default function EventDetailPage() { elevation={0} sx={{ cursor: 'pointer', - borderRadius: 4, + borderRadius: { xs: 3, sm: 4 }, boxShadow: '0 2px 8px rgba(0, 0, 0, 0.08)', transition: 'all 0.2s', '&:hover': { @@ -774,9 +816,9 @@ export default function EventDetailPage() { }, }} > - - - + + + ๊ณต์œ ํ•˜๊ธฐ @@ -787,7 +829,7 @@ export default function EventDetailPage() { elevation={0} sx={{ cursor: 'pointer', - borderRadius: 4, + borderRadius: { xs: 3, sm: 4 }, boxShadow: '0 2px 8px rgba(0, 0, 0, 0.08)', transition: 'all 0.2s', '&:hover': { @@ -796,9 +838,9 @@ export default function EventDetailPage() { }, }} > - - - + + + ๋ฐ์ดํ„ฐ ๋‹ค์šด @@ -808,32 +850,32 @@ export default function EventDetailPage() { {/* Recent Participants */} - - - + + + ๐Ÿ‘ฅ ์ตœ๊ทผ ์ฐธ์—ฌ์ž - - + + {recentParticipants.map((participant, index) => ( - {index > 0 && } + {index > 0 && } - + - + - + {participant.name} - + {participant.phone} - + {participant.time} diff --git a/src/app/(main)/events/page.tsx b/src/app/(main)/events/page.tsx index 1a2dea4..bf80422 100644 --- a/src/app/(main)/events/page.tsx +++ b/src/app/(main)/events/page.tsx @@ -36,11 +36,7 @@ import { Star, } from '@mui/icons-material'; import Header from '@/shared/ui/Header'; -import { - cardStyles, - colors, - responsiveText, -} from '@/shared/lib/button-styles'; +import { cardStyles, colors, responsiveText } from '@/shared/lib/button-styles'; // Mock ๋ฐ์ดํ„ฐ const mockEvents = [ @@ -208,7 +204,7 @@ export default function EventsPage() { } }; - const calculateProgress = (event: typeof mockEvents[0]) => { + const calculateProgress = (event: (typeof mockEvents)[0]) => { if (event.status !== 'active') return 0; const total = new Date(event.endDate).getTime() - new Date(event.startDate).getTime(); const elapsed = Date.now() - new Date(event.startDate).getTime(); @@ -237,552 +233,647 @@ export default function EventsPage() { minHeight: '100vh', }} > - - {/* Summary Statistics */} - - - - - - - {stats.total} - - - ์ „์ฒด ์ด๋ฒคํŠธ - - - - - - - - - - {stats.active} - - - ์ง„ํ–‰์ค‘ - - - - - - - - - - {stats.totalParticipants} - - - ์ด ์ฐธ์—ฌ์ž - - - - - - - - - - {stats.avgROI}% - - - ํ‰๊ท  ROI - - - - - - - {/* Search Section */} - - setSearchTerm(e.target.value)} - InputProps={{ - startAdornment: ( - - - - ), - }} - sx={{ - '& .MuiOutlinedInput-root': { - borderRadius: 3, - bgcolor: 'white', - '& fieldset': { - borderColor: colors.gray[200], - }, - '&:hover fieldset': { - borderColor: colors.gray[300], - }, - '&.Mui-focused fieldset': { - borderColor: colors.purple, - }, - }, - }} - /> - - - {/* Filters */} - - - - - ์ƒํƒœ - - - - ๊ธฐ๊ฐ„ - - - - - - {/* Sorting */} - - - - ์ •๋ ฌ - - - - - - - - {/* Event List */} - - {pageEvents.length === 0 ? ( - - - - - event_busy - - - - ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค - - - ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณด์„ธ์š” - - - - ) : ( - - {pageEvents.map((event) => ( - handleEventClick(event.id)} + - - {/* Header with Badges */} - - - - {event.title} - - - {getStatusText(event.status)} - {event.status === 'active' - ? ` | D-${event.daysLeft}` - : event.status === 'scheduled' - ? ` | D+${event.daysLeft}` - : ''} - - + + + {stats.total} + + + ์ „์ฒด ์ด๋ฒคํŠธ + + + + + + + + + + {stats.active} + + + ์ง„ํ–‰์ค‘ + + + + + + + + + + {stats.totalParticipants} + + + ์ด ์ฐธ์—ฌ์ž + + + + + + + + + + {stats.avgROI}% + + + ํ‰๊ท  ROI + + + + + - {/* Status Badges */} - - {event.isUrgent && ( - } - label="๋งˆ๊ฐ์ž„๋ฐ•" - size="small" - sx={{ - bgcolor: '#FEF3C7', - color: '#92400E', - fontWeight: 600, - fontSize: '0.75rem', - '& .MuiChip-icon': { color: '#92400E' }, - }} - /> - )} - {event.isPopular && ( - } - label="์ธ๊ธฐ" - size="small" - sx={{ - bgcolor: '#FEE2E2', - color: '#991B1B', - fontWeight: 600, - fontSize: '0.75rem', - '& .MuiChip-icon': { color: '#991B1B' }, - }} - /> - )} - {event.isHighROI && ( - } - label="๋†’์€ ROI" - size="small" - sx={{ - bgcolor: '#DCFCE7', - color: '#166534', - fontWeight: 600, - fontSize: '0.75rem', - '& .MuiChip-icon': { color: '#166534' }, - }} - /> - )} - {event.isNew && ( - } - label="์‹ ๊ทœ" - size="small" - sx={{ - bgcolor: '#DBEAFE', - color: '#1E40AF', - fontWeight: 600, - fontSize: '0.75rem', - '& .MuiChip-icon': { color: '#1E40AF' }, - }} - /> - )} - - - - {/* Progress Bar for Active Events */} - {event.status === 'active' && ( - - - - ์ด๋ฒคํŠธ ์ง„ํ–‰๋ฅ  - - - {Math.round(calculateProgress(event))}% - - - - - )} - - {/* Event Info and Stats Container */} - - {/* Left: Event Info */} - - - - - - {event.prize} - - - - {getMethodIcon(event.method)} - - {event.method} - - - - - {/* Date */} - - ๐Ÿ“… - - {event.startDate} ~ {event.endDate} - - - - - {/* Right: Stats */} - - - - ์ฐธ์—ฌ์ž - - - {event.participants.toLocaleString()} - - ๋ช… - - - {event.targetParticipants > 0 && ( - - ๋ชฉํ‘œ: {event.targetParticipants}๋ช… ({Math.round((event.participants / event.targetParticipants) * 100)}%) - - )} - - - - ROI - - = 400 ? colors.mint : event.roi >= 200 ? colors.orange : colors.gray[500] }}> - {event.roi}% - - - - - - - ))} - - )} - - - {/* Pagination */} - {totalPages > 1 && ( - - setCurrentPage(page)} - size="large" + {/* Search Section */} + + setSearchTerm(e.target.value)} + InputProps={{ + startAdornment: ( + + + + ), + }} sx={{ - '& .MuiPaginationItem-root': { - color: colors.gray[700], - fontWeight: 600, - '&.Mui-selected': { - background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.blue} 100%)`, - color: 'white', - '&:hover': { - background: `linear-gradient(135deg, ${colors.purpleLight} 0%, ${colors.blueLight} 100%)`, - }, + '& .MuiOutlinedInput-root': { + borderRadius: 3, + bgcolor: 'white', + fontSize: { xs: '0.875rem', sm: '1rem' }, + '& fieldset': { + borderColor: colors.gray[200], }, - '&:hover': { - bgcolor: colors.gray[100], + '&:hover fieldset': { + borderColor: colors.gray[300], + }, + '&.Mui-focused fieldset': { + borderColor: colors.purple, }, }, }} /> - )} -
+ + {/* Filters */} + + + + ์ƒํƒœ + + + + ๊ธฐ๊ฐ„ + + + + + + {/* Sorting */} + + + + ์ •๋ ฌ + + + + + + + + {/* Event List */} + + {pageEvents.length === 0 ? ( + + + + + event_busy + + + + ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค + + + ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณด์„ธ์š” + + + + ) : ( + + {pageEvents.map((event) => ( + handleEventClick(event.id)} + > + + {/* Header with Badges */} + + + + {event.title} + + + {getStatusText(event.status)} + {event.status === 'active' + ? ` | D-${event.daysLeft}` + : event.status === 'scheduled' + ? ` | D+${event.daysLeft}` + : ''} + + + + {/* Status Badges */} + + {event.isUrgent && ( + } + label="๋งˆ๊ฐ์ž„๋ฐ•" + size="small" + sx={{ + bgcolor: '#FEF3C7', + color: '#92400E', + fontWeight: 600, + fontSize: { xs: '0.6875rem', sm: '0.75rem' }, + height: { xs: 24, sm: 28 }, + '& .MuiChip-icon': { color: '#92400E' }, + }} + /> + )} + {event.isPopular && ( + } + label="์ธ๊ธฐ" + size="small" + sx={{ + bgcolor: '#FEE2E2', + color: '#991B1B', + fontWeight: 600, + fontSize: { xs: '0.6875rem', sm: '0.75rem' }, + height: { xs: 24, sm: 28 }, + '& .MuiChip-icon': { color: '#991B1B' }, + }} + /> + )} + {event.isHighROI && ( + } + label="๋†’์€ ROI" + size="small" + sx={{ + bgcolor: '#DCFCE7', + color: '#166534', + fontWeight: 600, + fontSize: { xs: '0.6875rem', sm: '0.75rem' }, + height: { xs: 24, sm: 28 }, + '& .MuiChip-icon': { color: '#166534' }, + }} + /> + )} + {event.isNew && ( + } + label="์‹ ๊ทœ" + size="small" + sx={{ + bgcolor: '#DBEAFE', + color: '#1E40AF', + fontWeight: 600, + fontSize: { xs: '0.6875rem', sm: '0.75rem' }, + height: { xs: 24, sm: 28 }, + '& .MuiChip-icon': { color: '#1E40AF' }, + }} + /> + )} + + + + {/* Progress Bar for Active Events */} + {event.status === 'active' && ( + + + + ์ด๋ฒคํŠธ ์ง„ํ–‰๋ฅ  + + + {Math.round(calculateProgress(event))}% + + + + + )} + + {/* Event Info and Stats Container */} + + {/* Left: Event Info */} + + + + + + {event.prize} + + + + {getMethodIcon(event.method)} + + {event.method} + + + + + {/* Date */} + + ๐Ÿ“… + + {event.startDate} ~ {event.endDate} + + + + + {/* Right: Stats */} + + + + ์ฐธ์—ฌ์ž + + + {event.participants.toLocaleString()} + + ๋ช… + + + {event.targetParticipants > 0 && ( + + ๋ชฉํ‘œ: {event.targetParticipants}๋ช… ( + {Math.round((event.participants / event.targetParticipants) * 100)} + %) + + )} + + + + ROI + + = 400 + ? colors.mint + : event.roi >= 200 + ? colors.orange + : colors.gray[500], + }} + > + {event.roi}% + + + + + + + ))} + + )} + + + {/* Pagination */} + {totalPages > 1 && ( + + setCurrentPage(page)} + size="large" + sx={{ + '& .MuiPaginationItem-root': { + color: colors.gray[700], + fontWeight: 600, + '&.Mui-selected': { + background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.blue} 100%)`, + color: 'white', + '&:hover': { + background: `linear-gradient(135deg, ${colors.purpleLight} 0%, ${colors.blueLight} 100%)`, + }, + }, + '&:hover': { + bgcolor: colors.gray[100], + }, + }, + }} + /> + + )} +
); diff --git a/src/app/(main)/page.tsx b/src/app/(main)/page.tsx index a6888e0..dc04e81 100644 --- a/src/app/(main)/page.tsx +++ b/src/app/(main)/page.tsx @@ -88,14 +88,14 @@ export default function HomePage() { minHeight: '100vh', }} > - + {/* Welcome Section */} - + ์•ˆ๋…•ํ•˜์„ธ์š”, {mockUser.name}๋‹˜! ๐Ÿ‘‹ @@ -106,7 +106,7 @@ export default function HomePage() { {/* KPI Cards */} - + - + @@ -139,10 +139,10 @@ export default function HomePage() { @@ -153,7 +153,7 @@ export default function HomePage() { sx={{ fontWeight: 700, color: colors.gray[900], - fontSize: '2.25rem', + fontSize: { xs: '1.5rem', sm: '2.25rem' }, textShadow: '0px 2px 4px rgba(0,0,0,0.15)', }} > @@ -171,22 +171,22 @@ export default function HomePage() { borderColor: 'transparent', }} > - + @@ -194,10 +194,10 @@ export default function HomePage() { @@ -208,7 +208,7 @@ export default function HomePage() { sx={{ fontWeight: 700, color: colors.gray[900], - fontSize: '2.25rem', + fontSize: { xs: '1.5rem', sm: '2.25rem' }, textShadow: '0px 2px 4px rgba(0,0,0,0.15)', }} > @@ -226,22 +226,22 @@ export default function HomePage() { borderColor: 'transparent', }} > - + @@ -249,10 +249,10 @@ export default function HomePage() { @@ -263,7 +263,7 @@ export default function HomePage() { sx={{ fontWeight: 700, color: colors.gray[900], - fontSize: '2.25rem', + fontSize: { xs: '1.5rem', sm: '2.25rem' }, textShadow: '0px 2px 4px rgba(0,0,0,0.15)', }} > @@ -275,11 +275,11 @@ export default function HomePage() { {/* Quick Actions */} - - + + ๋น ๋ฅธ ์‹œ์ž‘ - + - + - + - + ์ƒˆ ์ด๋ฒคํŠธ @@ -319,24 +319,24 @@ export default function HomePage() { }} onClick={handleViewAnalytics} > - + - + - + ์„ฑ๊ณผ๋ถ„์„ @@ -346,20 +346,21 @@ export default function HomePage() { {/* Active Events */} - + ์ง„ํ–‰ ์ค‘์ธ ์ด๋ฒคํŠธ