feat(WEB): DynamicItemForm 필드 타입 확장 및 컴포넌트 레지스트리 추가
- DynamicFieldRenderer에 신규 필드 타입 추가 (Currency, File, MultiSelect, Radio, Reference, Toggle, UnitValue, Computed) - DynamicTableSection 및 TableCellRenderer 추가 - 필드 프리셋 및 설정 구조 분리 - 컴포넌트 레지스트리 개발 도구 페이지 추가 - UniversalListPage 개선 - 근태관리 코드 정리 - 즐겨찾기 기능 및 동적 필드 타입 백엔드 스펙 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
112
src/components/items/DynamicItemForm/config/reference-sources.ts
Normal file
112
src/components/items/DynamicItemForm/config/reference-sources.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* Reference 필드 소스 프리셋
|
||||
*
|
||||
* ReferenceField가 properties.source 값을 키로 조회하여
|
||||
* API URL, 표시 필드, 검색 컬럼 등을 자동 결정
|
||||
*
|
||||
* 확장: 새 소스 추가 = 이 파일에 객체 1개 추가
|
||||
*/
|
||||
|
||||
import type { ReferenceSourcePreset } from '../types';
|
||||
|
||||
export const REFERENCE_SOURCES: Record<string, ReferenceSourcePreset> = {
|
||||
// ===== 공통 =====
|
||||
vendors: {
|
||||
apiUrl: '/api/proxy/vendors',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '거래처 코드', width: '120px' },
|
||||
{ key: 'name', label: '거래처명' },
|
||||
{ key: 'contact_person', label: '담당자', width: '100px' },
|
||||
],
|
||||
},
|
||||
items: {
|
||||
apiUrl: '/api/proxy/items',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '품목코드', width: '120px' },
|
||||
{ key: 'name', label: '품목명' },
|
||||
{ key: 'spec', label: '규격', width: '120px' },
|
||||
],
|
||||
},
|
||||
customers: {
|
||||
apiUrl: '/api/proxy/customers',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '고객 코드', width: '120px' },
|
||||
{ key: 'name', label: '고객명' },
|
||||
],
|
||||
},
|
||||
employees: {
|
||||
apiUrl: '/api/proxy/employees',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name'],
|
||||
columns: [
|
||||
{ key: 'name', label: '직원명' },
|
||||
{ key: 'department', label: '부서', width: '120px' },
|
||||
],
|
||||
},
|
||||
warehouses: {
|
||||
apiUrl: '/api/proxy/warehouses',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '창고코드', width: '120px' },
|
||||
{ key: 'name', label: '창고명' },
|
||||
],
|
||||
},
|
||||
|
||||
// ===== 제조 =====
|
||||
processes: {
|
||||
apiUrl: '/api/proxy/processes',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '공정코드', width: '120px' },
|
||||
{ key: 'name', label: '공정명' },
|
||||
],
|
||||
},
|
||||
equipment: {
|
||||
apiUrl: '/api/proxy/equipment',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'code'],
|
||||
columns: [
|
||||
{ key: 'code', label: '설비코드', width: '120px' },
|
||||
{ key: 'name', label: '설비명' },
|
||||
],
|
||||
},
|
||||
|
||||
// ===== 공사 =====
|
||||
sites: {
|
||||
apiUrl: '/api/proxy/construction-sites',
|
||||
displayField: 'name',
|
||||
valueField: 'id',
|
||||
searchFields: ['name', 'address'],
|
||||
columns: [
|
||||
{ key: 'name', label: '현장명' },
|
||||
{ key: 'address', label: '주소' },
|
||||
],
|
||||
},
|
||||
|
||||
// ===== 물류 =====
|
||||
vehicles: {
|
||||
apiUrl: '/api/proxy/vehicles',
|
||||
displayField: 'plate_number',
|
||||
valueField: 'id',
|
||||
searchFields: ['plate_number', 'driver_name'],
|
||||
columns: [
|
||||
{ key: 'plate_number', label: '차량번호', width: '120px' },
|
||||
{ key: 'driver_name', label: '기사명' },
|
||||
],
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user