# ERP 시스템 UI/UX 디자인 가이드 ## 📋 문서 목적 이 문서는 ERP 시스템의 새로운 페이지나 컴포넌트를 개발할 때 참고할 수 있는 **디자인 시스템 기준안**입니다. 일관된 사용자 경험을 위해 모든 개발자는 이 가이드를 따라 개발해주세요. --- ## 🎨 디자인 시스템 개요 ### 디자인 철학 - **일관성**: 모든 페이지에서 동일한 패턴 사용 - **명확성**: 직관적이고 이해하기 쉬운 UI - **접근성**: 모든 사용자가 쉽게 사용할 수 있도록 - **반응성**: 다양한 화면 크기에 대응 ### 기술 스택 - **CSS Framework**: Tailwind CSS - **UI Library**: shadcn/ui - **Icons**: Lucide React --- ## 📐 페이지 기본 구조 ### 1. 표준 페이지 레이아웃 ```tsx export default function YourPage() { return (
{/* 페이지 제목 */}

페이지 제목

페이지 설명

{/* 버튼들 */}
{/* 메인 컨텐츠 */} {/* 내용 */}
); } ``` ### 2. 구조 설명 #### 최상위 래퍼 ```tsx
``` - `min-h-screen`: 최소 높이를 화면 전체로 - `bg-gray-50`: 연한 회색 배경 (전체 페이지 기본 배경) #### 컨테이너 ```tsx
``` - `w-full max-w-none`: 전체 너비 사용 - `px-4`: 좌우 패딩 1rem (16px) - `py-8`: 상하 패딩 2rem (32px) - `space-y-8`: 하위 요소 간 수직 간격 2rem #### 헤더 카드 ```tsx

제목

설명

{/* 버튼들 */}
``` --- ## 🎯 컴포넌트 디자인 기준 ### 1. 버튼 #### 주요 버튼 (Primary) ```tsx ``` #### 보조 버튼 (Secondary) ```tsx ``` #### 위험 버튼 (Danger) ```tsx ``` ### 2. 카드 (Card) #### 기본 카드 ```tsx 카드 제목 {/* 내용 */} ``` #### 강조 카드 ```tsx 제목

내용

``` ### 3. 테이블 #### 기본 테이블 구조 ```tsx
컬럼명
데이터
``` ### 4. 폼 (Form) #### 입력 필드 ```tsx
``` #### 셀렉트 ```tsx ``` ### 5. 빈 상태 (Empty State) ```tsx

데이터가 없습니다

