feat(work-orders): 다중 담당자 UI 구현

- actions.ts: createWorkOrder에 assigneeIds 배열 파라미터 추가
- actions.ts: assignWorkOrder가 단일/배열 모두 지원하도록 변경
- WorkOrderCreate.tsx: assigneeIds 배열로 API 전송
- WorkOrderDetail.tsx: 다중 담당자 표시 (쉼표 구분)
This commit is contained in:
2026-01-09 15:51:36 +09:00
parent 8172226d89
commit d15a2037d7
3 changed files with 23 additions and 7 deletions

View File

@@ -151,7 +151,7 @@ export function WorkOrderCreate() {
projectName: formData.projectName,
processType: formData.processType,
scheduledDate: formData.shipmentDate,
assigneeId: formData.assignees.length > 0 ? parseInt(formData.assignees[0]) : undefined,
assigneeIds: formData.assignees.map(id => parseInt(id)),
memo: formData.note || undefined,
});

View File

@@ -275,7 +275,9 @@ export function WorkOrderDetail({ orderId }: WorkOrderDetailProps) {
quantity: order.items.reduce((sum, item) => sum + item.quantity, 0),
progress: order.currentStep * 20, // 대략적인 진행률
process: order.processType as 'screen' | 'slat' | 'bending',
assignees: [order.assignee],
assignees: order.assignees && order.assignees.length > 0
? order.assignees.map(a => a.name)
: [order.assignee],
instruction: order.note || '',
status: 'in_progress' as const,
priority: order.priority <= 3 ? 'high' : order.priority <= 6 ? 'medium' : 'low',
@@ -364,7 +366,11 @@ export function WorkOrderDetail({ orderId }: WorkOrderDetailProps) {
</div>
<div>
<p className="text-sm text-muted-foreground mb-1"></p>
<p className="font-medium">{order.assignee}</p>
<p className="font-medium">
{order.assignees && order.assignees.length > 0
? order.assignees.map(a => a.name).join(', ')
: order.assignee}
</p>
</div>
</div>
</div>

View File

@@ -220,15 +220,23 @@ export async function getWorkOrderById(id: string): Promise<{
export async function createWorkOrder(
data: Partial<WorkOrder> & {
salesOrderId?: number;
assigneeId?: number;
assigneeId?: number; // 단일 담당자 (하위 호환)
assigneeIds?: number[]; // 다중 담당자
teamId?: number;
}
): Promise<{ success: boolean; data?: WorkOrder; error?: string }> {
try {
// 다중 담당자 우선, 없으면 단일 담당자 배열로 변환
const assigneeIds = data.assigneeIds && data.assigneeIds.length > 0
? data.assigneeIds
: data.assigneeId
? [data.assigneeId]
: undefined;
const apiData = {
...transformFrontendToApi(data),
sales_order_id: data.salesOrderId,
assignee_id: data.assigneeId,
assignee_ids: assigneeIds, // 배열로 전송
team_id: data.teamId,
};
@@ -384,11 +392,13 @@ export async function updateWorkOrderStatus(
// ===== 담당자 배정 =====
export async function assignWorkOrder(
id: string,
assigneeId: number,
assigneeIds: number | number[], // 단일 또는 다중 담당자
teamId?: number
): Promise<{ success: boolean; data?: WorkOrder; error?: string }> {
try {
const body: { assignee_id: number; team_id?: number } = { assignee_id: assigneeId };
// 배열로 통일
const ids = Array.isArray(assigneeIds) ? assigneeIds : [assigneeIds];
const body: { assignee_ids: number[]; team_id?: number } = { assignee_ids: ids };
if (teamId) body.team_id = teamId;
console.log('[WorkOrderActions] PATCH assign request:', body);