9decf13068
- Added shipping plan routes and controller to handle aggregate and batch save operations. - Introduced a new shipping plan editor component for bulk registration of shipping plans based on selected orders. - Enhanced API client functions for fetching aggregated shipping plan data and saving plans in bulk. - Updated the registry to include the new shipping plan editor component, improving the overall shipping management workflow. These changes aim to streamline the shipping plan process, allowing for efficient management and registration of shipping plans in the application.
185 lines
7.9 KiB
TypeScript
185 lines
7.9 KiB
TypeScript
"use client";
|
|
|
|
import { ComponentRegistry } from "../ComponentRegistry";
|
|
import { initializeHotReload } from "../utils/hotReload";
|
|
|
|
/**
|
|
* 컴포넌트 시스템 초기화
|
|
* 모든 컴포넌트를 자동으로 로드하고 등록합니다
|
|
*/
|
|
|
|
// 컴포넌트 자동 디스커버리 및 로드
|
|
// 현재는 수동 import 방식 사용 (향후 자동 디스커버리로 확장 예정)
|
|
|
|
/**
|
|
* 새 구조 컴포넌트들 (자동 등록)
|
|
* CLI로 생성된 컴포넌트들은 여기에 import만 추가하면 자동으로 등록됩니다
|
|
*/
|
|
|
|
// 기본 입력 컴포넌트들 (v2 버전 없음 - 유지)
|
|
import "./text-input/TextInputRenderer";
|
|
import "./textarea-basic/TextareaBasicRenderer";
|
|
import "./number-input/NumberInputRenderer";
|
|
import "./select-basic/SelectBasicRenderer";
|
|
import "./checkbox-basic/CheckboxBasicRenderer";
|
|
import "./radio-basic/RadioBasicRenderer";
|
|
import "./date-input/DateInputRenderer";
|
|
import "./file-upload/FileUploadRenderer";
|
|
import "./image-widget/ImageWidgetRenderer";
|
|
import "./slider-basic/SliderBasicRenderer";
|
|
import "./toggle-switch/ToggleSwitchRenderer";
|
|
import "./image-display/ImageDisplayRenderer";
|
|
import "./accordion-basic/AccordionBasicRenderer"; // 컴포넌트 패널에서만 숨김
|
|
import "./split-panel-layout2/SplitPanelLayout2Renderer"; // 분할 패널 레이아웃 v2
|
|
import "./map/MapRenderer";
|
|
import "./repeater-field-group/RepeaterFieldGroupRenderer";
|
|
import "./flow-widget/FlowWidgetRenderer";
|
|
import "./category-manager/CategoryManagerRenderer";
|
|
import "./customer-item-mapping/CustomerItemMappingRenderer"; // 거래처별 품목정보
|
|
|
|
// 수주 등록 관련 컴포넌트들 (v2 버전 없음 - 유지)
|
|
import "./autocomplete-search-input/AutocompleteSearchInputRenderer";
|
|
import "./entity-search-input/EntitySearchInputRenderer";
|
|
import "./modal-repeater-table/ModalRepeaterTableRenderer";
|
|
import "./simple-repeater-table/SimpleRepeaterTableRenderer"; // 단순 반복 테이블
|
|
|
|
// 조건부 컨테이너 컴포넌트
|
|
import "./conditional-container/ConditionalContainerRenderer"; // 컴포넌트 패널에서만 숨김
|
|
import "./selected-items-detail-input/SelectedItemsDetailInputRenderer";
|
|
|
|
// 화면 임베딩 및 분할 패널 컴포넌트
|
|
import "./screen-split-panel/ScreenSplitPanelRenderer"; // 화면 분할 패널 (좌우 화면 임베딩 + 데이터 전달)
|
|
|
|
// 범용 폼 모달 컴포넌트
|
|
import "./universal-form-modal/UniversalFormModalRenderer"; // 컴포넌트 패널에서만 숨김
|
|
|
|
// 세금계산서 관리 컴포넌트
|
|
import "./tax-invoice-list/TaxInvoiceListRenderer"; // 세금계산서 목록, 작성, 발행, 취소
|
|
|
|
// 메일 수신자 선택 컴포넌트
|
|
import "./mail-recipient-selector/MailRecipientSelectorRenderer"; // 내부 인원 선택 + 외부 이메일 입력
|
|
|
|
// 연관 데이터 버튼 컴포넌트
|
|
import "./related-data-buttons/RelatedDataButtonsRenderer"; // 좌측 선택 데이터 기반 연관 테이블 버튼 표시
|
|
|
|
// ============================================================
|
|
// 기존 컴포넌트들 (기존 화면 호환성 유지)
|
|
// V2 버전도 별도로 존재하지만, 기존 화면은 이 컴포넌트들을 사용
|
|
// ============================================================
|
|
import "./button-primary/ButtonPrimaryRenderer";
|
|
import "./text-display/TextDisplayRenderer";
|
|
import "./divider-line/DividerLineRenderer";
|
|
import "./table-list/TableListRenderer";
|
|
import "./card-display/CardDisplayRenderer";
|
|
import "./split-panel-layout/SplitPanelLayoutRenderer";
|
|
import "./numbering-rule/NumberingRuleRenderer";
|
|
import "./table-search-widget";
|
|
import "./repeat-screen-modal/RepeatScreenModalRenderer";
|
|
import "./section-paper/SectionPaperRenderer";
|
|
import "./section-card/SectionCardRenderer";
|
|
import "./tabs/tabs-component";
|
|
import "./location-swap-selector/LocationSwapSelectorRenderer";
|
|
import "./rack-structure/RackStructureRenderer";
|
|
import "./pivot-grid/PivotGridRenderer";
|
|
import "./aggregation-widget/AggregationWidgetRenderer";
|
|
import "./repeat-container/RepeatContainerRenderer";
|
|
|
|
// ============================================================
|
|
// V2 컴포넌트들 (화면관리 전용 - 충돌 방지용 별도 버전)
|
|
// ============================================================
|
|
import "./v2-repeater/V2RepeaterRenderer";
|
|
import "./v2-button-primary/ButtonPrimaryRenderer";
|
|
import "./v2-split-panel-layout/SplitPanelLayoutRenderer";
|
|
import "./v2-aggregation-widget/AggregationWidgetRenderer";
|
|
import "./v2-card-display/CardDisplayRenderer";
|
|
import "./v2-numbering-rule/NumberingRuleRenderer";
|
|
import "./v2-table-list/TableListRenderer";
|
|
import "./v2-text-display/TextDisplayRenderer";
|
|
import "./v2-pivot-grid/PivotGridRenderer";
|
|
import "./v2-divider-line/DividerLineRenderer";
|
|
import "./v2-repeat-container/RepeatContainerRenderer";
|
|
import "./v2-section-card/SectionCardRenderer";
|
|
import "./v2-section-paper/SectionPaperRenderer";
|
|
import "./v2-rack-structure/RackStructureRenderer";
|
|
import "./v2-location-swap-selector/LocationSwapSelectorRenderer";
|
|
import "./v2-table-search-widget";
|
|
import "./v2-tabs-widget/tabs-component";
|
|
import "./v2-category-manager/V2CategoryManagerRenderer";
|
|
import "./v2-media/V2MediaRenderer"; // V2 통합 미디어 컴포넌트
|
|
import "./v2-table-grouped/TableGroupedRenderer"; // 그룹화 테이블
|
|
import "./v2-timeline-scheduler/TimelineSchedulerRenderer"; // 타임라인 스케줄러
|
|
import "./v2-input/V2InputRenderer"; // V2 통합 입력 컴포넌트
|
|
import "./v2-select/V2SelectRenderer"; // V2 통합 선택 컴포넌트
|
|
import "./v2-date/V2DateRenderer"; // V2 통합 날짜 컴포넌트
|
|
import "./v2-file-upload/V2FileUploadRenderer"; // V2 파일 업로드 컴포넌트
|
|
import "./v2-split-line/SplitLineRenderer"; // V2 캔버스 분할선
|
|
import "./v2-bom-tree/BomTreeRenderer"; // BOM 트리 뷰
|
|
import "./v2-bom-item-editor/BomItemEditorRenderer"; // BOM 하위품목 편집기
|
|
import "./v2-approval-step/ApprovalStepRenderer"; // 결재 단계 시각화
|
|
import "./v2-status-count/StatusCountRenderer"; // 상태별 카운트 카드
|
|
import "./v2-process-work-standard/ProcessWorkStandardRenderer"; // 공정 작업기준
|
|
import "./v2-item-routing/ItemRoutingRenderer"; // 품목별 라우팅
|
|
import "./v2-shipping-plan-editor/ShippingPlanEditorRenderer"; // 출하계획 동시등록
|
|
|
|
/**
|
|
* 컴포넌트 초기화 함수
|
|
*/
|
|
export async function initializeComponents() {
|
|
try {
|
|
// 1. 자동 등록된 컴포넌트 확인
|
|
const registeredComponents = ComponentRegistry.getAllComponents();
|
|
|
|
// 2. 카테고리별 통계
|
|
const stats = ComponentRegistry.getStats();
|
|
|
|
// 3. 개발 모드에서 디버그 정보 출력
|
|
if (process.env.NODE_ENV === "development") {
|
|
ComponentRegistry.debug();
|
|
|
|
// 4. Hot Reload 시스템 초기화
|
|
initializeHotReload();
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
totalComponents: registeredComponents.length,
|
|
stats,
|
|
};
|
|
} catch (error) {
|
|
console.error("❌ 컴포넌트 시스템 초기화 실패:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 컴포넌트 시스템 상태 확인
|
|
*/
|
|
export function getComponentSystemStatus() {
|
|
return {
|
|
isInitialized: ComponentRegistry.getComponentCount() > 0,
|
|
componentCount: ComponentRegistry.getComponentCount(),
|
|
categories: ComponentRegistry.getStats().byCategory,
|
|
lastInitialized: new Date(),
|
|
};
|
|
}
|
|
|
|
// 즉시 초기화 실행 (브라우저 환경에서만)
|
|
if (typeof window !== "undefined") {
|
|
// DOM이 로드된 후 초기화
|
|
if (document.readyState === "loading") {
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
initializeComponents();
|
|
});
|
|
} else {
|
|
// 이미 로드된 경우 즉시 실행
|
|
setTimeout(initializeComponents, 0);
|
|
}
|
|
}
|
|
|
|
// 개발 모드에서 Hot Reload 지원
|
|
if (process.env.NODE_ENV === "development" && typeof window !== "undefined") {
|
|
// 전역 함수로 등록하여 개발자가 브라우저에서 직접 호출 가능
|
|
(window as any).__INIT_COMPONENTS__ = initializeComponents;
|
|
(window as any).__COMPONENT_STATUS__ = getComponentSystemStatus;
|
|
}
|