``` ### 6. 로딩 상태 ```tsx ``` --- ## 🎨 색상 시스템 ### 주 색상 (Primary) ```css orange-50 #fff7ed /* 매우 연한 배경 */ orange-100 #ffedd5 /* 연한 배경 */ orange-500 #f97316 /* 주요 버튼, 강조 */ orange-600 #ea580c /* 버튼 호버 */ ``` ### 회색 (Gray) ```css gray-50 #f9fafb /* 페이지 배경 */ gray-100 #f3f4f6 /* 카드 내부 구분 */ gray-200 #e5e7eb /* 테두리 */ gray-300 #d1d5db /* 입력 필드 테두리 */ gray-500 #6b7280 /* 보조 텍스트 */ gray-600 #4b5563 /* 일반 텍스트 */ gray-700 #374151 /* 라벨, 헤더 */ gray-800 #1f2937 /* 제목 */ gray-900 #111827 /* 주요 제목 */ ``` ### 상태 색상 ```css /* 성공 */ green-100 #dcfce7 green-500 #22c55e green-700 #15803d /* 경고 */ red-100 #fee2e2 red-500 #ef4444 red-600 #dc2626 /* 정보 */ blue-50 #eff6ff blue-100 #dbeafe blue-500 #3b82f6 ``` --- ## 📏 간격 시스템 ### Spacing Scale ```css space-y-2 0.5rem (8px) /* 폼 요소 간 간격 */ space-y-4 1rem (16px) /* 섹션 내부 간격 */ space-y-6 1.5rem (24px) /* 카드 내부 큰 간격 */ space-y-8 2rem (32px) /* 페이지 주요 섹션 간격 */ gap-2 0.5rem (8px) /* 버튼 그룹 간격 */ gap-4 1rem (16px) /* 카드 그리드 간격 */ gap-6 1.5rem (24px) /* 큰 카드 그리드 간격 */ ``` ### Padding ```css p-2 0.5rem (8px) /* 작은 요소 */ p-4 1rem (16px) /* 일반 요소 */ p-6 1.5rem (24px) /* 카드, 헤더 */ p-8 2rem (32px) /* 큰 영역 */ px-3 좌우 0.75rem /* 입력 필드 */ px-4 좌우 1rem /* 버튼 */ px-6 좌우 1.5rem /* 테이블 셀 */ py-2 상하 0.5rem /* 버튼 */ py-4 상하 1rem /* 입력 필드 */ py-8 상하 2rem /* 페이지 컨테이너 */ ``` --- ## 📝 타이포그래피 ### 제목 (Headings) ```css /* 페이지 제목 */ text-3xl font-bold text-gray-900 /* 예: 30px, Bold, #111827 */ /* 섹션 제목 */ text-2xl font-bold text-gray-900 /* 예: 24px, Bold */ /* 카드 제목 */ text-lg font-semibold text-gray-800 /* 예: 18px, Semi-bold */ /* 작은 제목 */ text-base font-medium text-gray-700 /* 예: 16px, Medium */ ``` ### 본문 (Body Text) ```css /* 일반 텍스트 */ text-sm text-gray-600 /* 14px, #4b5563 */ /* 보조 설명 */ text-sm text-gray-500 /* 14px, #6b7280 */ /* 라벨 */ text-sm font-medium text-gray-700 /* 14px, Medium */ ``` --- ## 🎭 인터랙션 패턴 ### 호버 효과 ```css /* 버튼 호버 */ hover:bg-orange-600 hover:shadow-md /* 카드 호버 */ hover:shadow-lg transition-shadow /* 테이블 행 호버 */ hover:bg-gradient-to-r hover:from-orange-50/80 hover:to-orange-100/60 ``` ### 포커스 효과 ```css /* 입력 필드 포커스 */ focus:outline-none focus:ring-2 focus:ring-orange-500 focus:border-orange-500 ``` ### 전환 효과 ```css /* 일반 전환 */ transition-all duration-200 /* 그림자 전환 */ transition-shadow /* 색상 전환 */ transition-colors duration-200 ``` --- ## 🔲 그리드 시스템 ### 반응형 그리드 ```tsx {/* 1열 → 2열 → 3열 */}
{/* 카드들 */}
{/* 1열 → 2열 */}
{/* 항목들 */}
``` ### 브레이크포인트 ```css sm: 640px @media (min-width: 640px) md: 768px @media (min-width: 768px) lg: 1024px @media (min-width: 1024px) xl: 1280px @media (min-width: 1280px) 2xl: 1536px @media (min-width: 1536px) ``` --- ## 🎯 실전 예제 ### 예제 1: 관리 페이지 (데이터 있음) ```tsx export default function ManagementPage() { const [data, setData] = useState([]); const [loading, setLoading] = useState(false); return (
{/* 헤더 */}

데이터 관리

시스템 데이터를 관리합니다

{/* 통계 카드 */}

총 개수

156

{/* 나머지 통계 카드들... */}
{/* 데이터 테이블 */} {data.map((item) => ( ))}
이름 상태 작업
{item.name} 활성
); } ``` ### 예제 2: 빈 상태 페이지 ```tsx export default function EmptyStatePage() { return (
{/* 헤더 */}

데이터 관리

시스템 데이터를 관리합니다

{/* 빈 상태 */}

아직 등록된 데이터가 없습니다

{/* 안내 정보 */} 데이터 관리 안내

💡 데이터를 추가하여 시스템을 사용해보세요!

  • 기능 설명 1
  • 기능 설명 2
); } ``` --- ## ✅ 체크리스트 ### 새 페이지 만들 때 - [ ] `min-h-screen bg-gray-50` 래퍼 사용 - [ ] 헤더 카드 (`bg-white rounded-lg shadow-sm border p-6`) 포함 - [ ] 제목은 `text-3xl font-bold text-gray-900` - [ ] 설명은 `mt-2 text-gray-600` - [ ] 주요 버튼은 `bg-orange-500 hover:bg-orange-600` - [ ] 카드는 `shadow-sm` 클래스 포함 - [ ] 간격은 `space-y-8` 사용 ### 새 컴포넌트 만들 때 - [ ] 일관된 패딩 사용 (`p-4`, `p-6`) - [ ] 호버 효과 추가 - [ ] 전환 애니메이션 적용 (`transition-all duration-200`) - [ ] 적절한 아이콘 사용 (Lucide React) - [ ] 반응형 디자인 고려 (`md:`, `lg:`) --- ## 📚 참고 자료 ### Tailwind CSS 공식 문서 - https://tailwindcss.com/docs ### shadcn/ui 컴포넌트 - https://ui.shadcn.com/ ### Lucide 아이콘 - https://lucide.dev/icons/ --- ## 📧 메일 관리 시스템 UI 개선사항 ### 최근 업데이트 (2025-01-02) #### 1. 메일 발송 페이지 헤더 개선 **변경 전:** ```tsx

메일 발송

설명

``` **변경 후 (표준 헤더 카드 적용):** ```tsx 메일 발송

템플릿을 선택하거나 직접 작성하여 메일을 발송하세요

``` **개선 사항:** - ✅ 불필요한 아이콘 제거 (종이비행기) - ✅ 표준 Card 컴포넌트 사용으로 통일감 향상 - ✅ 다른 페이지와 동일한 헤더 스타일 적용 #### 2. 메일 내용 입력 개선 **변경 전:** ```tsx