feat(WEB): 공정관리/작업지시/작업자화면 기능 강화 및 템플릿 개선

- 공정관리: ProcessDetail/ProcessForm/ProcessList 개선, StepDetail/StepForm 신규 추가
- 작업지시: WorkOrderDetail/Edit/List UI 개선, 작업지시서 문서 추가
- 작업자화면: WorkerScreen 대폭 개선, MaterialInputModal/WorkLogModal 수정, WorkItemCard 신규
- 영업주문: 주문 상세 페이지 개선
- 입고관리: 상세/actions 수정
- 템플릿: IntegratedDetailTemplate/IntegratedListTemplateV2/UniversalListPage 기능 확장
- UI: confirm-dialog 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-29 22:56:01 +09:00
parent 106ce09482
commit 3fc63d0b3e
50 changed files with 5801 additions and 1377 deletions

View File

@@ -471,7 +471,7 @@ export function OrderRegistration({
</div>
<div className="space-y-2">
<Label></Label>
<Label></Label>
<Input
value=""
disabled

View File

@@ -383,7 +383,7 @@ export function OrderSalesDetailEdit({ orderId }: OrderSalesDetailEditProps) {
<p className="font-medium">{form.lotNumber}</p>
</div>
<div className="space-y-1">
<Label className="text-muted-foreground text-sm"></Label>
<Label className="text-muted-foreground text-sm"></Label>
<p className="font-medium">{form.orderDate || "-"}</p>
</div>
<div className="space-y-1">

View File

@@ -346,6 +346,7 @@ export interface CreateProductionOrderData {
assigneeId?: number;
assigneeIds?: number[]; // 다중 담당자 선택용
teamId?: number;
departmentId?: number; // 부서 ID
scheduledDate?: string;
memo?: string;
}
@@ -1072,6 +1073,7 @@ export async function createProductionOrder(
apiData.assignee_id = data.assigneeId;
}
if (data?.teamId) apiData.team_id = data.teamId;
if (data?.departmentId) apiData.department_id = data.departmentId;
if (data?.scheduledDate) apiData.scheduled_date = data.scheduledDate;
if (data?.memo) apiData.memo = data.memo;

View File

@@ -161,29 +161,21 @@ export function SalesOrderDocument({
</table>
</div>
{/* 로트번호 / 인정번호 */}
<div className="flex justify-end gap-8 mb-3 text-[10px]">
<div className="flex items-center gap-2 border border-gray-400 px-3 py-1">
<span className="bg-gray-100 px-2 py-0.5 font-medium"></span>
<span>{orderNumber}</span>
</div>
<div className="flex items-center gap-2 border border-gray-400 px-3 py-1">
<span className="bg-gray-100 px-2 py-0.5 font-medium"></span>
<span>{certificationNumber}</span>
</div>
</div>
{/* 상품명/제품명 라인 */}
<div className="flex gap-4 mb-3 text-[10px]">
<div className="flex items-center gap-2">
<span className="font-medium"></span>
<span>{products[0]?.productCategory || "screen"}</span>
</div>
<div className="flex items-center gap-2">
<span className="font-medium"></span>
<span>{products[0]?.productName || "-"}</span>
</div>
</div>
{/* 상품명 / 제품명 / 로트번호 / 인정번호 */}
<table className="border border-gray-400 w-full mb-3 text-[10px]">
<tbody>
<tr>
<td className="bg-gray-100 px-2 py-1 font-medium border-r border-gray-400 whitespace-nowrap"></td>
<td className="px-2 py-1 border-r border-gray-400">{products[0]?.productCategory || "-"}</td>
<td className="bg-gray-100 px-2 py-1 font-medium border-r border-gray-400 whitespace-nowrap"></td>
<td className="px-2 py-1 border-r border-gray-400">{products[0]?.productName || "-"}</td>
<td className="bg-gray-100 px-2 py-1 font-medium border-r border-gray-400 whitespace-nowrap"></td>
<td className="px-2 py-1 border-r border-gray-400">{orderNumber}</td>
<td className="bg-gray-100 px-2 py-1 font-medium border-r border-gray-400 whitespace-nowrap"></td>
<td className="px-2 py-1">{certificationNumber}</td>
</tr>
</tbody>
</table>
{/* 3열 섹션: 신청업체 | 신청내용 | 납품정보 */}
<div className="border border-gray-400 mb-4">