fix: 공정실행 카드 표시 3건 수정
- 분할접수 카드 구분: 같은 공정 복수 SPLIT 시 "접수 #1", "접수 #2" 표시 - 재작업 카드 전공정 표시: is_rework='Y' 카드는 공정 필터 무시, 모든 공정에서 표시 - 대기/완료 탭: 선택한 공정 기준으로만 카드 표시 (기존 동작 확인) - DefectTypeModal: 전공정/지정공정 UI 이미 구현 확인 (수정 불필요)
This commit is contained in:
@@ -916,7 +916,9 @@ export function WorkOrderList() {
|
||||
const filteredProcesses = useMemo(() => {
|
||||
if (selectedProcess === "__all__") return []; // 공정 미선택 시 빈 목록
|
||||
return masterProcesses.filter((proc) => {
|
||||
if (proc.process_code !== selectedProcess) return false;
|
||||
const isRework = proc.is_rework === "Y" || proc.is_rework === "true" || proc.is_rework === "1";
|
||||
// 재작업 카드는 공정 필터 무시 (모든 공정에서 표시)
|
||||
if (!isRework && proc.process_code !== selectedProcess) return false;
|
||||
if (selectedEquipment !== "__all__") {
|
||||
const wi = instructionMap[proc.wo_id];
|
||||
if (!wi) return false;
|
||||
@@ -932,7 +934,9 @@ export function WorkOrderList() {
|
||||
/* ---- Tab counts ---- */
|
||||
const tabCounts = useMemo(() => {
|
||||
const preFiltered = masterProcesses.filter((proc) => {
|
||||
if (selectedProcess !== "__all__" && proc.process_code !== selectedProcess) return false;
|
||||
const isRework = proc.is_rework === "Y" || proc.is_rework === "true" || proc.is_rework === "1";
|
||||
// 재작업 카드는 공정 필터 무시 (모든 공정에서 표시)
|
||||
if (selectedProcess !== "__all__" && !isRework && proc.process_code !== selectedProcess) return false;
|
||||
if (selectedEquipment !== "__all__") {
|
||||
const wi = instructionMap[proc.wo_id];
|
||||
if (!wi) return false;
|
||||
@@ -1043,6 +1047,35 @@ export function WorkOrderList() {
|
||||
});
|
||||
};
|
||||
|
||||
/* ---- Helper: get split order label (접수 #N) ---- */
|
||||
const splitOrderMap = useMemo(() => {
|
||||
// 같은 wo_id + seq_no를 가진 SPLIT들을 그룹화하여 순서 부여
|
||||
const groups: Record<string, WorkOrderProcess[]> = {};
|
||||
for (const proc of allProcesses) {
|
||||
if (!proc.parent_process_id) continue; // 마스터 행은 제외
|
||||
if (proc.status !== "in_progress" && proc.status !== "completed") continue;
|
||||
const key = `${proc.wo_id}__${proc.seq_no}`;
|
||||
if (!groups[key]) groups[key] = [];
|
||||
groups[key].push(proc);
|
||||
}
|
||||
|
||||
const result: Record<string, { order: number; total: number }> = {};
|
||||
for (const key of Object.keys(groups)) {
|
||||
const splits = groups[key];
|
||||
if (splits.length <= 1) continue; // 1개면 순서 표시 불필요
|
||||
// accepted_at 기준 정렬 (없으면 started_at, 그마저 없으면 id)
|
||||
splits.sort((a, b) => {
|
||||
const ta = a.accepted_at ? new Date(a.accepted_at).getTime() : (a.started_at ? new Date(a.started_at).getTime() : 0);
|
||||
const tb = b.accepted_at ? new Date(b.accepted_at).getTime() : (b.started_at ? new Date(b.started_at).getTime() : 0);
|
||||
return ta - tb || a.id.localeCompare(b.id);
|
||||
});
|
||||
for (let i = 0; i < splits.length; i++) {
|
||||
result[splits[i].id] = { order: i + 1, total: splits.length };
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}, [allProcesses]);
|
||||
|
||||
/* ---- Helper: get previous process info ---- */
|
||||
const getPrevProcessInfo = (proc: WorkOrderProcess) => {
|
||||
const siblings = (processesByWo[proc.wo_id] || [])
|
||||
@@ -1244,6 +1277,9 @@ export function WorkOrderList() {
|
||||
// Additional available for in_progress
|
||||
const additionalAvailable = Math.max(0, planQty - inputQty);
|
||||
|
||||
// Split order label
|
||||
const splitInfo = splitOrderMap[proc.id];
|
||||
|
||||
// Rework info: origin process + rework round
|
||||
let reworkRound = 1;
|
||||
let originProcessName = proc.process_name || proc.process_code;
|
||||
@@ -1298,6 +1334,11 @@ export function WorkOrderList() {
|
||||
)}
|
||||
<h3 className="text-xl font-extrabold text-gray-900 truncate">
|
||||
{wi?.work_instruction_no || "작업지시"}
|
||||
{splitInfo && (
|
||||
<span className="text-sm font-bold text-blue-500 ml-1">
|
||||
(접수 #{splitInfo.order})
|
||||
</span>
|
||||
)}
|
||||
</h3>
|
||||
</div>
|
||||
<span className={`shrink-0 ml-2 text-sm font-bold px-3 py-1.5 rounded-full ${badge.bg} ${badge.text}`}>
|
||||
|
||||
Reference in New Issue
Block a user