feat(WEB): 부실채권, 재고, 입고, 수주 UI 개선

- BadDebtCollection 액션/타입 리팩토링
- ReceivingProcessDialog 입고처리 개선
- StockStatusList 재고현황 UI 개선
- OrderSalesDetailView 수주 상세 수정
- UniversalListPage 범용 리스트 개선
- production-order 페이지 수정
This commit is contained in:
2026-01-23 21:32:24 +09:00
parent 9fb5c171eb
commit a0343eec93
12 changed files with 315 additions and 251 deletions

View File

@@ -350,7 +350,7 @@ export function OrderSalesDetailView({ orderId }: OrderSalesDetailViewProps) {
<InfoItem label="수주일자" value={order.orderDate} />
<InfoItem label="출고예정일" value={order.expectedShipDate || "미정"} />
<InfoItem label="납품요청일" value={order.deliveryRequestDate} />
<InfoItem label="배송방식" value={order.deliveryMethod} />
<InfoItem label="배송방식" value={order.deliveryMethodLabel} />
<InfoItem label="운임비용" value={order.shippingCost} />
<InfoItem label="수신(반장/업체)" value={order.receiver} />
<InfoItem label="수신처 연락처" value={order.receiverContact} />
@@ -485,7 +485,7 @@ export function OrderSalesDetailView({ orderId }: OrderSalesDetailViewProps) {
managerContact: order.contact,
deliveryRequestDate: order.deliveryRequestDate,
expectedShipDate: order.expectedShipDate,
deliveryMethod: order.deliveryMethod,
deliveryMethod: order.deliveryMethodLabel,
address: order.address,
items: order.items,
subtotal: order.subtotal,

View File

@@ -26,6 +26,7 @@ interface ApiOrder {
discount_amount: number;
delivery_date: string | null;
delivery_method_code: string | null;
delivery_method_label?: string; // API에서 조회한 배송방식 라벨
received_at: string | null;
memo: string | null;
remarks: string | null;
@@ -219,6 +220,7 @@ export interface Order {
statusCode: string; // 원본 status_code
expectedShipDate?: string; // delivery_date
deliveryMethod?: string; // delivery_method_code
deliveryMethodLabel?: string; // 배송방식 라벨 (API에서 조회)
amount: number; // total_amount
supplyAmount: number;
taxAmount: number;
@@ -334,6 +336,7 @@ export interface CreateProductionOrderData {
processIds?: number[]; // 공정별 다중 작업지시 생성용
priority?: 'urgent' | 'high' | 'normal' | 'low';
assigneeId?: number;
assigneeIds?: number[]; // 다중 담당자 선택용
teamId?: number;
scheduledDate?: string;
memo?: string;
@@ -444,6 +447,7 @@ function transformApiToFrontend(apiData: ApiOrder): Order {
statusCode: apiData.status_code,
expectedShipDate: apiData.delivery_date ?? undefined,
deliveryMethod: apiData.delivery_method_code ?? undefined,
deliveryMethodLabel: apiData.delivery_method_label ?? apiData.delivery_method_code ?? undefined,
amount: apiData.total_amount,
supplyAmount: apiData.supply_amount,
taxAmount: apiData.tax_amount,
@@ -1046,7 +1050,12 @@ export async function createProductionOrder(
apiData.process_id = data.processId;
}
if (data?.priority) apiData.priority = data.priority;
if (data?.assigneeId) apiData.assignee_id = data.assigneeId;
// 다중 담당자 ID (우선) 또는 단일 담당자 ID
if (data?.assigneeIds && data.assigneeIds.length > 0) {
apiData.assignee_ids = data.assigneeIds;
} else if (data?.assigneeId) {
apiData.assignee_id = data.assigneeId;
}
if (data?.teamId) apiData.team_id = data.teamId;
if (data?.scheduledDate) apiData.scheduled_date = data.scheduledDate;
if (data?.memo) apiData.memo = data.memo;