From 56d3071b19a6b5b2943f17cf37e405efb4a18ab0 Mon Sep 17 00:00:00 2001 From: cherry2250 Date: Mon, 27 Oct 2025 15:51:07 +0900 Subject: [PATCH] =?UTF-8?q?ApprovalStep=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=9D=84=20events/dashboard=20=EA=B8=B0=EC=A4=80=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 페이지 배경을 gray[50]으로 변경하여 일관성 확보 - 이벤트 요약을 4개의 gradient 통계 카드로 재구성 (Purple, Blue, Orange, Mint) - cardStyles.default와 responsiveText 시스템 적용 - 모든 카드에 일관된 패딩과 간격 적용 (p: {xs: 6, sm: 8}) - 버튼 텍스트 크기를 1rem으로 통일 - 다이얼로그 스타일링 개선 및 borderRadius 추가 - 채널 Chips를 purple 배경으로 변경 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../events/create/steps/ApprovalStep.tsx | 357 ++++++++++++------ .../events/create/steps/ChannelStep.tsx | 8 + .../events/create/steps/ContentEditStep.tsx | 37 +- .../create/steps/ContentPreviewStep.tsx | 266 +++++++------ .../create/steps/RecommendationStep.tsx | 8 + 5 files changed, 436 insertions(+), 240 deletions(-) diff --git a/src/app/(main)/events/create/steps/ApprovalStep.tsx b/src/app/(main)/events/create/steps/ApprovalStep.tsx index 2c5a814..043a63f 100644 --- a/src/app/(main)/events/create/steps/ApprovalStep.tsx +++ b/src/app/(main)/events/create/steps/ApprovalStep.tsx @@ -17,26 +17,9 @@ import { DialogActions, Link, } from '@mui/material'; -import { ArrowBack, CheckCircle, Edit, RocketLaunch, Save } from '@mui/icons-material'; +import { ArrowBack, CheckCircle, Edit, RocketLaunch, Save, People, AttachMoney, TrendingUp } from '@mui/icons-material'; import { EventData } from '../page'; - -// 디자인 시스템 색상 -const colors = { - pink: '#F472B6', - purple: '#C084FC', - purpleLight: '#E9D5FF', - blue: '#60A5FA', - mint: '#34D399', - orange: '#FB923C', - yellow: '#FBBF24', - gray: { - 900: '#1A1A1A', - 700: '#4A4A4A', - 500: '#9E9E9E', - 300: '#D9D9D9', - 100: '#F5F5F5', - }, -}; +import { cardStyles, colors, responsiveText } from '@/shared/lib/button-styles'; interface ApprovalStepProps { eventData: EventData; @@ -79,91 +62,144 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS }; return ( - - + + {/* Header */} - + 최종 승인 {/* Title Section */} - - - + + + 이벤트를 확인해주세요 - + 모든 정보를 검토한 후 배포하세요 - {/* Event Summary Card */} - - - - {eventData.recommendation?.title || '이벤트 제목'} - - - - - - - - - - - 이벤트 기간 + {/* Event Summary Statistics */} + + + + + + + 이벤트 제목 - - 2025.02.01 ~ 2025.02.28 + + {eventData.recommendation?.title || '이벤트 제목'} - - - + + + + + + + + 목표 참여자 - - {eventData.recommendation?.expectedParticipants || 0}명 + + {eventData.recommendation?.expectedParticipants || 0} + + 명 + - - - + + + + + + + + 예상 비용 - - {eventData.recommendation?.estimatedCost.toLocaleString() || 0}원 + + {((eventData.recommendation?.estimatedCost || 0) / 10000).toFixed(0)} + + 만원 + - - - + + + + + + + + 예상 ROI - + {eventData.recommendation?.roi || 0}% - - - - + + + + {/* Event Details */} - + 이벤트 상세 - - + + - + 이벤트 제목 - + {eventData.recommendation?.title} @@ -174,14 +210,14 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS - - + + - + 경품 - + {eventData.recommendation?.prize} @@ -192,14 +228,14 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS - - + + - + 참여 방법 - + {eventData.recommendation?.participationMethod} @@ -208,21 +244,36 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS {/* Distribution Channels */} - + 배포 채널 - - - + + + {getChannelNames(eventData.channels).map((channel) => ( - + ))} @@ -230,19 +281,27 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS {/* Terms Agreement */} - - + + setAgreeTerms(e.target.checked)} + sx={{ + color: colors.purple, + '&.Mui-checked': { + color: colors.purple, + }, + }} /> } label={ - + 이벤트 약관 및 개인정보 처리방침에 동의합니다{' '} - (필수) + + (필수) + } /> @@ -250,7 +309,7 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS component="button" variant="body2" onClick={() => setTermsDialogOpen(true)} - sx={{ color: 'error.main', ml: 4, mt: 1 }} + sx={{ ...responsiveText.body2, ml: 4, mt: 2, fontWeight: 600, color: colors.purple }} > 약관 보기 @@ -258,7 +317,7 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS {/* Action Buttons */} - + @@ -276,7 +348,20 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS size="large" onClick={handleSaveDraft} startIcon={} - sx={{ py: 1.5 }} + sx={{ + py: 3, + borderRadius: 3, + fontSize: '1rem', + fontWeight: 600, + borderWidth: 2, + borderColor: colors.gray[300], + color: colors.gray[700], + '&:hover': { + borderWidth: 2, + borderColor: colors.gray[400], + bgcolor: colors.gray[50], + }, + }} > 임시저장 @@ -289,39 +374,61 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS onClose={() => setTermsDialogOpen(false)} maxWidth="sm" fullWidth + PaperProps={{ + sx: { + borderRadius: 4, + }, + }} > - 이벤트 약관 - - + + 이벤트 약관 + + + 제1조 (목적) - + 본 약관은 KT AI 이벤트 마케팅 서비스를 통해 진행되는 이벤트의 참여 및 개인정보 처리에 관한 사항을 규정합니다. - + 제2조 (개인정보 수집 및 이용) - + 수집 항목: 이름, 전화번호, 이메일 - + 이용 목적: 이벤트 참여 확인 및 경품 제공 - + 보유 기간: 이벤트 종료 후 6개월 - + 제3조 (당첨자 발표) - + 당첨자는 이벤트 종료 후 7일 이내 개별 연락 드립니다. - - @@ -334,30 +441,44 @@ export default function ApprovalStep({ eventData, onApprove, onBack }: ApprovalS setSuccessDialogOpen(false); onApprove(); }} + PaperProps={{ + sx: { + borderRadius: 4, + }, + }} > - - - + + + 배포 완료! - + 이벤트가 성공적으로 배포되었습니다.
실시간으로 참여자를 확인할 수 있습니다.
- - - +
diff --git a/src/app/(main)/events/create/steps/ChannelStep.tsx b/src/app/(main)/events/create/steps/ChannelStep.tsx index 0f3f1ae..39e29e7 100644 --- a/src/app/(main)/events/create/steps/ChannelStep.tsx +++ b/src/app/(main)/events/create/steps/ChannelStep.tsx @@ -522,6 +522,14 @@ export default function ChannelStep({ onNext, onBack }: ChannelStepProps) { borderRadius: 3, fontSize: '1rem', fontWeight: 700, + background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.pink} 100%)`, + '&:hover': { + background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.pink} 100%)`, + opacity: 0.9, + }, + '&:disabled': { + background: colors.gray[300], + }, }} > 다음 diff --git a/src/app/(main)/events/create/steps/ContentEditStep.tsx b/src/app/(main)/events/create/steps/ContentEditStep.tsx index 40d02af..e8d122a 100644 --- a/src/app/(main)/events/create/steps/ContentEditStep.tsx +++ b/src/app/(main)/events/create/steps/ContentEditStep.tsx @@ -163,11 +163,42 @@ export default function ContentEditStep({ {/* Action Buttons */} - - - diff --git a/src/app/(main)/events/create/steps/ContentPreviewStep.tsx b/src/app/(main)/events/create/steps/ContentPreviewStep.tsx index 2459ce2..b210c5d 100644 --- a/src/app/(main)/events/create/steps/ContentPreviewStep.tsx +++ b/src/app/(main)/events/create/steps/ContentPreviewStep.tsx @@ -11,6 +11,7 @@ import { FormControlLabel, IconButton, Dialog, + Grid, } from '@mui/material'; import { ArrowBack, ZoomIn, Psychology } from '@mui/icons-material'; @@ -110,22 +111,22 @@ export default function ContentPreviewStep({ if (loading) { return ( - + - + SNS 이미지 생성 - + - + AI 이미지 생성 중 - + 딥러닝 모델이 이벤트에 어울리는
이미지를 생성하고 있어요...
- + 예상 시간: 5초
@@ -152,133 +153,147 @@ export default function ContentPreviewStep({ return ( - + {/* Header */} - + SNS 이미지 생성 + + 이벤트에 어울리는 스타일을 선택하세요 + + handleStyleSelect(e.target.value)}> - {imageStyles.map((style) => ( - - - {style.name} - + + {imageStyles.map((style) => ( + + handleStyleSelect(style.id)} + > + + {/* 스타일 이름 */} + + + {style.name} + + } + label="" + sx={{ m: 0 }} + /> + - handleStyleSelect(style.id)} - > - {selectedStyle === style.id && ( - - - check - - - )} - - - - - {style.icon} - - - {title} - - - {prize} - - + + {style.icon} + + + {title} + + + {prize} + + - - - } - label="" - sx={{ display: 'none' }} - /> - -
-
-
- ))} + {/* 크게보기 버튼 */} + + + +
+
+ + ))} + {/* Action Buttons */} - - diff --git a/src/app/(main)/events/create/steps/RecommendationStep.tsx b/src/app/(main)/events/create/steps/RecommendationStep.tsx index f6c5111..a201950 100644 --- a/src/app/(main)/events/create/steps/RecommendationStep.tsx +++ b/src/app/(main)/events/create/steps/RecommendationStep.tsx @@ -388,6 +388,14 @@ export default function RecommendationStep({ onNext, onBack }: RecommendationSte borderRadius: 3, fontSize: '1rem', fontWeight: 700, + background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.pink} 100%)`, + '&:hover': { + background: `linear-gradient(135deg, ${colors.purple} 0%, ${colors.pink} 100%)`, + opacity: 0.9, + }, + '&:disabled': { + background: colors.gray[300], + }, }} > 다음