diff --git a/frontend/components/order/OrderItemRepeaterTable.tsx b/frontend/components/order/OrderItemRepeaterTable.tsx index dd38ee5a..dbfe5eee 100644 --- a/frontend/components/order/OrderItemRepeaterTable.tsx +++ b/frontend/components/order/OrderItemRepeaterTable.tsx @@ -75,6 +75,13 @@ const ORDER_COLUMNS: RepeaterColumnConfig[] = [ calculated: true, width: "120px", }, + { + field: "order_date", + label: "수주일", + type: "date", + editable: true, + width: "130px", + }, { field: "delivery_date", label: "납기일", diff --git a/frontend/lib/registry/components/modal-repeater-table/ModalRepeaterTableComponent.tsx b/frontend/lib/registry/components/modal-repeater-table/ModalRepeaterTableComponent.tsx index 56f04d26..6302e7f9 100644 --- a/frontend/lib/registry/components/modal-repeater-table/ModalRepeaterTableComponent.tsx +++ b/frontend/lib/registry/components/modal-repeater-table/ModalRepeaterTableComponent.tsx @@ -197,13 +197,6 @@ export function ModalRepeaterTableComponent({ // ✅ onChange 래퍼 (기존 onChange 콜백 + onFormDataChange 호출 + 납기일 일괄 적용) const handleChange = (newData: any[]) => { - console.log("🔄 ModalRepeaterTableComponent.handleChange 호출:", { - dataLength: newData.length, - columnName, - hasExternalOnChange: !!(componentConfig?.onChange || propOnChange), - hasOnFormDataChange: !!(onFormDataChange && columnName), - }); - // 🆕 납기일 일괄 적용 로직 (납기일 필드가 있는 경우만) let processedData = newData; @@ -229,22 +222,41 @@ export function ModalRepeaterTableComponent({ })); setIsDeliveryDateApplied(true); // 플래그 활성화 + } + } + + // 🆕 수주일 일괄 적용 로직 (order_date 필드가 있는 경우만) + const orderDateField = columns.find( + (col) => + col.field === "order_date" || + col.field === "ordered_date" + ); + + if (orderDateField && !isOrderDateApplied && newData.length > 0) { + // ⚠️ 중요: 원본 newData를 참조해야 납기일의 영향을 받지 않음 + const itemsWithOrderDate = newData.filter((item) => item[orderDateField.field]); + const itemsWithoutOrderDate = newData.filter((item) => !item[orderDateField.field]); + + // ✅ 조건: 모든 행이 비어있는 초기 상태 → 어느 행에서든 첫 선택 시 전체 적용 + if (itemsWithOrderDate.length === 1 && itemsWithoutOrderDate.length === newData.length - 1) { + const selectedOrderDate = itemsWithOrderDate[0][orderDateField.field]; + processedData = processedData.map((item) => ({ + ...item, + [orderDateField.field]: selectedOrderDate, + })); - console.log("✅ 납기일 일괄 적용 완료:", selectedDate); - console.log(` - 대상: ${itemsWithoutDate.length}개 행에 ${selectedDate} 적용`); + setIsOrderDateApplied(true); // 플래그 활성화 } } // 기존 onChange 콜백 호출 (호환성) const externalOnChange = componentConfig?.onChange || propOnChange; if (externalOnChange) { - console.log("📤 외부 onChange 호출"); externalOnChange(processedData); } // 🆕 onFormDataChange 호출하여 EditModal의 groupData 업데이트 if (onFormDataChange && columnName) { - console.log("📤 onFormDataChange 호출:", columnName); onFormDataChange(columnName, processedData); } }; @@ -261,6 +273,9 @@ export function ModalRepeaterTableComponent({ // 🆕 납기일 일괄 적용 플래그 (딱 한 번만 실행) const [isDeliveryDateApplied, setIsDeliveryDateApplied] = useState(false); + + // 🆕 수주일 일괄 적용 플래그 (딱 한 번만 실행) + const [isOrderDateApplied, setIsOrderDateApplied] = useState(false); // columns가 비어있으면 sourceColumns로부터 자동 생성 const columns = React.useMemo((): RepeaterColumnConfig[] => {