From 42b71a4216c41c7ad92b724b7d7c2b289778e7c2 Mon Sep 17 00:00:00 2001 From: JIN921 Date: Mon, 23 Feb 2026 15:47:27 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/admin/ic_admin_absence.svg | 3 + .../icons/admin/ic_admin_attendance.svg | 4 ++ src/assets/icons/admin/ic_admin_backarrow.svg | 3 + src/assets/icons/admin/ic_admin_cardinal.svg | 3 + src/assets/icons/admin/ic_admin_change.svg | 3 + src/assets/icons/admin/ic_admin_check.svg | 3 + src/assets/icons/admin/ic_admin_checkbox.svg | 3 + .../icons/admin/ic_admin_circle_check.svg | 3 + src/assets/icons/admin/ic_admin_close.svg | 3 + .../icons/admin/ic_admin_column_meatball.svg | 12 ++++ src/assets/icons/admin/ic_admin_due.svg | 3 + src/assets/icons/admin/ic_admin_manual.svg | 4 ++ src/assets/icons/admin/ic_admin_meatball.svg | 10 ++++ src/assets/icons/admin/ic_admin_penalty.svg | 3 + src/assets/icons/admin/ic_admin_plus.svg | 4 ++ src/assets/icons/admin/ic_admin_receipt.svg | 4 ++ src/assets/icons/admin/ic_admin_search.svg | 10 ++++ .../icons/admin/ic_admin_service_transfer.svg | 3 + .../icons/admin/ic_admin_uncheckbox.svg | 3 + src/assets/icons/admin/ic_admin_user.svg | 3 + src/assets/icons/logo/logo_full_Origin.svg | 5 ++ src/assets/icons/logo/logo_full_Spring.svg | 15 +++++ src/assets/icons/logo/logo_full_Xmas.svg | 59 +++++++++++++++++++ src/assets/icons/logo/logo_initial_Origin.svg | 4 ++ src/assets/icons/logo/logo_initial_Xmas.svg | 16 +++++ src/components/admin/layout/Header.tsx | 0 src/components/admin/layout/LNB.tsx | 0 27 files changed, 186 insertions(+) create mode 100644 src/assets/icons/admin/ic_admin_absence.svg create mode 100644 src/assets/icons/admin/ic_admin_attendance.svg create mode 100644 src/assets/icons/admin/ic_admin_backarrow.svg create mode 100644 src/assets/icons/admin/ic_admin_cardinal.svg create mode 100644 src/assets/icons/admin/ic_admin_change.svg create mode 100644 src/assets/icons/admin/ic_admin_check.svg create mode 100644 src/assets/icons/admin/ic_admin_checkbox.svg create mode 100644 src/assets/icons/admin/ic_admin_circle_check.svg create mode 100644 src/assets/icons/admin/ic_admin_close.svg create mode 100644 src/assets/icons/admin/ic_admin_column_meatball.svg create mode 100644 src/assets/icons/admin/ic_admin_due.svg create mode 100644 src/assets/icons/admin/ic_admin_manual.svg create mode 100644 src/assets/icons/admin/ic_admin_meatball.svg create mode 100644 src/assets/icons/admin/ic_admin_penalty.svg create mode 100644 src/assets/icons/admin/ic_admin_plus.svg create mode 100644 src/assets/icons/admin/ic_admin_receipt.svg create mode 100644 src/assets/icons/admin/ic_admin_search.svg create mode 100644 src/assets/icons/admin/ic_admin_service_transfer.svg create mode 100644 src/assets/icons/admin/ic_admin_uncheckbox.svg create mode 100644 src/assets/icons/admin/ic_admin_user.svg create mode 100644 src/assets/icons/logo/logo_full_Origin.svg create mode 100644 src/assets/icons/logo/logo_full_Spring.svg create mode 100644 src/assets/icons/logo/logo_full_Xmas.svg create mode 100644 src/assets/icons/logo/logo_initial_Origin.svg create mode 100644 src/assets/icons/logo/logo_initial_Xmas.svg create mode 100644 src/components/admin/layout/Header.tsx create mode 100644 src/components/admin/layout/LNB.tsx diff --git a/src/assets/icons/admin/ic_admin_absence.svg b/src/assets/icons/admin/ic_admin_absence.svg new file mode 100644 index 0000000..6971867 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_absence.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_attendance.svg b/src/assets/icons/admin/ic_admin_attendance.svg new file mode 100644 index 0000000..837e944 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_attendance.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/admin/ic_admin_backarrow.svg b/src/assets/icons/admin/ic_admin_backarrow.svg new file mode 100644 index 0000000..e1a3abb --- /dev/null +++ b/src/assets/icons/admin/ic_admin_backarrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_cardinal.svg b/src/assets/icons/admin/ic_admin_cardinal.svg new file mode 100644 index 0000000..45ce06c --- /dev/null +++ b/src/assets/icons/admin/ic_admin_cardinal.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_change.svg b/src/assets/icons/admin/ic_admin_change.svg new file mode 100644 index 0000000..d4b91eb --- /dev/null +++ b/src/assets/icons/admin/ic_admin_change.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_check.svg b/src/assets/icons/admin/ic_admin_check.svg new file mode 100644 index 0000000..a0e539c --- /dev/null +++ b/src/assets/icons/admin/ic_admin_check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_checkbox.svg b/src/assets/icons/admin/ic_admin_checkbox.svg new file mode 100644 index 0000000..8eaed53 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_checkbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_circle_check.svg b/src/assets/icons/admin/ic_admin_circle_check.svg new file mode 100644 index 0000000..ff37652 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_circle_check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_close.svg b/src/assets/icons/admin/ic_admin_close.svg new file mode 100644 index 0000000..7b5e0c6 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_close.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_column_meatball.svg b/src/assets/icons/admin/ic_admin_column_meatball.svg new file mode 100644 index 0000000..66882c4 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_column_meatball.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/icons/admin/ic_admin_due.svg b/src/assets/icons/admin/ic_admin_due.svg new file mode 100644 index 0000000..82bf746 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_due.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_manual.svg b/src/assets/icons/admin/ic_admin_manual.svg new file mode 100644 index 0000000..a02c343 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_manual.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/admin/ic_admin_meatball.svg b/src/assets/icons/admin/ic_admin_meatball.svg new file mode 100644 index 0000000..d1fd6b1 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_meatball.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/admin/ic_admin_penalty.svg b/src/assets/icons/admin/ic_admin_penalty.svg new file mode 100644 index 0000000..265f55f --- /dev/null +++ b/src/assets/icons/admin/ic_admin_penalty.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_plus.svg b/src/assets/icons/admin/ic_admin_plus.svg new file mode 100644 index 0000000..6303263 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/admin/ic_admin_receipt.svg b/src/assets/icons/admin/ic_admin_receipt.svg new file mode 100644 index 0000000..299c1f4 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_receipt.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/admin/ic_admin_search.svg b/src/assets/icons/admin/ic_admin_search.svg new file mode 100644 index 0000000..b050748 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/admin/ic_admin_service_transfer.svg b/src/assets/icons/admin/ic_admin_service_transfer.svg new file mode 100644 index 0000000..137d4a4 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_service_transfer.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_uncheckbox.svg b/src/assets/icons/admin/ic_admin_uncheckbox.svg new file mode 100644 index 0000000..b4719e6 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_uncheckbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/admin/ic_admin_user.svg b/src/assets/icons/admin/ic_admin_user.svg new file mode 100644 index 0000000..7f44dd9 --- /dev/null +++ b/src/assets/icons/admin/ic_admin_user.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/logo/logo_full_Origin.svg b/src/assets/icons/logo/logo_full_Origin.svg new file mode 100644 index 0000000..f8b3470 --- /dev/null +++ b/src/assets/icons/logo/logo_full_Origin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/icons/logo/logo_full_Spring.svg b/src/assets/icons/logo/logo_full_Spring.svg new file mode 100644 index 0000000..ba06971 --- /dev/null +++ b/src/assets/icons/logo/logo_full_Spring.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/icons/logo/logo_full_Xmas.svg b/src/assets/icons/logo/logo_full_Xmas.svg new file mode 100644 index 0000000..3b7b2ef --- /dev/null +++ b/src/assets/icons/logo/logo_full_Xmas.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/logo/logo_initial_Origin.svg b/src/assets/icons/logo/logo_initial_Origin.svg new file mode 100644 index 0000000..7732b01 --- /dev/null +++ b/src/assets/icons/logo/logo_initial_Origin.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/logo/logo_initial_Xmas.svg b/src/assets/icons/logo/logo_initial_Xmas.svg new file mode 100644 index 0000000..64b9768 --- /dev/null +++ b/src/assets/icons/logo/logo_initial_Xmas.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/components/admin/layout/Header.tsx b/src/components/admin/layout/Header.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/components/admin/layout/LNB.tsx b/src/components/admin/layout/LNB.tsx new file mode 100644 index 0000000..e69de29 From 3c2f557fe330f781920a67b85abe836f157d3ec4 Mon Sep 17 00:00:00 2001 From: JIN921 Date: Mon, 23 Feb 2026 20:57:12 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20LNB=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(private)/admin/layout.tsx | 15 ++++- src/components/admin/layout/Header.tsx | 15 +++++ src/components/admin/layout/LNB.tsx | 87 ++++++++++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/src/app/(private)/admin/layout.tsx b/src/app/(private)/admin/layout.tsx index 4190c74..316a6d7 100644 --- a/src/app/(private)/admin/layout.tsx +++ b/src/app/(private)/admin/layout.tsx @@ -1,7 +1,20 @@ +import { Header } from '@/components/admin/layout/Header'; +import { LNB } from '@/components/admin/layout/LNB'; + export default function AdminLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { - return
{children}
; + return ( +
+
+
+ +
+ {children} +
+
+
+ ); } diff --git a/src/components/admin/layout/Header.tsx b/src/components/admin/layout/Header.tsx index e69de29..ce25b6c 100644 --- a/src/components/admin/layout/Header.tsx +++ b/src/components/admin/layout/Header.tsx @@ -0,0 +1,15 @@ +import Image from 'next/image'; + +export function Header() { + return ( +
+ Weeth + Weeth Admin +
+ ); +} diff --git a/src/components/admin/layout/LNB.tsx b/src/components/admin/layout/LNB.tsx index e69de29..380add8 100644 --- a/src/components/admin/layout/LNB.tsx +++ b/src/components/admin/layout/LNB.tsx @@ -0,0 +1,87 @@ +'use client'; + +import Link from 'next/link'; +import Image from 'next/image'; +import { usePathname } from 'next/navigation'; + +import userIcon from '@/assets/icons/admin/ic_admin_user.svg'; +import checkIcon from '@/assets/icons/admin/ic_admin_attendance.svg'; +import penaltyIcon from '@/assets/icons/admin/ic_admin_penalty.svg'; +import dueIcon from '@/assets/icons/admin/ic_admin_due.svg'; +import arrowIcon from '@/assets/icons/admin/ic_admin_service_transfer.svg'; +import manualIcon from '@/assets/icons/admin/ic_admin_manual.svg'; + +import { cn } from '@/lib/cn'; + +const mainNavItems = [ + { id: 'member', icon: userIcon, label: '멤버 관리', path: '/admin/member' }, + { id: 'attendance', icon: checkIcon, label: '출석 관리', path: '/admin/attendance' }, + { id: 'penalty', icon: penaltyIcon, label: '페널티 관리', path: '/admin/penalty' }, + { id: 'dues', icon: dueIcon, label: '회비 관리', path: '/admin/dues' }, +]; + +const moveNavItems = [ + { id: 'service', icon: arrowIcon, label: 'Weeth로 이동', path: 'https://weeth.kr' }, + { id: 'manual', icon: manualIcon, label: '관리자 매뉴얼', path: '' }, +]; + +const navItemClass = cn( + 'typo-sub1 flex h-12 items-center gap-300 rounded-sm px-300 transition-colors', + 'text-text-alternative hover:bg-container-neutral-interaction', +); + +export function LNB() { + const pathname = usePathname(); + + return ( + + ); +} From c24b6098c0e6f52f9e753a38f66db9cdc33338c0 Mon Sep 17 00:00:00 2001 From: JIN921 Date: Tue, 24 Feb 2026 22:56:07 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(private)/admin/layout.tsx | 6 +- src/components/admin/layout/Header.tsx | 47 +++++++++--- src/components/admin/layout/LNB.tsx | 99 +++++++++++++++++--------- 3 files changed, 109 insertions(+), 43 deletions(-) diff --git a/src/app/(private)/admin/layout.tsx b/src/app/(private)/admin/layout.tsx index 316a6d7..253ee3f 100644 --- a/src/app/(private)/admin/layout.tsx +++ b/src/app/(private)/admin/layout.tsx @@ -7,11 +7,11 @@ export default function AdminLayout({ children: React.ReactNode; }>) { return ( -
-
+
-
+
+
{children}
diff --git a/src/components/admin/layout/Header.tsx b/src/components/admin/layout/Header.tsx index ce25b6c..c004de4 100644 --- a/src/components/admin/layout/Header.tsx +++ b/src/components/admin/layout/Header.tsx @@ -1,15 +1,46 @@ +'use client'; + import Image from 'next/image'; +import { usePathname } from 'next/navigation'; + +const PAGE_METADATA: Record = { + '/admin/member': { + title: '멤버 관리', + description: + '가입 승인 등 멤버를 관리하는 페이지입니다. 정기모임을 모두 입력하신 후에 가입 승인을 해주시길 바랍니다.', + }, + '/admin/attendance': { + title: '출석 관리', + description: '기수를 선택하고, 해당 모임에 대한 출석을 수정하는 페이지입니다.', + }, + '/admin/penalty': { + title: '페널티 관리', + description: '멤버별 페널티 내역을 조회하고 관리하는 페이지입니다.', + }, + '/admin/dues': { + title: '회비 관리', + description: '멤버별 회비 납부 내역을 조회하고 관리하는 페이지입니다.', + }, +}; export function Header() { + const pathname = usePathname(); + + const metadata = Object.entries(PAGE_METADATA).find(([path]) => pathname.startsWith(path))?.[1]; + return ( -
- Weeth - Weeth Admin +
+ {metadata && ( + <> +
+ {metadata.title} + {metadata.description} + + )} + +
); } diff --git a/src/components/admin/layout/LNB.tsx b/src/components/admin/layout/LNB.tsx index 380add8..c488f10 100644 --- a/src/components/admin/layout/LNB.tsx +++ b/src/components/admin/layout/LNB.tsx @@ -2,8 +2,10 @@ import Link from 'next/link'; import Image from 'next/image'; +import type { StaticImageData } from 'next/image'; import { usePathname } from 'next/navigation'; +import logoIcon from '@/assets/icons/logo/logo_initial_Origin.svg'; import userIcon from '@/assets/icons/admin/ic_admin_user.svg'; import checkIcon from '@/assets/icons/admin/ic_admin_attendance.svg'; import penaltyIcon from '@/assets/icons/admin/ic_admin_penalty.svg'; @@ -25,17 +27,43 @@ const moveNavItems = [ { id: 'manual', icon: manualIcon, label: '관리자 매뉴얼', path: '' }, ]; -const navItemClass = cn( - 'typo-sub1 flex h-12 items-center gap-300 rounded-sm px-300 transition-colors', - 'text-text-alternative hover:bg-container-neutral-interaction', -); +function NavIcon({ src, isActive }: { src: StaticImageData | string; isActive: boolean }) { + const url = typeof src === 'string' ? src : (src as StaticImageData).src; + return ( + + ); +} + +const navItemClass = + 'typo-sub1 flex h-12 items-center gap-300 px-300 transition-colors text-text-alternative hover:bg-container-neutral-interaction'; export function LNB() { const pathname = usePathname(); return ( -
From 739ebb030d725b809e818169474514703a656034 Mon Sep 17 00:00:00 2001 From: JIN921 Date: Tue, 24 Feb 2026 23:29:27 +0900 Subject: [PATCH 6/7] =?UTF-8?q?style:=20LNB=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=BB=AC=EB=9F=AC=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/admin/layout/LNB.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/admin/layout/LNB.tsx b/src/components/admin/layout/LNB.tsx index 58f0c3d..2eecd55 100644 --- a/src/components/admin/layout/LNB.tsx +++ b/src/components/admin/layout/LNB.tsx @@ -1,7 +1,6 @@ 'use client'; import Link from 'next/link'; -import Image from 'next/image'; import type { StaticImageData } from 'next/image'; import { usePathname } from 'next/navigation'; @@ -23,7 +22,7 @@ const mainNavItems = [ ]; const moveNavItems = [ - { id: 'service', icon: arrowIcon, label: '서비스로 이동', path: 'https://weeth.kr' }, + { id: 'service', icon: arrowIcon, label: 'WEETH로 이동', path: 'https://weeth.kr' }, { id: 'manual', icon: manualIcon, @@ -61,8 +60,18 @@ export function LNB() { return (
diff --git a/src/components/admin/layout/LNB.tsx b/src/components/admin/layout/LNB.tsx index 2eecd55..46b39d5 100644 --- a/src/components/admin/layout/LNB.tsx +++ b/src/components/admin/layout/LNB.tsx @@ -38,7 +38,7 @@ function NavIcon({ src, isActive }: { src: StaticImageData | string; isActive: b aria-hidden className={cn( 'block h-6 w-6 shrink-0', - isActive ? 'bg-brand-primary' : 'bg-text-alternative', + isActive ? 'bg-button-primary' : 'bg-container-neutral-interaction', )} style={{ maskImage: `url(${url})`, @@ -60,7 +60,7 @@ export function LNB() { return (