feat: [생산/출하] 작업자 화면 step 서버 토글 + 출하 수주 조인 연동

- WorkerScreen: stepProgressId 있는 모든 step을 서버 토글 API 호출하도록 변경
  (기존: click_complete 타입만 서버 호출, 나머지 로컬 토글)
- ShipmentManagement actions: order_info에서 receiver/receiver_contact 우선 참조
  - OrderInfoApiData 타입 확장 (receiver, receiver_contact, delivery_address_detail, delivery_method)
  - 목록/상세 모두 수주 조인 데이터 우선, 출하 직접 필드 fallback
This commit is contained in:
2026-03-12 01:32:43 +09:00
parent 92b5a4a097
commit b7f7aad2fd
2 changed files with 11 additions and 7 deletions

View File

@@ -49,8 +49,12 @@ interface OrderInfoApiData {
customer_name?: string;
site_name?: string;
delivery_address?: string;
delivery_address_detail?: string;
contact?: string;
receiver?: string;
receiver_contact?: string;
delivery_date?: string;
delivery_method?: string;
writer_id?: number;
writer_name?: string;
}
@@ -160,8 +164,8 @@ function transformApiToListItem(data: ShipmentApiData): ShipmentItem {
depositConfirmed: data.deposit_confirmed,
invoiceIssued: data.invoice_issued,
deliveryTime: data.vehicle_dispatches?.[0]?.arrival_datetime || data.expected_arrival,
// 수신/작성자/출고일 매핑
receiver: data.receiver || '',
// 수신/작성자/출고일 매핑 (order_info 우선 → 출하 직접 필드 fallback)
receiver: data.order_info?.receiver || data.receiver || '',
receiverAddress: data.order_info?.delivery_address || data.delivery_address || '',
receiverCompany: data.order_info?.customer_name || data.customer_name || '',
writer: data.order_info?.writer_name || data.creator?.name || '',
@@ -207,8 +211,8 @@ function transformApiToDetail(data: ShipmentApiData): ShipmentDetail {
customerName: data.order_info?.customer_name || data.customer_name || '',
siteName: data.order_info?.site_name || data.site_name || '',
deliveryAddress: data.order_info?.delivery_address || data.delivery_address || '',
receiver: data.receiver,
receiverContact: data.order_info?.contact || data.receiver_contact,
receiver: data.order_info?.receiver || data.receiver,
receiverContact: data.order_info?.receiver_contact || data.order_info?.contact || data.receiver_contact,
zipCode: (data as unknown as Record<string, unknown>).zip_code as string | undefined,
address: (data as unknown as Record<string, unknown>).address as string | undefined,
addressDetail: (data as unknown as Record<string, unknown>).address_detail as string | undefined,

View File

@@ -864,8 +864,8 @@ export default function WorkerScreen() {
} else if (step.needsInspection || step.isInspection) {
// 검사 단계 (processListCache 설정 또는 하드코딩 폴백) → 중간검사 모달 열기
handleInspectionClick(itemId, step.name);
} else if (step.completionType === 'click_complete' && step.stepProgressId) {
// 클릭 시 완료 → 서버 토글 API 호출
} else if (step.stepProgressId) {
// stepProgressId가 있으면 서버 토글 API 호출 (모든 일반 step 포함)
const workItem = workItems.find((item) => item.id === itemId);
const orderId = workItem?.workOrderId;
if (orderId) {
@@ -887,7 +887,7 @@ export default function WorkerScreen() {
}
}
} else {
// 기타 → 완료/미완료 토글 (로컬) - enrichStep stepKey 형식 일치
// stepProgressId 없는 경우 → 로컬 토글 (폴백)
const stepKey = `${itemId.replace('-node-', '-')}-${step.name}`;
setStepCompletionMap((prev) => ({
...prev,