From 8de2d6d56d180f31f9d2e513cd725168cfa11e26 Mon Sep 17 00:00:00 2001 From: 2ssac Date: Thu, 10 Jul 2025 09:32:55 +0900 Subject: [PATCH 001/238] =?UTF-8?q?WIP:=20=EC=9E=84=EC=8B=9C=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu-detail/recipe-detail/page.tsx | 156 ++++++++++-------- .../src/app/mypage/recommended-list/page.tsx | 3 + .../src/app/restaurants-detail/page.tsx | 26 +++ 3 files changed, 115 insertions(+), 70 deletions(-) create mode 100644 omechu-app/src/app/restaurants-detail/page.tsx diff --git a/omechu-app/src/app/fullmenu/menu-detail/recipe-detail/page.tsx b/omechu-app/src/app/fullmenu/menu-detail/recipe-detail/page.tsx index 964af1a32..b3d80c591 100644 --- a/omechu-app/src/app/fullmenu/menu-detail/recipe-detail/page.tsx +++ b/omechu-app/src/app/fullmenu/menu-detail/recipe-detail/page.tsx @@ -1,84 +1,100 @@ -'use client' +"use client"; import Header from "@/app/components/common/Header"; import { useRouter, useSearchParams } from "next/navigation"; import Image from "next/image"; export default function RecipeDetail() { - const router = useRouter(); - const searchParams = useSearchParams(); - - const name = searchParams.get("name"); + const router = useRouter(); + const searchParams = useSearchParams(); - return ( - <> -
{router.back()}}> - {"뒤로가기"} - - } - /> + const name = searchParams.get("name"); -
+ return ( + <> +
{ + router.back(); + }} + > + {"뒤로가기"} + + } + /> -

{name} 레시피

+
+

+ {name} 레시피 +

-
- {`${name}`} -
+
+ {`${name}`} +
-
-

재료

-

- 된장국 두부 20g, 애느타리버섯 20g, 감자 10g, - 양파 10g, 대파 10g, 된장 5g(1작은술), 물 300ml(1½컵) -

-
+
+

재료

+

+ 된장국 두부 20g, 애느타리버섯 20g, 감자 10g, 양파 10g, 대파 10g, + 된장 5g(1작은술), 물 300ml(1½컵) +

+
-
+
-
-

요리법

+
+

요리법

