# 거래처관리 화면 구현 가이드 > **화면명**: 거래처관리 > **파일**: 거래처관리.html > **분류**: 영업관리 > **구현 가능**: ⚠️ 부분 (그룹화 테이블 필요) --- ## 1. 화면 개요 고객사 및 공급업체 정보를 통합 관리하는 화면입니다. ### 핵심 기능 - 거래처 목록 조회/검색 - 그룹화 기능 (거래처유형, 지역별) - 거래처 등록/수정/삭제 - 거래처별 품목코드/단가 관리 - 담당자 정보 관리 --- ## 2. 화면 레이아웃 ``` ┌─────────────────────────────────────────────────────────────────┐ │ [거래처코드] [거래처명] [거래처유형▼] [사용여부▼] [초기화][조회] │ │ [사용자옵션][업로드][다운로드]│ ├───────────────────────┬─────────────────────────────────────────┤ │ 📋 거래처 목록 │ [기본정보][품목코드][단가정보][담당자] │ │ ───────────────── │ ───────────────────────────────────── │ │ Group by: [거래처유형▼] │ 거래처코드: C-001 │ │ ┌──────────────────┐ │ 거래처명: (주)테스트 │ │ │▼ 고객사 (15) │ │ 사업자번호: 123-45-67890 │ │ │ C-001 | A사 │ │ 대표자: 홍길동 │ │ │ C-002 | B사 │ ├─────────────────────────────────────────┤ │ │▼ 공급업체 (8) │ │ [품목코드 탭 내용] │ │ │ S-001 | 원자재사 │ │ ┌────────────────────────────────┐ │ │ └──────────────────┘ │ │거래처품목코드|품목명|자사품목코드│ │ │ │ │CP-001 |원료A |M-001 │ │ │ 리사이저 ↔ │ └────────────────────────────────┘ │ └───────────────────────┴─────────────────────────────────────────┘ ``` --- ## 3. V2 컴포넌트 매핑 | HTML 영역 | V2 컴포넌트 | 상태 | |-----------|-------------|------| | 검색 섹션 | `v2-table-search-widget` | ✅ 가능 | | 거래처 목록 (그룹화) | `v2-table-list` | ⚠️ 그룹화 미지원 | | 분할 패널 | `v2-split-panel-layout` | ✅ 가능 | | 상세 탭 | `v2-tabs-widget` | ✅ 가능 | --- ## 4. 테이블 정의 ### 4.1 거래처 목록 ```typescript columns: [ { id: 'checkbox', type: 'checkbox', width: 50 }, { id: 'customer_code', label: '거래처코드', width: 100 }, { id: 'customer_name', label: '거래처명', width: 200 }, { id: 'customer_type', label: '거래처유형', width: 100 }, { id: 'business_no', label: '사업자번호', width: 120 }, { id: 'ceo_name', label: '대표자', width: 100 }, { id: 'tel', label: '전화번호', width: 120 }, { id: 'status', label: '사용여부', width: 80 } ] ``` ### 4.2 품목코드 탭 ```typescript itemCodeColumns: [ { id: 'customer_item_code', label: '거래처품목코드', width: 150 }, { id: 'item_name', label: '품목명', width: 200 }, { id: 'our_item_code', label: '자사품목코드', width: 150 }, { id: 'spec', label: '규격', width: 150 } ] ``` ### 4.3 단가정보 탭 ```typescript priceColumns: [ { id: 'item_code', label: '품목코드', width: 120 }, { id: 'item_name', label: '품목명', width: 200 }, { id: 'unit_price', label: '단가', width: 100, format: 'currency' }, { id: 'currency', label: '통화', width: 60 }, { id: 'apply_date', label: '적용일', width: 100 }, { id: 'remark', label: '비고', width: 150 } ] ``` --- ## 5. 그룹화 기능 (신규 컴포넌트 필요) ### 5.1 그룹화 옵션 ```typescript groupByOptions: [ { id: 'customer_type', label: '거래처유형' }, { id: 'region', label: '지역' }, { id: 'status', label: '사용여부' } ] ``` ### 5.2 그룹 헤더 표시 ``` ▼ 고객사 (15) ← 그룹명 + 건수 │ C-001 │ (주)A사 │ ... │ C-002 │ (주)B사 │ ... ▼ 공급업체 (8) │ S-001 │ 원자재사 │ ... ``` ### 5.3 필요 인터랙션 - 그룹 접기/펼치기 - 그룹 전체 선택 체크박스 - 다중 그룹핑 (선택) --- ## 6. 탭 구성 ```typescript tabs: [ { id: 'basic', label: '기본정보', fields: [ { id: 'customer_code', label: '거래처코드' }, { id: 'customer_name', label: '거래처명' }, { id: 'customer_type', label: '거래처유형' }, { id: 'business_no', label: '사업자번호' }, { id: 'ceo_name', label: '대표자' }, { id: 'address', label: '주소' }, { id: 'tel', label: '전화번호' }, { id: 'fax', label: '팩스' }, { id: 'email', label: '이메일' } ] }, { id: 'item_codes', label: '품목코드', type: 'table', entityId: 'customer_item_mapping' }, { id: 'prices', label: '단가정보', type: 'table', entityId: 'customer_prices' }, { id: 'contacts', label: '담당자', type: 'table', entityId: 'customer_contacts' } ] ``` --- ## 7. 현재 구현 가능 범위 ### ✅ 가능 - 검색 영역 - 분할 패널 레이아웃 - 상세 탭 - 품목코드/단가/담당자 테이블 ### ⚠️ 부분 가능 - 거래처 목록: 그룹화 없이 일반 테이블로 구현 ### ❌ 불가능 - 동적 그룹화 (그룹 접기/펼치기) --- ## 8. 간소화 구현 JSON (그룹화 제외) ```json { "screen_code": "CUSTOMER_MAIN", "screen_name": "거래처관리", "components": [ { "type": "v2-table-search-widget", "config": { "searchFields": [ { "type": "input", "id": "customer_code", "placeholder": "거래처코드" }, { "type": "input", "id": "customer_name", "placeholder": "거래처명" }, { "type": "select", "id": "customer_type", "placeholder": "거래처유형", "options": [ { "value": "customer", "label": "고객사" }, { "value": "supplier", "label": "공급업체" }, { "value": "both", "label": "고객사/공급업체" } ] }, { "type": "select", "id": "status", "placeholder": "사용여부" } ] } }, { "type": "v2-split-panel-layout", "config": { "masterPanel": { "title": "거래처 목록", "entityId": "customer_master", "columns": [ { "id": "customer_code", "label": "거래처코드", "width": 100 }, { "id": "customer_name", "label": "거래처명", "width": 200 }, { "id": "customer_type", "label": "거래처유형", "width": 100 }, { "id": "ceo_name", "label": "대표자", "width": 100 } ] }, "detailPanel": { "tabs": [ { "id": "basic", "label": "기본정보", "type": "form" }, { "id": "items", "label": "품목코드", "type": "table", "entityId": "customer_items" }, { "id": "prices", "label": "단가정보", "type": "table", "entityId": "customer_prices" }, { "id": "contacts", "label": "담당자", "type": "table", "entityId": "customer_contacts" } ] } } } ] } ``` --- ## 9. v2-grouped-table 개발 시 추가 구현 ```typescript // 그룹화 테이블 설정 groupedTableConfig: { groupBy: 'customer_type', groupByOptions: ['customer_type', 'region', 'status'], showGroupCount: true, expandAll: false, groupCheckbox: true } ``` **예상 재활용**: `v2-grouped-table`은 5개 이상 화면에서 사용 가능 - 거래처관리, 품목정보, 작업지시, 입출고관리, 견적관리