From b088918cd93a20ac211865e6ddda61bacf4d752b Mon Sep 17 00:00:00 2001 From: jangwoong Date: Tue, 13 Oct 2026 14:05:44 +0900 Subject: [PATCH] =?UTF-8?q?[as=20elapr]=20=EC=A0=84=EC=9E=90=EA=B2=B0?= =?UTF-8?q?=EC=9E=AC=20forkjoin=20=ED=86=B5=ED=95=A9=20=EA=B0=9C=EB=B0=9C?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EC=B6=94=EA=B0=80=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=20=ED=95=AD=EB=AA=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elapr/lib/prgrs-stts-save-utils.ts | 23 +++++++++++++++++-- .../entities/elapr/lib/use-prgrs-stts-rows.ts | 3 +++ .../elapr/ui/elapr-approval-dialog.tsx | 6 ++--- .../ui/elapr-doc-prgrs-forkjoin-step.tsx | 6 ++--- apps/as/src/shared/model/pbadms-sprt.ts | 3 +++ 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/apps/as/src/entities/elapr/lib/prgrs-stts-save-utils.ts b/apps/as/src/entities/elapr/lib/prgrs-stts-save-utils.ts index 6ea409344..94c86d3f5 100644 --- a/apps/as/src/entities/elapr/lib/prgrs-stts-save-utils.ts +++ b/apps/as/src/entities/elapr/lib/prgrs-stts-save-utils.ts @@ -13,6 +13,8 @@ export interface PrgrsSttsServerRow { atrzSeComCd?: string; atrzSeqNo?: number; dcarbYn?: string; + branchId?: string; + branchSeCd?: string; } /** 결재선 그리드 로컬 행 — 진행상태 API 응답 + UI 보조 필드 */ @@ -20,6 +22,9 @@ export interface ElaprPrgrsSttsRow { rowKey: string; elaprPrgrsId?: string; elaprDmndId?: string; + branchId?: string; + branchSeCd?: string; + branchNm?: string; aprvrUuid?: string; aprvrNm?: string; atrzSeComCd?: string; @@ -52,8 +57,22 @@ function getVisibleRows(rows: ElaprPrgrsSttsRow[]): ElaprPrgrsSttsRow[] { return rows.filter((row) => !row.isDeleted); } -/** 그리드 행 순서(1-based)로 결재순서번호 일괄 채번 */ +/** 그리드 행 순서(1-based)로 결재순서번호 채번 (브랜치가 분기된 Fork-Join의 경우 각 브랜치별 독립 순번 채번) */ export function assignPrgrsSttsAtrzSeqNumbers(rows: ElaprPrgrsSttsRow[]): ElaprPrgrsSttsRow[] { + const branchKeys = new Set(rows.map((r) => r.branchId || r.branchSeCd).filter(Boolean)); + if (branchKeys.size > 1) { + const branchCounters = new Map(); + return rows.map((row) => { + const key = row.branchId || row.branchSeCd; + if (key) { + const current = (branchCounters.get(key) ?? 0) + 1; + branchCounters.set(key, current); + return { ...row, atrzSeqNo: current }; + } + return row; + }); + } + return rows.map((row, index) => ({ ...row, atrzSeqNo: index + 1 })); } @@ -92,7 +111,7 @@ function rowDiffersFromServer(row: ElaprPrgrsSttsRow, serverRow: PrgrsSttsServer return ( row.aprvrUuid !== serverRow.aprvrUuid || row.atrzSeComCd !== serverRow.atrzSeComCd || - row.atrzSeqNo !== serverRow.atrzSeqNo || + Number(row.atrzSeqNo) !== Number(serverRow.atrzSeqNo) || (row.dcarbYn ?? "N") !== (serverRow.dcarbYn ?? "N") ); } diff --git a/apps/as/src/entities/elapr/lib/use-prgrs-stts-rows.ts b/apps/as/src/entities/elapr/lib/use-prgrs-stts-rows.ts index f4a884e75..b9a2295f1 100644 --- a/apps/as/src/entities/elapr/lib/use-prgrs-stts-rows.ts +++ b/apps/as/src/entities/elapr/lib/use-prgrs-stts-rows.ts @@ -23,6 +23,9 @@ function toRow(item: ElaprDocPrgrsClientResponseDto): ElaprPrgrsSttsRow { rowKey: item.elaprPrgrsId ?? createDraftRowKey(), elaprPrgrsId: item.elaprPrgrsId, elaprDmndId: item.elaprDmndId, + branchId: item.branchId, + branchSeCd: item.branchSeCd, + branchNm: item.branchNm, aprvrUuid: item.aprvrUuid, aprvrNm: item.aprvrNm, atrzSeComCd: item.atrzSeComCd, diff --git a/apps/as/src/entities/elapr/ui/elapr-approval-dialog.tsx b/apps/as/src/entities/elapr/ui/elapr-approval-dialog.tsx index 2187d38ef..e38b8e961 100644 --- a/apps/as/src/entities/elapr/ui/elapr-approval-dialog.tsx +++ b/apps/as/src/entities/elapr/ui/elapr-approval-dialog.tsx @@ -344,7 +344,7 @@ function ElaprApprovalDialog({ size="sm" type="button" color="white" - disabled={!elaprDmndId || isEditingLocked || isBusy} + disabled={isForkJoin || !elaprDmndId || isEditingLocked || isBusy} onClick={addRow} > 결재선 추가 @@ -409,11 +409,11 @@ function ElaprApprovalDialog({ startEdit(row.rowKey)} onSave={() => handleRowSave(row.rowKey)} diff --git a/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-forkjoin-step.tsx b/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-forkjoin-step.tsx index a850a6b98..571e56668 100644 --- a/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-forkjoin-step.tsx +++ b/apps/as/src/entities/elapr/ui/elapr-doc-prgrs-forkjoin-step.tsx @@ -73,12 +73,12 @@ export function ElaprDocPrgrsForkJoinStep({ steps }: ElaprDocPrgrsForkJoinStepPr const agg: ElaprDocPrgrsClientResponseDto[] = []; steps.forEach((step) => { - const seCd = (step as { branchSeCd?: string }).branchSeCd; + const seCd = step.branchSeCd; if (seCd === "PIPE") { pipe.push(step); - } else if (seCd === "FACILITY" || seCd === "FAC") { + } else if (seCd === "FACILITY" ) { fac.push(step); - } else if (seCd === "TOTAL_AGG" || seCd === "POL_JOIN" || seCd === "AGG") { + } else if (seCd === "TOTAL_AGG") { agg.push(step); } else { // 순번 fallback (6인 체제: 2/2/2) diff --git a/apps/as/src/shared/model/pbadms-sprt.ts b/apps/as/src/shared/model/pbadms-sprt.ts index 0d08874d5..4653869de 100644 --- a/apps/as/src/shared/model/pbadms-sprt.ts +++ b/apps/as/src/shared/model/pbadms-sprt.ts @@ -152,6 +152,9 @@ export interface ElaprDocPrgrsClientResponseDto { ognzNm?: string; dcarbYn?: string; elaprCycl?: number; + branchId?: string; + branchSeCd?: string; + branchNm?: string; } /** 문서 상태 변경 이력 응답 DTO */