- {[ - { text: "감자, 양파를 잘 익도록 얇게 썬다." }, - { text: "애느타리버섯은 썰어 달궈진 팬에 굽는다." }, - { text: "대파를 송송 썬다." }, - { text: "냄비에 물을 붓고 된장을 푼 뒤 감자, 양파, 두부를 넣어 재료가 투명해지게 끓인다.", image: "/step1.jpg" }, - { text: "된장국의 재료를 건져서 국물 한 국자와 믹서에 넣어 간 다음 된장국에 다시 넣어 한 번 더 끓인다.", image: "/step2.jpg" }, - { text: "구운 애느타리버섯과 대파를 국에 넣어 끓인 후 그릇에 담는다.", image: "/step3.jpg" }, - ].map((step, index) => ( -
-

- {index + 1} - {step.text} -

- {step.image && ( -
- {`step-${index -
- )} -
- ))} -
-
- - ) -} \ No newline at end of file + {[ + { text: "감자, 양파를 잘 익도록 얇게 썬다." }, + { text: "애느타리버섯은 썰어 달궈진 팬에 굽는다." }, + { text: "대파를 송송 썬다." }, + { + text: "냄비에 물을 붓고 된장을 푼 뒤 감자, 양파, 두부를 넣어 재료가 투명해지게 끓인다.", + image: "/step1.jpg", + }, + { + text: "된장국의 재료를 건져서 국물 한 국자와 믹서에 넣어 간 다음 된장국에 다시 넣어 한 번 더 끓인다.", + image: "/step2.jpg", + }, + { + text: "구운 애느타리버섯과 대파를 국에 넣어 끓인 후 그릇에 담는다.", + image: "/step3.jpg", + }, + ].map((step, index) => ( +
+

+ + {index + 1} + + {step.text} +

+ {step.image && ( +
+ {`step-${index +
+ )} +
+ ))} + +
+ + ); +} diff --git a/omechu-app/src/app/mypage/recommended-list/page.tsx b/omechu-app/src/app/mypage/recommended-list/page.tsx index 3d98642be..331fd4ed6 100644 --- a/omechu-app/src/app/mypage/recommended-list/page.tsx +++ b/omechu-app/src/app/mypage/recommended-list/page.tsx @@ -151,6 +151,9 @@ export default function RecommendedList() { imageUrl={item.imageUrl} // 또는 추후에 실제 경로로 대체될 값 isExcluded={item.isExcluded} onToggle={() => onToggle(item.title)} + onClick={function (): void { + throw new Error("Function not implemented."); + }} /> ))} diff --git a/omechu-app/src/app/restaurants-detail/page.tsx b/omechu-app/src/app/restaurants-detail/page.tsx new file mode 100644 index 000000000..0771fba4f --- /dev/null +++ b/omechu-app/src/app/restaurants-detail/page.tsx @@ -0,0 +1,26 @@ +"use client"; + +import Image from "next/image"; +import { useRouter } from "next/navigation"; + +import Header from "../components/common/Header"; + +export default function RestaurantsDetial() { + const router = useRouter(); + return ( + <> +
{ + router.push("/mypage"); + }} + > + {"<"} + + } + title={"추천 목록 관리"} + /> + + ); +} From d048ac800766ddaccb36504d80845e6dbaa3ab06 Mon Sep 17 00:00:00 2001 From: 2ssac Date: Thu, 10 Jul 2025 14:04:31 +0900 Subject: [PATCH 002/238] =?UTF-8?q?design:=EB=A7=9B=EC=A7=91-=EC=83=81?= =?UTF-8?q?=EC=84=B8=20CSS=20=EC=88=98=EC=A0=95=20=20#37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/restaurants-detail/page.tsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/omechu-app/src/app/restaurants-detail/page.tsx b/omechu-app/src/app/restaurants-detail/page.tsx index ad4c315a1..a54dcf570 100644 --- a/omechu-app/src/app/restaurants-detail/page.tsx +++ b/omechu-app/src/app/restaurants-detail/page.tsx @@ -43,6 +43,7 @@ export default function RestaurantsDetial() { const [showAddress, setShowAddress] = useState(false); const [rating, setRating] = useState(0); // 0~5점 + const [isActive, setIsActive] = useState(false); return ( <> @@ -260,7 +261,7 @@ export default function RestaurantsDetial() { ].map((item, index) => (
{item}
@@ -270,9 +271,23 @@ export default function RestaurantsDetial() { {/* 후기 카드 목록 */}
- + | - +
From 0d3f89c7c1679ed450673a2cc9ad48dbc6318a10 Mon Sep 17 00:00:00 2001 From: 2ssac Date: Thu, 10 Jul 2025 15:35:20 +0900 Subject: [PATCH 003/238] =?UTF-8?q?feat:=EB=A7=9B=EC=A7=91=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20Card=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20#37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omechu-app/public/menu_dots_vertical.png | Bin 0 -> 149 bytes omechu-app/public/restaurant/avatar1.png | Bin 0 -> 2355 bytes omechu-app/public/restaurant/avatar2.png | Bin 0 -> 2782 bytes omechu-app/public/restaurant/avatar3.png | Bin 0 -> 3020 bytes omechu-app/public/thumbs-up-fill.png | Bin 0 -> 686 bytes omechu-app/src/app/ClientLayout.tsx | 3 + .../src/app/components/restaurant/Review.tsx | 96 ++++++++++++++++++ .../src/app/restaurants-detail/page.tsx | 31 ++++-- 8 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 omechu-app/public/menu_dots_vertical.png create mode 100644 omechu-app/public/restaurant/avatar1.png create mode 100644 omechu-app/public/restaurant/avatar2.png create mode 100644 omechu-app/public/restaurant/avatar3.png create mode 100644 omechu-app/public/thumbs-up-fill.png create mode 100644 omechu-app/src/app/components/restaurant/Review.tsx diff --git a/omechu-app/public/menu_dots_vertical.png b/omechu-app/public/menu_dots_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf58b7cfe6293a34177c10ff1213da0ce98d592 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBzLuwpV@L(#+Y1{x85lU24?YOn|6gI9lAgjf pMfR6Ld!O*WxcgPJ(!1H@ht$tjPG=2MHGZHj22WQ%mvv4FO#qbuC@cT~ literal 0 HcmV?d00001 diff --git a/omechu-app/public/restaurant/avatar1.png b/omechu-app/public/restaurant/avatar1.png new file mode 100644 index 0000000000000000000000000000000000000000..c377b1f3bc6cc08dcbf6ea671451a89c7662f0b7 GIT binary patch literal 2355 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 literal 0 HcmV?d00001 diff --git a/omechu-app/public/restaurant/avatar3.png b/omechu-app/public/restaurant/avatar3.png new file mode 100644 index 0000000000000000000000000000000000000000..95b59ad343189b4802cd2b7a579290ee0a199c9e GIT binary patch literal 3020 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 UZpAl!tN;K207*qoM6N<$f^%*q*8l(j literal 0 HcmV?d00001 diff --git a/omechu-app/src/app/ClientLayout.tsx b/omechu-app/src/app/ClientLayout.tsx index 0e3cec5f1..fa1d18687 100644 --- a/omechu-app/src/app/ClientLayout.tsx +++ b/omechu-app/src/app/ClientLayout.tsx @@ -37,6 +37,9 @@ export default function ClientLayout({ "/mypage/terms/service", "/mypage/terms/personal-info", "/mypage/terms/location-info", + + //맛집-상세페이지 + "/restaurants-detail", ]; const showBottomNav = !noBottomNavRoutes.includes(pathname); diff --git a/omechu-app/src/app/components/restaurant/Review.tsx b/omechu-app/src/app/components/restaurant/Review.tsx new file mode 100644 index 000000000..774cf15f4 --- /dev/null +++ b/omechu-app/src/app/components/restaurant/Review.tsx @@ -0,0 +1,96 @@ +import { useState } from "react"; +import Image from "next/image"; + +type ReviewProps = { + profileImgUrl: string; + userId: string; + createdDate: string; + votes: number; + rating: number; + content: string; + tags?: string[]; + images?: string[]; +}; + +export default function Review({ + profileImgUrl, + userId, + createdDate, + votes = 0, + rating, + content, + tags, + images, +}: ReviewProps) { + return ( +
+ {/* 프로필사진, 닉네임, 작성일 | 추천 버튼, 설정버튼 */} +
+
+ {profileImgUrl} + + {userId} + + + {createdDate} + +
+
+ {votes} + + +
+
+ {/* 평점, 후기 */} +
+ + {"★".repeat(rating) + "☆".repeat(5 - rating)} + + {content} +
+ {images?.map((item, index) => ( +
+ {item} +
+ ))} +
+
+ {/* 후기 관련 태그 */} +
+ {tags?.map((item, index) => ( +
+ {item} +
+ ))} +
+
+ ); +} diff --git a/omechu-app/src/app/restaurants-detail/page.tsx b/omechu-app/src/app/restaurants-detail/page.tsx index a54dcf570..0fffbd7f5 100644 --- a/omechu-app/src/app/restaurants-detail/page.tsx +++ b/omechu-app/src/app/restaurants-detail/page.tsx @@ -5,6 +5,7 @@ import { usePathname, useRouter } from "next/navigation"; import { useState } from "react"; import Header from "../components/common/Header"; +import Review from "../components/restaurant/Review"; const restaurant_time_table = [ { @@ -43,7 +44,7 @@ export default function RestaurantsDetial() { const [showAddress, setShowAddress] = useState(false); const [rating, setRating] = useState(0); // 0~5점 - const [isActive, setIsActive] = useState(false); + const [isActive, setIsActive] = useState(true); return ( <> @@ -67,7 +68,7 @@ export default function RestaurantsDetial() { } /> {/* 메인 Container*/} -
+
{/* 맛집 제목, 사진 */}

@@ -270,9 +271,14 @@ export default function RestaurantsDetial() { {/* 후기 카드 목록 */}
-
+ {/* 후기 필터 버튼 */} +
|
-
+ + {/* 후기 목록 */} +
+ + + + + + +

From 32f740754b90de8d1737c3c7419d303e51f8afb5 Mon Sep 17 00:00:00 2001 From: 2ssac Date: Thu, 10 Jul 2025 16:27:43 +0900 Subject: [PATCH 004/238] =?UTF-8?q?=EB=A7=9B=EC=A7=91-=EC=83=81=EC=84=B8?= =?UTF-8?q?=20wip=2090%=20#37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omechu-app/public/report.png | Bin 0 -> 1317 bytes .../src/app/components/restaurant/Review.tsx | 48 +++++++---- .../page.tsx | 79 ++++++++++++++++-- 3 files changed, 105 insertions(+), 22 deletions(-) create mode 100644 omechu-app/public/report.png rename omechu-app/src/app/{restaurants-detail => restaurant-detail}/page.tsx (84%) diff --git a/omechu-app/public/report.png b/omechu-app/public/report.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4efac321ca59d0bf71ecf60dd07fe6f7db8e22 GIT binary patch literal 1317 zcmV+=1={+FP)@~0drDELIAGL9O(c600d`2O+f$vv5yP3}XBq)P`p0r&}kCjh!oK{`5&5SI?#fR#WfrPBf8 zlK+@lvpb%dT^rxVnon}Fp4-kp=ggT4kf9DRIXU^NNhkVcAP-l zaRP0p?*-!lQ@JCPc21 zMNCaitwG#69)qEwp|NtgT;cSZi?ZeDO&qg=(U>PofN_?DIL3Q;c-Ri}viuLL$A7=1 zdf$hKhxcx8Z!6Tp2+!NcV?L7nWps3uZf}g8wn~}kpDS*cX#)9WMt$4-@hBm@_anTd<;~Xu);E|aUj~rQ}gh^%%iOzm_z?C zhptqG*eG!E-wAE;a&cIVqQW{`rqUSMqMXJP9OBseo7BA3RCpNuZEl<2A!owl{Dk^j zp~uzMLE&OYXt=1TP)3E>Xo7HU4o)7m7k1l)v$M09HO0XCs`BXT=kQBy9b}(JVBj5$ z?E3*k$AZlC^zlrm;c*Wg*u!(v zJ0#Sfj|RJFfJ9yiech>hzpgRf0Kk`P>yorrO@duzH=oaM%HdvjN7?`tv^^H}D!H#w zQeV8Hk!wm8$6`vRHM0c*t6qV%ayHE_DAjpT>{Y#lVr3rLqzyqU;7E@h(ps9bi53*D zd7V&<*PRtgK`Sg6f_{z3%ZE&&1rfRSP5C^z(~4^~c=tw98KXdP&MF#;Y+(pfu`lz3SeB{BV_ehs7Zvaf~U}Nx2cmjVsYB8z>J|w5B#OFCf zgQX;KVwbUjLGr212rHJAd8)*O$Qj$rs^H@jy`3;R2Bym=)w-yggT5x6N2^2z#G2Vr zaSYbQB~`joAVlcgGr+pDqsdEk%5Ecbs>C{hd@dx71^MoTG_YHDQ5;hgeUDKm@agHv zxbEpPqDQPQQMkXquj_lAKtxYpUBBv{%54#E2&glMUnAIc`E_Y>0^IDIsM0a^~tV$Gf&*avf$n4dmM0reqR bAu9g?lMx4ElSwWB00000NkvXXu0mjffn;@v literal 0 HcmV?d00001 diff --git a/omechu-app/src/app/components/restaurant/Review.tsx b/omechu-app/src/app/components/restaurant/Review.tsx index 774cf15f4..6d23cff75 100644 --- a/omechu-app/src/app/components/restaurant/Review.tsx +++ b/omechu-app/src/app/components/restaurant/Review.tsx @@ -1,7 +1,7 @@ -import { useState } from "react"; import Image from "next/image"; type ReviewProps = { + id: number; profileImgUrl: string; userId: string; createdDate: string; @@ -10,9 +10,12 @@ type ReviewProps = { content: string; tags?: string[]; images?: string[]; + onClick?: () => void; + isOptionOpen?: boolean; }; export default function Review({ + id, profileImgUrl, userId, createdDate, @@ -21,10 +24,12 @@ export default function Review({ content, tags, images, + onClick, + isOptionOpen = false, }: ReviewProps) { return (
{/* 프로필사진, 닉네임, 작성일 | 추천 버튼, 설정버튼 */} @@ -53,7 +58,7 @@ export default function Review({ height={22} /> - + {isOptionOpen && ( +
+ +
+ )} {/* 평점, 후기 */} -
- +
+ {"★".repeat(rating) + "☆".repeat(5 - rating)} {content} -
+
{images?.map((item, index) => ( -
- {item} -
+ {`후기 ))}
{/* 후기 관련 태그 */}
- {tags?.map((item, index) => ( + {tags?.map((item, tagIdx) => (
{item} diff --git a/omechu-app/src/app/restaurants-detail/page.tsx b/omechu-app/src/app/restaurant-detail/page.tsx similarity index 84% rename from omechu-app/src/app/restaurants-detail/page.tsx rename to omechu-app/src/app/restaurant-detail/page.tsx index 0fffbd7f5..5c14abcbf 100644 --- a/omechu-app/src/app/restaurants-detail/page.tsx +++ b/omechu-app/src/app/restaurant-detail/page.tsx @@ -38,14 +38,63 @@ const restaurant_time_table = [ }, ]; -export default function RestaurantsDetial() { +const sample_reviews: { + id: number; + profileImgUrl: string; + userId: string; + createdDate: string; + votes: number; + rating: number; + content: string; + tags?: string[]; + images?: string[]; +}[] = [ + { + id: 1, + profileImgUrl: "/restaurant/avatar1.png", + userId: "Alex", + createdDate: "2025.05.05", + votes: 5, + rating: 5, + content: "이거 먹으려고 부산에서 왔어요", + tags: ["저녁식사", "혼밥", "고급스러운", "가격대 있음"], + }, + { + id: 2, + profileImgUrl: "/restaurant/avatar2.png", + userId: "Keren", + createdDate: "2025.05.04", + votes: 2, + rating: 4, + content: "맛있어요", + tags: ["점심식사", "데이트"], + }, + { + id: 3, + profileImgUrl: "/restaurant/avatar3.png", + userId: "Jack", + createdDate: "2025.04.03", + votes: 2, + rating: 4, + content: "먹을만 해요", + tags: ["조용한"], + images: [ + "/restaurant_blank.png", + "/restaurant_blank.png", + "/restaurant_blank.png", + "/restaurant_blank.png", + ], + }, +]; + +export default function RestaurantDetail() { const pathname = usePathname(); const router = useRouter(); const [showAddress, setShowAddress] = useState(false); const [rating, setRating] = useState(0); // 0~5점 const [isActive, setIsActive] = useState(true); - + const [activeOptionId, setActiveOptionId] = useState(null); return ( <> {/* 헤더 */} @@ -302,12 +351,26 @@ export default function RestaurantsDetial() { {/* 후기 목록 */}
- - - - - - + {sample_reviews.map((item, index) => ( + + setActiveOptionId((prev) => + prev === item.id ? null : item.id + ) + } + isOptionOpen={activeOptionId === item.id} + /> + ))}
From 9d94478a6f9a6526572a3ea62f1112406ba55607 Mon Sep 17 00:00:00 2001 From: 2ssac Date: Thu, 10 Jul 2025 23:51:36 +0900 Subject: [PATCH 005/238] =?UTF-8?q?feat:=EC=8B=A0=EA=B3=A0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=AA=A8=EB=8B=AC=EC=B0=BD=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?#37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- omechu-app/public/thumbs-up.png | Bin 0 -> 407 bytes omechu-app/src/app/ClientLayout.tsx | 2 +- .../app/components/restaurant/ReportModal.tsx | 70 ++++++++++++++++++ omechu-app/src/app/restaurant-detail/page.tsx | 10 +++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 omechu-app/public/thumbs-up.png create mode 100644 omechu-app/src/app/components/restaurant/ReportModal.tsx diff --git a/omechu-app/public/thumbs-up.png b/omechu-app/public/thumbs-up.png new file mode 100644 index 0000000000000000000000000000000000000000..61566b2fb62097a8865a843e39820815d393f200 GIT binary patch literal 407 zcmV;I0cie-P)-+vO2!gx1uK!HA%oIqHBm%(_ z>NDgO`id-ImKcW!j3ivw-O>bZOaaGn-XI?XmzQPPyEZ^B@;v{!NQA@~M~pER%GL{R z+g38h)JLJtg>Qv?Pv;zo(llLy;2T{CRUPNAj#X79X}>EP0!E5(h@o#xkM7v%qs6m$!hMNo0wCI!W%)^0jU7&QYaQeNVekL|002ovPDHLkV1laX BsF?r& literal 0 HcmV?d00001 diff --git a/omechu-app/src/app/ClientLayout.tsx b/omechu-app/src/app/ClientLayout.tsx index fa1d18687..e227f3a6a 100644 --- a/omechu-app/src/app/ClientLayout.tsx +++ b/omechu-app/src/app/ClientLayout.tsx @@ -39,7 +39,7 @@ export default function ClientLayout({ "/mypage/terms/location-info", //맛집-상세페이지 - "/restaurants-detail", + "/restaurant-detail", ]; const showBottomNav = !noBottomNavRoutes.includes(pathname); diff --git a/omechu-app/src/app/components/restaurant/ReportModal.tsx b/omechu-app/src/app/components/restaurant/ReportModal.tsx new file mode 100644 index 000000000..109ae4aa3 --- /dev/null +++ b/omechu-app/src/app/components/restaurant/ReportModal.tsx @@ -0,0 +1,70 @@ +import Image from "next/image"; +import { useState } from "react"; + +type ReportModalProps = { + onClick: () => void; +}; + +export default function ReportModal({ onClick }: ReportModalProps) { + const [selectedReason, setSelectedReason] = useState(""); + + const reasons = [ + { id: "abuse", label: "욕설, 비방" }, + { id: "ad", label: "광고, 홍보성 글" }, + { id: "false", label: "허위 사실" }, + { id: "offensive", label: "선정적 / 불쾌한 내용" }, + { id: "other", label: "기타" }, + ]; + + return ( +
+ {/* 나가기 버튼 */} +
+ +
+ + {/* 모달 제목 */} +
후기 신고하기
+ + {/* 신고 사유 */} +
+ {reasons.map(({ id, label }) => ( + + ))} +
+ + {/* 신고 내용 */} +