Expand lock guard to 7 companies (COMPANY_8/9/10/16/28/29/31)
Apply the same Layer 3 pattern as COMPANY_7 (commit 47170444) to the
remaining work-instruction screens. Backend Layer 1/2 (workInstructionController
is_locked + save guard) is shared, so frontend mapping is the only change needed.
Per company:
- SelectedItem interface: add detailId? + locked? fields
- relatedDetails.map: add detailId: d.detail_id, locked: d.is_locked === true
COMPANY_30 already had this mapping (mhkim work survived the merge there),
so it is excluded from this commit.
Verification: frontend tsc on changed files → 0 errors.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -458,6 +461,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -462,6 +465,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -458,6 +461,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -458,6 +461,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -471,6 +474,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -69,6 +69,9 @@ interface SelectedItem {
|
||||
// 기준수(BOM 0레벨 base_qty) / 배치수(자동) / 배분(균등|순차)
|
||||
baseQty?: number | null;
|
||||
splitMode?: "even" | "sequential";
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 배치수 산출: baseQty>0 && qty>baseQty면 ceil(qty/baseQty), 아니면 1
|
||||
@@ -458,6 +461,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
@@ -66,6 +66,9 @@ interface SelectedItem {
|
||||
equipmentIds?: string[];
|
||||
workTeams?: string[];
|
||||
workers?: string[];
|
||||
// 수정 모드: 기존 detail row 식별 + 잠금 상태
|
||||
detailId?: string;
|
||||
locked?: boolean;
|
||||
}
|
||||
|
||||
// 공용 다중선택 Popover 컴포넌트 (설비/작업조/작업자에 재사용)
|
||||
@@ -420,6 +423,9 @@ export default function WorkInstructionPage() {
|
||||
equipmentIds: (d.detail_equipment_ids || "").split(",").filter(Boolean),
|
||||
workTeams: (d.detail_work_teams || "").split(",").filter(Boolean),
|
||||
workers: (d.detail_workers || "").split(",").filter(Boolean),
|
||||
// 잠금 상태 (생산실적 있음) + 기존 detail row 식별자
|
||||
detailId: d.detail_id,
|
||||
locked: d.is_locked === true,
|
||||
}));
|
||||
setEditItems(items);
|
||||
setAddQty(""); setAddEquipment(""); setAddWorkTeam(""); setAddWorker("");
|
||||
|
||||
Reference in New Issue
Block a user