diff --git a/src/assets/icon/icon-check-circle.svg b/src/assets/icon/icon-check-circle.svg new file mode 100644 index 00000000..ea1dc36e --- /dev/null +++ b/src/assets/icon/icon-check-circle.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icon/icon-close.svg b/src/assets/icon/icon-close.svg new file mode 100644 index 00000000..fb28d4d7 --- /dev/null +++ b/src/assets/icon/icon-close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/common/Modal.tsx b/src/components/common/Modal.tsx new file mode 100644 index 00000000..5f2c5c1d --- /dev/null +++ b/src/components/common/Modal.tsx @@ -0,0 +1,23 @@ +interface ModalProps { + isOpen: boolean; + onClose: () => void; + children: React.ReactNode; +} + +export default function Modal({ isOpen, onClose, children }: ModalProps) { + if (!isOpen) return null; + + return ( +
+ {/* 배경 레이어 */} +
+ {/* 모달 본체 */} +
+ {children} +
+
+ ); +} \ No newline at end of file diff --git a/src/globals.css b/src/globals.css index 76f4d461..778ca87d 100644 --- a/src/globals.css +++ b/src/globals.css @@ -36,6 +36,7 @@ html { --color-core-3: #b7b7f3; --color-core-50: #6666e580; --color-core-70: #B7B7F3B2; + --color-status-review: #A7B8FC; ; /* State 컬러 */ diff --git a/src/routes/_main/_business/components/CampaignBrandCard.tsx b/src/routes/_main/_business/components/CampaignBrandCard.tsx index 722aa177..cdf0bfdc 100644 --- a/src/routes/_main/_business/components/CampaignBrandCard.tsx +++ b/src/routes/_main/_business/components/CampaignBrandCard.tsx @@ -13,6 +13,7 @@ export default function CampaignBrandCard({ statusText = "보낸 제안", roomId = "123" // 예시 ID }: CampaignBrandCardProps) { + const isReviewing = statusText === "검토 중"; return (
{/* 상단 브랜드 정보 */} @@ -42,7 +43,9 @@ export default function CampaignBrandCard({ 매칭률 99%
- {statusText} + + {statusText} + diff --git a/src/routes/_main/_business/components/CampaignCard.tsx b/src/routes/_main/_business/components/CampaignCard.tsx index 9cb91618..5e582f35 100644 --- a/src/routes/_main/_business/components/CampaignCard.tsx +++ b/src/routes/_main/_business/components/CampaignCard.tsx @@ -1,3 +1,4 @@ +import { useNavigate } from "@tanstack/react-router"; import BrandLogo from "../../../../assets/brand-logo.png"; import ArrowRight from "../../../../assets/icon/arrow-right.svg"; import SearchIcon from "../../../../assets/icon/search.svg"; @@ -20,7 +21,7 @@ export default function CampaignCard({ logo, showButton = true, }: CampaignCardProps) { - const BUTTON_WIDTH = '280px'; + const navigate = useNavigate(); // 로고 컴포넌트 const Logo = ( @@ -35,10 +36,7 @@ export default function CampaignCard({ return ( -
+
{/* 브랜드 + 제목/날짜 */}
@@ -51,8 +49,8 @@ export default function CampaignCard({ {title}

- {startDate}.25 - {endDate}.25 + {startDate} + {endDate}
@@ -60,13 +58,20 @@ export default function CampaignCard({ {/* 캠페인 보기 버튼 */} {showButton && (
{/* 일정 바 */} -
+
{/* 비플레인 */}
@@ -72,11 +72,11 @@ export default function MonthlyCalendar() {
라운드랩 diff --git a/src/routes/_main/_business/components/WeeklyCalendar.tsx b/src/routes/_main/_business/components/WeeklyCalendar.tsx index 10a06b06..bed289ad 100644 --- a/src/routes/_main/_business/components/WeeklyCalendar.tsx +++ b/src/routes/_main/_business/components/WeeklyCalendar.tsx @@ -4,7 +4,7 @@ export default function WeeklyCalendar() { const dates = [6, 7, 8, 9, 10, 11, 12]; return ( -
+
{/* 요일 */}
{WEEK_DAYS.map((day) => ( @@ -12,34 +12,53 @@ export default function WeeklyCalendar() { ))}
- {/* 날짜 */} -
+ {/* 날짜 그리드 */} +
{dates.map((date) => ( -
- {date} +
+
+ {date} +
))}
- {/* 일정 */} -
+ {/* 일정 바 컨테이너 */} +
{/* 비플레인 */} -
+
비플레인
{/* 라운드랩 */} -
+
라운드랩
); -} +} \ No newline at end of file diff --git a/src/routes/_main/_business/proposal/received-proposal-content.tsx b/src/routes/_main/_business/proposal/received-proposal-content.tsx index 66d3396a..8173844e 100644 --- a/src/routes/_main/_business/proposal/received-proposal-content.tsx +++ b/src/routes/_main/_business/proposal/received-proposal-content.tsx @@ -1,38 +1,43 @@ import { useState } from "react"; - import Header from "../../../../components/layout/Header"; import CampaignBrandCard from "../components/CampaignBrandCard"; import CampaignInfoGroup from "../components/CampaignInfoGroup"; +import Modal from "../../../../components/common/Modal"; import dropdownIcon from "../../../../assets/arrow-down.svg"; import dropupIcon from "../../../../assets/arrow-up.svg"; import arrowRightIcon from "../../../../assets/icon/arrow-right.svg"; -import profileIcon from "../../../../assets/logo/mini-logo.svg"; +import profileIcon from "../../../../assets/logo/mini-logo.svg"; +import checkIcon from "../../../../assets/icon/icon-check-circle.svg"; +import closeIcon from "../../../../assets/icon/icon-close.svg"; export default function ReceivedProposalContent() { + const [modalType, setModalType] = useState<"none" | "confirm" | "success">("none"); const [isContentOpen, setIsContentOpen] = useState(false); + const handleAcceptClick = () => setModalType("confirm"); + const handleConfirm = () => setModalType("success"); + const closeModal = () => setModalType("none"); + return ( -
-
+
+
-
- {/* 1. 상단 섹션: 브랜드 카드 */} -
- -
+ {/* 배경색 및 간격을 CampaignContent와 동일하게 유지 */} +
+ {/* 1. 상단 섹션: 브랜드 카드 및 타이틀 */} + {/* CampaignContent와 동일하게 상단만 흰색 배경 유지하거나 구분감 부여 */} +
+ +

브랜드 제안 캠페인

- {/* 2. 상세 정보 섹션 */} -
- {/* 캠페인명 */} + {/* 2. 상세 정보 섹션: 여기서부터 회색 배경(bluegray-1) */} +
-
+
비플레인 선크림 리뷰 콘텐츠
@@ -41,27 +46,22 @@ export default function ReceivedProposalContent() { setIsContentOpen(prev => !prev)}> - toggle + } >
-

설명

-
+

설명

+
안녕하세요 비플레인 입니다!
- 크리에이터님과 이미지와 비플레인이 추구하는 가치가 잘 맞닿아 있다고 생각되어 협찬을 제안드립니다. + 크리에이터님과 이미지가 잘 맞아 협찬을 제안드립니다.
- {/* 아코디언 상세 내용 */} {isContentOpen && ( -
+
@@ -74,68 +74,105 @@ export default function ReceivedProposalContent() {
- {/* 협찬품 / 원고료 */} + {/* 협찬품 / 원고료: 높이 36px 통일 */}
-
+
글로우 크림 1개 arrow
-
- 200,000 +
+ 200,000 +
- {/* 제작 기간 */} + {/* 제작 기간: 36px 및 pl-4 통일 */} -
-
- 2025년 1월 20일 +
+
+ 2025-01-20
- ~ -
- 2025년 1월 30일 + ~ +
+ 2025-01-30
+
- {/* 3. 하단 액션 버튼 (거절하기 / 제안 수락하기) */} -
- - + +
+ + + {/* 모달 내용은 기존 디자인 유지 (글로벌 규격 적용) */} + {modalType === "confirm" && ( +
+ +
+ check
- 제안 수락하기 - -
-
+

제안을 수락하시겠습니까?

+
+ + +
+
+ )} + + {modalType === "success" && ( +
+
+ check +
+

수락하기 완료

+

브랜드와 채팅방에서
협업을 진행해주세요

+ +
+ )} +
); } -// 기존 ContentItem 재사용 +// ContentItem: CampaignContent의 규격(h-34, text-callout1)으로 수정 function ContentItem({ label, value }: { label: string; value: string }) { return ( -
-

{label}

-
- {value} - arrow +
+

{label}

+
+ + {value} + + arrow
);